From 6fb7a0edb94823242e637c1444a17d7ed6d44f58 Mon Sep 17 00:00:00 2001 From: vbot Date: Wed, 4 May 2022 20:36:43 +0000 Subject: [PATCH] [v:master] c405c1916 - tools: fix building `vdoctor.v` with `v build-tools` --- v.c | 613 ++++++++++++++++++++++++++++++-------------------------- v_win.c | 606 ++++++++++++++++++++++++++++++------------------------- 2 files changed, 663 insertions(+), 556 deletions(-) diff --git a/v.c b/v.c index e4335aa..36c93bc 100644 --- a/v.c +++ b/v.c @@ -1,11 +1,11 @@ -#define V_COMMIT_HASH "41857b0ac" +#define V_COMMIT_HASH "c405c1916" #ifndef V_COMMIT_HASH - #define V_COMMIT_HASH "3baf1741b" + #define V_COMMIT_HASH "41857b0ac" #endif #ifndef V_CURRENT_COMMIT_HASH - #define V_CURRENT_COMMIT_HASH "41857b0" + #define V_CURRENT_COMMIT_HASH "c405c19" #endif // V comptime_definitions: @@ -3633,10 +3633,10 @@ struct MessageError { struct VMemoryBlock { int id; - int cap; + isize cap; byte* start; VMemoryBlock* previous; - int remaining; + isize remaining; u8* current; int mallocs; }; @@ -7499,17 +7499,19 @@ void println(string s); VV_LOCAL_SYMBOL void _writeln_to_fd(int fd, string s); VV_LOCAL_SYMBOL void _write_buf_to_fd(int fd, u8* buf, int buf_len); i64 total_m = ((i64)(0)); // global4 -u8* _v_malloc(int n); -u8* malloc_noscan(int n); -u8* v_realloc(u8* b, int n); +u8* _v_malloc(isize n); +u8* malloc_noscan(isize n); +u8* v_realloc(u8* b, isize n); u8* realloc_data(u8* old_data, int old_size, int new_size); -u8* vcalloc(int n); -u8* vcalloc_noscan(int n); +u8* vcalloc(isize n); +u8* vcalloc_noscan(isize n); void _v_free(voidptr ptr); voidptr memdup(voidptr src, int sz); voidptr memdup_noscan(voidptr src, int sz); VV_LOCAL_SYMBOL int v_fixed_index(int i, int len); void print_backtrace(void); +int g_main_argc = ((int)(0)); // global4 +voidptr g_main_argv = ((voidptr)(0)); // global4 bool isnil(voidptr v); Array_VCastTypeIndexName as_cast_type_indexes; // global4 VV_LOCAL_SYMBOL voidptr __as_cast(voidptr obj, int obj_type, int expected_type); @@ -7524,13 +7526,14 @@ VV_LOCAL_SYMBOL void break_if_debugger_attached(void); string winapi_lasterr_str(void); void panic_lasterr(void); void gc_check_leaks(void); +VV_LOCAL_SYMBOL void print_libbacktrace(int frames_to_skip); int proc_pidpath(int , voidptr , int ); int vstrlen(byte* s); int vstrlen_char(char* s); -voidptr vmemcpy(voidptr dest, const voidptr const_src, int n); -voidptr vmemmove(voidptr dest, const voidptr const_src, int n); -int vmemcmp(const voidptr const_s1, const voidptr const_s2, int n); -voidptr vmemset(voidptr s, int c, int n); +voidptr vmemcpy(voidptr dest, const voidptr const_src, isize n); +voidptr vmemmove(voidptr dest, const voidptr const_src, isize n); +int vmemcmp(const voidptr const_s1, const voidptr const_s2, isize n); +voidptr vmemset(voidptr s, int c, isize n); VV_LOCAL_SYMBOL void vqsort(voidptr base, usize nmemb, usize size, int (*sort_cb)(const voidptr const_a, const voidptr const_b)); void chan_close(chan ch); ChanState chan_try_pop(chan ch, voidptr obj); @@ -7672,13 +7675,13 @@ VV_LOCAL_SYMBOL void _result_ok(voidptr data, _result* res, int size); string none_str(none _d2); #define _const_prealloc_block_size 16777216 VMemoryBlock* g_memory_block; // global4 -VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, int at_least); -VV_LOCAL_SYMBOL byte* vmemory_block_malloc(int n); +VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, isize at_least); +VV_LOCAL_SYMBOL byte* vmemory_block_malloc(isize n); VV_LOCAL_SYMBOL void prealloc_vinit(void); VV_LOCAL_SYMBOL void prealloc_vcleanup(void); -VV_LOCAL_SYMBOL byte* prealloc_malloc(int n); -VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, int old_size, int new_size); -VV_LOCAL_SYMBOL byte* prealloc_calloc(int n); +VV_LOCAL_SYMBOL byte* prealloc_malloc(isize n); +VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, isize old_size, isize new_size); +VV_LOCAL_SYMBOL byte* prealloc_calloc(isize n); string rune_str(rune c); string Array_rune_string(Array_rune ra); string rune_repeat(rune c, int count); @@ -9706,6 +9709,7 @@ VV_LOCAL_SYMBOL void v__checker__Checker_trace(v__checker__Checker* c, string fb VV_LOCAL_SYMBOL Option_void v__checker__Checker_ensure_type_exists(v__checker__Checker* c, v__ast__Type typ, v__token__Pos pos); void v__checker__Checker_fail_if_unreadable(v__checker__Checker* c, v__ast__Expr expr, v__ast__Type typ, string what); VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_call(v__checker__Checker* c, v__ast__ComptimeCall* node); +VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_selector(v__checker__Checker* c, v__ast__ComptimeSelector* node); VV_LOCAL_SYMBOL void v__checker__Checker_comptime_for(v__checker__Checker* c, v__ast__ComptimeFor node); VV_LOCAL_SYMBOL Option_v__ast__ComptTimeConstValue v__checker__Checker_eval_comptime_const_expr(v__checker__Checker* c, v__ast__Expr expr, int nlevel); VV_LOCAL_SYMBOL multi_return_bool_int_int v__checker__Checker_verify_vweb_params_for_method(v__checker__Checker* c, v__ast__Fn node); @@ -10307,7 +10311,7 @@ void v__parser__Parser_codegen(v__parser__Parser* p, string code); void v__parser__Parser_init_parse_fns(v__parser__Parser* p); void v__parser__Parser_read_first_token(v__parser__Parser* p); v__token__Token v__parser__Parser_peek_token(v__parser__Parser* p, int n); -v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p); +VV_LOCAL_SYMBOL v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p); VV_LOCAL_SYMBOL bool v__parser__Parser_is_array_type(v__parser__Parser* p); void v__parser__Parser_open_scope(v__parser__Parser* p); void v__parser__Parser_close_scope(v__parser__Parser* p); @@ -17254,21 +17258,26 @@ string s; VV_LOCAL_SYMBOL array __new_array(int mylen, int cap, int elm_size) { int cap_ = (cap < mylen ? (mylen) : (cap)); - array arr = ((array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + array arr = ((array){.element_size = elm_size,.data = vcalloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); return arr; } VV_LOCAL_SYMBOL array __new_array_with_default(int mylen, int cap, int elm_size, voidptr val) { int cap_ = (cap < mylen ? (mylen) : (cap)); array arr = ((array){.element_size = elm_size,.data = 0,.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + u64 total_size = ((u64)(cap_)) * ((u64)(elm_size)); if (cap_ > 0 && mylen == 0) { - arr.data = _v_malloc(cap_ * elm_size); + arr.data = _v_malloc(total_size); } else { - arr.data = vcalloc(cap_ * elm_size); + arr.data = vcalloc(total_size); } if (val != 0) { - for (int i = 0; i < arr.len; ++i) { - array_set_unsafe(&arr, i, val); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < arr.len; ++_t1) { + vmemcpy(eptr, val, arr.element_size); + eptr += arr.element_size; + } } } return arr; @@ -17276,28 +17285,36 @@ VV_LOCAL_SYMBOL array __new_array_with_default(int mylen, int cap, int elm_size, VV_LOCAL_SYMBOL array __new_array_with_array_default(int mylen, int cap, int elm_size, array val) { int cap_ = (cap < mylen ? (mylen) : (cap)); - array arr = ((array){.element_size = elm_size,.data = _v_malloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); - for (int i = 0; i < arr.len; ++i) { - array val_clone = array_clone_to_depth(&val, 1); - array_set_unsafe(&arr, i, &val_clone); + array arr = ((array){.element_size = elm_size,.data = _v_malloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < arr.len; ++_t1) { + array val_clone = array_clone_to_depth(&val, 1); + vmemcpy(eptr, &val_clone, arr.element_size); + eptr += arr.element_size; + } } return arr; } VV_LOCAL_SYMBOL array __new_array_with_map_default(int mylen, int cap, int elm_size, map val) { int cap_ = (cap < mylen ? (mylen) : (cap)); - array arr = ((array){.element_size = elm_size,.data = _v_malloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); - for (int i = 0; i < arr.len; ++i) { - map val_clone = map_clone(&val); - array_set_unsafe(&arr, i, &val_clone); + array arr = ((array){.element_size = elm_size,.data = _v_malloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < arr.len; ++_t1) { + map val_clone = map_clone(&val); + vmemcpy(eptr, &val_clone, arr.element_size); + eptr += arr.element_size; + } } return arr; } VV_LOCAL_SYMBOL array new_array_from_c_array(int len, int cap, int elm_size, voidptr c_array) { int cap_ = (cap < len ? (len) : (cap)); - array arr = ((array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = len,.cap = cap_,.flags = 0,}); - vmemcpy(arr.data, c_array, len * elm_size); + array arr = ((array){.element_size = elm_size,.data = vcalloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = len,.cap = cap_,.flags = 0,}); + vmemcpy(arr.data, c_array, ((u64)(len)) * ((u64)(elm_size))); return arr; } @@ -17315,10 +17332,10 @@ VV_LOCAL_SYMBOL void array_ensure_cap(array* a, int required) { if (!(required > cap)) break; cap *= 2; } - int new_size = cap * a->element_size; + u64 new_size = ((u64)(cap)) * ((u64)(a->element_size)); u8* new_data = _v_malloc(new_size); if (a->data != ((voidptr)(0))) { - vmemcpy(new_data, a->data, a->len * a->element_size); + vmemcpy(new_data, a->data, ((u64)(a->len)) * ((u64)(a->element_size))); if (ArrayFlags_has(&a->flags, ArrayFlags__noslices)) { _v_free(a->data); } @@ -17332,24 +17349,31 @@ array array_repeat(array a, int count) { return array_repeat_to_depth(a, count, 0); } +// Attr: [direct_array_access] // Attr: [unsafe] array array_repeat_to_depth(array a, int count, int depth) { if (count < 0) { _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("array.repeat: count is negative: "), /*100 &int*/0xfe07, {.d_i32 = count}}, {_SLIT0, 0, { .d_c = 0 }}}))); VUNREACHABLE(); } - int size = count * a.len * a.element_size; - if (size == 0) { - size = a.element_size; + u64 size = ((u64)(count)) * ((u64)(a.len)) * ((u64)(a.element_size)); + if (size == 0U) { + size = ((u64)(a.element_size)); } array arr = ((array){.element_size = a.element_size,.data = vcalloc(size),.offset = 0,.len = count * a.len,.cap = count * a.len,.flags = 0,}); if (a.len > 0) { - for (int i = 0; i < count; ++i) { - if (depth > 0) { - array ary_clone = array_clone_to_depth(&a, depth); - vmemcpy(array_get_unsafe(arr, i * a.len), ((u8*)(ary_clone.data)), a.len * a.element_size); - } else { - vmemcpy(array_get_unsafe(arr, i * a.len), ((u8*)(a.data)), a.len * a.element_size); + u64 a_total_size = ((u64)(a.len)) * ((u64)(a.element_size)); + u64 arr_step_size = ((u64)(a.len)) * ((u64)(arr.element_size)); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < count; ++_t1) { + if (depth > 0) { + array ary_clone = array_clone_to_depth(&a, depth); + vmemcpy(eptr, ((u8*)(ary_clone.data)), a_total_size); + } else { + vmemcpy(eptr, ((u8*)(a.data)), a_total_size); + } + eptr += arr_step_size; } } } @@ -17369,7 +17393,7 @@ void array_insert(array* a, int i, voidptr val) { array_ensure_cap(a, a->len + 1); } { // Unsafe block - vmemmove(array_get_unsafe(/*rec*/*a, i + 1), array_get_unsafe(/*rec*/*a, i), (a->len - i) * a->element_size); + vmemmove(array_get_unsafe(/*rec*/*a, i + 1), array_get_unsafe(/*rec*/*a, i), ((u64)((a->len - i))) * ((u64)(a->element_size))); array_set_unsafe(a, i, val); } a->len++; @@ -17389,8 +17413,8 @@ VV_LOCAL_SYMBOL void array_insert_many(array* a, int i, voidptr val, int size) { int elem_size = a->element_size; { // Unsafe block voidptr iptr = array_get_unsafe(/*rec*/*a, i); - vmemmove(array_get_unsafe(/*rec*/*a, i + size), iptr, (a->len - i) * elem_size); - vmemcpy(iptr, val, size * elem_size); + vmemmove(array_get_unsafe(/*rec*/*a, i + size), iptr, ((u64)(a->len - i)) * ((u64)(elem_size))); + vmemcpy(iptr, val, ((u64)(size)) * ((u64)(elem_size))); } a->len += size; } @@ -17419,16 +17443,16 @@ void array_delete_many(array* a, int i, int size) { } #endif if (ArrayFlags_all(&a->flags, (ArrayFlags__noshrink | ArrayFlags__noslices))) { - vmemmove(((u8*)(a->data)) + i * a->element_size, ((u8*)(a->data)) + (i + size) * a->element_size, (a->len - i - size) * a->element_size); + vmemmove(((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), ((u8*)(a->data)) + ((u64)(i + size)) * ((u64)(a->element_size)), ((u64)(a->len - i - size)) * ((u64)(a->element_size))); a->len -= size; return; } voidptr old_data = a->data; int new_size = a->len - size; int new_cap = (new_size == 0 ? (1) : (new_size)); - a->data = vcalloc(new_cap * a->element_size); - vmemcpy(a->data, old_data, i * a->element_size); - vmemcpy(((u8*)(a->data)) + i * a->element_size, ((u8*)(old_data)) + (i + size) * a->element_size, (a->len - i - size) * a->element_size); + a->data = vcalloc(((u64)(new_cap)) * ((u64)(a->element_size))); + vmemcpy(a->data, old_data, ((u64)(i)) * ((u64)(a->element_size))); + vmemcpy(((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), ((u8*)(old_data)) + ((u64)(i + size)) * ((u64)(a->element_size)), ((u64)(a->len - i - size)) * ((u64)(a->element_size))); if (ArrayFlags_has(&a->flags, ArrayFlags__noslices)) { _v_free(old_data); } @@ -17451,9 +17475,9 @@ void array_drop(array* a, int num) { return; } int n = (num <= a->len ? (num) : (a->len)); - int blen = n * a->element_size; + u64 blen = ((u64)(n)) * ((u64)(a->element_size)); a->data = ((u8*)(a->data)) + blen; - a->offset += blen; + a->offset += ((int)(blen)); a->len -= n; a->cap -= n; } @@ -17462,7 +17486,7 @@ void array_drop(array* a, int num) { // Attr: [unsafe] inline VV_LOCAL_SYMBOL voidptr array_get_unsafe(array a, int i) { { // Unsafe block - return ((u8*)(a.data)) + i * a.element_size; + return ((u8*)(a.data)) + ((u64)(i)) * ((u64)(a.element_size)); } return 0; } @@ -17477,7 +17501,7 @@ VV_LOCAL_SYMBOL voidptr array_get(array a, int i) { } #endif { // Unsafe block - return ((u8*)(a.data)) + i * a.element_size; + return ((u8*)(a.data)) + ((u64)(i)) * ((u64)(a.element_size)); } return 0; } @@ -17487,7 +17511,7 @@ VV_LOCAL_SYMBOL voidptr array_get_with_check(array a, int i) { return 0; } { // Unsafe block - return ((u8*)(a.data)) + i * a.element_size; + return ((u8*)(a.data)) + ((u64)(i)) * ((u64)(a.element_size)); } return 0; } @@ -17514,7 +17538,7 @@ voidptr array_last(array a) { } #endif { // Unsafe block - return ((u8*)(a.data)) + (a.len - 1) * a.element_size; + return ((u8*)(a.data)) + ((u64)(a.len - 1)) * ((u64)(a.element_size)); } return 0; } @@ -17529,7 +17553,7 @@ voidptr array_pop(array* a) { } #endif int new_len = a->len - 1; - u8* last_elem = ((u8*)(a->data)) + new_len * a->element_size; + u8* last_elem = ((u8*)(a->data)) + ((u64)(new_len)) * ((u64)(a->element_size)); a->len = new_len; return last_elem; } @@ -17564,10 +17588,10 @@ VV_LOCAL_SYMBOL array array_slice(array a, int start, int _end) { } } #endif - int offset = start * a.element_size; + u64 offset = ((u64)(start)) * ((u64)(a.element_size)); u8* data = ((u8*)(a.data)) + offset; int l = end - start; - array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + offset,.len = l,.cap = l,.flags = 0,}); + array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + ((int)(offset)),.len = l,.cap = l,.flags = 0,}); return res; } @@ -17593,10 +17617,10 @@ VV_LOCAL_SYMBOL array array_slice_ni(array a, int _start, int _end) { array res = ((array){.element_size = a.element_size,.data = a.data,.offset = 0,.len = 0,.cap = 0,.flags = 0,}); return res; } - int offset = start * a.element_size; + u64 offset = ((u64)(start)) * ((u64)(a.element_size)); u8* data = ((u8*)(a.data)) + offset; int l = end - start; - array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + offset,.len = l,.cap = l,.flags = 0,}); + array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + ((int)(offset)),.len = l,.cap = l,.flags = 0,}); return res; } @@ -17615,8 +17639,8 @@ array array_clone(array* a) { // Attr: [unsafe] array array_clone_to_depth(array* a, int depth) { - int size = a->cap * a->element_size; - if (size == 0) { + u64 size = ((u64)(a->cap)) * ((u64)(a->element_size)); + if (size == 0U) { size++; } array arr = ((array){.element_size = a->element_size,.data = vcalloc(size),.offset = 0,.len = a->len,.cap = a->cap,.flags = 0,}); @@ -17630,7 +17654,7 @@ array array_clone_to_depth(array* a, int depth) { return arr; } else { if (!isnil(a->data)) { - vmemcpy(((u8*)(arr.data)), a->data, a->cap * a->element_size); + vmemcpy(((u8*)(arr.data)), a->data, ((u64)(a->cap)) * ((u64)(a->element_size))); } return arr; } @@ -17640,7 +17664,7 @@ array array_clone_to_depth(array* a, int depth) { // Attr: [inline] // Attr: [unsafe] inline VV_LOCAL_SYMBOL void array_set_unsafe(array* a, int i, voidptr val) { - vmemcpy(((u8*)(a->data)) + a->element_size * i, val, a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->element_size)) * ((u64)(i)), val, a->element_size); } VV_LOCAL_SYMBOL void array_set(array* a, int i, voidptr val) { @@ -17652,14 +17676,14 @@ VV_LOCAL_SYMBOL void array_set(array* a, int i, voidptr val) { } } #endif - vmemcpy(((u8*)(a->data)) + a->element_size * i, val, a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->element_size)) * ((u64)(i)), val, a->element_size); } VV_LOCAL_SYMBOL void array_push(array* a, voidptr val) { if (a->len >= a->cap) { array_ensure_cap(a, a->len + 1); } - vmemcpy(((u8*)(a->data)) + a->element_size * a->len, val, a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->element_size)) * ((u64)(a->len)), val, a->element_size); a->len++; } @@ -17668,10 +17692,10 @@ void array_push_many(array* a3, voidptr val, int size) { array_ensure_cap(a3, a3->len + size); if (a3->data == val && !isnil(a3->data)) { array copy = array_clone(a3); - vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), copy.data, a3->element_size * size); + vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), copy.data, ((u64)(a3->element_size)) * ((u64)(size))); } else { if (!isnil(a3->data) && !isnil(val)) { - vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), val, a3->element_size * size); + vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), val, ((u64)(a3->element_size)) * ((u64)(size))); } } a3->len += size; @@ -17684,9 +17708,9 @@ void array_reverse_in_place(array* a) { { // Unsafe block u8* tmp_value = _v_malloc(a->element_size); for (int i = 0; i < a->len / 2; ++i) { - vmemcpy(tmp_value, ((u8*)(a->data)) + i * a->element_size, a->element_size); - vmemcpy(((u8*)(a->data)) + i * a->element_size, ((u8*)(a->data)) + (a->len - 1 - i) * a->element_size, a->element_size); - vmemcpy(((u8*)(a->data)) + (a->len - 1 - i) * a->element_size, tmp_value, a->element_size); + vmemcpy(tmp_value, ((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), ((u8*)(a->data)) + ((u64)(a->len - 1 - i)) * ((u64)(a->element_size)), a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->len - 1 - i)) * ((u64)(a->element_size)), tmp_value, a->element_size); } _v_free(tmp_value); } @@ -17696,7 +17720,7 @@ array array_reverse(array a) { if (a.len < 2) { return a; } - array arr = ((array){.element_size = a.element_size,.data = vcalloc(a.cap * a.element_size),.offset = 0,.len = a.len,.cap = a.cap,.flags = 0,}); + array arr = ((array){.element_size = a.element_size,.data = vcalloc(((u64)(a.cap)) * ((u64)(a.element_size))),.offset = 0,.len = a.len,.cap = a.cap,.flags = 0,}); for (int i = 0; i < a.len; ++i) { array_set_unsafe(&arr, i, array_get_unsafe(a, a.len - 1 - i)); } @@ -17779,7 +17803,7 @@ string Array_string_str(Array_string a) { } string Array_u8_hex(Array_u8 b) { - u8* hex = malloc_noscan(b.len * 2 + 1); + u8* hex = malloc_noscan(((u64)(b.len)) * 2U + 1U); int dst_i = 0; for (int _t1 = 0; _t1 < b.len; ++_t1) { u8 i = ((u8*)b.data)[_t1]; @@ -17912,7 +17936,15 @@ VNORETURN VV_LOCAL_SYMBOL void panic_debug(int line_no, string file, string mod, VUNREACHABLE(); } #endif - print_backtrace_skipping_top_frames(1); + #if defined(CUSTOM_DEFINE_use_libbacktrace) + { + print_libbacktrace(1); + } + #else + { + print_backtrace_skipping_top_frames(1); + } + #endif #if defined(CUSTOM_DEFINE_panics_break_into_debugger) { break_if_debugger_attached(); @@ -17980,7 +18012,15 @@ VNORETURN void _v_panic(string s) { VUNREACHABLE(); } #endif - print_backtrace_skipping_top_frames(1); + #if defined(CUSTOM_DEFINE_use_libbacktrace) + { + print_libbacktrace(1); + } + #else + { + print_backtrace_skipping_top_frames(1); + } + #endif #if defined(CUSTOM_DEFINE_panics_break_into_debugger) { break_if_debugger_attached(); @@ -18183,9 +18223,9 @@ VV_LOCAL_SYMBOL void _write_buf_to_fd(int fd, u8* buf, int buf_len) { } // Attr: [unsafe] -u8* _v_malloc(int n) { +u8* _v_malloc(isize n) { if (n <= 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } #if defined(CUSTOM_DEFINE_vplayground) @@ -18226,7 +18266,7 @@ u8* _v_malloc(int n) { } #endif if (res == 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } #if defined(CUSTOM_DEFINE_debug_malloc) @@ -18238,9 +18278,9 @@ u8* _v_malloc(int n) { } // Attr: [unsafe] -u8* malloc_noscan(int n) { +u8* malloc_noscan(isize n) { if (n <= 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } #if defined(CUSTOM_DEFINE_vplayground) @@ -18291,7 +18331,7 @@ u8* malloc_noscan(int n) { } #endif if (res == 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } #if defined(CUSTOM_DEFINE_debug_malloc) @@ -18303,7 +18343,7 @@ u8* malloc_noscan(int n) { } // Attr: [unsafe] -u8* v_realloc(u8* b, int n) { +u8* v_realloc(u8* b, isize n) { #if defined(CUSTOM_DEFINE_trace_realloc) { fprintf(stderr, "v_realloc %6d\n", n); @@ -18328,7 +18368,7 @@ u8* v_realloc(u8* b, int n) { } #endif if (new_ptr == 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("realloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("realloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } return new_ptr; @@ -18375,9 +18415,9 @@ u8* realloc_data(u8* old_data, int old_size, int new_size) { return nptr; } -u8* vcalloc(int n) { +u8* vcalloc(isize n) { if (n < 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("calloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("calloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } else if (n == 0) { return ((u8*)(0)); @@ -18404,7 +18444,7 @@ u8* vcalloc(int n) { return 0; } -u8* vcalloc_noscan(int n) { +u8* vcalloc_noscan(isize n) { #if defined(CUSTOM_DEFINE_trace_vcalloc) { total_m += n; @@ -18426,7 +18466,7 @@ u8* vcalloc_noscan(int n) { } #endif if (n < 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("calloc_noscan("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("calloc_noscan("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } #if defined(CUSTOM_DEFINE_gcboehm_opt) @@ -18517,7 +18557,15 @@ void print_backtrace(void) { } #else { - print_backtrace_skipping_top_frames(2); + #if defined(CUSTOM_DEFINE_use_libbacktrace) + { + print_libbacktrace(1); + } + #else + { + print_backtrace_skipping_top_frames(2); + } + #endif } #endif } @@ -18735,6 +18783,9 @@ VNORETURN void panic_lasterr(void) { void gc_check_leaks(void) { } +VV_LOCAL_SYMBOL void print_libbacktrace(int frames_to_skip) { +} + // Attr: [trusted] // Attr: [noreturn] // Attr: [trusted] @@ -18784,7 +18835,7 @@ inline int vstrlen_char(char* s) { // Attr: [inline] // Attr: [unsafe] -inline voidptr vmemcpy(voidptr dest, const voidptr const_src, int n) { +inline voidptr vmemcpy(voidptr dest, const voidptr const_src, isize n) { { // Unsafe block return memcpy(dest, const_src, n); } @@ -18793,7 +18844,7 @@ inline voidptr vmemcpy(voidptr dest, const voidptr const_src, int n) { // Attr: [inline] // Attr: [unsafe] -inline voidptr vmemmove(voidptr dest, const voidptr const_src, int n) { +inline voidptr vmemmove(voidptr dest, const voidptr const_src, isize n) { { // Unsafe block return memmove(dest, const_src, n); } @@ -18802,7 +18853,7 @@ inline voidptr vmemmove(voidptr dest, const voidptr const_src, int n) { // Attr: [inline] // Attr: [unsafe] -inline int vmemcmp(const voidptr const_s1, const voidptr const_s2, int n) { +inline int vmemcmp(const voidptr const_s1, const voidptr const_s2, isize n) { { // Unsafe block return memcmp(const_s1, const_s2, n); } @@ -18811,7 +18862,7 @@ inline int vmemcmp(const voidptr const_s1, const voidptr const_s2, int n) { // Attr: [inline] // Attr: [unsafe] -inline voidptr vmemset(voidptr s, int c, int n) { +inline voidptr vmemset(voidptr s, int c, isize n) { { // Unsafe block return memset(s, c, n); } @@ -20185,13 +20236,13 @@ string none_str(none _d2) { } // Attr: [unsafe] -VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, int at_least) { +VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, isize at_least) { VMemoryBlock* v = ((VMemoryBlock*)(calloc(1, sizeof(VMemoryBlock)))); if (prev != 0) { v->id = prev->id + 1; } v->previous = prev; - int block_size = (at_least < _const_prealloc_block_size ? (_const_prealloc_block_size) : (at_least)); + isize block_size = (at_least < _const_prealloc_block_size ? (_const_prealloc_block_size) : (at_least)); v->start = malloc(block_size); v->cap = block_size; v->remaining = block_size; @@ -20200,7 +20251,7 @@ VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, int at_least } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* vmemory_block_malloc(int n) { +VV_LOCAL_SYMBOL byte* vmemory_block_malloc(isize n) { { // Unsafe block if (g_memory_block->remaining < n) { g_memory_block = vmemory_block_new(g_memory_block, n); @@ -20236,7 +20287,7 @@ VV_LOCAL_SYMBOL void prealloc_vcleanup(void) { for (;;) { if (!(mb != 0)) break; nr_mallocs += mb->mallocs; - eprintln( str_intp(8, _MOV((StrIntpData[]){{_SLIT("> freeing mb.id: "), /*100 &int*/0x6fe27, {.d_i32 = mb->id}}, {_SLIT(" | cap: "), /*100 &int*/0xefe27, {.d_i32 = mb->cap}}, {_SLIT(" | rem: "), /*100 &int*/0xefe27, {.d_i32 = mb->remaining}}, {_SLIT(" | start: "), /*112 &voidptr*/0xfe11, {.d_p = (void*)(((voidptr)(mb->start)))}}, {_SLIT(" | current: "), /*112 &voidptr*/0xfe11, {.d_p = (void*)(((voidptr)(mb->current)))}}, {_SLIT(" | diff: "), /*117 &u64*/0xefe28, {.d_u64 = ((u64)(mb->current)) - ((u64)(mb->start))}}, {_SLIT(" bytes | mallocs: "), /*100 &int*/0xfe07, {.d_i32 = mb->mallocs}}, {_SLIT0, 0, { .d_c = 0 }}}))); + eprintln( str_intp(8, _MOV((StrIntpData[]){{_SLIT("> freeing mb.id: "), /*100 &int*/0x6fe27, {.d_i32 = mb->id}}, {_SLIT(" | cap: "), /*100 &isize*/0xefe29, {.d_i64 = mb->cap}}, {_SLIT(" | rem: "), /*100 &isize*/0xefe29, {.d_i64 = mb->remaining}}, {_SLIT(" | start: "), /*112 &voidptr*/0xfe11, {.d_p = (void*)(((voidptr)(mb->start)))}}, {_SLIT(" | current: "), /*112 &voidptr*/0xfe11, {.d_p = (void*)(((voidptr)(mb->current)))}}, {_SLIT(" | diff: "), /*117 &u64*/0xefe28, {.d_u64 = ((u64)(mb->current)) - ((u64)(mb->start))}}, {_SLIT(" bytes | mallocs: "), /*100 &int*/0xfe07, {.d_i32 = mb->mallocs}}, {_SLIT0, 0, { .d_c = 0 }}}))); mb = mb->previous; } eprintln( str_intp(2, _MOV((StrIntpData[]){{_SLIT("> nr_mallocs: "), /*100 &i64*/0xfe09, {.d_i64 = nr_mallocs}}, {_SLIT0, 0, { .d_c = 0 }}}))); @@ -20252,20 +20303,20 @@ VV_LOCAL_SYMBOL void prealloc_vcleanup(void) { } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* prealloc_malloc(int n) { +VV_LOCAL_SYMBOL byte* prealloc_malloc(isize n) { return vmemory_block_malloc(n); } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, int old_size, int new_size) { +VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, isize old_size, isize new_size) { byte* new_ptr = vmemory_block_malloc(new_size); - int min_size = (old_size < new_size ? (old_size) : (new_size)); + isize min_size = (old_size < new_size ? (old_size) : (new_size)); memcpy(new_ptr, old_data, min_size); return new_ptr; } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* prealloc_calloc(int n) { +VV_LOCAL_SYMBOL byte* prealloc_calloc(isize n) { byte* new_ptr = vmemory_block_malloc(n); memset(new_ptr, 0, n); return new_ptr; @@ -37989,7 +38040,7 @@ void v__pref__Preferences_fill_with_defaults(v__pref__Preferences* p) { } #endif } - string vhash = _SLIT("3baf1741b"); + string vhash = _SLIT("41857b0ac"); p->cache_manager = v__vcache__new_cache_manager(new_array_from_c_array(7, 7, sizeof(string), _MOV((string[7]){string_clone(vhash), str_intp(6, _MOV((StrIntpData[]){{_SLIT0, /*115 &v.pref.Backend*/0xfe10, {.d_s = v__pref__Backend_str(p->backend)}}, {_SLIT(" | "), /*115 &v.pref.OS*/0xfe10, {.d_s = v__pref__OS_str(p->os)}}, {_SLIT(" | "), /*115 &string*/0xfe10, {.d_s = p->ccompiler}}, {_SLIT(" | "), /*115 &bool*/0xfe10, {.d_s = p->is_prod ? _SLIT("true") : _SLIT("false")}}, {_SLIT(" | "), /*115 &bool*/0xfe10, {.d_s = p->sanitize ? _SLIT("true") : _SLIT("false")}}, {_SLIT0, 0, { .d_c = 0 }}})), string_clone(string_trim_space(p->cflags)), string_clone(string_trim_space(p->third_party_option)), string_clone(Array_string_str(p->compile_defines_all)), string_clone(Array_string_str(p->compile_defines)), string_clone(Array_string_str(p->lookup_path))}))); if (string__eq(os__user_os(), _SLIT("windows"))) { p->use_cache = false; @@ -54274,32 +54325,16 @@ bool v__checker__Checker_expr_defer_0 = false; return _t19; } else if (node._typ == 259 /* v.ast.ComptimeSelector */) { - (*node._v__ast__ComptimeSelector).left_type = v__checker__Checker_expr(c, (*node._v__ast__ComptimeSelector).left); - v__ast__Type expr_type = v__checker__Checker_unwrap_generic(c, v__checker__Checker_expr(c, (*node._v__ast__ComptimeSelector).field_expr)); - v__ast__TypeSymbol* expr_sym = v__ast__Table_sym(c->table, expr_type); - if (!v__ast__Type_alias_eq(expr_type, _const_v__ast__string_type)) { - v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("expected `string` instead of `"), /*115 &string*/0xfe10, {.d_s = expr_sym->name}}, {_SLIT("` (e.g. `field.name`)"), 0, { .d_c = 0 }}})), v__ast__Expr_pos((*node._v__ast__ComptimeSelector).field_expr)); + v__ast__Type _t20 = v__checker__Checker_comptime_selector(c, (voidptr)&/*qq*/(*node._v__ast__ComptimeSelector)); + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; } - if (((*node._v__ast__ComptimeSelector).field_expr)._typ == 287 /* v.ast.SelectorExpr */) { - v__token__Pos left_pos = v__ast__Expr_pos((*(*node._v__ast__ComptimeSelector).field_expr._v__ast__SelectorExpr).expr); - if (c->comptime_fields_type.len == 0) { - v__checker__Checker_error(c, _SLIT("compile time field access can only be used when iterating over `T.fields`"), left_pos); - } - string expr_name = v__ast__Expr_str((*(*node._v__ast__ComptimeSelector).field_expr._v__ast__SelectorExpr).expr); - if (_IN_MAP(ADDR(string, expr_name), ADDR(map, c->comptime_fields_type))) { - v__ast__Type _t20 = (*(v__ast__Type*)map_get(ADDR(map, c->comptime_fields_type), &(string[]){expr_name}, &(v__ast__Type[]){ 0 })); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t20; - } - v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("unknown `$for` variable `"), /*115 &string*/0xfe10, {.d_s = expr_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), left_pos); - } else { - v__checker__Checker_error(c, _SLIT("expected selector expression e.g. `$(field.name)`"), v__ast__Expr_pos((*node._v__ast__ComptimeSelector).field_expr)); - } - v__ast__Type _t21 = _const_v__ast__void_type; + // Defer end + return _t20; + } + else if (node._typ == 261 /* v.ast.ConcatExpr */) { + v__ast__Type _t21 = v__checker__Checker_concat_expr(c, (voidptr)&/*qq*/(*node._v__ast__ConcatExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54307,20 +54342,20 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t21; } - else if (node._typ == 261 /* v.ast.ConcatExpr */) { - v__ast__Type _t22 = v__checker__Checker_concat_expr(c, (voidptr)&/*qq*/(*node._v__ast__ConcatExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t22; - } else if (node._typ == 262 /* v.ast.DumpExpr */) { (*node._v__ast__DumpExpr).expr_type = v__checker__Checker_expr(c, (*node._v__ast__DumpExpr).expr); int etidx = v__ast__Type_idx((*node._v__ast__DumpExpr).expr_type); if (etidx == _const_v__ast__void_type_idx) { v__checker__Checker_error(c, _SLIT("dump expression can not be void"), v__ast__Expr_pos((*node._v__ast__DumpExpr).expr)); + v__ast__Type _t22 = _const_v__ast__void_type; + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t22; + } else if (etidx == _const_v__ast__char_type_idx && v__ast__Type_nr_muls((*node._v__ast__DumpExpr).expr_type) == 0) { + v__checker__Checker_error(c, _SLIT("`char` values cannot be dumped directly, use dump(u8(x)) or dump(int(x)) instead"), v__ast__Expr_pos((*node._v__ast__DumpExpr).expr)); v__ast__Type _t23 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { @@ -54328,20 +54363,20 @@ bool v__checker__Checker_expr_defer_0 = false; } // Defer end return _t23; - } else if (etidx == _const_v__ast__char_type_idx && v__ast__Type_nr_muls((*node._v__ast__DumpExpr).expr_type) == 0) { - v__checker__Checker_error(c, _SLIT("`char` values cannot be dumped directly, use dump(u8(x)) or dump(int(x)) instead"), v__ast__Expr_pos((*node._v__ast__DumpExpr).expr)); - v__ast__Type _t24 = _const_v__ast__void_type; - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t24; } v__ast__TypeSymbol* tsym = v__ast__Table_sym(c->table, (*node._v__ast__DumpExpr).expr_type); map_set(&c->table->dumps, &(int[]){((int)((*node._v__ast__DumpExpr).expr_type))}, &(string[]) { tsym->cname }); (*node._v__ast__DumpExpr).cname = tsym->cname; - v__ast__Type _t25 = (*node._v__ast__DumpExpr).expr_type; + v__ast__Type _t24 = (*node._v__ast__DumpExpr).expr_type; + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t24; + } + else if (node._typ == 264 /* v.ast.EnumVal */) { + v__ast__Type _t25 = v__checker__Checker_enum_val(c, (voidptr)&/*qq*/(*node._v__ast__EnumVal)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54349,8 +54384,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t25; } - else if (node._typ == 264 /* v.ast.EnumVal */) { - v__ast__Type _t26 = v__checker__Checker_enum_val(c, (voidptr)&/*qq*/(*node._v__ast__EnumVal)); + else if (node._typ == 265 /* v.ast.FloatLiteral */) { + v__ast__Type _t26 = _const_v__ast__float_literal_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54358,8 +54393,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t26; } - else if (node._typ == 265 /* v.ast.FloatLiteral */) { - v__ast__Type _t27 = _const_v__ast__float_literal_type; + else if (node._typ == 266 /* v.ast.GoExpr */) { + v__ast__Type _t27 = v__checker__Checker_go_expr(c, (voidptr)&/*qq*/(*node._v__ast__GoExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54367,8 +54402,9 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t27; } - else if (node._typ == 266 /* v.ast.GoExpr */) { - v__ast__Type _t28 = v__checker__Checker_go_expr(c, (voidptr)&/*qq*/(*node._v__ast__GoExpr)); + else if (node._typ == 267 /* v.ast.Ident */) { + v__ast__Type res = v__checker__Checker_ident(c, (voidptr)&/*qq*/(*node._v__ast__Ident)); + v__ast__Type _t28 = res; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54376,9 +54412,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t28; } - else if (node._typ == 267 /* v.ast.Ident */) { - v__ast__Type res = v__checker__Checker_ident(c, (voidptr)&/*qq*/(*node._v__ast__Ident)); - v__ast__Type _t29 = res; + else if (node._typ == 268 /* v.ast.IfExpr */) { + v__ast__Type _t29 = v__checker__Checker_if_expr(c, (voidptr)&/*qq*/(*node._v__ast__IfExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54386,15 +54421,6 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t29; } - else if (node._typ == 268 /* v.ast.IfExpr */) { - v__ast__Type _t30 = v__checker__Checker_if_expr(c, (voidptr)&/*qq*/(*node._v__ast__IfExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t30; - } else if (node._typ == 269 /* v.ast.IfGuardExpr */) { bool old_inside_if_guard = c->inside_if_guard; c->inside_if_guard = true; @@ -54422,7 +54448,16 @@ bool v__checker__Checker_expr_defer_0 = false; v__checker__Checker_error(c, _SLIT("expression should return an option"), v__ast__Expr_pos((*node._v__ast__IfGuardExpr).expr)); } } - v__ast__Type _t31 = _const_v__ast__bool_type; + v__ast__Type _t30 = _const_v__ast__bool_type; + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t30; + } + else if (node._typ == 270 /* v.ast.IndexExpr */) { + v__ast__Type _t31 = v__checker__Checker_index_expr(c, (voidptr)&/*qq*/(*node._v__ast__IndexExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54430,8 +54465,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t31; } - else if (node._typ == 270 /* v.ast.IndexExpr */) { - v__ast__Type _t32 = v__checker__Checker_index_expr(c, (voidptr)&/*qq*/(*node._v__ast__IndexExpr)); + else if (node._typ == 271 /* v.ast.InfixExpr */) { + v__ast__Type _t32 = v__checker__Checker_infix_expr(c, (voidptr)&/*qq*/(*node._v__ast__InfixExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54439,8 +54474,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t32; } - else if (node._typ == 271 /* v.ast.InfixExpr */) { - v__ast__Type _t33 = v__checker__Checker_infix_expr(c, (voidptr)&/*qq*/(*node._v__ast__InfixExpr)); + else if (node._typ == 272 /* v.ast.IntegerLiteral */) { + v__ast__Type _t33 = v__checker__Checker_int_lit(c, (voidptr)&/*qq*/(*node._v__ast__IntegerLiteral)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54448,8 +54483,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t33; } - else if (node._typ == 272 /* v.ast.IntegerLiteral */) { - v__ast__Type _t34 = v__checker__Checker_int_lit(c, (voidptr)&/*qq*/(*node._v__ast__IntegerLiteral)); + else if (node._typ == 275 /* v.ast.LockExpr */) { + v__ast__Type _t34 = v__checker__Checker_lock_expr(c, (voidptr)&/*qq*/(*node._v__ast__LockExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54457,8 +54492,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t34; } - else if (node._typ == 275 /* v.ast.LockExpr */) { - v__ast__Type _t35 = v__checker__Checker_lock_expr(c, (voidptr)&/*qq*/(*node._v__ast__LockExpr)); + else if (node._typ == 276 /* v.ast.MapInit */) { + v__ast__Type _t35 = v__checker__Checker_map_init(c, (voidptr)&/*qq*/(*node._v__ast__MapInit)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54466,8 +54501,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t35; } - else if (node._typ == 276 /* v.ast.MapInit */) { - v__ast__Type _t36 = v__checker__Checker_map_init(c, (voidptr)&/*qq*/(*node._v__ast__MapInit)); + else if (node._typ == 277 /* v.ast.MatchExpr */) { + v__ast__Type _t36 = v__checker__Checker_match_expr(c, (voidptr)&/*qq*/(*node._v__ast__MatchExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54475,8 +54510,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t36; } - else if (node._typ == 277 /* v.ast.MatchExpr */) { - v__ast__Type _t37 = v__checker__Checker_match_expr(c, (voidptr)&/*qq*/(*node._v__ast__MatchExpr)); + else if (node._typ == 283 /* v.ast.PostfixExpr */) { + v__ast__Type _t37 = v__checker__Checker_postfix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PostfixExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54484,8 +54519,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t37; } - else if (node._typ == 283 /* v.ast.PostfixExpr */) { - v__ast__Type _t38 = v__checker__Checker_postfix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PostfixExpr)); + else if (node._typ == 284 /* v.ast.PrefixExpr */) { + v__ast__Type _t38 = v__checker__Checker_prefix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PrefixExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54493,8 +54528,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t38; } - else if (node._typ == 284 /* v.ast.PrefixExpr */) { - v__ast__Type _t39 = v__checker__Checker_prefix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PrefixExpr)); + else if (node._typ == 279 /* v.ast.None */) { + v__ast__Type _t39 = _const_v__ast__none_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54502,8 +54537,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t39; } - else if (node._typ == 279 /* v.ast.None */) { - v__ast__Type _t40 = _const_v__ast__none_type; + else if (node._typ == 281 /* v.ast.OrExpr */) { + v__ast__Type _t40 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54511,8 +54546,11 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t40; } - else if (node._typ == 281 /* v.ast.OrExpr */) { - v__ast__Type _t41 = _const_v__ast__void_type; + else if (node._typ == 282 /* v.ast.ParExpr */) { + if (((*node._v__ast__ParExpr).expr)._typ == 282 /* v.ast.ParExpr */) { + v__checker__Checker_warn(c, _SLIT("redundant parentheses are used"), (*node._v__ast__ParExpr).pos); + } + v__ast__Type _t41 = v__checker__Checker_expr(c, (*node._v__ast__ParExpr).expr); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54520,11 +54558,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t41; } - else if (node._typ == 282 /* v.ast.ParExpr */) { - if (((*node._v__ast__ParExpr).expr)._typ == 282 /* v.ast.ParExpr */) { - v__checker__Checker_warn(c, _SLIT("redundant parentheses are used"), (*node._v__ast__ParExpr).pos); - } - v__ast__Type _t42 = v__checker__Checker_expr(c, (*node._v__ast__ParExpr).expr); + else if (node._typ == 285 /* v.ast.RangeExpr */) { + v__ast__Type _t42 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54532,8 +54567,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t42; } - else if (node._typ == 285 /* v.ast.RangeExpr */) { - v__ast__Type _t43 = _const_v__ast__void_type; + else if (node._typ == 286 /* v.ast.SelectExpr */) { + v__ast__Type _t43 = v__checker__Checker_select_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54541,8 +54576,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t43; } - else if (node._typ == 286 /* v.ast.SelectExpr */) { - v__ast__Type _t44 = v__checker__Checker_select_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectExpr)); + else if (node._typ == 287 /* v.ast.SelectorExpr */) { + v__ast__Type _t44 = v__checker__Checker_selector_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectorExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54550,8 +54585,11 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t44; } - else if (node._typ == 287 /* v.ast.SelectorExpr */) { - v__ast__Type _t45 = v__checker__Checker_selector_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectorExpr)); + else if (node._typ == 288 /* v.ast.SizeOf */) { + if (!(*node._v__ast__SizeOf).is_type) { + (*node._v__ast__SizeOf).typ = v__checker__Checker_expr(c, (*node._v__ast__SizeOf).expr); + } + v__ast__Type _t45 = _const_v__ast__u32_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54559,11 +54597,11 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t45; } - else if (node._typ == 288 /* v.ast.SizeOf */) { - if (!(*node._v__ast__SizeOf).is_type) { - (*node._v__ast__SizeOf).typ = v__checker__Checker_expr(c, (*node._v__ast__SizeOf).expr); + else if (node._typ == 273 /* v.ast.IsRefType */) { + if (!(*node._v__ast__IsRefType).is_type) { + (*node._v__ast__IsRefType).typ = v__checker__Checker_expr(c, (*node._v__ast__IsRefType).expr); } - v__ast__Type _t46 = _const_v__ast__u32_type; + v__ast__Type _t46 = _const_v__ast__bool_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54571,11 +54609,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t46; } - else if (node._typ == 273 /* v.ast.IsRefType */) { - if (!(*node._v__ast__IsRefType).is_type) { - (*node._v__ast__IsRefType).typ = v__checker__Checker_expr(c, (*node._v__ast__IsRefType).expr); - } - v__ast__Type _t47 = _const_v__ast__bool_type; + else if (node._typ == 280 /* v.ast.OffsetOf */) { + v__ast__Type _t47 = v__checker__Checker_offset_of(c, (*node._v__ast__OffsetOf)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54583,8 +54618,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t47; } - else if (node._typ == 280 /* v.ast.OffsetOf */) { - v__ast__Type _t48 = v__checker__Checker_offset_of(c, (*node._v__ast__OffsetOf)); + else if (node._typ == 289 /* v.ast.SqlExpr */) { + v__ast__Type _t48 = v__checker__Checker_sql_expr(c, (voidptr)&/*qq*/(*node._v__ast__SqlExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54592,26 +54627,26 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t48; } - else if (node._typ == 289 /* v.ast.SqlExpr */) { - v__ast__Type _t49 = v__checker__Checker_sql_expr(c, (voidptr)&/*qq*/(*node._v__ast__SqlExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t49; - } else if (node._typ == 291 /* v.ast.StringLiteral */) { if ((*node._v__ast__StringLiteral).language == v__ast__Language__c) { - v__ast__Type _t50 = v__ast__Type_set_nr_muls(_const_v__ast__byte_type, 1); + v__ast__Type _t49 = v__ast__Type_set_nr_muls(_const_v__ast__byte_type, 1); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t50; + return _t49; } - v__ast__Type _t51 = v__checker__Checker_string_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringLiteral)); + v__ast__Type _t50 = v__checker__Checker_string_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringLiteral)); + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t50; + } + else if (node._typ == 290 /* v.ast.StringInterLiteral */) { + v__ast__Type _t51 = v__checker__Checker_string_inter_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringInterLiteral)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54619,26 +54654,26 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t51; } - else if (node._typ == 290 /* v.ast.StringInterLiteral */) { - v__ast__Type _t52 = v__checker__Checker_string_inter_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringInterLiteral)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t52; - } else if (node._typ == 292 /* v.ast.StructInit */) { if ((*node._v__ast__StructInit).unresolved) { - v__ast__Type _t53 = v__checker__Checker_expr(c, v__ast__resolve_init((*node._v__ast__StructInit), v__checker__Checker_unwrap_generic(c, (*node._v__ast__StructInit).typ), c->table)); + v__ast__Type _t52 = v__checker__Checker_expr(c, v__ast__resolve_init((*node._v__ast__StructInit), v__checker__Checker_unwrap_generic(c, (*node._v__ast__StructInit).typ), c->table)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t53; + return _t52; } - v__ast__Type _t54 = v__checker__Checker_struct_init(c, (voidptr)&/*qq*/(*node._v__ast__StructInit)); + v__ast__Type _t53 = v__checker__Checker_struct_init(c, (voidptr)&/*qq*/(*node._v__ast__StructInit)); + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t53; + } + else if (node._typ == 293 /* v.ast.TypeNode */) { + v__ast__Type _t54 = (*node._v__ast__TypeNode).typ; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54646,8 +54681,9 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t54; } - else if (node._typ == 293 /* v.ast.TypeNode */) { - v__ast__Type _t55 = (*node._v__ast__TypeNode).typ; + else if (node._typ == 294 /* v.ast.TypeOf */) { + (*node._v__ast__TypeOf).expr_type = v__checker__Checker_expr(c, (*node._v__ast__TypeOf).expr); + v__ast__Type _t55 = _const_v__ast__string_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54655,9 +54691,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t55; } - else if (node._typ == 294 /* v.ast.TypeOf */) { - (*node._v__ast__TypeOf).expr_type = v__checker__Checker_expr(c, (*node._v__ast__TypeOf).expr); - v__ast__Type _t56 = _const_v__ast__string_type; + else if (node._typ == 295 /* v.ast.UnsafeExpr */) { + v__ast__Type _t56 = v__checker__Checker_unsafe_expr(c, (voidptr)&/*qq*/(*node._v__ast__UnsafeExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -54665,15 +54700,6 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t56; } - else if (node._typ == 295 /* v.ast.UnsafeExpr */) { - v__ast__Type _t57 = v__checker__Checker_unsafe_expr(c, (voidptr)&/*qq*/(*node._v__ast__UnsafeExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t57; - } else if (node._typ == 274 /* v.ast.Likely */) { v__ast__Type ltype = v__checker__Checker_expr(c, (*node._v__ast__Likely).expr); if (!v__checker__Checker_check_types(c, ltype, _const_v__ast__bool_type)) { @@ -54681,22 +54707,22 @@ bool v__checker__Checker_expr_defer_0 = false; string lname = ((*node._v__ast__Likely).is_likely ? (_SLIT("_likely_")) : (_SLIT("_unlikely_"))); v__checker__Checker_error(c, str_intp(3, _MOV((StrIntpData[]){{_SLIT("`"), /*115 &string*/0xfe10, {.d_s = lname}}, {_SLIT("()` expects a boolean expression, instead it got `"), /*115 &string*/0xfe10, {.d_s = ltype_sym->name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), (*node._v__ast__Likely).pos); } - v__ast__Type _t58 = _const_v__ast__bool_type; + v__ast__Type _t57 = _const_v__ast__bool_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t58; + return _t57; } ; - v__ast__Type _t59 = _const_v__ast__void_type; + v__ast__Type _t58 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t59; + return _t58; } v__ast__Type v__checker__Checker_cast_expr(v__checker__Checker* c, v__ast__CastExpr* node) { @@ -55491,8 +55517,8 @@ v__ast__Type v__checker__Checker_postfix_expr(v__checker__Checker* c, v__ast__Po string typ_str = v__ast__Table_type_to_str(c->table, typ); v__checker__Checker_error(c, str_intp(3, _MOV((StrIntpData[]){{_SLIT("invalid operation: "), /*115 &string*/0xfe10, {.d_s = v__token__Kind_str(node->op)}}, {_SLIT(" (non-numeric type `"), /*115 &string*/0xfe10, {.d_s = typ_str}}, {_SLIT("`)"), 0, { .d_c = 0 }}})), node->pos); } else { - multi_return_string_v__token__Pos mr_117243 = v__checker__Checker_fail_if_immutable(c, node->expr); - node->auto_locked = mr_117243.arg0; + multi_return_string_v__token__Pos mr_116421 = v__checker__Checker_fail_if_immutable(c, node->expr); + node->auto_locked = mr_116421.arg0; } v__ast__Type _t1 = typ; return _t1; @@ -56345,6 +56371,31 @@ VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_call(v__checker__Check return _t18; } +VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_selector(v__checker__Checker* c, v__ast__ComptimeSelector* node) { + node->left_type = v__checker__Checker_expr(c, node->left); + v__ast__Type expr_type = v__checker__Checker_unwrap_generic(c, v__checker__Checker_expr(c, node->field_expr)); + v__ast__TypeSymbol* expr_sym = v__ast__Table_sym(c->table, expr_type); + if (!v__ast__Type_alias_eq(expr_type, _const_v__ast__string_type)) { + v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("expected `string` instead of `"), /*115 &string*/0xfe10, {.d_s = expr_sym->name}}, {_SLIT("` (e.g. `field.name`)"), 0, { .d_c = 0 }}})), v__ast__Expr_pos(node->field_expr)); + } + if ((node->field_expr)._typ == 287 /* v.ast.SelectorExpr */) { + v__token__Pos left_pos = v__ast__Expr_pos((*node->field_expr._v__ast__SelectorExpr).expr); + if (c->comptime_fields_type.len == 0) { + v__checker__Checker_error(c, _SLIT("compile time field access can only be used when iterating over `T.fields`"), left_pos); + } + string expr_name = v__ast__Expr_str((*node->field_expr._v__ast__SelectorExpr).expr); + if (_IN_MAP(ADDR(string, expr_name), ADDR(map, c->comptime_fields_type))) { + v__ast__Type _t1 = (*(v__ast__Type*)map_get(ADDR(map, c->comptime_fields_type), &(string[]){expr_name}, &(v__ast__Type[]){ 0 })); + return _t1; + } + v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("unknown `$for` variable `"), /*115 &string*/0xfe10, {.d_s = expr_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), left_pos); + } else { + v__checker__Checker_error(c, _SLIT("expected selector expression e.g. `$(field.name)`"), v__ast__Expr_pos(node->field_expr)); + } + v__ast__Type _t2 = _const_v__ast__void_type; + return _t2; +} + VV_LOCAL_SYMBOL void v__checker__Checker_comptime_for(v__checker__Checker* c, v__ast__ComptimeFor node) { v__ast__Type typ = v__checker__Checker_unwrap_generic(c, node.typ); v__ast__TypeSymbol* sym = v__ast__Table_sym(c->table, typ); @@ -56377,8 +56428,8 @@ VV_LOCAL_SYMBOL Option_v__ast__ComptTimeConstValue v__checker__Checker_eval_comp return _t2; } else if (expr._typ == 288 /* v.ast.SizeOf */) { - multi_return_int_int mr_3715 = v__ast__Table_type_size(c->table, (*expr._v__ast__SizeOf).typ); - int s = mr_3715.arg0; + multi_return_int_int mr_4612 = v__ast__Table_type_size(c->table, (*expr._v__ast__SizeOf).typ); + int s = mr_4612.arg0; Option_v__ast__ComptTimeConstValue _t3; opt_ok(&(v__ast__ComptTimeConstValue[]) { int_to_sumtype_v__ast__ComptTimeConstValue(&s) }, (Option*)(&_t3), sizeof(v__ast__ComptTimeConstValue)); return _t3; @@ -57565,10 +57616,10 @@ VV_LOCAL_SYMBOL void v__checker__Checker_verify_all_vweb_routes(v__checker__Chec for (int _t2 = 0; _t2 < sym_app->methods.len; ++_t2) { v__ast__Fn m = ((v__ast__Fn*)sym_app->methods.data)[_t2]; if (m.return_type == typ_vweb_result) { - multi_return_bool_int_int mr_9832 = v__checker__Checker_verify_vweb_params_for_method(c, m); - bool is_ok = mr_9832.arg0; - int nroute_attributes = mr_9832.arg1; - int nargs = mr_9832.arg2; + multi_return_bool_int_int mr_10729 = v__checker__Checker_verify_vweb_params_for_method(c, m); + bool is_ok = mr_10729.arg0; + int nroute_attributes = mr_10729.arg1; + int nargs = mr_10729.arg2; if (!is_ok) { v__ast__FnDecl* f = ((v__ast__FnDecl*)(m.source_fn)); if (isnil(f)) { @@ -75644,6 +75695,8 @@ VV_LOCAL_SYMBOL void v__gen__c__Gen_gen_c_main_function_header(v__gen__c__Gen* g } else { v__gen__c__Gen_writeln(g, _SLIT("int main(int ___argc, char** ___argv){")); } + v__gen__c__Gen_writeln(g, _SLIT("\tg_main_argc = ___argc;")); + v__gen__c__Gen_writeln(g, _SLIT("\tg_main_argv = ___argv;")); } VV_LOCAL_SYMBOL void v__gen__c__Gen_gen_c_main_header(v__gen__c__Gen* g) { @@ -75703,22 +75756,22 @@ void v__gen__c__Gen_write_tests_definitions(v__gen__c__Gen* g) { } void v__gen__c__Gen_gen_failing_error_propagation_for_test_fn(v__gen__c__Gen* g, v__ast__OrExpr or_block, string cvar_name) { - multi_return_int_string_string_string mr_5046 = v__gen__c__Gen_panic_debug_info(g, or_block.pos); - int paline = mr_5046.arg0; - string pafile = mr_5046.arg1; - string pamod = mr_5046.arg2; - string pafn = mr_5046.arg3; + multi_return_int_string_string_string mr_5124 = v__gen__c__Gen_panic_debug_info(g, or_block.pos); + int paline = mr_5124.arg0; + string pafile = mr_5124.arg1; + string pamod = mr_5124.arg2; + string pafn = mr_5124.arg3; string err_msg = str_intp(3, _MOV((StrIntpData[]){{_SLIT("IError_name_table["), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._typ]._method_msg("), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._object)"), 0, { .d_c = 0 }}})); v__gen__c__Gen_writeln(g, str_intp(6, _MOV((StrIntpData[]){{_SLIT("\tmain__TestRunner_name_table[test_runner._typ]._method_fn_error(test_runner._object, "), /*100 &int*/0xfe07, {.d_i32 = paline}}, {_SLIT(", tos3(\""), /*115 &string*/0xfe10, {.d_s = pafile}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pamod}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pafn}}, {_SLIT("\"), "), /*115 &string*/0xfe10, {.d_s = err_msg}}, {_SLIT(" );"), 0, { .d_c = 0 }}}))); v__gen__c__Gen_writeln(g, _SLIT("\tlongjmp(g_jump_buffer, 1);")); } void v__gen__c__Gen_gen_failing_return_error_for_test_fn(v__gen__c__Gen* g, v__ast__Return return_stmt, string cvar_name) { - multi_return_int_string_string_string mr_5737 = v__gen__c__Gen_panic_debug_info(g, return_stmt.pos); - int paline = mr_5737.arg0; - string pafile = mr_5737.arg1; - string pamod = mr_5737.arg2; - string pafn = mr_5737.arg3; + multi_return_int_string_string_string mr_5815 = v__gen__c__Gen_panic_debug_info(g, return_stmt.pos); + int paline = mr_5815.arg0; + string pafile = mr_5815.arg1; + string pamod = mr_5815.arg2; + string pafn = mr_5815.arg3; string err_msg = str_intp(3, _MOV((StrIntpData[]){{_SLIT("IError_name_table["), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._typ]._method_msg("), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._object)"), 0, { .d_c = 0 }}})); v__gen__c__Gen_writeln(g, str_intp(6, _MOV((StrIntpData[]){{_SLIT("\tmain__TestRunner_name_table[test_runner._typ]._method_fn_error(test_runner._object, "), /*100 &int*/0xfe07, {.d_i32 = paline}}, {_SLIT(", tos3(\""), /*115 &string*/0xfe10, {.d_s = pafile}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pamod}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pafn}}, {_SLIT("\"), "), /*115 &string*/0xfe10, {.d_s = err_msg}}, {_SLIT(" );"), 0, { .d_c = 0 }}}))); v__gen__c__Gen_writeln(g, _SLIT("\tlongjmp(g_jump_buffer, 1);")); @@ -90720,7 +90773,7 @@ inline v__token__Token v__parser__Parser_peek_token(v__parser__Parser* p, int n) return _t1; } -v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p) { +VV_LOCAL_SYMBOL v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p) { int n = 0; v__token__Token tok = p->tok; for (;;) { @@ -92186,9 +92239,9 @@ VV_LOCAL_SYMBOL v__ast__Stmt v__parser__Parser_parse_multi_expr(v__parser__Parse v__token__Pos pos = v__token__Token_pos(&tok); Array_v__ast__Ident defer_vars = p->defer_vars; p->defer_vars = __new_array_with_default(0, 0, sizeof(v__ast__Ident), 0); - multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_48071 = v__parser__Parser_expr_list(p); - Array_v__ast__Expr left = mr_48071.arg0; - Array_v__ast__Comment left_comments = mr_48071.arg1; + multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_48067 = v__parser__Parser_expr_list(p); + Array_v__ast__Expr left = mr_48067.arg0; + Array_v__ast__Comment left_comments = mr_48067.arg1; if (!(p->inside_defer && p->tok.kind == v__token__Kind__decl_assign)) { _PUSH_MANY(&defer_vars, (p->defer_vars), _t1, Array_v__ast__Ident); } @@ -93466,9 +93519,9 @@ VV_LOCAL_SYMBOL v__ast__Return v__parser__Parser_return_stmt(v__parser__Parser* v__ast__Return _t1 = ((v__ast__Return){.pos = first_pos,.comments = comments,.exprs = __new_array(0, 0, sizeof(v__ast__Expr)),.types = __new_array(0, 0, sizeof(v__ast__Type)),}); return _t1; } - multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_84736 = v__parser__Parser_expr_list(p); - Array_v__ast__Expr exprs = mr_84736.arg0; - Array_v__ast__Comment comments2 = mr_84736.arg1; + multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_84732 = v__parser__Parser_expr_list(p); + Array_v__ast__Expr exprs = mr_84732.arg0; + Array_v__ast__Comment comments2 = mr_84732.arg1; _PUSH_MANY(&comments, (comments2), _t2, Array_v__ast__Comment); v__token__Pos end_pos = v__ast__Expr_pos((*(v__ast__Expr*)array_last(exprs))); v__ast__Return _t3 = ((v__ast__Return){.pos = v__token__Pos_extend(first_pos, end_pos),.comments = comments,.exprs = exprs,.types = __new_array(0, 0, sizeof(v__ast__Type)),}); @@ -93726,8 +93779,8 @@ VV_LOCAL_SYMBOL v__ast__TypeDecl v__parser__Parser_type_decl(v__parser__Parser* return _t2; } Array_v__ast__TypeNode sum_variants = __new_array_with_default(0, 0, sizeof(v__ast__TypeNode), 0); - multi_return_Array_v__ast__Type_Array_string mr_91005 = v__parser__Parser_parse_generic_types(p); - Array_v__ast__Type generic_types = mr_91005.arg0; + multi_return_Array_v__ast__Type_Array_string mr_91001 = v__parser__Parser_parse_generic_types(p); + Array_v__ast__Type generic_types = mr_91001.arg0; v__token__Pos decl_pos_with_generics = v__token__Pos_extend(decl_pos, v__token__Token_pos(&p->prev_tok)); v__parser__Parser_check(p, v__token__Kind__assign); v__token__Pos type_pos = v__token__Token_pos(&p->tok); @@ -99393,6 +99446,8 @@ void _vcleanup(void) { } int main(int ___argc, char** ___argv){ + g_main_argc = ___argc; + g_main_argv = ___argv; _vinit(___argc, (voidptr)___argv); main__main(); _vcleanup(); diff --git a/v_win.c b/v_win.c index 827c729..20e812d 100644 --- a/v_win.c +++ b/v_win.c @@ -1,11 +1,11 @@ -#define V_COMMIT_HASH "41857b0ac" +#define V_COMMIT_HASH "c405c1916" #ifndef V_COMMIT_HASH - #define V_COMMIT_HASH "3baf1741b" + #define V_COMMIT_HASH "41857b0ac" #endif #ifndef V_CURRENT_COMMIT_HASH - #define V_CURRENT_COMMIT_HASH "41857b0" + #define V_CURRENT_COMMIT_HASH "c405c19" #endif // V comptime_definitions: @@ -3142,10 +3142,10 @@ struct MessageError { struct VMemoryBlock { int id; - int cap; + isize cap; byte* start; VMemoryBlock* previous; - int remaining; + isize remaining; u8* current; int mallocs; }; @@ -7137,17 +7137,19 @@ void println(string s); VV_LOCAL_SYMBOL void _writeln_to_fd(int fd, string s); VV_LOCAL_SYMBOL void _write_buf_to_fd(int fd, u8* buf, int buf_len); i64 total_m = ((i64)(0)); // global4 -u8* _v_malloc(int n); -u8* malloc_noscan(int n); -u8* v_realloc(u8* b, int n); +u8* _v_malloc(isize n); +u8* malloc_noscan(isize n); +u8* v_realloc(u8* b, isize n); u8* realloc_data(u8* old_data, int old_size, int new_size); -u8* vcalloc(int n); -u8* vcalloc_noscan(int n); +u8* vcalloc(isize n); +u8* vcalloc_noscan(isize n); void _v_free(voidptr ptr); voidptr memdup(voidptr src, int sz); voidptr memdup_noscan(voidptr src, int sz); VV_LOCAL_SYMBOL int v_fixed_index(int i, int len); void print_backtrace(void); +int g_main_argc = ((int)(0)); // global4 +voidptr g_main_argv = ((voidptr)(0)); // global4 bool isnil(voidptr v); Array_VCastTypeIndexName as_cast_type_indexes; // global4 VV_LOCAL_SYMBOL voidptr __as_cast(voidptr obj, int obj_type, int expected_type); @@ -7155,6 +7157,7 @@ void VAssertMetaInfo_free(VAssertMetaInfo* ami); VV_LOCAL_SYMBOL void __print_assert_failure(VAssertMetaInfo* i); VV_LOCAL_SYMBOL void v_segmentation_fault_handler(int signal); void gc_check_leaks(void); +VV_LOCAL_SYMBOL void print_libbacktrace(int frames_to_skip); #define _const_symopt_undname 2 #define _const_symopt_deferred_loads 4 #define _const_symopt_no_cpp 8 @@ -7179,10 +7182,10 @@ void panic_lasterr(string base); int proc_pidpath(int , voidptr , int ); int vstrlen(byte* s); int vstrlen_char(char* s); -voidptr vmemcpy(voidptr dest, const voidptr const_src, int n); -voidptr vmemmove(voidptr dest, const voidptr const_src, int n); -int vmemcmp(const voidptr const_s1, const voidptr const_s2, int n); -voidptr vmemset(voidptr s, int c, int n); +voidptr vmemcpy(voidptr dest, const voidptr const_src, isize n); +voidptr vmemmove(voidptr dest, const voidptr const_src, isize n); +int vmemcmp(const voidptr const_s1, const voidptr const_s2, isize n); +voidptr vmemset(voidptr s, int c, isize n); VV_LOCAL_SYMBOL void vqsort(voidptr base, usize nmemb, usize size, int (*sort_cb)(const voidptr const_a, const voidptr const_b)); void chan_close(chan ch); ChanState chan_try_pop(chan ch, voidptr obj); @@ -7324,13 +7327,13 @@ VV_LOCAL_SYMBOL void _result_ok(voidptr data, _result* res, int size); string none_str(none _d2); #define _const_prealloc_block_size 16777216 VMemoryBlock* g_memory_block; // global4 -VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, int at_least); -VV_LOCAL_SYMBOL byte* vmemory_block_malloc(int n); +VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, isize at_least); +VV_LOCAL_SYMBOL byte* vmemory_block_malloc(isize n); VV_LOCAL_SYMBOL void prealloc_vinit(void); VV_LOCAL_SYMBOL void prealloc_vcleanup(void); -VV_LOCAL_SYMBOL byte* prealloc_malloc(int n); -VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, int old_size, int new_size); -VV_LOCAL_SYMBOL byte* prealloc_calloc(int n); +VV_LOCAL_SYMBOL byte* prealloc_malloc(isize n); +VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, isize old_size, isize new_size); +VV_LOCAL_SYMBOL byte* prealloc_calloc(isize n); string rune_str(rune c); string Array_rune_string(Array_rune ra); string rune_repeat(rune c, int count); @@ -9461,6 +9464,7 @@ VV_LOCAL_SYMBOL void v__checker__Checker_trace(v__checker__Checker* c, string fb VV_LOCAL_SYMBOL Option_void v__checker__Checker_ensure_type_exists(v__checker__Checker* c, v__ast__Type typ, v__token__Pos pos); void v__checker__Checker_fail_if_unreadable(v__checker__Checker* c, v__ast__Expr expr, v__ast__Type typ, string what); VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_call(v__checker__Checker* c, v__ast__ComptimeCall* node); +VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_selector(v__checker__Checker* c, v__ast__ComptimeSelector* node); VV_LOCAL_SYMBOL void v__checker__Checker_comptime_for(v__checker__Checker* c, v__ast__ComptimeFor node); VV_LOCAL_SYMBOL Option_v__ast__ComptTimeConstValue v__checker__Checker_eval_comptime_const_expr(v__checker__Checker* c, v__ast__Expr expr, int nlevel); VV_LOCAL_SYMBOL multi_return_bool_int_int v__checker__Checker_verify_vweb_params_for_method(v__checker__Checker* c, v__ast__Fn node); @@ -10062,7 +10066,7 @@ void v__parser__Parser_codegen(v__parser__Parser* p, string code); void v__parser__Parser_init_parse_fns(v__parser__Parser* p); void v__parser__Parser_read_first_token(v__parser__Parser* p); v__token__Token v__parser__Parser_peek_token(v__parser__Parser* p, int n); -v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p); +VV_LOCAL_SYMBOL v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p); VV_LOCAL_SYMBOL bool v__parser__Parser_is_array_type(v__parser__Parser* p); void v__parser__Parser_open_scope(v__parser__Parser* p); void v__parser__Parser_close_scope(v__parser__Parser* p); @@ -16815,21 +16819,26 @@ string s; VV_LOCAL_SYMBOL array __new_array(int mylen, int cap, int elm_size) { int cap_ = (cap < mylen ? (mylen) : (cap)); - array arr = ((array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + array arr = ((array){.element_size = elm_size,.data = vcalloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); return arr; } VV_LOCAL_SYMBOL array __new_array_with_default(int mylen, int cap, int elm_size, voidptr val) { int cap_ = (cap < mylen ? (mylen) : (cap)); array arr = ((array){.element_size = elm_size,.data = 0,.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + u64 total_size = ((u64)(cap_)) * ((u64)(elm_size)); if (cap_ > 0 && mylen == 0) { - arr.data = _v_malloc(cap_ * elm_size); + arr.data = _v_malloc(total_size); } else { - arr.data = vcalloc(cap_ * elm_size); + arr.data = vcalloc(total_size); } if (val != 0) { - for (int i = 0; i < arr.len; ++i) { - array_set_unsafe(&arr, i, val); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < arr.len; ++_t1) { + vmemcpy(eptr, val, arr.element_size); + eptr += arr.element_size; + } } } return arr; @@ -16837,28 +16846,36 @@ VV_LOCAL_SYMBOL array __new_array_with_default(int mylen, int cap, int elm_size, VV_LOCAL_SYMBOL array __new_array_with_array_default(int mylen, int cap, int elm_size, array val) { int cap_ = (cap < mylen ? (mylen) : (cap)); - array arr = ((array){.element_size = elm_size,.data = _v_malloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); - for (int i = 0; i < arr.len; ++i) { - array val_clone = array_clone_to_depth(&val, 1); - array_set_unsafe(&arr, i, &val_clone); + array arr = ((array){.element_size = elm_size,.data = _v_malloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < arr.len; ++_t1) { + array val_clone = array_clone_to_depth(&val, 1); + vmemcpy(eptr, &val_clone, arr.element_size); + eptr += arr.element_size; + } } return arr; } VV_LOCAL_SYMBOL array __new_array_with_map_default(int mylen, int cap, int elm_size, map val) { int cap_ = (cap < mylen ? (mylen) : (cap)); - array arr = ((array){.element_size = elm_size,.data = _v_malloc(cap_ * elm_size),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); - for (int i = 0; i < arr.len; ++i) { - map val_clone = map_clone(&val); - array_set_unsafe(&arr, i, &val_clone); + array arr = ((array){.element_size = elm_size,.data = _v_malloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = mylen,.cap = cap_,.flags = 0,}); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < arr.len; ++_t1) { + map val_clone = map_clone(&val); + vmemcpy(eptr, &val_clone, arr.element_size); + eptr += arr.element_size; + } } return arr; } VV_LOCAL_SYMBOL array new_array_from_c_array(int len, int cap, int elm_size, voidptr c_array) { int cap_ = (cap < len ? (len) : (cap)); - array arr = ((array){.element_size = elm_size,.data = vcalloc(cap_ * elm_size),.offset = 0,.len = len,.cap = cap_,.flags = 0,}); - vmemcpy(arr.data, c_array, len * elm_size); + array arr = ((array){.element_size = elm_size,.data = vcalloc(((u64)(cap_)) * ((u64)(elm_size))),.offset = 0,.len = len,.cap = cap_,.flags = 0,}); + vmemcpy(arr.data, c_array, ((u64)(len)) * ((u64)(elm_size))); return arr; } @@ -16876,10 +16893,10 @@ VV_LOCAL_SYMBOL void array_ensure_cap(array* a, int required) { if (!(required > cap)) break; cap *= 2; } - int new_size = cap * a->element_size; + u64 new_size = ((u64)(cap)) * ((u64)(a->element_size)); u8* new_data = _v_malloc(new_size); if (a->data != ((voidptr)(0))) { - vmemcpy(new_data, a->data, a->len * a->element_size); + vmemcpy(new_data, a->data, ((u64)(a->len)) * ((u64)(a->element_size))); if (ArrayFlags_has(&a->flags, ArrayFlags__noslices)) { _v_free(a->data); } @@ -16893,24 +16910,31 @@ array array_repeat(array a, int count) { return array_repeat_to_depth(a, count, 0); } +// Attr: [direct_array_access] // Attr: [unsafe] array array_repeat_to_depth(array a, int count, int depth) { if (count < 0) { _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("array.repeat: count is negative: "), /*100 &int*/0xfe07, {.d_i32 = count}}, {_SLIT0, 0, { .d_c = 0 }}}))); VUNREACHABLE(); } - int size = count * a.len * a.element_size; - if (size == 0) { - size = a.element_size; + u64 size = ((u64)(count)) * ((u64)(a.len)) * ((u64)(a.element_size)); + if (size == 0U) { + size = ((u64)(a.element_size)); } array arr = ((array){.element_size = a.element_size,.data = vcalloc(size),.offset = 0,.len = count * a.len,.cap = count * a.len,.flags = 0,}); if (a.len > 0) { - for (int i = 0; i < count; ++i) { - if (depth > 0) { - array ary_clone = array_clone_to_depth(&a, depth); - vmemcpy(array_get_unsafe(arr, i * a.len), ((u8*)(ary_clone.data)), a.len * a.element_size); - } else { - vmemcpy(array_get_unsafe(arr, i * a.len), ((u8*)(a.data)), a.len * a.element_size); + u64 a_total_size = ((u64)(a.len)) * ((u64)(a.element_size)); + u64 arr_step_size = ((u64)(a.len)) * ((u64)(arr.element_size)); + u8* eptr = ((u8*)(arr.data)); + { // Unsafe block + for (int _t1 = 0; _t1 < count; ++_t1) { + if (depth > 0) { + array ary_clone = array_clone_to_depth(&a, depth); + vmemcpy(eptr, ((u8*)(ary_clone.data)), a_total_size); + } else { + vmemcpy(eptr, ((u8*)(a.data)), a_total_size); + } + eptr += arr_step_size; } } } @@ -16930,7 +16954,7 @@ void array_insert(array* a, int i, voidptr val) { array_ensure_cap(a, a->len + 1); } { // Unsafe block - vmemmove(array_get_unsafe(/*rec*/*a, i + 1), array_get_unsafe(/*rec*/*a, i), (a->len - i) * a->element_size); + vmemmove(array_get_unsafe(/*rec*/*a, i + 1), array_get_unsafe(/*rec*/*a, i), ((u64)((a->len - i))) * ((u64)(a->element_size))); array_set_unsafe(a, i, val); } a->len++; @@ -16950,8 +16974,8 @@ VV_LOCAL_SYMBOL void array_insert_many(array* a, int i, voidptr val, int size) { int elem_size = a->element_size; { // Unsafe block voidptr iptr = array_get_unsafe(/*rec*/*a, i); - vmemmove(array_get_unsafe(/*rec*/*a, i + size), iptr, (a->len - i) * elem_size); - vmemcpy(iptr, val, size * elem_size); + vmemmove(array_get_unsafe(/*rec*/*a, i + size), iptr, ((u64)(a->len - i)) * ((u64)(elem_size))); + vmemcpy(iptr, val, ((u64)(size)) * ((u64)(elem_size))); } a->len += size; } @@ -16980,16 +17004,16 @@ void array_delete_many(array* a, int i, int size) { } #endif if (ArrayFlags_all(&a->flags, (ArrayFlags__noshrink | ArrayFlags__noslices))) { - vmemmove(((u8*)(a->data)) + i * a->element_size, ((u8*)(a->data)) + (i + size) * a->element_size, (a->len - i - size) * a->element_size); + vmemmove(((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), ((u8*)(a->data)) + ((u64)(i + size)) * ((u64)(a->element_size)), ((u64)(a->len - i - size)) * ((u64)(a->element_size))); a->len -= size; return; } voidptr old_data = a->data; int new_size = a->len - size; int new_cap = (new_size == 0 ? (1) : (new_size)); - a->data = vcalloc(new_cap * a->element_size); - vmemcpy(a->data, old_data, i * a->element_size); - vmemcpy(((u8*)(a->data)) + i * a->element_size, ((u8*)(old_data)) + (i + size) * a->element_size, (a->len - i - size) * a->element_size); + a->data = vcalloc(((u64)(new_cap)) * ((u64)(a->element_size))); + vmemcpy(a->data, old_data, ((u64)(i)) * ((u64)(a->element_size))); + vmemcpy(((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), ((u8*)(old_data)) + ((u64)(i + size)) * ((u64)(a->element_size)), ((u64)(a->len - i - size)) * ((u64)(a->element_size))); if (ArrayFlags_has(&a->flags, ArrayFlags__noslices)) { _v_free(old_data); } @@ -17012,9 +17036,9 @@ void array_drop(array* a, int num) { return; } int n = (num <= a->len ? (num) : (a->len)); - int blen = n * a->element_size; + u64 blen = ((u64)(n)) * ((u64)(a->element_size)); a->data = ((u8*)(a->data)) + blen; - a->offset += blen; + a->offset += ((int)(blen)); a->len -= n; a->cap -= n; } @@ -17023,7 +17047,7 @@ void array_drop(array* a, int num) { // Attr: [unsafe] inline VV_LOCAL_SYMBOL voidptr array_get_unsafe(array a, int i) { { // Unsafe block - return ((u8*)(a.data)) + i * a.element_size; + return ((u8*)(a.data)) + ((u64)(i)) * ((u64)(a.element_size)); } return 0; } @@ -17038,7 +17062,7 @@ VV_LOCAL_SYMBOL voidptr array_get(array a, int i) { } #endif { // Unsafe block - return ((u8*)(a.data)) + i * a.element_size; + return ((u8*)(a.data)) + ((u64)(i)) * ((u64)(a.element_size)); } return 0; } @@ -17048,7 +17072,7 @@ VV_LOCAL_SYMBOL voidptr array_get_with_check(array a, int i) { return 0; } { // Unsafe block - return ((u8*)(a.data)) + i * a.element_size; + return ((u8*)(a.data)) + ((u64)(i)) * ((u64)(a.element_size)); } return 0; } @@ -17075,7 +17099,7 @@ voidptr array_last(array a) { } #endif { // Unsafe block - return ((u8*)(a.data)) + (a.len - 1) * a.element_size; + return ((u8*)(a.data)) + ((u64)(a.len - 1)) * ((u64)(a.element_size)); } return 0; } @@ -17090,7 +17114,7 @@ voidptr array_pop(array* a) { } #endif int new_len = a->len - 1; - u8* last_elem = ((u8*)(a->data)) + new_len * a->element_size; + u8* last_elem = ((u8*)(a->data)) + ((u64)(new_len)) * ((u64)(a->element_size)); a->len = new_len; return last_elem; } @@ -17125,10 +17149,10 @@ VV_LOCAL_SYMBOL array array_slice(array a, int start, int _end) { } } #endif - int offset = start * a.element_size; + u64 offset = ((u64)(start)) * ((u64)(a.element_size)); u8* data = ((u8*)(a.data)) + offset; int l = end - start; - array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + offset,.len = l,.cap = l,.flags = 0,}); + array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + ((int)(offset)),.len = l,.cap = l,.flags = 0,}); return res; } @@ -17154,10 +17178,10 @@ VV_LOCAL_SYMBOL array array_slice_ni(array a, int _start, int _end) { array res = ((array){.element_size = a.element_size,.data = a.data,.offset = 0,.len = 0,.cap = 0,.flags = 0,}); return res; } - int offset = start * a.element_size; + u64 offset = ((u64)(start)) * ((u64)(a.element_size)); u8* data = ((u8*)(a.data)) + offset; int l = end - start; - array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + offset,.len = l,.cap = l,.flags = 0,}); + array res = ((array){.element_size = a.element_size,.data = data,.offset = a.offset + ((int)(offset)),.len = l,.cap = l,.flags = 0,}); return res; } @@ -17176,8 +17200,8 @@ array array_clone(array* a) { // Attr: [unsafe] array array_clone_to_depth(array* a, int depth) { - int size = a->cap * a->element_size; - if (size == 0) { + u64 size = ((u64)(a->cap)) * ((u64)(a->element_size)); + if (size == 0U) { size++; } array arr = ((array){.element_size = a->element_size,.data = vcalloc(size),.offset = 0,.len = a->len,.cap = a->cap,.flags = 0,}); @@ -17191,7 +17215,7 @@ array array_clone_to_depth(array* a, int depth) { return arr; } else { if (!isnil(a->data)) { - vmemcpy(((u8*)(arr.data)), a->data, a->cap * a->element_size); + vmemcpy(((u8*)(arr.data)), a->data, ((u64)(a->cap)) * ((u64)(a->element_size))); } return arr; } @@ -17201,7 +17225,7 @@ array array_clone_to_depth(array* a, int depth) { // Attr: [inline] // Attr: [unsafe] inline VV_LOCAL_SYMBOL void array_set_unsafe(array* a, int i, voidptr val) { - vmemcpy(((u8*)(a->data)) + a->element_size * i, val, a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->element_size)) * ((u64)(i)), val, a->element_size); } VV_LOCAL_SYMBOL void array_set(array* a, int i, voidptr val) { @@ -17213,14 +17237,14 @@ VV_LOCAL_SYMBOL void array_set(array* a, int i, voidptr val) { } } #endif - vmemcpy(((u8*)(a->data)) + a->element_size * i, val, a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->element_size)) * ((u64)(i)), val, a->element_size); } VV_LOCAL_SYMBOL void array_push(array* a, voidptr val) { if (a->len >= a->cap) { array_ensure_cap(a, a->len + 1); } - vmemcpy(((u8*)(a->data)) + a->element_size * a->len, val, a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->element_size)) * ((u64)(a->len)), val, a->element_size); a->len++; } @@ -17229,10 +17253,10 @@ void array_push_many(array* a3, voidptr val, int size) { array_ensure_cap(a3, a3->len + size); if (a3->data == val && !isnil(a3->data)) { array copy = array_clone(a3); - vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), copy.data, a3->element_size * size); + vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), copy.data, ((u64)(a3->element_size)) * ((u64)(size))); } else { if (!isnil(a3->data) && !isnil(val)) { - vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), val, a3->element_size * size); + vmemcpy(array_get_unsafe(/*rec*/*a3, a3->len), val, ((u64)(a3->element_size)) * ((u64)(size))); } } a3->len += size; @@ -17245,9 +17269,9 @@ void array_reverse_in_place(array* a) { { // Unsafe block u8* tmp_value = _v_malloc(a->element_size); for (int i = 0; i < a->len / 2; ++i) { - vmemcpy(tmp_value, ((u8*)(a->data)) + i * a->element_size, a->element_size); - vmemcpy(((u8*)(a->data)) + i * a->element_size, ((u8*)(a->data)) + (a->len - 1 - i) * a->element_size, a->element_size); - vmemcpy(((u8*)(a->data)) + (a->len - 1 - i) * a->element_size, tmp_value, a->element_size); + vmemcpy(tmp_value, ((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(i)) * ((u64)(a->element_size)), ((u8*)(a->data)) + ((u64)(a->len - 1 - i)) * ((u64)(a->element_size)), a->element_size); + vmemcpy(((u8*)(a->data)) + ((u64)(a->len - 1 - i)) * ((u64)(a->element_size)), tmp_value, a->element_size); } _v_free(tmp_value); } @@ -17257,7 +17281,7 @@ array array_reverse(array a) { if (a.len < 2) { return a; } - array arr = ((array){.element_size = a.element_size,.data = vcalloc(a.cap * a.element_size),.offset = 0,.len = a.len,.cap = a.cap,.flags = 0,}); + array arr = ((array){.element_size = a.element_size,.data = vcalloc(((u64)(a.cap)) * ((u64)(a.element_size))),.offset = 0,.len = a.len,.cap = a.cap,.flags = 0,}); for (int i = 0; i < a.len; ++i) { array_set_unsafe(&arr, i, array_get_unsafe(a, a.len - 1 - i)); } @@ -17330,7 +17354,7 @@ string Array_string_str(Array_string a) { } string Array_u8_hex(Array_u8 b) { - u8* hex = malloc_noscan(b.len * 2 + 1); + u8* hex = malloc_noscan(((u64)(b.len)) * 2U + 1U); int dst_i = 0; for (int _t1 = 0; _t1 < b.len; ++_t1) { u8 i = ((u8*)b.data)[_t1]; @@ -17444,7 +17468,14 @@ VNORETURN VV_LOCAL_SYMBOL void panic_debug(int line_no, string file, string mod, } #else { - print_backtrace_skipping_top_frames(1); + #if defined(CUSTOM_DEFINE_use_libbacktrace) + { + } + #else + { + print_backtrace_skipping_top_frames(1); + } + #endif exit(1); VUNREACHABLE(); } @@ -17488,7 +17519,14 @@ VNORETURN void _v_panic(string s) { } #else { - print_backtrace_skipping_top_frames(1); + #if defined(CUSTOM_DEFINE_use_libbacktrace) + { + } + #else + { + print_backtrace_skipping_top_frames(1); + } + #endif exit(1); VUNREACHABLE(); } @@ -17660,9 +17698,9 @@ VV_LOCAL_SYMBOL void _write_buf_to_fd(int fd, u8* buf, int buf_len) { } // Attr: [unsafe] -u8* _v_malloc(int n) { +u8* _v_malloc(isize n) { if (n <= 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } u8* res = ((u8*)(0)); @@ -17681,16 +17719,16 @@ u8* _v_malloc(int n) { } #endif if (res == 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } return res; } // Attr: [unsafe] -u8* malloc_noscan(int n) { +u8* malloc_noscan(isize n) { if (n <= 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" <= 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } u8* res = ((u8*)(0)); @@ -17709,14 +17747,14 @@ u8* malloc_noscan(int n) { } #endif if (res == 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("malloc_noscan("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } return res; } // Attr: [unsafe] -u8* v_realloc(u8* b, int n) { +u8* v_realloc(u8* b, isize n) { u8* new_ptr = ((u8*)(0)); #if defined(_VPREALLOC) { @@ -17730,7 +17768,7 @@ u8* v_realloc(u8* b, int n) { } #endif if (new_ptr == 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("realloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("realloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(") failed"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } return new_ptr; @@ -17754,9 +17792,9 @@ u8* realloc_data(u8* old_data, int old_size, int new_size) { return nptr; } -u8* vcalloc(int n) { +u8* vcalloc(isize n) { if (n < 0) { - _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("calloc("), /*100 &int*/0xfe07, {.d_i32 = n}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}}))); + _v_panic( str_intp(2, _MOV((StrIntpData[]){{_SLIT("calloc("), /*100 &isize*/0xfe09, {.d_i64 = n}}, {_SLIT(" < 0)"), 0, { .d_c = 0 }}}))); VUNREACHABLE(); } else if (n == 0) { return ((u8*)(0)); @@ -17775,7 +17813,7 @@ u8* vcalloc(int n) { return 0; } -u8* vcalloc_noscan(int n) { +u8* vcalloc_noscan(isize n) { #if defined(_VPREALLOC) { } @@ -17856,7 +17894,14 @@ void print_backtrace(void) { } #else { - print_backtrace_skipping_top_frames(2); + #if defined(CUSTOM_DEFINE_use_libbacktrace) + { + } + #else + { + print_backtrace_skipping_top_frames(2); + } + #endif } #endif } @@ -17927,6 +17972,9 @@ VV_LOCAL_SYMBOL void v_segmentation_fault_handler(int signal) { void gc_check_leaks(void) { } +VV_LOCAL_SYMBOL void print_libbacktrace(int frames_to_skip) { +} + VV_LOCAL_SYMBOL void restore_codepage(void) { SetConsoleOutputCP(g_original_codepage); } @@ -18176,7 +18224,7 @@ inline int vstrlen_char(char* s) { // Attr: [inline] // Attr: [unsafe] -inline voidptr vmemcpy(voidptr dest, const voidptr const_src, int n) { +inline voidptr vmemcpy(voidptr dest, const voidptr const_src, isize n) { { // Unsafe block return memcpy(dest, const_src, n); } @@ -18185,7 +18233,7 @@ inline voidptr vmemcpy(voidptr dest, const voidptr const_src, int n) { // Attr: [inline] // Attr: [unsafe] -inline voidptr vmemmove(voidptr dest, const voidptr const_src, int n) { +inline voidptr vmemmove(voidptr dest, const voidptr const_src, isize n) { { // Unsafe block return memmove(dest, const_src, n); } @@ -18194,7 +18242,7 @@ inline voidptr vmemmove(voidptr dest, const voidptr const_src, int n) { // Attr: [inline] // Attr: [unsafe] -inline int vmemcmp(const voidptr const_s1, const voidptr const_s2, int n) { +inline int vmemcmp(const voidptr const_s1, const voidptr const_s2, isize n) { { // Unsafe block return memcmp(const_s1, const_s2, n); } @@ -18203,7 +18251,7 @@ inline int vmemcmp(const voidptr const_s1, const voidptr const_s2, int n) { // Attr: [inline] // Attr: [unsafe] -inline voidptr vmemset(voidptr s, int c, int n) { +inline voidptr vmemset(voidptr s, int c, isize n) { { // Unsafe block return memset(s, c, n); } @@ -19577,13 +19625,13 @@ string none_str(none _d2) { } // Attr: [unsafe] -VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, int at_least) { +VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, isize at_least) { VMemoryBlock* v = ((VMemoryBlock*)(calloc(1, sizeof(VMemoryBlock)))); if (prev != 0) { v->id = prev->id + 1; } v->previous = prev; - int block_size = (at_least < _const_prealloc_block_size ? (_const_prealloc_block_size) : (at_least)); + isize block_size = (at_least < _const_prealloc_block_size ? (_const_prealloc_block_size) : (at_least)); v->start = malloc(block_size); v->cap = block_size; v->remaining = block_size; @@ -19592,7 +19640,7 @@ VV_LOCAL_SYMBOL VMemoryBlock* vmemory_block_new(VMemoryBlock* prev, int at_least } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* vmemory_block_malloc(int n) { +VV_LOCAL_SYMBOL byte* vmemory_block_malloc(isize n) { { // Unsafe block if (g_memory_block->remaining < n) { g_memory_block = vmemory_block_new(g_memory_block, n); @@ -19631,20 +19679,20 @@ VV_LOCAL_SYMBOL void prealloc_vcleanup(void) { } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* prealloc_malloc(int n) { +VV_LOCAL_SYMBOL byte* prealloc_malloc(isize n) { return vmemory_block_malloc(n); } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, int old_size, int new_size) { +VV_LOCAL_SYMBOL byte* prealloc_realloc(byte* old_data, isize old_size, isize new_size) { byte* new_ptr = vmemory_block_malloc(new_size); - int min_size = (old_size < new_size ? (old_size) : (new_size)); + isize min_size = (old_size < new_size ? (old_size) : (new_size)); memcpy(new_ptr, old_data, min_size); return new_ptr; } // Attr: [unsafe] -VV_LOCAL_SYMBOL byte* prealloc_calloc(int n) { +VV_LOCAL_SYMBOL byte* prealloc_calloc(isize n) { byte* new_ptr = vmemory_block_malloc(n); memset(new_ptr, 0, n); return new_ptr; @@ -36339,7 +36387,7 @@ void v__pref__Preferences_fill_with_defaults(v__pref__Preferences* p) { if ((p->third_party_option).len == 0) { p->third_party_option = p->cflags; } - string vhash = _SLIT("3baf1741b"); + string vhash = _SLIT("41857b0ac"); p->cache_manager = v__vcache__new_cache_manager(new_array_from_c_array(7, 7, sizeof(string), _MOV((string[7]){string_clone(vhash), str_intp(6, _MOV((StrIntpData[]){{_SLIT0, /*115 &v.pref.Backend*/0xfe10, {.d_s = v__pref__Backend_str(p->backend)}}, {_SLIT(" | "), /*115 &v.pref.OS*/0xfe10, {.d_s = v__pref__OS_str(p->os)}}, {_SLIT(" | "), /*115 &string*/0xfe10, {.d_s = p->ccompiler}}, {_SLIT(" | "), /*115 &bool*/0xfe10, {.d_s = p->is_prod ? _SLIT("true") : _SLIT("false")}}, {_SLIT(" | "), /*115 &bool*/0xfe10, {.d_s = p->sanitize ? _SLIT("true") : _SLIT("false")}}, {_SLIT0, 0, { .d_c = 0 }}})), string_clone(string_trim_space(p->cflags)), string_clone(string_trim_space(p->third_party_option)), string_clone(Array_string_str(p->compile_defines_all)), string_clone(Array_string_str(p->compile_defines)), string_clone(Array_string_str(p->lookup_path))}))); if (string__eq(os__user_os(), _SLIT("windows"))) { p->use_cache = false; @@ -52321,32 +52369,16 @@ bool v__checker__Checker_expr_defer_0 = false; return _t19; } else if (node._typ == 298 /* v.ast.ComptimeSelector */) { - (*node._v__ast__ComptimeSelector).left_type = v__checker__Checker_expr(c, (*node._v__ast__ComptimeSelector).left); - v__ast__Type expr_type = v__checker__Checker_unwrap_generic(c, v__checker__Checker_expr(c, (*node._v__ast__ComptimeSelector).field_expr)); - v__ast__TypeSymbol* expr_sym = v__ast__Table_sym(c->table, expr_type); - if (!v__ast__Type_alias_eq(expr_type, _const_v__ast__string_type)) { - v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("expected `string` instead of `"), /*115 &string*/0xfe10, {.d_s = expr_sym->name}}, {_SLIT("` (e.g. `field.name`)"), 0, { .d_c = 0 }}})), v__ast__Expr_pos((*node._v__ast__ComptimeSelector).field_expr)); + v__ast__Type _t20 = v__checker__Checker_comptime_selector(c, (voidptr)&/*qq*/(*node._v__ast__ComptimeSelector)); + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; } - if (((*node._v__ast__ComptimeSelector).field_expr)._typ == 326 /* v.ast.SelectorExpr */) { - v__token__Pos left_pos = v__ast__Expr_pos((*(*node._v__ast__ComptimeSelector).field_expr._v__ast__SelectorExpr).expr); - if (c->comptime_fields_type.len == 0) { - v__checker__Checker_error(c, _SLIT("compile time field access can only be used when iterating over `T.fields`"), left_pos); - } - string expr_name = v__ast__Expr_str((*(*node._v__ast__ComptimeSelector).field_expr._v__ast__SelectorExpr).expr); - if (_IN_MAP(ADDR(string, expr_name), ADDR(map, c->comptime_fields_type))) { - v__ast__Type _t20 = (*(v__ast__Type*)map_get(ADDR(map, c->comptime_fields_type), &(string[]){expr_name}, &(v__ast__Type[]){ 0 })); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t20; - } - v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("unknown `$for` variable `"), /*115 &string*/0xfe10, {.d_s = expr_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), left_pos); - } else { - v__checker__Checker_error(c, _SLIT("expected selector expression e.g. `$(field.name)`"), v__ast__Expr_pos((*node._v__ast__ComptimeSelector).field_expr)); - } - v__ast__Type _t21 = _const_v__ast__void_type; + // Defer end + return _t20; + } + else if (node._typ == 300 /* v.ast.ConcatExpr */) { + v__ast__Type _t21 = v__checker__Checker_concat_expr(c, (voidptr)&/*qq*/(*node._v__ast__ConcatExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52354,20 +52386,20 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t21; } - else if (node._typ == 300 /* v.ast.ConcatExpr */) { - v__ast__Type _t22 = v__checker__Checker_concat_expr(c, (voidptr)&/*qq*/(*node._v__ast__ConcatExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t22; - } else if (node._typ == 301 /* v.ast.DumpExpr */) { (*node._v__ast__DumpExpr).expr_type = v__checker__Checker_expr(c, (*node._v__ast__DumpExpr).expr); int etidx = v__ast__Type_idx((*node._v__ast__DumpExpr).expr_type); if (etidx == _const_v__ast__void_type_idx) { v__checker__Checker_error(c, _SLIT("dump expression can not be void"), v__ast__Expr_pos((*node._v__ast__DumpExpr).expr)); + v__ast__Type _t22 = _const_v__ast__void_type; + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t22; + } else if (etidx == _const_v__ast__char_type_idx && v__ast__Type_nr_muls((*node._v__ast__DumpExpr).expr_type) == 0) { + v__checker__Checker_error(c, _SLIT("`char` values cannot be dumped directly, use dump(u8(x)) or dump(int(x)) instead"), v__ast__Expr_pos((*node._v__ast__DumpExpr).expr)); v__ast__Type _t23 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { @@ -52375,20 +52407,20 @@ bool v__checker__Checker_expr_defer_0 = false; } // Defer end return _t23; - } else if (etidx == _const_v__ast__char_type_idx && v__ast__Type_nr_muls((*node._v__ast__DumpExpr).expr_type) == 0) { - v__checker__Checker_error(c, _SLIT("`char` values cannot be dumped directly, use dump(u8(x)) or dump(int(x)) instead"), v__ast__Expr_pos((*node._v__ast__DumpExpr).expr)); - v__ast__Type _t24 = _const_v__ast__void_type; - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t24; } v__ast__TypeSymbol* tsym = v__ast__Table_sym(c->table, (*node._v__ast__DumpExpr).expr_type); map_set(&c->table->dumps, &(int[]){((int)((*node._v__ast__DumpExpr).expr_type))}, &(string[]) { tsym->cname }); (*node._v__ast__DumpExpr).cname = tsym->cname; - v__ast__Type _t25 = (*node._v__ast__DumpExpr).expr_type; + v__ast__Type _t24 = (*node._v__ast__DumpExpr).expr_type; + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t24; + } + else if (node._typ == 303 /* v.ast.EnumVal */) { + v__ast__Type _t25 = v__checker__Checker_enum_val(c, (voidptr)&/*qq*/(*node._v__ast__EnumVal)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52396,8 +52428,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t25; } - else if (node._typ == 303 /* v.ast.EnumVal */) { - v__ast__Type _t26 = v__checker__Checker_enum_val(c, (voidptr)&/*qq*/(*node._v__ast__EnumVal)); + else if (node._typ == 304 /* v.ast.FloatLiteral */) { + v__ast__Type _t26 = _const_v__ast__float_literal_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52405,8 +52437,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t26; } - else if (node._typ == 304 /* v.ast.FloatLiteral */) { - v__ast__Type _t27 = _const_v__ast__float_literal_type; + else if (node._typ == 305 /* v.ast.GoExpr */) { + v__ast__Type _t27 = v__checker__Checker_go_expr(c, (voidptr)&/*qq*/(*node._v__ast__GoExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52414,8 +52446,9 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t27; } - else if (node._typ == 305 /* v.ast.GoExpr */) { - v__ast__Type _t28 = v__checker__Checker_go_expr(c, (voidptr)&/*qq*/(*node._v__ast__GoExpr)); + else if (node._typ == 306 /* v.ast.Ident */) { + v__ast__Type res = v__checker__Checker_ident(c, (voidptr)&/*qq*/(*node._v__ast__Ident)); + v__ast__Type _t28 = res; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52423,9 +52456,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t28; } - else if (node._typ == 306 /* v.ast.Ident */) { - v__ast__Type res = v__checker__Checker_ident(c, (voidptr)&/*qq*/(*node._v__ast__Ident)); - v__ast__Type _t29 = res; + else if (node._typ == 307 /* v.ast.IfExpr */) { + v__ast__Type _t29 = v__checker__Checker_if_expr(c, (voidptr)&/*qq*/(*node._v__ast__IfExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52433,15 +52465,6 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t29; } - else if (node._typ == 307 /* v.ast.IfExpr */) { - v__ast__Type _t30 = v__checker__Checker_if_expr(c, (voidptr)&/*qq*/(*node._v__ast__IfExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t30; - } else if (node._typ == 308 /* v.ast.IfGuardExpr */) { bool old_inside_if_guard = c->inside_if_guard; c->inside_if_guard = true; @@ -52469,7 +52492,16 @@ bool v__checker__Checker_expr_defer_0 = false; v__checker__Checker_error(c, _SLIT("expression should return an option"), v__ast__Expr_pos((*node._v__ast__IfGuardExpr).expr)); } } - v__ast__Type _t31 = _const_v__ast__bool_type; + v__ast__Type _t30 = _const_v__ast__bool_type; + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t30; + } + else if (node._typ == 309 /* v.ast.IndexExpr */) { + v__ast__Type _t31 = v__checker__Checker_index_expr(c, (voidptr)&/*qq*/(*node._v__ast__IndexExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52477,8 +52509,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t31; } - else if (node._typ == 309 /* v.ast.IndexExpr */) { - v__ast__Type _t32 = v__checker__Checker_index_expr(c, (voidptr)&/*qq*/(*node._v__ast__IndexExpr)); + else if (node._typ == 310 /* v.ast.InfixExpr */) { + v__ast__Type _t32 = v__checker__Checker_infix_expr(c, (voidptr)&/*qq*/(*node._v__ast__InfixExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52486,8 +52518,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t32; } - else if (node._typ == 310 /* v.ast.InfixExpr */) { - v__ast__Type _t33 = v__checker__Checker_infix_expr(c, (voidptr)&/*qq*/(*node._v__ast__InfixExpr)); + else if (node._typ == 311 /* v.ast.IntegerLiteral */) { + v__ast__Type _t33 = v__checker__Checker_int_lit(c, (voidptr)&/*qq*/(*node._v__ast__IntegerLiteral)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52495,8 +52527,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t33; } - else if (node._typ == 311 /* v.ast.IntegerLiteral */) { - v__ast__Type _t34 = v__checker__Checker_int_lit(c, (voidptr)&/*qq*/(*node._v__ast__IntegerLiteral)); + else if (node._typ == 314 /* v.ast.LockExpr */) { + v__ast__Type _t34 = v__checker__Checker_lock_expr(c, (voidptr)&/*qq*/(*node._v__ast__LockExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52504,8 +52536,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t34; } - else if (node._typ == 314 /* v.ast.LockExpr */) { - v__ast__Type _t35 = v__checker__Checker_lock_expr(c, (voidptr)&/*qq*/(*node._v__ast__LockExpr)); + else if (node._typ == 315 /* v.ast.MapInit */) { + v__ast__Type _t35 = v__checker__Checker_map_init(c, (voidptr)&/*qq*/(*node._v__ast__MapInit)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52513,8 +52545,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t35; } - else if (node._typ == 315 /* v.ast.MapInit */) { - v__ast__Type _t36 = v__checker__Checker_map_init(c, (voidptr)&/*qq*/(*node._v__ast__MapInit)); + else if (node._typ == 316 /* v.ast.MatchExpr */) { + v__ast__Type _t36 = v__checker__Checker_match_expr(c, (voidptr)&/*qq*/(*node._v__ast__MatchExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52522,8 +52554,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t36; } - else if (node._typ == 316 /* v.ast.MatchExpr */) { - v__ast__Type _t37 = v__checker__Checker_match_expr(c, (voidptr)&/*qq*/(*node._v__ast__MatchExpr)); + else if (node._typ == 322 /* v.ast.PostfixExpr */) { + v__ast__Type _t37 = v__checker__Checker_postfix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PostfixExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52531,8 +52563,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t37; } - else if (node._typ == 322 /* v.ast.PostfixExpr */) { - v__ast__Type _t38 = v__checker__Checker_postfix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PostfixExpr)); + else if (node._typ == 323 /* v.ast.PrefixExpr */) { + v__ast__Type _t38 = v__checker__Checker_prefix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PrefixExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52540,8 +52572,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t38; } - else if (node._typ == 323 /* v.ast.PrefixExpr */) { - v__ast__Type _t39 = v__checker__Checker_prefix_expr(c, (voidptr)&/*qq*/(*node._v__ast__PrefixExpr)); + else if (node._typ == 318 /* v.ast.None */) { + v__ast__Type _t39 = _const_v__ast__none_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52549,8 +52581,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t39; } - else if (node._typ == 318 /* v.ast.None */) { - v__ast__Type _t40 = _const_v__ast__none_type; + else if (node._typ == 320 /* v.ast.OrExpr */) { + v__ast__Type _t40 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52558,8 +52590,11 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t40; } - else if (node._typ == 320 /* v.ast.OrExpr */) { - v__ast__Type _t41 = _const_v__ast__void_type; + else if (node._typ == 321 /* v.ast.ParExpr */) { + if (((*node._v__ast__ParExpr).expr)._typ == 321 /* v.ast.ParExpr */) { + v__checker__Checker_warn(c, _SLIT("redundant parentheses are used"), (*node._v__ast__ParExpr).pos); + } + v__ast__Type _t41 = v__checker__Checker_expr(c, (*node._v__ast__ParExpr).expr); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52567,11 +52602,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t41; } - else if (node._typ == 321 /* v.ast.ParExpr */) { - if (((*node._v__ast__ParExpr).expr)._typ == 321 /* v.ast.ParExpr */) { - v__checker__Checker_warn(c, _SLIT("redundant parentheses are used"), (*node._v__ast__ParExpr).pos); - } - v__ast__Type _t42 = v__checker__Checker_expr(c, (*node._v__ast__ParExpr).expr); + else if (node._typ == 324 /* v.ast.RangeExpr */) { + v__ast__Type _t42 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52579,8 +52611,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t42; } - else if (node._typ == 324 /* v.ast.RangeExpr */) { - v__ast__Type _t43 = _const_v__ast__void_type; + else if (node._typ == 325 /* v.ast.SelectExpr */) { + v__ast__Type _t43 = v__checker__Checker_select_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52588,8 +52620,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t43; } - else if (node._typ == 325 /* v.ast.SelectExpr */) { - v__ast__Type _t44 = v__checker__Checker_select_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectExpr)); + else if (node._typ == 326 /* v.ast.SelectorExpr */) { + v__ast__Type _t44 = v__checker__Checker_selector_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectorExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52597,8 +52629,11 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t44; } - else if (node._typ == 326 /* v.ast.SelectorExpr */) { - v__ast__Type _t45 = v__checker__Checker_selector_expr(c, (voidptr)&/*qq*/(*node._v__ast__SelectorExpr)); + else if (node._typ == 327 /* v.ast.SizeOf */) { + if (!(*node._v__ast__SizeOf).is_type) { + (*node._v__ast__SizeOf).typ = v__checker__Checker_expr(c, (*node._v__ast__SizeOf).expr); + } + v__ast__Type _t45 = _const_v__ast__u32_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52606,11 +52641,11 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t45; } - else if (node._typ == 327 /* v.ast.SizeOf */) { - if (!(*node._v__ast__SizeOf).is_type) { - (*node._v__ast__SizeOf).typ = v__checker__Checker_expr(c, (*node._v__ast__SizeOf).expr); + else if (node._typ == 312 /* v.ast.IsRefType */) { + if (!(*node._v__ast__IsRefType).is_type) { + (*node._v__ast__IsRefType).typ = v__checker__Checker_expr(c, (*node._v__ast__IsRefType).expr); } - v__ast__Type _t46 = _const_v__ast__u32_type; + v__ast__Type _t46 = _const_v__ast__bool_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52618,11 +52653,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t46; } - else if (node._typ == 312 /* v.ast.IsRefType */) { - if (!(*node._v__ast__IsRefType).is_type) { - (*node._v__ast__IsRefType).typ = v__checker__Checker_expr(c, (*node._v__ast__IsRefType).expr); - } - v__ast__Type _t47 = _const_v__ast__bool_type; + else if (node._typ == 319 /* v.ast.OffsetOf */) { + v__ast__Type _t47 = v__checker__Checker_offset_of(c, (*node._v__ast__OffsetOf)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52630,8 +52662,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t47; } - else if (node._typ == 319 /* v.ast.OffsetOf */) { - v__ast__Type _t48 = v__checker__Checker_offset_of(c, (*node._v__ast__OffsetOf)); + else if (node._typ == 328 /* v.ast.SqlExpr */) { + v__ast__Type _t48 = v__checker__Checker_sql_expr(c, (voidptr)&/*qq*/(*node._v__ast__SqlExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52639,26 +52671,26 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t48; } - else if (node._typ == 328 /* v.ast.SqlExpr */) { - v__ast__Type _t49 = v__checker__Checker_sql_expr(c, (voidptr)&/*qq*/(*node._v__ast__SqlExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t49; - } else if (node._typ == 330 /* v.ast.StringLiteral */) { if ((*node._v__ast__StringLiteral).language == v__ast__Language__c) { - v__ast__Type _t50 = v__ast__Type_set_nr_muls(_const_v__ast__byte_type, 1); + v__ast__Type _t49 = v__ast__Type_set_nr_muls(_const_v__ast__byte_type, 1); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t50; + return _t49; } - v__ast__Type _t51 = v__checker__Checker_string_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringLiteral)); + v__ast__Type _t50 = v__checker__Checker_string_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringLiteral)); + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t50; + } + else if (node._typ == 329 /* v.ast.StringInterLiteral */) { + v__ast__Type _t51 = v__checker__Checker_string_inter_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringInterLiteral)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52666,26 +52698,26 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t51; } - else if (node._typ == 329 /* v.ast.StringInterLiteral */) { - v__ast__Type _t52 = v__checker__Checker_string_inter_lit(c, (voidptr)&/*qq*/(*node._v__ast__StringInterLiteral)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t52; - } else if (node._typ == 331 /* v.ast.StructInit */) { if ((*node._v__ast__StructInit).unresolved) { - v__ast__Type _t53 = v__checker__Checker_expr(c, v__ast__resolve_init((*node._v__ast__StructInit), v__checker__Checker_unwrap_generic(c, (*node._v__ast__StructInit).typ), c->table)); + v__ast__Type _t52 = v__checker__Checker_expr(c, v__ast__resolve_init((*node._v__ast__StructInit), v__checker__Checker_unwrap_generic(c, (*node._v__ast__StructInit).typ), c->table)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t53; + return _t52; } - v__ast__Type _t54 = v__checker__Checker_struct_init(c, (voidptr)&/*qq*/(*node._v__ast__StructInit)); + v__ast__Type _t53 = v__checker__Checker_struct_init(c, (voidptr)&/*qq*/(*node._v__ast__StructInit)); + // Defer begin + if (v__checker__Checker_expr_defer_0) { + c->expr_level--; + } + // Defer end + return _t53; + } + else if (node._typ == 332 /* v.ast.TypeNode */) { + v__ast__Type _t54 = (*node._v__ast__TypeNode).typ; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52693,8 +52725,9 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t54; } - else if (node._typ == 332 /* v.ast.TypeNode */) { - v__ast__Type _t55 = (*node._v__ast__TypeNode).typ; + else if (node._typ == 333 /* v.ast.TypeOf */) { + (*node._v__ast__TypeOf).expr_type = v__checker__Checker_expr(c, (*node._v__ast__TypeOf).expr); + v__ast__Type _t55 = _const_v__ast__string_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52702,9 +52735,8 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t55; } - else if (node._typ == 333 /* v.ast.TypeOf */) { - (*node._v__ast__TypeOf).expr_type = v__checker__Checker_expr(c, (*node._v__ast__TypeOf).expr); - v__ast__Type _t56 = _const_v__ast__string_type; + else if (node._typ == 334 /* v.ast.UnsafeExpr */) { + v__ast__Type _t56 = v__checker__Checker_unsafe_expr(c, (voidptr)&/*qq*/(*node._v__ast__UnsafeExpr)); // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; @@ -52712,15 +52744,6 @@ bool v__checker__Checker_expr_defer_0 = false; // Defer end return _t56; } - else if (node._typ == 334 /* v.ast.UnsafeExpr */) { - v__ast__Type _t57 = v__checker__Checker_unsafe_expr(c, (voidptr)&/*qq*/(*node._v__ast__UnsafeExpr)); - // Defer begin - if (v__checker__Checker_expr_defer_0) { - c->expr_level--; - } - // Defer end - return _t57; - } else if (node._typ == 313 /* v.ast.Likely */) { v__ast__Type ltype = v__checker__Checker_expr(c, (*node._v__ast__Likely).expr); if (!v__checker__Checker_check_types(c, ltype, _const_v__ast__bool_type)) { @@ -52728,22 +52751,22 @@ bool v__checker__Checker_expr_defer_0 = false; string lname = ((*node._v__ast__Likely).is_likely ? (_SLIT("_likely_")) : (_SLIT("_unlikely_"))); v__checker__Checker_error(c, str_intp(3, _MOV((StrIntpData[]){{_SLIT("`"), /*115 &string*/0xfe10, {.d_s = lname}}, {_SLIT("()` expects a boolean expression, instead it got `"), /*115 &string*/0xfe10, {.d_s = ltype_sym->name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), (*node._v__ast__Likely).pos); } - v__ast__Type _t58 = _const_v__ast__bool_type; + v__ast__Type _t57 = _const_v__ast__bool_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t58; + return _t57; } ; - v__ast__Type _t59 = _const_v__ast__void_type; + v__ast__Type _t58 = _const_v__ast__void_type; // Defer begin if (v__checker__Checker_expr_defer_0) { c->expr_level--; } // Defer end - return _t59; + return _t58; } v__ast__Type v__checker__Checker_cast_expr(v__checker__Checker* c, v__ast__CastExpr* node) { @@ -53538,8 +53561,8 @@ v__ast__Type v__checker__Checker_postfix_expr(v__checker__Checker* c, v__ast__Po string typ_str = v__ast__Table_type_to_str(c->table, typ); v__checker__Checker_error(c, str_intp(3, _MOV((StrIntpData[]){{_SLIT("invalid operation: "), /*115 &string*/0xfe10, {.d_s = v__token__Kind_str(node->op)}}, {_SLIT(" (non-numeric type `"), /*115 &string*/0xfe10, {.d_s = typ_str}}, {_SLIT("`)"), 0, { .d_c = 0 }}})), node->pos); } else { - multi_return_string_v__token__Pos mr_117243 = v__checker__Checker_fail_if_immutable(c, node->expr); - node->auto_locked = mr_117243.arg0; + multi_return_string_v__token__Pos mr_116421 = v__checker__Checker_fail_if_immutable(c, node->expr); + node->auto_locked = mr_116421.arg0; } v__ast__Type _t1 = typ; return _t1; @@ -54384,6 +54407,31 @@ VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_call(v__checker__Check return _t18; } +VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_comptime_selector(v__checker__Checker* c, v__ast__ComptimeSelector* node) { + node->left_type = v__checker__Checker_expr(c, node->left); + v__ast__Type expr_type = v__checker__Checker_unwrap_generic(c, v__checker__Checker_expr(c, node->field_expr)); + v__ast__TypeSymbol* expr_sym = v__ast__Table_sym(c->table, expr_type); + if (!v__ast__Type_alias_eq(expr_type, _const_v__ast__string_type)) { + v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("expected `string` instead of `"), /*115 &string*/0xfe10, {.d_s = expr_sym->name}}, {_SLIT("` (e.g. `field.name`)"), 0, { .d_c = 0 }}})), v__ast__Expr_pos(node->field_expr)); + } + if ((node->field_expr)._typ == 326 /* v.ast.SelectorExpr */) { + v__token__Pos left_pos = v__ast__Expr_pos((*node->field_expr._v__ast__SelectorExpr).expr); + if (c->comptime_fields_type.len == 0) { + v__checker__Checker_error(c, _SLIT("compile time field access can only be used when iterating over `T.fields`"), left_pos); + } + string expr_name = v__ast__Expr_str((*node->field_expr._v__ast__SelectorExpr).expr); + if (_IN_MAP(ADDR(string, expr_name), ADDR(map, c->comptime_fields_type))) { + v__ast__Type _t1 = (*(v__ast__Type*)map_get(ADDR(map, c->comptime_fields_type), &(string[]){expr_name}, &(v__ast__Type[]){ 0 })); + return _t1; + } + v__checker__Checker_error(c, str_intp(2, _MOV((StrIntpData[]){{_SLIT("unknown `$for` variable `"), /*115 &string*/0xfe10, {.d_s = expr_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), left_pos); + } else { + v__checker__Checker_error(c, _SLIT("expected selector expression e.g. `$(field.name)`"), v__ast__Expr_pos(node->field_expr)); + } + v__ast__Type _t2 = _const_v__ast__void_type; + return _t2; +} + VV_LOCAL_SYMBOL void v__checker__Checker_comptime_for(v__checker__Checker* c, v__ast__ComptimeFor node) { v__ast__Type typ = v__checker__Checker_unwrap_generic(c, node.typ); v__ast__TypeSymbol* sym = v__ast__Table_sym(c->table, typ); @@ -54416,8 +54464,8 @@ VV_LOCAL_SYMBOL Option_v__ast__ComptTimeConstValue v__checker__Checker_eval_comp return _t2; } else if (expr._typ == 327 /* v.ast.SizeOf */) { - multi_return_int_int mr_3715 = v__ast__Table_type_size(c->table, (*expr._v__ast__SizeOf).typ); - int s = mr_3715.arg0; + multi_return_int_int mr_4612 = v__ast__Table_type_size(c->table, (*expr._v__ast__SizeOf).typ); + int s = mr_4612.arg0; Option_v__ast__ComptTimeConstValue _t3; opt_ok(&(v__ast__ComptTimeConstValue[]) { int_to_sumtype_v__ast__ComptTimeConstValue(&s) }, (Option*)(&_t3), sizeof(v__ast__ComptTimeConstValue)); return _t3; @@ -55604,10 +55652,10 @@ VV_LOCAL_SYMBOL void v__checker__Checker_verify_all_vweb_routes(v__checker__Chec for (int _t2 = 0; _t2 < sym_app->methods.len; ++_t2) { v__ast__Fn m = ((v__ast__Fn*)sym_app->methods.data)[_t2]; if (m.return_type == typ_vweb_result) { - multi_return_bool_int_int mr_9832 = v__checker__Checker_verify_vweb_params_for_method(c, m); - bool is_ok = mr_9832.arg0; - int nroute_attributes = mr_9832.arg1; - int nargs = mr_9832.arg2; + multi_return_bool_int_int mr_10729 = v__checker__Checker_verify_vweb_params_for_method(c, m); + bool is_ok = mr_10729.arg0; + int nroute_attributes = mr_10729.arg1; + int nargs = mr_10729.arg2; if (!is_ok) { v__ast__FnDecl* f = ((v__ast__FnDecl*)(m.source_fn)); if (isnil(f)) { @@ -73426,6 +73474,8 @@ VV_LOCAL_SYMBOL void v__gen__c__Gen_gen_c_main_function_header(v__gen__c__Gen* g } else { v__gen__c__Gen_writeln(g, _SLIT("int main(int ___argc, char** ___argv){")); } + v__gen__c__Gen_writeln(g, _SLIT("\tg_main_argc = ___argc;")); + v__gen__c__Gen_writeln(g, _SLIT("\tg_main_argv = ___argv;")); } VV_LOCAL_SYMBOL void v__gen__c__Gen_gen_c_main_header(v__gen__c__Gen* g) { @@ -73485,22 +73535,22 @@ void v__gen__c__Gen_write_tests_definitions(v__gen__c__Gen* g) { } void v__gen__c__Gen_gen_failing_error_propagation_for_test_fn(v__gen__c__Gen* g, v__ast__OrExpr or_block, string cvar_name) { - multi_return_int_string_string_string mr_5046 = v__gen__c__Gen_panic_debug_info(g, or_block.pos); - int paline = mr_5046.arg0; - string pafile = mr_5046.arg1; - string pamod = mr_5046.arg2; - string pafn = mr_5046.arg3; + multi_return_int_string_string_string mr_5124 = v__gen__c__Gen_panic_debug_info(g, or_block.pos); + int paline = mr_5124.arg0; + string pafile = mr_5124.arg1; + string pamod = mr_5124.arg2; + string pafn = mr_5124.arg3; string err_msg = str_intp(3, _MOV((StrIntpData[]){{_SLIT("IError_name_table["), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._typ]._method_msg("), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._object)"), 0, { .d_c = 0 }}})); v__gen__c__Gen_writeln(g, str_intp(6, _MOV((StrIntpData[]){{_SLIT("\tmain__TestRunner_name_table[test_runner._typ]._method_fn_error(test_runner._object, "), /*100 &int*/0xfe07, {.d_i32 = paline}}, {_SLIT(", tos3(\""), /*115 &string*/0xfe10, {.d_s = pafile}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pamod}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pafn}}, {_SLIT("\"), "), /*115 &string*/0xfe10, {.d_s = err_msg}}, {_SLIT(" );"), 0, { .d_c = 0 }}}))); v__gen__c__Gen_writeln(g, _SLIT("\tlongjmp(g_jump_buffer, 1);")); } void v__gen__c__Gen_gen_failing_return_error_for_test_fn(v__gen__c__Gen* g, v__ast__Return return_stmt, string cvar_name) { - multi_return_int_string_string_string mr_5737 = v__gen__c__Gen_panic_debug_info(g, return_stmt.pos); - int paline = mr_5737.arg0; - string pafile = mr_5737.arg1; - string pamod = mr_5737.arg2; - string pafn = mr_5737.arg3; + multi_return_int_string_string_string mr_5815 = v__gen__c__Gen_panic_debug_info(g, return_stmt.pos); + int paline = mr_5815.arg0; + string pafile = mr_5815.arg1; + string pamod = mr_5815.arg2; + string pafn = mr_5815.arg3; string err_msg = str_intp(3, _MOV((StrIntpData[]){{_SLIT("IError_name_table["), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._typ]._method_msg("), /*115 &string*/0xfe10, {.d_s = cvar_name}}, {_SLIT(".err._object)"), 0, { .d_c = 0 }}})); v__gen__c__Gen_writeln(g, str_intp(6, _MOV((StrIntpData[]){{_SLIT("\tmain__TestRunner_name_table[test_runner._typ]._method_fn_error(test_runner._object, "), /*100 &int*/0xfe07, {.d_i32 = paline}}, {_SLIT(", tos3(\""), /*115 &string*/0xfe10, {.d_s = pafile}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pamod}}, {_SLIT("\"), tos3(\""), /*115 &string*/0xfe10, {.d_s = pafn}}, {_SLIT("\"), "), /*115 &string*/0xfe10, {.d_s = err_msg}}, {_SLIT(" );"), 0, { .d_c = 0 }}}))); v__gen__c__Gen_writeln(g, _SLIT("\tlongjmp(g_jump_buffer, 1);")); @@ -88351,7 +88401,7 @@ inline v__token__Token v__parser__Parser_peek_token(v__parser__Parser* p, int n) return _t1; } -v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p) { +VV_LOCAL_SYMBOL v__token__Token v__parser__Parser_peek_token_after_var_list(v__parser__Parser* p) { int n = 0; v__token__Token tok = p->tok; for (;;) { @@ -89817,9 +89867,9 @@ VV_LOCAL_SYMBOL v__ast__Stmt v__parser__Parser_parse_multi_expr(v__parser__Parse v__token__Pos pos = v__token__Token_pos(&tok); Array_v__ast__Ident defer_vars = p->defer_vars; p->defer_vars = __new_array_with_default(0, 0, sizeof(v__ast__Ident), 0); - multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_48071 = v__parser__Parser_expr_list(p); - Array_v__ast__Expr left = mr_48071.arg0; - Array_v__ast__Comment left_comments = mr_48071.arg1; + multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_48067 = v__parser__Parser_expr_list(p); + Array_v__ast__Expr left = mr_48067.arg0; + Array_v__ast__Comment left_comments = mr_48067.arg1; if (!(p->inside_defer && p->tok.kind == v__token__Kind__decl_assign)) { _PUSH_MANY(&defer_vars, (p->defer_vars), _t1, Array_v__ast__Ident); } @@ -91097,9 +91147,9 @@ VV_LOCAL_SYMBOL v__ast__Return v__parser__Parser_return_stmt(v__parser__Parser* v__ast__Return _t1 = ((v__ast__Return){.pos = first_pos,.comments = comments,.exprs = __new_array(0, 0, sizeof(v__ast__Expr)),.types = __new_array(0, 0, sizeof(v__ast__Type)),}); return _t1; } - multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_84736 = v__parser__Parser_expr_list(p); - Array_v__ast__Expr exprs = mr_84736.arg0; - Array_v__ast__Comment comments2 = mr_84736.arg1; + multi_return_Array_v__ast__Expr_Array_v__ast__Comment mr_84732 = v__parser__Parser_expr_list(p); + Array_v__ast__Expr exprs = mr_84732.arg0; + Array_v__ast__Comment comments2 = mr_84732.arg1; _PUSH_MANY(&comments, (comments2), _t2, Array_v__ast__Comment); v__token__Pos end_pos = v__ast__Expr_pos((*(v__ast__Expr*)array_last(exprs))); v__ast__Return _t3 = ((v__ast__Return){.pos = v__token__Pos_extend(first_pos, end_pos),.comments = comments,.exprs = exprs,.types = __new_array(0, 0, sizeof(v__ast__Type)),}); @@ -91357,8 +91407,8 @@ VV_LOCAL_SYMBOL v__ast__TypeDecl v__parser__Parser_type_decl(v__parser__Parser* return _t2; } Array_v__ast__TypeNode sum_variants = __new_array_with_default(0, 0, sizeof(v__ast__TypeNode), 0); - multi_return_Array_v__ast__Type_Array_string mr_91005 = v__parser__Parser_parse_generic_types(p); - Array_v__ast__Type generic_types = mr_91005.arg0; + multi_return_Array_v__ast__Type_Array_string mr_91001 = v__parser__Parser_parse_generic_types(p); + Array_v__ast__Type generic_types = mr_91001.arg0; v__token__Pos decl_pos_with_generics = v__token__Pos_extend(decl_pos, v__token__Token_pos(&p->prev_tok)); v__parser__Parser_check(p, v__token__Kind__assign); v__token__Pos type_pos = v__token__Token_pos(&p->tok); @@ -96797,6 +96847,8 @@ void _vcleanup(void) { } int wmain(int ___argc, wchar_t* ___argv[], wchar_t* ___envp[]){ + g_main_argc = ___argc; + g_main_argv = ___argv; _vinit(___argc, (voidptr)___argv); main__main(); _vcleanup();