From c739600971a66c59ba1775541fc67d847219915b Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 17 Jun 2021 14:15:10 -0500 Subject: [PATCH] added warning for using 'proc' keyword; got rid of proc from core libraries --- bin/onyx | Bin 405584 -> 405672 bytes bin/test | 40 +++++++++--- core/builtin.onyx | 2 +- core/container/array.onyx | 18 +++--- core/container/list.onyx | 8 +-- core/hash.onyx | 2 +- core/io/file.onyx | 2 +- core/io/writer.onyx | 2 +- core/math.onyx | 30 ++++----- core/memory.onyx | 2 +- core/stdio.onyx | 4 +- core/string.onyx | 16 ++--- core/string/builder.onyx | 18 +++--- core/string/reader.onyx | 30 ++++----- core/wasi/clock.onyx | 2 +- include/onyxerrors.h | 1 + misc/onyx.sublime-syntax | 6 +- .../immediate_mode/immediate_renderer.onyx | 4 +- modules/json/types.onyx | 2 +- modules/ui/components/slider.onyx | 2 +- modules/ui/flow.onyx | 4 +- modules/ui/ui.onyx | 2 +- modules/vecmath/vector2.onyx | 2 +- modules/webgl2/webgl2.onyx | 2 +- src/onyxerrors.c | 54 +++++++++++----- src/onyxparser.c | 59 ++++++++++++------ tests/aoc-2020/day17.onyx | 2 +- tests/aoc-2020/day24.onyx | 2 +- tests/array_struct_robustness.onyx | 2 +- tests/named_arguments_test.onyx | 2 +- tests/operator_overload.onyx | 2 +- tests/overload_with_autocast.onyx | 2 +- 32 files changed, 194 insertions(+), 132 deletions(-) diff --git a/bin/onyx b/bin/onyx index a477f85fe243502a9210704aa326df174468e1de..828b2c92d0befbc248fae0610d44eeb9480db2ef 100755 GIT binary patch delta 106330 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 z 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 c%S1hwtwXh/dev/null; then + printf "Using $(wasmer --version)\n" +else + printf "Using $(node --verison)\n" +fi + failed=0 for test_file in $(find tests/ -name '*.onyx'); do filename=$(basename -- "$test_file") @@ -16,16 +22,30 @@ for test_file in $(find tests/ -name '*.onyx'); do print_check "$name" - if ! ./bin/onyx -r js --use-post-mvp-features "$test_file" -o "./tests/$name.wasm" >/dev/null; then - printf "\n❌ Failed to compile $name.onyx.\n" - failed=1 - continue - fi - - if ! ./bin/onyx-js "./tests/$name.wasm" > ./tmpoutput; then - printf "\n❌ Failed to run $name.onyx.\n" - failed=1 - continue + if command -v wasmer >/dev/null; then + if ! ./bin/onyx --use-post-mvp-features "$test_file" -o "./tests/$name.wasm" >/dev/null; then + printf "\n❌ Failed to compile $name.onyx.\n" + failed=1 + continue + fi + + if ! wasmer "./tests/$name.wasm" > ./tmpoutput; then + printf "\n❌ Failed to run $name.onyx.\n" + failed=1 + continue + fi + else + if ! ./bin/onyx -r js --use-post-mvp-features "$test_file" -o "./tests/$name.wasm" >/dev/null; then + printf "\n❌ Failed to compile $name.onyx.\n" + failed=1 + continue + fi + + if ! ./bin/onyx-js "./tests/$name.wasm" > ./tmpoutput; then + printf "\n❌ Failed to run $name.onyx.\n" + failed=1 + continue + fi fi if ! diff ./tmpoutput "$dirname/$name" >/dev/null; then diff --git a/core/builtin.onyx b/core/builtin.onyx index b7bde249..f43a1bb7 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -22,7 +22,7 @@ vararg :: #type ^struct { count: i32; } -vararg_get :: proc { +vararg_get :: #match { (va: vararg, ret: ^$T) -> bool { if va.count <= 0 do return false; *ret = *cast(^T) va.data; diff --git a/core/container/array.onyx b/core/container/array.onyx index bfc16120..bae2d242 100644 --- a/core/container/array.onyx +++ b/core/container/array.onyx @@ -159,7 +159,7 @@ concat :: (arr: ^[..] $T, other: [..] T) { } // Uses '==' to compare for equality. -contains :: proc { +contains :: #match { (arr: ^[..] $T, x: T) -> bool { for it: *arr do if it == x do return true; return false; @@ -172,7 +172,7 @@ contains :: proc { } // Uses '+' to sum. -sum :: proc { +sum :: #match { (arr: ^[..] $T, start: T = 0) -> T { sum := start; for it: *arr do sum += it; @@ -186,7 +186,7 @@ sum :: proc { } } -product :: proc { +product :: #match { (arr: ^[..] $T, start: T = 1) -> T { sum := start; for it: *arr do sum *= it; @@ -215,7 +215,7 @@ to_slice :: (arr: ^[..] $T) -> [] T { ** Simple insertion sort ** cmp should return >0 if left > right */ -sort :: proc { +sort :: #match { (arr: ^[..] $T, cmp: (T, T) -> i32) { for i: 1 .. arr.count { x := arr.data[i]; @@ -251,7 +251,7 @@ sort :: proc { } } -fold :: proc { +fold :: #match { (arr: ^[..] $T, init: $R, f: (T, R) -> R) -> R { val := init; for it: *arr do val = f(it, val); @@ -265,7 +265,7 @@ fold :: proc { } } -map :: proc { +map :: #match { (arr: ^[..] $T, f: (^T) -> void) do for ^it: *arr do f(it);, (arr: ^[..] $T, f: (T) -> T) do for ^it: *arr do *it = f(*it);, (arr: ^[..] $T, data: $R, f: (^T, R) -> void) do for ^it: *arr do f(it, data);, @@ -330,7 +330,7 @@ find_ptr :: (arr: ^[..] $T, value: T) -> ^T { return null; } -count_where :: proc { +count_where :: #match { (arr: ^[..] $T, predicate: (T) -> bool) -> u32 { count: u32 = 0; for ^it: *arr do if predicate(*it) do count += 1; @@ -362,13 +362,13 @@ fold_idx_elem :: (arr: ^$T, count: i32, cmp: (T, T) -> bool) -> (i32, T) { #private_file cmp_greater :: (x: $T, y: T) -> bool do return x > y; #private_file cmp_less :: (x: $T, y: T) -> bool do return x < y; -greatest :: proc { +greatest :: #match { (arr: [..] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_greater); }, (arr: [] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_greater); }, (arr: [$N] $T) -> (i32, T) { return fold_idx_elem(cast(^T) arr, N, cmp_greater); }, } -least :: proc { +least :: #match { (arr: [..] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_less); }, (arr: [] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_less); }, (arr: [$N] $T) -> (i32, T) { return fold_idx_elem(cast(^T) arr, N, cmp_less); }, diff --git a/core/container/list.onyx b/core/container/list.onyx index a831b2a2..4521c787 100644 --- a/core/container/list.onyx +++ b/core/container/list.onyx @@ -85,10 +85,10 @@ fold :: (list: ^List($T), init: $R, f: (T, R) -> R) -> R { return val; } -map :: proc { - (list: ^List($T), f: (^T) -> void) { - } -} +// map :: #match { +// (list: ^List($T), f: (^T) -> void) { +// } +// } get_iterator :: (list: ^List($T)) -> Iterator(T) { iterator_next :: ($T: type_expr, data: rawptr) -> (T, bool) { diff --git a/core/hash.onyx b/core/hash.onyx index bf3b5028..19d7959e 100644 --- a/core/hash.onyx +++ b/core/hash.onyx @@ -1,6 +1,6 @@ package core.hash -to_u32 :: proc { +to_u32 :: #match { (key: rawptr) -> u32 { return 0xcbf29ce7 ^ cast(u32) key; }, (key: i32) -> u32 { return 0xcbf29ce7 ^ cast(u32) key; }, (key: i64) -> u32 { return cast(u32) (cast(u64) 0xcbf29ce7 ^ cast(u64) key); }, diff --git a/core/io/file.onyx b/core/io/file.onyx index 454e9f5a..c13f99a5 100644 --- a/core/io/file.onyx +++ b/core/io/file.onyx @@ -149,7 +149,7 @@ get_contents_from_file :: (file: File) -> str { return data[0 .. size]; } -get_contents :: proc { +get_contents :: #match { get_contents_from_file, (path: str) -> str { diff --git a/core/io/writer.onyx b/core/io/writer.onyx index 53dc88e5..27023c79 100644 --- a/core/io/writer.onyx +++ b/core/io/writer.onyx @@ -77,7 +77,7 @@ write_format :: (use writer: ^Writer, format: str, va: ...) { write_str(writer, conv.str_format_va(format, buffer[0 .. 2048], va)); } -write :: proc { +write :: #match { write_str, write_cstr, write_i32, write_f32, write_i64, write_f64, diff --git a/core/math.onyx b/core/math.onyx index c330fc97..11e6610e 100644 --- a/core/math.onyx +++ b/core/math.onyx @@ -143,7 +143,7 @@ atanh :: (t: $T) -> T { // which if it is an integer, will be 2! This should always return a floating point number! exp :: (p: $T) -> T do return pow(base = cast(T) E, p = p); -pow :: proc { +pow :: #match { // Fast implementation of power when raising to an integer power. (base: $T, p: i32) -> T { if base == 0 do return 0; @@ -230,13 +230,13 @@ log :: (a: $T, base: $R) -> T { // they would be however, the fact that these overloads are intrinsic means they cannot // be reference from the element section and therefore cannot be passed around or used // as values. -max :: proc { wasm.max_f32, wasm.max_f64, max_poly } +max :: #match { wasm.max_f32, wasm.max_f64, max_poly } max_poly :: (a: $T, b: T) -> T { if a >= b do return a; else do return b; } -min :: proc { wasm.min_f32, wasm.min_f64, min_poly } +min :: #match { wasm.min_f32, wasm.min_f64, min_poly } min_poly :: (a: $T, b: T) -> T { if a <= b do return a; else do return b; @@ -248,12 +248,12 @@ clamp :: (v: $T, lo: T, hi: T) -> T { return v; } -sqrt :: proc { wasm.sqrt_f32, wasm.sqrt_f64, sqrt_poly } +sqrt :: #match { wasm.sqrt_f32, wasm.sqrt_f64, sqrt_poly } sqrt_poly :: (x: $T) -> T { return ~~ wasm.sqrt_f64(~~ x); } -abs :: proc { wasm.abs_f32, wasm.abs_f64, abs_poly } +abs :: #match { wasm.abs_f32, wasm.abs_f64, abs_poly } abs_poly :: (x: $T) -> T { if x >= 0 do return x; else do return -x; @@ -265,7 +265,7 @@ sign :: (x: $T) -> T { return 0; } -copysign :: proc { wasm.copysign_f32, wasm.copysign_f64, copysign_poly } +copysign :: #match { wasm.copysign_f32, wasm.copysign_f64, copysign_poly } copysign_poly :: (x: $T, y: T) -> T { return abs(x) * sign(y); } @@ -277,10 +277,10 @@ copysign_poly :: (x: $T, y: T) -> T { // Floating point rounding // -ceil :: proc { wasm.ceil_f32, wasm.ceil_f64 } -floor :: proc { wasm.floor_f32, wasm.floor_f64 } -trunc :: proc { wasm.trunc_f32, wasm.trunc_f64 } -nearest :: proc { wasm.nearest_f32, wasm.nearest_f64 } +ceil :: #match { wasm.ceil_f32, wasm.ceil_f64 } +floor :: #match { wasm.floor_f32, wasm.floor_f64 } +trunc :: #match { wasm.trunc_f32, wasm.trunc_f64 } +nearest :: #match { wasm.nearest_f32, wasm.nearest_f64 } @@ -288,11 +288,11 @@ nearest :: proc { wasm.nearest_f32, wasm.nearest_f64 } // Integer operations // -clz :: proc { wasm.clz_i32, wasm.clz_i64 } -ctz :: proc { wasm.ctz_i32, wasm.ctz_i64 } -popcnt :: proc { wasm.popcnt_i32, wasm.popcnt_i64 } -rotate_left :: proc { wasm.rotl_i32, wasm.rotl_i64 } -rotate_right :: proc { wasm.rotr_i32, wasm.rotr_i64 } +clz :: #match { wasm.clz_i32, wasm.clz_i64 } +ctz :: #match { wasm.ctz_i32, wasm.ctz_i64 } +popcnt :: #match { wasm.popcnt_i32, wasm.popcnt_i64 } +rotate_left :: #match { wasm.rotl_i32, wasm.rotl_i64 } +rotate_right :: #match { wasm.rotr_i32, wasm.rotr_i64 } diff --git a/core/memory.onyx b/core/memory.onyx index 3209b438..ec57fae9 100644 --- a/core/memory.onyx +++ b/core/memory.onyx @@ -44,7 +44,7 @@ make_slice :: ($T: type_expr, count: i32, allocator := context.allocator) -> [] }; } -align :: proc { +align :: #match { (size: ^u64, align: u64) { if *size % align != 0 { *size += align - (*size % align); diff --git a/core/stdio.onyx b/core/stdio.onyx index a81f1a4f..1724fef7 100644 --- a/core/stdio.onyx +++ b/core/stdio.onyx @@ -14,7 +14,7 @@ package core auto_flush_stdio := true -print :: proc { +print :: #match { (x: str) { io.write(^print_writer, x); if x[x.count - 1] == #char "\n" && auto_flush_stdio do __flush_stdio(); @@ -35,7 +35,7 @@ printf :: (format: str, va: ...) { } // This works on both slices and arrays -print_array :: proc { +print_array :: #match { (arr: [$N] $T, sep := " ") { for i: 0 .. N { print(arr[i]); diff --git a/core/string.onyx b/core/string.onyx index 9bd6e4d1..422ac6ec 100644 --- a/core/string.onyx +++ b/core/string.onyx @@ -24,7 +24,7 @@ from_cstr :: (s: cstr) -> str { free :: (s: str, allocator := context.allocator) do raw_free(allocator, s.data); -length :: proc { +length :: #match { (s: str) -> u32 { return s.count; }, @@ -41,7 +41,7 @@ length :: proc { }, } -concat :: proc { +concat :: #match { (s1: str, s2: str, allocator := context.allocator) -> str { len1 := length(s1); len2 := length(s2); @@ -103,7 +103,7 @@ split :: (s: str, delim: u8, allocator := context.allocator) -> []str { return strarr[0 .. delim_count + 1]; } -contains :: proc { +contains :: #match { (s: str, c: u8) -> bool { for ch: s do if ch == c do return true; return false; @@ -170,7 +170,7 @@ ends_with :: (s: str, suffix: str) -> bool { } -strip_leading_whitespace :: proc { +strip_leading_whitespace :: #match { (s: ^str) { while true do switch s.data[0] { case #char " ", #char "\t", #char "\n", #char "\r" { @@ -189,7 +189,7 @@ strip_leading_whitespace :: proc { }, } -strip_trailing_whitespace :: proc { +strip_trailing_whitespace :: #match { (s: ^str) { while true do switch s.data[s.count - 1] { case #char " ", #char "\t", #char "\n", #char "\r" { @@ -207,7 +207,7 @@ strip_trailing_whitespace :: proc { }, } -trim_start :: proc { +trim_start :: #match { (s: ^str, char: u8) { while s.data[0] == char { s.data += 1; @@ -222,7 +222,7 @@ trim_start :: proc { } } -trim_end :: proc { +trim_end :: #match { (s: ^str, char: u8) { while s.data[s.count - 1] == char { s.count -= 1; @@ -236,7 +236,7 @@ trim_end :: proc { } } -advance :: proc { +advance :: #match { (s: ^str, chars := 1) { chars = math.min(chars, s.count); diff --git a/core/string/builder.onyx b/core/string/builder.onyx index afbfc8ec..b5e7f635 100644 --- a/core/string/builder.onyx +++ b/core/string/builder.onyx @@ -13,19 +13,19 @@ Builder :: struct { data : [..] u8; } -make :: proc (initial_cap := 4, alloc := context.allocator) -> Builder { +make :: (initial_cap := 4, alloc := context.allocator) -> Builder { builder : Builder; array.init(^builder.data, initial_cap, allocator = alloc); return builder; } -clear :: proc (use sb: ^Builder) -> ^Builder { +clear :: (use sb: ^Builder) -> ^Builder { data.count = 0; return sb; } -add_str :: proc (use sb: ^Builder, s: str) -> ^Builder { +add_str :: (use sb: ^Builder, s: str) -> ^Builder { len_total := data.count + s.count; if data.capacity < len_total { @@ -37,31 +37,31 @@ add_str :: proc (use sb: ^Builder, s: str) -> ^Builder { return sb; } -add_cstr :: proc (use sb: ^Builder, cstring: cstr) -> ^Builder { +add_cstr :: (use sb: ^Builder, cstring: cstr) -> ^Builder { s := string.from_cstr(cstring); return add_str(sb, s); } -add_i64 :: proc (use sb: ^Builder, n: i64, base: u64 = 10) -> ^Builder { +add_i64 :: (use sb: ^Builder, n: i64, base: u64 = 10) -> ^Builder { buf : [256] u8; s := conv.i64_to_str(n, base, buf[0 .. 256]); return add_str(sb, s); } -add_f64 :: proc (use sb: ^Builder, f: f64) -> ^Builder { +add_f64 :: (use sb: ^Builder, f: f64) -> ^Builder { buf : [256] u8; s := conv.f64_to_str(f, buf[0 .. 256]); return add_str(sb, s); } -add_bool :: proc (use sb: ^Builder, b: bool) -> ^Builder { +add_bool :: (use sb: ^Builder, b: bool) -> ^Builder { if b do return add_str(sb, "true"); else do return add_str(sb, "false"); return sb; } -append :: proc { +append :: #match { add_str, add_cstr, add_i64, @@ -69,7 +69,7 @@ append :: proc { add_bool, } -to_str :: proc (use sb: ^Builder) -> str { +to_str :: (use sb: ^Builder) -> str { return str.{ data.data, data.count }; } diff --git a/core/string/reader.onyx b/core/string/reader.onyx index ed690798..0cea068a 100644 --- a/core/string/reader.onyx +++ b/core/string/reader.onyx @@ -9,26 +9,26 @@ String_Reader :: struct { original_str : str; } -make :: proc (s: str) -> String_Reader { +make :: (s: str) -> String_Reader { reader : String_Reader; init(^reader, s); return reader; } -init :: proc (use reader: ^String_Reader, orig_str: str) { +init :: (use reader: ^String_Reader, orig_str: str) { original_str = orig_str; data = original_str.data; count = original_str.count; } -reset :: proc (use reader: ^String_Reader) { +reset :: (use reader: ^String_Reader) { data = original_str.data; count = original_str.count; } -empty :: proc (use reader: ^String_Reader) -> bool do return count == 0; +empty :: (use reader: ^String_Reader) -> bool do return count == 0; -read_u32 :: proc (use reader: ^String_Reader) -> u32 { +read_u32 :: (use reader: ^String_Reader) -> u32 { n: u32 = 0; skip_whitespace(reader); @@ -44,7 +44,7 @@ read_u32 :: proc (use reader: ^String_Reader) -> u32 { return n; } -read_u64 :: proc (use reader: ^String_Reader) -> u64 { +read_u64 :: (use reader: ^String_Reader) -> u64 { n: u64 = 0; skip_whitespace(reader); @@ -60,7 +60,7 @@ read_u64 :: proc (use reader: ^String_Reader) -> u64 { return n; } -read_byte :: proc (use reader: ^String_Reader) -> u8 { +read_byte :: (use reader: ^String_Reader) -> u8 { if count == 0 do return #char "\0"; defer { @@ -71,7 +71,7 @@ read_byte :: proc (use reader: ^String_Reader) -> u8 { return data[0]; } -read_bytes :: proc (use reader: ^String_Reader, byte_count := 1) -> str { +read_bytes :: (use reader: ^String_Reader, byte_count := 1) -> str { bc := byte_count; if count < bc do bc = count; @@ -83,7 +83,7 @@ read_bytes :: proc (use reader: ^String_Reader, byte_count := 1) -> str { return str.{ data, bc }; } -read_line :: proc (use reader: ^String_Reader) -> str { +read_line :: (use reader: ^String_Reader) -> str { out : str; out.data = data; out.count = 0; @@ -104,7 +104,7 @@ read_line :: proc (use reader: ^String_Reader) -> str { return out; } -read_until :: proc (use reader: ^String_Reader, skip: u32, uptos: ..u8) -> str { +read_until :: (use reader: ^String_Reader, skip: u32, uptos: ..u8) -> str { if count == 0 do return str.{ null, 0 }; out : str; @@ -131,7 +131,7 @@ read_until :: proc (use reader: ^String_Reader, skip: u32, uptos: ..u8) -> str { } // Reads a continuous string of alphabetic chars along with underscores '_' -read_word :: proc (use reader: ^String_Reader) -> str { +read_word :: (use reader: ^String_Reader) -> str { if count == 0 do return str.{ null, 0 }; out := str.{ data, 0 }; @@ -150,7 +150,7 @@ read_word :: proc (use reader: ^String_Reader) -> str { return out; } -advance_line :: proc (use reader: ^String_Reader) { +advance_line :: (use reader: ^String_Reader) { if count == 0 do return; adv := 0; @@ -161,7 +161,7 @@ advance_line :: proc (use reader: ^String_Reader) { } -skip_whitespace :: proc (use reader: ^String_Reader) { +skip_whitespace :: (use reader: ^String_Reader) { while count > 0 do switch data[0] { case #char " ", #char "\t", #char "\n", #char "\r" { data += 1; @@ -172,7 +172,7 @@ skip_whitespace :: proc (use reader: ^String_Reader) { } } -skip_bytes :: proc (use reader: ^String_Reader, byte_count := 1) { +skip_bytes :: (use reader: ^String_Reader, byte_count := 1) { bc := byte_count; if count < bc do bc = count; @@ -182,7 +182,7 @@ skip_bytes :: proc (use reader: ^String_Reader, byte_count := 1) { -starts_with :: proc (use reader: ^String_Reader, s: str) -> bool { +starts_with :: (use reader: ^String_Reader, s: str) -> bool { if count < s.count do return false; while i := 0; i < s.count { if data[i] != s[i] do return false; diff --git a/core/wasi/clock.onyx b/core/wasi/clock.onyx index 18b19b59..0760f2d5 100644 --- a/core/wasi/clock.onyx +++ b/core/wasi/clock.onyx @@ -18,7 +18,7 @@ time_ns :: () -> u64 { return ~~output_time; } -sleep :: proc { +sleep :: #match { (seconds: u64) { sleep(nanoseconds=seconds * 1000000000); }, (milliseconds: u64) { sleep(nanoseconds=milliseconds * 1000000); }, diff --git a/include/onyxerrors.h b/include/onyxerrors.h index 58b39650..993f4f70 100644 --- a/include/onyxerrors.h +++ b/include/onyxerrors.h @@ -25,6 +25,7 @@ extern OnyxErrors msgs; void onyx_errors_init(bh_arr(bh_file_contents)* files); void onyx_report_error(OnyxFilePos pos, char * format, ...); +void onyx_report_warning(OnyxFilePos pos, char* format, ...); void onyx_errors_print(); b32 onyx_has_errors(); void onyx_clear_errors(); diff --git a/misc/onyx.sublime-syntax b/misc/onyx.sublime-syntax index 950dddea..0e95db8a 100644 --- a/misc/onyx.sublime-syntax +++ b/misc/onyx.sublime-syntax @@ -26,7 +26,7 @@ contexts: # strings in YAML. When using single quoted strings, only single quotes # need to be escaped: this is done by using two single quotes next to each # other. - - match: '\b(package|struct|proc|use|global|enum|if|elseif|else|for|while|do|break|continue|fallthrough|return|as|cast|sizeof|alignof|defer|switch|case)\b' + - match: '\b(package|struct|use|global|enum|if|elseif|else|for|while|do|break|continue|fallthrough|return|as|cast|sizeof|alignof|defer|switch|case)\b' scope: keyword.control.onyx - match: '\b(bool|void|i8|u8|i16|u16|i32|u32|i64|u64|f32|f64|rawptr|str|cstr|range|type_expr)\b' @@ -54,10 +54,10 @@ contexts: - match: '\$[a-zA-Z0-9_]+' scope: constant.other.onyx - - match: '([a-zA-Z_][a-zA-Z0-9_]*)\s*::\s*(proc)' + - match: '([a-zA-Z_][a-zA-Z0-9_]*)\s*::\s*(#match)' captures: 1: entity.name.function - 2: keyword.control.onyx + 2: keyword.other.onyx - match: '([a-zA-Z_][a-zA-Z0-9_]*)\s*::\s*\(' captures: diff --git a/modules/immediate_mode/immediate_renderer.onyx b/modules/immediate_mode/immediate_renderer.onyx index 40c946e4..302f6482 100644 --- a/modules/immediate_mode/immediate_renderer.onyx +++ b/modules/immediate_mode/immediate_renderer.onyx @@ -128,7 +128,7 @@ Immediate_Renderer :: struct { vertex_count = 0; } - push_vertex :: proc { + push_vertex :: #match { // If a color is not provided, the previous color is used. (use ir: ^Immediate_Renderer, position: Vector2) { push_vertex(ir, position, color = verticies[vertex_count - 1].color); @@ -287,7 +287,7 @@ immediate_renderer_free :: () { Immediate_Renderer.free(^immediate_renderer); } -vertex :: proc { +vertex :: #match { (position: Vector2) { immediate_renderer->push_vertex(position); }, (position: Vector2, color: Color4) { immediate_renderer->push_vertex(position, color); }, } diff --git a/modules/json/types.onyx b/modules/json/types.onyx index fced87e0..74546d82 100644 --- a/modules/json/types.onyx +++ b/modules/json/types.onyx @@ -133,7 +133,7 @@ get_idx :: (v: ^Value, idx: i32) -> ^Value { return v_arr.array_[idx]; } -free :: proc { +free :: #match { (v: ^Value, allocator: Allocator) do switch v.type { case .String { v_str := cast(^Value_String) v; diff --git a/modules/ui/components/slider.onyx b/modules/ui/components/slider.onyx index 3a8bebfe..04859b48 100644 --- a/modules/ui/components/slider.onyx +++ b/modules/ui/components/slider.onyx @@ -73,7 +73,7 @@ slider :: (use r: Rectangle, value: ^$T, min_value: T, max_value: T, text: str, } #private_file -adjust_slider_value :: proc { +adjust_slider_value :: #match { @Incomplete // the step parameter is ignored. // Integers need to be (value: ^i32, x: f32, width: f32, min_value: i32, max_value: i32) { diff --git a/modules/ui/flow.onyx b/modules/ui/flow.onyx index 3079298a..03558ba9 100644 --- a/modules/ui/flow.onyx +++ b/modules/ui/flow.onyx @@ -3,7 +3,7 @@ package ui // UI Flow Flow :: struct { - split_vertical :: proc { + split_vertical :: #match { (r: Rectangle, left_percent: f32, padding := 0.0f) -> (left: Rectangle, right: Rectangle) { return split_vertical(r, left_width=left_percent * Rectangle.width(r), padding=padding); }, @@ -30,7 +30,7 @@ Flow :: struct { } - split_horizontal :: proc { + split_horizontal :: #match { (r: Rectangle, top_percent: f32, padding := 0.0f) -> (top: Rectangle, bottom: Rectangle) { return split_horizontal(r, top_height=top_percent * Rectangle.height(r), padding=padding); }, diff --git a/modules/ui/ui.onyx b/modules/ui/ui.onyx index 526c2ca1..197ffce9 100644 --- a/modules/ui/ui.onyx +++ b/modules/ui/ui.onyx @@ -176,7 +176,7 @@ draw_text_raw :: (text: str, x: f32, y: f32, size := DEFAULT_TEXT_SIZE, color := gl.bindTexture(gl.TEXTURE_2D, -1); } -draw_rect :: proc { +draw_rect :: #match { (use r: Rectangle, color := gfx.Color4.{1,1,1}) { gfx.set_texture(); diff --git a/modules/vecmath/vector2.onyx b/modules/vecmath/vector2.onyx index 1363907a..d3b5313e 100644 --- a/modules/vecmath/vector2.onyx +++ b/modules/vecmath/vector2.onyx @@ -43,7 +43,7 @@ vector2_equal :: (a: Vector2($T), b: Vector2(T)) -> bool { return a.x == b.x && a.y == b.y; } -#add_overload io.write, vector2_write +#add_match io.write, vector2_write vector2_write :: (writer: ^io.Writer, v: Vector2($T)) { io.write(writer, "Vector2("); io.write(writer, v.x); diff --git a/modules/webgl2/webgl2.onyx b/modules/webgl2/webgl2.onyx index d59501b6..0b20cfb2 100644 --- a/modules/webgl2/webgl2.onyx +++ b/modules/webgl2/webgl2.onyx @@ -744,7 +744,7 @@ blendFuncSeparate :: (srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLe blitFramebuffer :: (sx0: GLint, sy0: GLint, sx1: GLint, sy1: GLint, dx0: GLint, dy0: GLint, dx1: GLint, dy1: GLint, mask: GLbitfield, filter: GLenum) -> void #foreign "gl" "blitFramebuffer" --- bufferDataWithData :: (target: GLenum, buffer: [] void, usage: GLenum) -> void #foreign "gl" "bufferDataWithData" --- bufferDataNoData :: (target: GLenum, size: GLsizei, usage: GLenum) -> void #foreign "gl" "bufferDataNoData" --- -bufferData :: proc { bufferDataWithData, bufferDataNoData } +bufferData :: #match { bufferDataWithData, bufferDataNoData } bufferSubData :: (target: GLenum, offset: GLsizei, data: [] void) -> void #foreign "gl" "bufferSubData" --- canvasSize :: (width: GLsizei, height: GLsizei) -> void #foreign "gl" "canvasSize" --- checkFrameBufferStatus :: (target: GLenum) -> GLenum #foreign "gl" "checkFrameBufferStatus" --- diff --git a/src/onyxerrors.c b/src/onyxerrors.c index 81f009de..81a3cbab 100644 --- a/src/onyxerrors.c +++ b/src/onyxerrors.c @@ -12,21 +12,6 @@ void onyx_errors_init(bh_arr(bh_file_contents)* files) { bh_arr_new(global_heap_allocator, errors.errors, 4); } -void onyx_report_error(OnyxFilePos pos, char * format, ...) { - - va_list vargs; - va_start(vargs, format); - char* msg = bh_bprintf_va(format, vargs); - va_end(vargs); - - OnyxError err = { - .pos = pos, - .text = bh_strdup(errors.msg_alloc, msg), - }; - - bh_arr_push(errors.errors, err); -} - static void print_detailed_message(OnyxError* err, bh_file_contents* fc) { bh_printf("(%s:%l,%l) %s\n", err->pos.filename, err->pos.line, err->pos.column, err->text); @@ -79,4 +64,41 @@ b32 onyx_has_errors() { void onyx_clear_errors() { bh_printf("ERRORS WERE CLEARED!!!\n"); bh_arr_set_length(errors.errors, 0); -} \ No newline at end of file +} + +void onyx_report_error(OnyxFilePos pos, char * format, ...) { + + va_list vargs; + va_start(vargs, format); + char* msg = bh_bprintf_va(format, vargs); + va_end(vargs); + + OnyxError err = { + .pos = pos, + .text = bh_strdup(errors.msg_alloc, msg), + }; + + bh_arr_push(errors.errors, err); +} + +void onyx_report_warning(OnyxFilePos pos, char* format, ...) { + va_list vargs; + va_start(vargs, format); + char* msg = bh_bprintf_va(format, vargs); + va_end(vargs); + + OnyxError err = { + .pos = pos, + .text = msg, + }; + + bh_file_contents file_contents = { 0 }; + bh_arr_each(bh_file_contents, fc, *errors.file_contents) { + if (!strcmp(fc->filename, pos.filename)) { + file_contents = *fc; + break; + } + } + + print_detailed_message(&err, &file_contents); +} diff --git a/src/onyxparser.c b/src/onyxparser.c index 44347d15..fd805896 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -471,6 +471,7 @@ static AstTyped* parse_factor(OnyxParser* parser) { case Token_Type_Keyword_Proc: { OnyxToken* proc_token = expect_token(parser, Token_Type_Keyword_Proc); + onyx_report_warning(proc_token->pos, "Warning: 'proc' is a deprecated keyword."); retval = (AstTyped *) parse_function_definition(parser, proc_token); break; } @@ -1555,6 +1556,7 @@ static AstType* parse_type(OnyxParser* parser) { case Token_Type_Keyword_Proc: { OnyxToken* proc_token = expect_token(parser, Token_Type_Keyword_Proc); + onyx_report_warning(proc_token->pos, "Warning: 'proc' is a deprecated keyword."); *next_insertion = parse_function_type(parser, proc_token); next_insertion = NULL; break; @@ -1909,27 +1911,34 @@ static void parse_function_params(OnyxParser* parser, AstFunction* func) { return; } -static AstFunction* parse_function_definition(OnyxParser* parser, OnyxToken* token) { - if (consume_token_if_next(parser, '{')) { - AstOverloadedFunction* ofunc = make_node(AstOverloadedFunction, Ast_Kind_Overloaded_Function); - ofunc->token = token; - ofunc->flags |= Ast_Flag_Comptime; +static AstOverloadedFunction* parse_overloaded_function(OnyxParser* parser, OnyxToken* token) { + expect_token(parser, '{'); - bh_arr_new(global_heap_allocator, ofunc->overloads, 4); + AstOverloadedFunction* ofunc = make_node(AstOverloadedFunction, Ast_Kind_Overloaded_Function); + ofunc->token = token; + ofunc->flags |= Ast_Flag_Comptime; - while (!consume_token_if_next(parser, '}')) { - if (parser->hit_unexpected_token) return (AstFunction *) ofunc; + bh_arr_new(global_heap_allocator, ofunc->overloads, 4); + + while (!consume_token_if_next(parser, '}')) { + if (parser->hit_unexpected_token) return ofunc; - AstTyped* o_node = parse_expression(parser, 0); + AstTyped* o_node = parse_expression(parser, 0); - bh_arr_push(ofunc->overloads, o_node); + bh_arr_push(ofunc->overloads, o_node); - if (parser->curr->type != '}') - expect_token(parser, ','); - } - - ENTITY_SUBMIT(ofunc); - return (AstFunction *) ofunc; + if (parser->curr->type != '}') + expect_token(parser, ','); + } + + ENTITY_SUBMIT(ofunc); + return ofunc; +} + +static AstFunction* parse_function_definition(OnyxParser* parser, OnyxToken* token) { + // :TemporaryForProcRemoval + if (parser->curr->type == '{') { + return (AstFunction *) parse_overloaded_function(parser, token); } AstFunction* func_def = make_node(AstFunction, Ast_Kind_Function); @@ -1998,6 +2007,7 @@ static AstFunction* parse_function_definition(OnyxParser* parser, OnyxToken* tok static b32 parse_possible_function_definition(OnyxParser* parser, AstTyped** ret) { if (parser->curr->type == Token_Type_Keyword_Proc) { OnyxToken* proc_token = expect_token(parser, Token_Type_Keyword_Proc); + onyx_report_warning(proc_token->pos, "Warning: 'proc' is a deprecated keyword."); AstFunction* func_node = parse_function_definition(parser, proc_token); *ret = (AstTyped *) func_node; return 1; @@ -2162,6 +2172,7 @@ static AstIf* parse_static_if_stmt(OnyxParser* parser, b32 parse_block_as_statem static AstTyped* parse_top_level_expression(OnyxParser* parser) { if (parser->curr->type == Token_Type_Keyword_Proc) { OnyxToken* proc_token = expect_token(parser, Token_Type_Keyword_Proc); + onyx_report_warning(proc_token->pos, "Warning: 'proc' is a deprecated keyword."); AstFunction* func_node = parse_function_definition(parser, proc_token); return (AstTyped *) func_node; @@ -2176,6 +2187,13 @@ static AstTyped* parse_top_level_expression(OnyxParser* parser) { alias->to = parse_type(parser); return (AstTyped *) alias; } + + if (parse_possible_directive(parser, "match")) { + // :LinearTokenDependent + OnyxToken* directive_token = parser->curr - 2; + AstOverloadedFunction* ofunc = parse_overloaded_function(parser, directive_token); + return (AstTyped *) ofunc; + } return parse_expression(parser, 1); } @@ -2248,9 +2266,10 @@ static void parse_top_level_statement(OnyxParser* parser) { return; } - case Token_Type_Keyword_Proc: - parse_top_level_expression(parser); - return; + // case Token_Type_Keyword_Proc: + // onyx_report_warning(parser->curr->pos, "Warning: 'proc' is a deprecated keyword."); + // parse_top_level_expression(parser); + // return; case Token_Type_Symbol: { OnyxToken* symbol = expect_token(parser, Token_Type_Symbol); @@ -2347,7 +2366,7 @@ static void parse_top_level_statement(OnyxParser* parser) { ENTITY_SUBMIT(operator); return; } - else if (parse_possible_directive(parser, "add_overload")) { + else if (parse_possible_directive(parser, "add_overload") || parse_possible_directive(parser, "add_match")) { AstDirectiveAddOverload *add_overload = make_node(AstDirectiveAddOverload, Ast_Kind_Directive_Add_Overload); add_overload->token = dir_token; add_overload->overloaded_function = (AstNode *) parse_expression(parser, 0); diff --git a/tests/aoc-2020/day17.onyx b/tests/aoc-2020/day17.onyx index cfef3b25..9839aa0c 100644 --- a/tests/aoc-2020/day17.onyx +++ b/tests/aoc-2020/day17.onyx @@ -12,7 +12,7 @@ CubeState :: struct { next := false; } -#add_overload hash.to_u32, (c: CubePos) -> u32 { +#add_match hash.to_u32, (c: CubePos) -> u32 { return 17 * c.x + 13 * c.y + 11 * c.z + 19 * c.w; } diff --git a/tests/aoc-2020/day24.onyx b/tests/aoc-2020/day24.onyx index a2182c57..4979884a 100644 --- a/tests/aoc-2020/day24.onyx +++ b/tests/aoc-2020/day24.onyx @@ -7,7 +7,7 @@ Vec2 :: struct { y: i32 = 0; } -#add_overload hash.to_u32, (v: Vec2) -> u32 { +#add_match hash.to_u32, (v: Vec2) -> u32 { return v.x * 11 + v.y * 17; } diff --git a/tests/array_struct_robustness.onyx b/tests/array_struct_robustness.onyx index e201ae36..1668b9cf 100644 --- a/tests/array_struct_robustness.onyx +++ b/tests/array_struct_robustness.onyx @@ -5,7 +5,7 @@ use package core Vec2 :: struct { x: i32; y: i32; } // Overload print() to print Vec2's. -#add_overload io.write, (use writer: ^io.Writer, use v: Vec2) { +#add_match io.write, (use writer: ^io.Writer, use v: Vec2) { io.write_format(writer, "Vec2(%i, %i)", x, y); } diff --git a/tests/named_arguments_test.onyx b/tests/named_arguments_test.onyx index d369d294..4f993236 100644 --- a/tests/named_arguments_test.onyx +++ b/tests/named_arguments_test.onyx @@ -25,7 +25,7 @@ main :: (args: [] cstr) { println("\n\n========================="); - poly_overloaded :: proc { + poly_overloaded :: #match { (y: [$N] $T) { print("MATCHED Y: "); print_array(y); }, (x: $T) { print("MATCHED X: "); println(x); }, (z: $T) { print("MATCHED Z: "); println(z); }, diff --git a/tests/operator_overload.onyx b/tests/operator_overload.onyx index 4041ffa8..d3c0eefb 100644 --- a/tests/operator_overload.onyx +++ b/tests/operator_overload.onyx @@ -99,7 +99,7 @@ main :: (args: [] cstr) { println(test_overload("World!", "Hello!")); } -test_overload :: proc { +test_overload :: #match { (x: $T, y: T) -> T { return x; }, (x: $T, y: $R) -> R { return y; }, } diff --git a/tests/overload_with_autocast.onyx b/tests/overload_with_autocast.onyx index 1dcef3d3..2328fdb2 100644 --- a/tests/overload_with_autocast.onyx +++ b/tests/overload_with_autocast.onyx @@ -2,7 +2,7 @@ use package core -overloaded :: proc { +overloaded :: #match { (x: str, y: i32) do println("Called str, i32"); , (x: f32, y: str) do println("Called f32, str"); , (x: i32, y: i32) do println("Called i32, i32"); , -- 2.25.1