[v:master] 3afb88c4e - chore: switched to vieter/vc repo

main
vbot 2022-05-05 09:01:41 +00:00
parent 6fb7a0edb9
commit d65f4e319f
2 changed files with 464 additions and 438 deletions

453
v.c
View File

@ -1,11 +1,11 @@
#define V_COMMIT_HASH "c405c1916"
#define V_COMMIT_HASH "3afb88c4e"
#ifndef V_COMMIT_HASH
#define V_COMMIT_HASH "41857b0ac"
#define V_COMMIT_HASH "c405c1916"
#endif
#ifndef V_CURRENT_COMMIT_HASH
#define V_CURRENT_COMMIT_HASH "c405c19"
#define V_CURRENT_COMMIT_HASH "3afb88c"
#endif
// V comptime_definitions:
@ -7734,7 +7734,7 @@ string string_clone(string a);
string string_replace_once(string s, string rep, string with);
string string_replace(string s, string rep, string with);
string string_replace_each(string s, Array_string vals);
VV_LOCAL_SYMBOL int compare_11653268393309465375_RepIndex_by_idx(RepIndex* a, RepIndex* b) {
VV_LOCAL_SYMBOL int compare_3079424758118292824_RepIndex_by_idx(RepIndex* a, RepIndex* b) {
if (a->idx < b->idx) return -1;
else return 1;
}
@ -7974,7 +7974,7 @@ Option_void os__execve(string cmdpath, Array_string cmdargs, Array_string envs);
int os__is_atty(int fd);
Option_void os__write_file_array(string path, array buffer);
Option_Array_string os__glob(Array_string patterns);
VV_LOCAL_SYMBOL int compare_3075544183021293552_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_3677745349018262865_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -8155,7 +8155,7 @@ Array_string os__cmdline__only_non_options(Array_string args);
Array_string os__cmdline__only_options(Array_string args);
#define _const_v__token__max_keyword_len 20
v__token__KeywordsMatcher v__token__new_keywords_matcher_T_v__token__Kind(Map_string_v__token__Kind kw_map);
VV_LOCAL_SYMBOL int compare_186646746980636166_v__token__WIndex_by_word(v__token__WIndex* a, v__token__WIndex* b) {
VV_LOCAL_SYMBOL int compare_5690199065019732925_v__token__WIndex_by_word(v__token__WIndex* a, v__token__WIndex* b) {
if (string__lt(a->word, b->word)) return -1;
else return 1;
}
@ -8197,7 +8197,7 @@ Option_v__token__Kind v__token__kind_from_string(string s);
int v__mathutil__min_T_int(int a, int b);
int v__mathutil__max_T_int(int a, int b);
void v__dotgraph__start_digraph(void);
VV_LOCAL_SYMBOL void anon_fn_eb34f0b759dade77__82(void);
VV_LOCAL_SYMBOL void anon_fn_6b9593b3d6ef610a__82(void);
v__dotgraph__DotGraph* v__dotgraph__new(string name, string label, string color);
void v__dotgraph__DotGraph_writeln(v__dotgraph__DotGraph* d, string line);
void v__dotgraph__DotGraph_finish(v__dotgraph__DotGraph* d);
@ -8801,7 +8801,7 @@ f64 math__with_set_high_word(f64 f, u32 hi);
u32 math__get_high_word(f64 f);
VV_LOCAL_SYMBOL Option_string v__pkgconfig__desc(string mod);
Option_v__pkgconfig__Main_ptr v__pkgconfig__main(Array_string args);
VV_LOCAL_SYMBOL int compare_16330786295575367509_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_10129308118656229290_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -9069,7 +9069,7 @@ v__pref__CompilerType v__pref__cc_from_string(string cc_str);
v__pref__Arch v__pref__get_host_arch(void);
VV_LOCAL_SYMBOL void v__pref__Preferences_parse_define(v__pref__Preferences* prefs, string define);
Array_string v__pref__Preferences_should_compile_filtered_files(v__pref__Preferences* prefs, string dir, Array_string files_);
VV_LOCAL_SYMBOL int compare_13661271458656804876_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_11540237029762306605_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -9130,7 +9130,7 @@ u64 sync__thread_id(void);
string _const_help__unknown_topic; // a string literal, inited later
void help__print_and_exit(string topic);
VV_LOCAL_SYMBOL string help__known_topics(string topicdir);
VV_LOCAL_SYMBOL int compare_10452767129756656329_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_1468091262560489642_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -9173,13 +9173,13 @@ v__util__Suggestion v__util__new_suggestion(string wanted, Array_string possibil
void v__util__Suggestion_add(v__util__Suggestion* s, string val);
void v__util__Suggestion_add_many(v__util__Suggestion* s, Array_string many);
void v__util__Suggestion_sort(v__util__Suggestion* s);
VV_LOCAL_SYMBOL int compare_6907021362050549619_v__util__Possibility_by_similarity(v__util__Possibility* a, v__util__Possibility* b) {
VV_LOCAL_SYMBOL int compare_15123029833316296960_v__util__Possibility_by_similarity(v__util__Possibility* a, v__util__Possibility* b) {
if (a->similarity < b->similarity) return -1;
else return 1;
}
string v__util__Suggestion_say(v__util__Suggestion s, string msg);
VV_LOCAL_SYMBOL int compare_6907021362050549619_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_15123029833316296960_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -9764,7 +9764,7 @@ v__ast__Type v__checker__Checker_int_lit(v__checker__Checker* c, v__ast__Integer
void v__checker__Checker_struct_decl(v__checker__Checker* c, v__ast__StructDecl* node);
VV_LOCAL_SYMBOL int v__checker__minify_sort_fn(v__ast__StructField* a, v__ast__StructField* b);
v__ast__Type v__checker__Checker_struct_init(v__checker__Checker* c, v__ast__StructInit* node);
VV_LOCAL_SYMBOL int compare_2892273012681280244_v__ast__StructField_by_i(v__ast__StructField* a, v__ast__StructField* b) {
VV_LOCAL_SYMBOL int compare_5995660241070764127_v__ast__StructField_by_i(v__ast__StructField* a, v__ast__StructField* b) {
if (a->i < b->i) return -1;
else return 1;
}
@ -10285,7 +10285,7 @@ v__ast__Type v__parser__Parser_parse_fn_type(v__parser__Parser* p, string name);
v__ast__Type v__parser__Parser_parse_type_with_mut(v__parser__Parser* p, bool is_mut);
v__ast__Language v__parser__Parser_parse_language(v__parser__Parser* p);
v__ast__Type v__parser__Parser_parse_inline_sum_type(v__parser__Parser* p);
VV_LOCAL_SYMBOL int compare_7932637671395545435_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_14364895672131222426_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -13141,7 +13141,7 @@ void v__ast__TypeSymbol_free(v__ast__TypeSymbol* it) {
string_free(&(it->mod));
}
VV_LOCAL_SYMBOL void anon_fn_eb34f0b759dade77__82(void) {
VV_LOCAL_SYMBOL void anon_fn_6b9593b3d6ef610a__82(void) {
println(_SLIT("}"));
}
@ -21003,7 +21003,7 @@ string string_replace_each(string s, Array_string vals) {
if (idxs.len == 0) {
return string_clone(s);
}
qsort(idxs.data, idxs.len, idxs.element_size, (int (*)(const void *, const void *))&compare_11653268393309465375_RepIndex_by_idx);
qsort(idxs.data, idxs.len, idxs.element_size, (int (*)(const void *, const void *))&compare_3079424758118292824_RepIndex_by_idx);
u8* b = malloc_noscan(new_len + 1);
int idx_pos = 0;
RepIndex cur_idx = ((RepIndex*)idxs.data)[idx_pos];
@ -25997,7 +25997,7 @@ Option_Array_string os__glob(Array_string patterns) {
;
}
qsort(matches.data, matches.len, matches.element_size, (int (*)(const void *, const void *))&compare_3075544183021293552_string);
qsort(matches.data, matches.len, matches.element_size, (int (*)(const void *, const void *))&compare_3677745349018262865_string);
Option_Array_string _t4;
opt_ok(&(Array_string[]) { matches }, (Option*)(&_t4), sizeof(Array_string));
return _t4;
@ -28348,7 +28348,7 @@ v__token__KeywordsMatcher v__token__new_keywords_matcher_T_v__token__Kind(Map_st
}
for (int i = 0; i < _const_v__token__max_keyword_len; ++i) {
if (km.words[v_fixed_index(i, 20)].len > 0) {
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_186646746980636166_v__token__WIndex_by_word);
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_5690199065019732925_v__token__WIndex_by_word);
#if defined(CUSTOM_DEFINE_trace_keyword_matcher_initialisation)
{
print( str_intp(2, _MOV((StrIntpData[]){{_SLIT("word len: "), /*100 &int literal*/0x6fe27, {.d_i32 = i}}, {_SLIT(" | words: "), 0, { .d_c = 0 }}})));
@ -28386,7 +28386,7 @@ v__token__KeywordsMatcher v__token__new_keywords_matcher_T_int(Map_string_int kw
}
for (int i = 0; i < _const_v__token__max_keyword_len; ++i) {
if (km.words[v_fixed_index(i, 20)].len > 0) {
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_186646746980636166_v__token__WIndex_by_word);
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_5690199065019732925_v__token__WIndex_by_word);
#if defined(CUSTOM_DEFINE_trace_keyword_matcher_initialisation)
{
print( str_intp(2, _MOV((StrIntpData[]){{_SLIT("word len: "), /*100 &int literal*/0x6fe27, {.d_i32 = i}}, {_SLIT(" | words: "), 0, { .d_c = 0 }}})));
@ -29721,7 +29721,7 @@ inline int v__mathutil__max_T_int(int a, int b) {
void v__dotgraph__start_digraph(void) {
println(_SLIT("digraph G {"));
atexit((voidptr) anon_fn_eb34f0b759dade77__82);
atexit((voidptr) anon_fn_6b9593b3d6ef610a__82);
}
v__dotgraph__DotGraph* v__dotgraph__new(string name, string label, string color) {
@ -34952,7 +34952,7 @@ Option_v__pkgconfig__Main_ptr v__pkgconfig__main(Array_string args) {
m->res = _const_v__pkgconfig__version;
} else if (opt->listall) {
Array_string modules = v__pkgconfig__list();
qsort(modules.data, modules.len, modules.element_size, (int (*)(const void *, const void *))&compare_16330786295575367509_string);
qsort(modules.data, modules.len, modules.element_size, (int (*)(const void *, const void *))&compare_10129308118656229290_string);
if (opt->description) {
for (int _t1 = 0; _t1 < modules.len; ++_t1) {
string mod = ((string*)modules.data)[_t1];
@ -38040,7 +38040,7 @@ void v__pref__Preferences_fill_with_defaults(v__pref__Preferences* p) {
}
#endif
}
string vhash = _SLIT("41857b0ac");
string vhash = _SLIT("c405c1916");
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;
@ -39444,7 +39444,7 @@ VV_LOCAL_SYMBOL void v__pref__Preferences_parse_define(v__pref__Preferences* pre
Array_string v__pref__Preferences_should_compile_filtered_files(v__pref__Preferences* prefs, string dir, Array_string files_) {
Array_string res = __new_array_with_default(0, 0, sizeof(string), 0);
Array_string files = array_clone_to_depth(&files_, 0);
qsort(files.data, files.len, files.element_size, (int (*)(const void *, const void *))&compare_13661271458656804876_string);
qsort(files.data, files.len, files.element_size, (int (*)(const void *, const void *))&compare_11540237029762306605_string);
Array_string all_v_files = __new_array_with_default(0, 0, sizeof(string), 0);
for (int _t1 = 0; _t1 < files.len; ++_t1) {
string file = ((string*)files.data)[_t1];
@ -40201,7 +40201,7 @@ int sync__channel_select(Array_sync__Channel_ptr* channels, Array_sync__Directio
// assert
if (!(channels->len == dir.len)) {
VAssertMetaInfo v_assert_meta_info__t1 = {0};
v_assert_meta_info__t1.fpath = _SLIT("/woodpecker/src/git.rustybever.be/Chewing_Bever/v/vlib/sync/channels.c.v");
v_assert_meta_info__t1.fpath = _SLIT("/woodpecker/src/git.rustybever.be/vieter/v/vlib/sync/channels.c.v");
v_assert_meta_info__t1.line_nr = 550;
v_assert_meta_info__t1.fn_name = _SLIT("sync.channel_select");
v_assert_meta_info__t1.src = _SLIT("channels.len == dir.len");
@ -40216,7 +40216,7 @@ int sync__channel_select(Array_sync__Channel_ptr* channels, Array_sync__Directio
// assert
if (!(dir.len == objrefs->len)) {
VAssertMetaInfo v_assert_meta_info__t2 = {0};
v_assert_meta_info__t2.fpath = _SLIT("/woodpecker/src/git.rustybever.be/Chewing_Bever/v/vlib/sync/channels.c.v");
v_assert_meta_info__t2.fpath = _SLIT("/woodpecker/src/git.rustybever.be/vieter/v/vlib/sync/channels.c.v");
v_assert_meta_info__t2.line_nr = 551;
v_assert_meta_info__t2.fn_name = _SLIT("sync.channel_select");
v_assert_meta_info__t2.src = _SLIT("dir.len == objrefs.len");
@ -40690,7 +40690,7 @@ VV_LOCAL_SYMBOL string help__known_topics(string topicdir) {
array_push((array*)&_t3, &ti);
}
Array_string topics =_t3;
qsort(topics.data, topics.len, topics.element_size, (int (*)(const void *, const void *))&compare_10452767129756656329_string);
qsort(topics.data, topics.len, topics.element_size, (int (*)(const void *, const void *))&compare_1468091262560489642_string);
array_push((array*)&res, _MOV((string[]){ string_clone(Array_string_join(topics, _SLIT(", "))) }));
array_push((array*)&res, _MOV((string[]){ string_clone(_SLIT(".")) }));
string _t7 = Array_string_join(res, _SLIT(""));
@ -41187,7 +41187,7 @@ void v__util__Suggestion_add_many(v__util__Suggestion* s, Array_string many) {
}
void v__util__Suggestion_sort(v__util__Suggestion* s) {
qsort(s->known.data, s->known.len, s->known.element_size, (int (*)(const void *, const void *))&compare_6907021362050549619_v__util__Possibility_by_similarity);
qsort(s->known.data, s->known.len, s->known.element_size, (int (*)(const void *, const void *))&compare_15123029833316296960_v__util__Possibility_by_similarity);
}
string v__util__Suggestion_say(v__util__Suggestion s, string msg) {
@ -41216,7 +41216,7 @@ string v__util__Suggestion_say(v__util__Suggestion s, string msg) {
array_push((array*)&_t1, &ti);
}
Array_string values =_t1;
qsort(values.data, values.len, values.element_size, (int (*)(const void *, const void *))&compare_6907021362050549619_string);
qsort(values.data, values.len, values.element_size, (int (*)(const void *, const void *))&compare_15123029833316296960_string);
if (values.len == 1) {
res = /*f*/string__plus(res, str_intp(2, _MOV((StrIntpData[]){{_SLIT(".\n1 possibility: "), /*115 &string*/0xfe10, {.d_s = (*(string*)/*ee elem_sym */array_get(values, 0))}}, {_SLIT("."), 0, { .d_c = 0 }}})));
} else if (values.len < 25) {
@ -50521,136 +50521,140 @@ bool v__checker__Checker_check_types(v__checker__Checker* c, v__ast__Type got, v
bool got_is_ptr = v__ast__Type_is_ptr(got);
bool exp_is_ptr = v__ast__Type_is_ptr(expected);
if (c->pref->translated) {
if (v__ast__Type_alias_eq(expected, _const_v__ast__byteptr_type)) {
if (v__ast__Type_is_int(expected) && v__ast__Type_is_int(got)) {
bool _t2 = true;
return _t2;
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__voidptr_type)) {
if (v__ast__Type_alias_eq(expected, _const_v__ast__byteptr_type)) {
bool _t3 = true;
return _t3;
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__bool_type) && (v__ast__Type_is_any_kind_of_pointer(got) || v__ast__Type_is_int(got))) {
if (v__ast__Type_alias_eq(expected, _const_v__ast__voidptr_type)) {
bool _t4 = true;
return _t4;
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__bool_type) && (v__ast__Type_is_any_kind_of_pointer(got) || v__ast__Type_is_int(got))) {
bool _t5 = true;
return _t5;
}
if (v__ast__Type_is_any_kind_of_pointer(expected)) {
v__ast__Type deref = v__ast__Type_deref(expected);
v__ast__TypeSymbol* got_sym = v__ast__Table_sym(c->table, got);
if (v__ast__Type_is_number(deref) && (v__ast__TypeSymbol_is_number(got_sym) || got_sym->kind == v__ast__Kind__enum_)) {
bool _t5 = true;
return _t5;
bool _t6 = true;
return _t6;
}
}
if ((v__ast__Type_alias_eq(expected, _const_v__ast__rune_type) && v__ast__Type_is_int(got)) || (v__ast__Type_alias_eq(got, _const_v__ast__rune_type) && v__ast__Type_is_int(expected))) {
bool _t6 = true;
return _t6;
bool _t7 = true;
return _t7;
}
v__ast__TypeSymbol* got_sym = v__ast__Table_sym(c->table, got);
v__ast__TypeSymbol* expected_sym = v__ast__Table_sym(c->table, expected);
if (got_sym->kind == v__ast__Kind__enum_) {
if (v__ast__TypeSymbol_is_number(expected_sym)) {
bool _t7 = true;
return _t7;
bool _t8 = true;
return _t8;
}
} else if (got_sym->kind == v__ast__Kind__array_fixed) {
if (v__ast__TypeSymbol_is_number(expected_sym)) {
bool _t8 = true;
return _t8;
} else if (v__ast__Type_is_any_kind_of_pointer(expected)) {
bool _t9 = true;
return _t9;
} else if (v__ast__Type_is_any_kind_of_pointer(expected)) {
bool _t10 = true;
return _t10;
}
} else if (expected_sym->kind == v__ast__Kind__array_fixed) {
if (v__ast__TypeSymbol_is_number(got_sym) && v__ast__Type_is_any_kind_of_pointer(got)) {
bool _t10 = true;
return _t10;
bool _t11 = true;
return _t11;
} else if (got_sym->kind == v__ast__Kind__array) {
v__ast__ArrayFixed info = /* as */ *(v__ast__ArrayFixed*)__as_cast((expected_sym->info)._v__ast__ArrayFixed,(expected_sym->info)._typ, 440) /*expected idx: 440, name: v.ast.ArrayFixed */ ;
v__ast__Array info2 = /* as */ *(v__ast__Array*)__as_cast((got_sym->info)._v__ast__Array,(got_sym->info)._typ, 412) /*expected idx: 412, name: v.ast.Array */ ;
if (v__checker__Checker_check_types(c, info.elem_type, info2.elem_type)) {
bool _t11 = true;
return _t11;
bool _t12 = true;
return _t12;
}
}
}
if (expected_sym->kind == v__ast__Kind__enum_ && v__ast__TypeSymbol_is_number(got_sym)) {
bool _t12 = true;
return _t12;
bool _t13 = true;
return _t13;
}
if (got_is_ptr && exp_is_ptr) {
if (v__ast__TypeSymbol_is_number(expected_sym) && v__ast__TypeSymbol_is_number(got_sym)) {
bool _t13 = true;
return _t13;
bool _t14 = true;
return _t14;
}
}
}
if (got_is_ptr && exp_is_ptr) {
if (v__ast__Type_nr_muls(got) != v__ast__Type_nr_muls(expected)) {
bool _t14 = false;
return _t14;
bool _t15 = false;
return _t15;
}
}
int exp_idx = v__ast__Type_idx(expected);
int got_idx = v__ast__Type_idx(got);
if (exp_idx == got_idx) {
bool _t15 = true;
return _t15;
bool _t16 = true;
return _t16;
}
if (exp_idx == _const_v__ast__voidptr_type_idx || exp_idx == _const_v__ast__byteptr_type_idx || (v__ast__Type_is_ptr(expected) && v__ast__Type_idx(v__ast__Type_deref(expected)) == _const_v__ast__byte_type_idx)) {
if (v__ast__Type_is_ptr(got) || v__ast__Type_is_pointer(got)) {
bool _t16 = true;
return _t16;
}
}
if (v__ast__Type_is_real_pointer(expected)) {
if (v__ast__Type_alias_eq(got, _const_v__ast__int_literal_type)) {
bool _t17 = true;
return _t17;
}
}
if (got_idx == _const_v__ast__voidptr_type_idx || got_idx == _const_v__ast__byteptr_type_idx || (got_idx == _const_v__ast__byte_type_idx && v__ast__Type_is_ptr(got))) {
if (v__ast__Type_is_ptr(expected) || v__ast__Type_is_pointer(expected)) {
if (v__ast__Type_is_real_pointer(expected)) {
if (v__ast__Type_alias_eq(got, _const_v__ast__int_literal_type)) {
bool _t18 = true;
return _t18;
}
}
if (got_idx == _const_v__ast__voidptr_type_idx || got_idx == _const_v__ast__byteptr_type_idx || (got_idx == _const_v__ast__byte_type_idx && v__ast__Type_is_ptr(got))) {
if (v__ast__Type_is_ptr(expected) || v__ast__Type_is_pointer(expected)) {
bool _t19 = true;
return _t19;
}
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__charptr_type) && v__ast__Type_alias_eq(got, v__ast__Type_ref(_const_v__ast__char_type))) {
bool _t19 = true;
return _t19;
bool _t20 = true;
return _t20;
}
if (v__ast__Type_has_flag(expected, v__ast__TypeFlag__optional) || v__ast__Type_has_flag(expected, v__ast__TypeFlag__result)) {
v__ast__TypeSymbol* sym = v__ast__Table_sym(c->table, got);
if (((sym->idx == _const_v__ast__error_type_idx || (v__ast__Type_alias_eq(got, _const_v__ast__none_type) || v__ast__Type_alias_eq(got, _const_v__ast__error_type))) && v__ast__Type_has_flag(expected, v__ast__TypeFlag__optional)) || ((sym->idx == _const_v__ast__error_type_idx || v__ast__Type_alias_eq(got, _const_v__ast__error_type)) && v__ast__Type_has_flag(expected, v__ast__TypeFlag__result))) {
bool _t20 = true;
return _t20;
} else if (!v__checker__Checker_check_basic(c, got, v__ast__Type_clear_flag(v__ast__Type_clear_flag(expected, v__ast__TypeFlag__optional), v__ast__TypeFlag__result))) {
bool _t21 = false;
bool _t21 = true;
return _t21;
} else if (!v__checker__Checker_check_basic(c, got, v__ast__Type_clear_flag(v__ast__Type_clear_flag(expected, v__ast__TypeFlag__optional), v__ast__TypeFlag__result))) {
bool _t22 = false;
return _t22;
}
}
if (!v__checker__Checker_check_basic(c, got, expected)) {
bool _t22 = false;
return _t22;
bool _t23 = false;
return _t23;
}
if (v__ast__Type_is_number(got) && v__ast__Type_is_number(expected)) {
if (v__ast__Type_alias_eq(got, _const_v__ast__rune_type) && v__ast__Type_alias_eq(expected, _const_v__ast__byte_type)) {
bool _t23 = true;
return _t23;
} else if (v__ast__Type_alias_eq(expected, _const_v__ast__rune_type) && v__ast__Type_alias_eq(got, _const_v__ast__byte_type)) {
bool _t24 = true;
return _t24;
} else if (v__ast__Type_alias_eq(expected, _const_v__ast__rune_type) && v__ast__Type_alias_eq(got, _const_v__ast__byte_type)) {
bool _t25 = true;
return _t25;
}
if (!v__ast__Type_alias_eq(v__checker__Checker_promote_num(c, expected, got), expected)) {
bool _t25 = false;
return _t25;
bool _t26 = false;
return _t26;
}
}
if (v__ast__Type_has_flag(expected, v__ast__TypeFlag__generic)) {
bool _t26 = false;
return _t26;
bool _t27 = false;
return _t27;
}
bool _t27 = true;
return _t27;
bool _t28 = true;
return _t28;
}
Option_void v__checker__Checker_check_expected_call_arg(v__checker__Checker* c, v__ast__Type got, v__ast__Type expected_, v__ast__Language language, v__ast__CallArg arg) {
@ -50998,10 +51002,10 @@ VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_promote_num(v__checker__Checker
v__ast__Type type_hi = left_type;
v__ast__Type type_lo = right_type;
if (v__ast__Type_idx(type_hi) < v__ast__Type_idx(type_lo)) {
v__ast__Type _var_17710 = type_hi;
v__ast__Type _var_17719 = type_lo;
type_hi = _var_17719;
type_lo = _var_17710;
v__ast__Type _var_17770 = type_hi;
v__ast__Type _var_17779 = type_lo;
type_hi = _var_17779;
type_lo = _var_17770;
}
int idx_hi = v__ast__Type_idx(type_hi);
int idx_lo = v__ast__Type_idx(type_lo);
@ -59230,6 +59234,9 @@ v__ast__Type v__checker__Checker_fn_call(v__checker__Checker* c, v__ast__CallExp
if (v__ast__Type_alias_eq(arg_typ, _const_v__ast__int_type) && param_typ_sym->kind == v__ast__Kind__enum_) {
continue;
}
if ((v__ast__Type_alias_eq(arg_typ, _const_v__ast__bool_type) && v__ast__Type_is_int(param.typ)) || (v__ast__Type_is_int(arg_typ) && v__ast__Type_alias_eq(param.typ, _const_v__ast__bool_type))) {
continue;
}
bool param_is_number = v__ast__Type_is_number(param.typ);
if (v__ast__Type_is_ptr(param.typ)) {
param_is_number = v__ast__Type_is_number(v__ast__Type_deref(param.typ));
@ -59244,7 +59251,7 @@ v__ast__Type v__checker__Checker_fn_call(v__checker__Checker* c, v__ast__CallExp
if (param.typ == _const_v__ast__voidptr_type_idx || arg_typ == _const_v__ast__voidptr_type_idx) {
continue;
}
if ((arg_typ_sym->kind == v__ast__Kind__array_fixed && param_is_number) || (param_typ_sym->kind == v__ast__Kind__array_fixed && typ_is_number)) {
if ((arg_typ_sym->kind == v__ast__Kind__array_fixed && (param_is_number || v__ast__Type_is_any_kind_of_pointer(param.typ))) || (param_typ_sym->kind == v__ast__Kind__array_fixed && (typ_is_number || v__ast__Type_is_any_kind_of_pointer(arg_typ)))) {
continue;
}
if (v__ast__Type_is_any_kind_of_pointer(param.typ) && typ_is_number) {
@ -59346,12 +59353,6 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__ast__Type left_type = v__checker__Checker_expr(c, node->left);
c->expected_type = left_type;
bool is_generic = v__ast__Type_has_flag(left_type, v__ast__TypeFlag__generic);
if (is_generic && node->concrete_types.len == 0) {
v__ast__TypeSymbol* rec_sym = v__ast__Table_sym(c->table, left_type);
if ((rec_sym->info)._typ == 417 /* v.ast.Struct */) {
node->concrete_types = (*rec_sym->info._v__ast__Struct).generic_types;
}
}
node->left_type = left_type;
node->return_type = left_type;
node->receiver_type = left_type;
@ -59391,51 +59392,37 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__ast__Type _t6 = _const_v__ast__void_type;
return _t6;
}
Array_v__ast__Type concrete_types = __new_array_with_default(0, 0, sizeof(v__ast__Type), 0);
for (int _t7 = 0; _t7 < node->concrete_types.len; ++_t7) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t7];
if (v__ast__Type_has_flag(concrete_type, v__ast__TypeFlag__generic)) {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ v__checker__Checker_unwrap_generic(c, concrete_type) }));
} else {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ concrete_type }));
}
}
if (concrete_types.len > 0) {
if (v__ast__Table_register_fn_concrete_types(c->table, v__ast__CallExpr_fkey(node), concrete_types)) {
c->need_recheck_generic_fns = true;
}
}
if (left_sym->kind == v__ast__Kind__array && Array_string_contains(_const_v__checker__array_builtin_methods, method_name)) {
v__ast__Type _t10 = v__checker__Checker_array_builtin_method_call(c, node, left_type, *v__ast__Table_sym(c->table, left_type));
return _t10;
v__ast__Type _t7 = v__checker__Checker_array_builtin_method_call(c, node, left_type, *v__ast__Table_sym(c->table, left_type));
return _t7;
} else if ((left_sym->kind == v__ast__Kind__map || final_left_sym->kind == v__ast__Kind__map) && (string__eq(method_name, _SLIT("clone")) || string__eq(method_name, _SLIT("keys")) || string__eq(method_name, _SLIT("move")) || string__eq(method_name, _SLIT("delete")))) {
if (left_sym->kind == v__ast__Kind__map) {
v__ast__Type _t11 = v__checker__Checker_map_builtin_method_call(c, node, left_type, *left_sym);
return _t11;
v__ast__Type _t8 = v__checker__Checker_map_builtin_method_call(c, node, left_type, *left_sym);
return _t8;
} else {
v__ast__Type parent_type = (/* as */ *(v__ast__Alias*)__as_cast((left_sym->info)._v__ast__Alias,(left_sym->info)._typ, 432) /*expected idx: 432, name: v.ast.Alias */ ).parent_type;
v__ast__Type _t12 = v__checker__Checker_map_builtin_method_call(c, node, parent_type, *final_left_sym);
return _t12;
v__ast__Type _t9 = v__checker__Checker_map_builtin_method_call(c, node, parent_type, *final_left_sym);
return _t9;
}
} else if (left_sym->kind == v__ast__Kind__array && (string__eq(method_name, _SLIT("insert")) || string__eq(method_name, _SLIT("prepend")))) {
if (string__eq(method_name, _SLIT("insert"))) {
if (node->args.len != 2) {
v__checker__Checker_error(c, _SLIT("`array.insert()` should have 2 arguments, e.g. `insert(1, val)`"), node->pos);
v__ast__Type _t13 = _const_v__ast__void_type;
return _t13;
v__ast__Type _t10 = _const_v__ast__void_type;
return _t10;
} else {
v__ast__Type arg_type = v__checker__Checker_expr(c, (*(v__ast__CallArg*)/*ee elem_sym */array_get(node->args, 0)).expr);
if (!(v__ast__Type_alias_eq(arg_type, _const_v__ast__int_type) || v__ast__Type_alias_eq(arg_type, _const_v__ast__int_literal_type))) {
v__checker__Checker_error(c, _SLIT("the first argument of `array.insert()` should be integer"), v__ast__Expr_pos((*(v__ast__CallArg*)/*ee elem_sym */array_get(node->args, 0)).expr));
v__ast__Type _t14 = _const_v__ast__void_type;
return _t14;
v__ast__Type _t11 = _const_v__ast__void_type;
return _t11;
}
}
} else {
if (node->args.len != 1) {
v__checker__Checker_error(c, _SLIT("`array.prepend()` should have 1 argument, e.g. `prepend(val)`"), node->pos);
v__ast__Type _t15 = _const_v__ast__void_type;
return _t15;
v__ast__Type _t12 = _const_v__ast__void_type;
return _t12;
}
}
v__ast__Array info = /* as */ *(v__ast__Array*)__as_cast((left_sym->info)._v__ast__Array,(left_sym->info)._typ, 412) /*expected idx: 412, name: v.ast.Array */ ;
@ -59448,8 +59435,8 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
} else if (final_left_sym->kind == v__ast__Kind__array && (string__eq(method_name, _SLIT("first")) || string__eq(method_name, _SLIT("last")) || string__eq(method_name, _SLIT("pop")))) {
if ((final_left_sym->info)._typ == 412 /* v.ast.Array */) {
node->return_type = (*final_left_sym->info._v__ast__Array).elem_type;
v__ast__Type _t16 = node->return_type;
return _t16;
v__ast__Type _t13 = node->return_type;
return _t13;
}
} else if (v__pref__Backend_is_js(c->pref->backend) && string_starts_with(left_sym->name, _SLIT("Promise<")) && string__eq(method_name, _SLIT("wait"))) {
v__ast__Struct info = /* as */ *(v__ast__Struct*)__as_cast((left_sym->info)._v__ast__Struct,(left_sym->info)._typ, 417) /*expected idx: 417, name: v.ast.Struct */ ;
@ -59459,31 +59446,31 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
c->table->cur_fn->has_await = true;
node->return_type = (*(v__ast__Type*)/*ee elem_sym */array_get(info.concrete_types, 0));
v__ast__Type_set_flag(node->return_type, v__ast__TypeFlag__optional);
v__ast__Type _t17 = node->return_type;
return _t17;
v__ast__Type _t14 = node->return_type;
return _t14;
} else if (left_sym->kind == v__ast__Kind__thread && string__eq(method_name, _SLIT("wait"))) {
v__ast__Thread info = /* as */ *(v__ast__Thread*)__as_cast((left_sym->info)._v__ast__Thread,(left_sym->info)._typ, 442) /*expected idx: 442, name: v.ast.Thread */ ;
if (node->args.len > 0) {
v__checker__Checker_error(c, _SLIT("wait() does not have any arguments"), (*(v__ast__CallArg*)/*ee elem_sym */array_get(node->args, 0)).pos);
}
node->return_type = info.return_type;
v__ast__Type _t18 = info.return_type;
return _t18;
v__ast__Type _t15 = info.return_type;
return _t15;
} else if (left_sym->kind == v__ast__Kind__char && v__ast__Type_nr_muls(left_type) == 0 && string__eq(method_name, _SLIT("str"))) {
v__checker__Checker_error(c, _SLIT("calling `.str()` on type `char` is not allowed, use its address or cast it to an integer instead"), v__token__Pos_extend(v__ast__Expr_pos(node->left), node->pos));
v__ast__Type _t19 = _const_v__ast__void_type;
return _t19;
v__ast__Type _t16 = _const_v__ast__void_type;
return _t16;
}
v__ast__Fn method = ((v__ast__Fn){.params = __new_array(0, 0, sizeof(v__ast__Param)),.generic_names = __new_array(0, 0, sizeof(string)),.attrs = __new_array(0, 0, sizeof(v__ast__Attr)),.mod = (string){.str=(byteptr)"", .is_lit=1},.file = (string){.str=(byteptr)"", .is_lit=1},.name = (string){.str=(byteptr)"", .is_lit=1},.pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type_pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type = 0,.receiver_type = 0,.usages = 0,.ctdefine_idx = 0,.source_fn = 0,.language = 0,.file_mode = 0,.is_variadic = 0,.is_pub = 0,.is_ctor_new = 0,.is_deprecated = 0,.is_noreturn = 0,.is_unsafe = 0,.is_placeholder = 0,.is_main = 0,.is_test = 0,.is_keep_alive = 0,.is_method = 0,.no_body = 0,.is_conditional = 0,});
bool has_method = false;
bool is_method_from_embed = false;
Option_v__ast__Fn _t20;
if (_t20 = v__ast__Table_find_method(c->table, left_sym, method_name), _t20.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t20.data;
Option_v__ast__Fn _t17;
if (_t17 = v__ast__Table_find_method(c->table, left_sym, method_name), _t17.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t17.data;
method = m;
has_method = true;
} else {
IError err = _t20.err;
IError err = _t17.err;
if (left_sym->kind == v__ast__Kind__struct_ || left_sym->kind == v__ast__Kind__sum_type || left_sym->kind == v__ast__Kind__interface_) {
v__ast__Type parent_type = _const_v__ast__void_type;
if ((left_sym->info)._typ == 417 /* v.ast.Struct */) {
@ -59495,9 +59482,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
if (parent_type != 0) {
v__ast__TypeSymbol* type_sym = v__ast__Table_sym(c->table, parent_type);
Option_v__ast__Fn _t21;
if (_t21 = v__ast__Table_find_method(c->table, type_sym, method_name), _t21.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t21.data;
Option_v__ast__Fn _t18;
if (_t18 = v__ast__Table_find_method(c->table, type_sym, method_name), _t18.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t18.data;
method = m;
has_method = true;
is_generic = true;
@ -59507,19 +59494,19 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
if (!has_method) {
has_method = true;
Array_v__ast__Type embed_types = __new_array_with_default(0, 0, sizeof(v__ast__Type), 0);
Option_multi_return_v__ast__Fn_Array_v__ast__Type _t22 = v__ast__Table_find_method_from_embeds(c->table, left_sym, method_name);
if (_t22.state != 0) { /*or block*/
IError err = _t22.err;
Option_multi_return_v__ast__Fn_Array_v__ast__Type _t19 = v__ast__Table_find_method_from_embeds(c->table, left_sym, method_name);
if (_t19.state != 0) { /*or block*/
IError err = _t19.err;
if ((IError_name_table[err._typ]._method_msg(err._object)).len != 0) {
v__checker__Checker_error(c, IError_name_table[err._typ]._method_msg(err._object), node->pos);
}
has_method = false;
*(multi_return_v__ast__Fn_Array_v__ast__Type*) _t22.data = (multi_return_v__ast__Fn_Array_v__ast__Type){.arg0=((v__ast__Fn){.params = __new_array(0, 0, sizeof(v__ast__Param)),.generic_names = __new_array(0, 0, sizeof(string)),.attrs = __new_array(0, 0, sizeof(v__ast__Attr)),.mod = (string){.str=(byteptr)"", .is_lit=1},.file = (string){.str=(byteptr)"", .is_lit=1},.name = (string){.str=(byteptr)"", .is_lit=1},.pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type_pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type = 0,.receiver_type = 0,.usages = 0,.ctdefine_idx = 0,.source_fn = 0,.language = 0,.file_mode = 0,.is_variadic = 0,.is_pub = 0,.is_ctor_new = 0,.is_deprecated = 0,.is_noreturn = 0,.is_unsafe = 0,.is_placeholder = 0,.is_main = 0,.is_test = 0,.is_keep_alive = 0,.is_method = 0,.no_body = 0,.is_conditional = 0,}),.arg1=__new_array_with_default(0, 0, sizeof(v__ast__Type), 0)};
*(multi_return_v__ast__Fn_Array_v__ast__Type*) _t19.data = (multi_return_v__ast__Fn_Array_v__ast__Type){.arg0=((v__ast__Fn){.params = __new_array(0, 0, sizeof(v__ast__Param)),.generic_names = __new_array(0, 0, sizeof(string)),.attrs = __new_array(0, 0, sizeof(v__ast__Attr)),.mod = (string){.str=(byteptr)"", .is_lit=1},.file = (string){.str=(byteptr)"", .is_lit=1},.name = (string){.str=(byteptr)"", .is_lit=1},.pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type_pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type = 0,.receiver_type = 0,.usages = 0,.ctdefine_idx = 0,.source_fn = 0,.language = 0,.file_mode = 0,.is_variadic = 0,.is_pub = 0,.is_ctor_new = 0,.is_deprecated = 0,.is_noreturn = 0,.is_unsafe = 0,.is_placeholder = 0,.is_main = 0,.is_test = 0,.is_keep_alive = 0,.is_method = 0,.no_body = 0,.is_conditional = 0,}),.arg1=__new_array_with_default(0, 0, sizeof(v__ast__Type), 0)};
}
multi_return_v__ast__Fn_Array_v__ast__Type mr_42797 = (*(multi_return_v__ast__Fn_Array_v__ast__Type*)_t22.data);
method = mr_42797.arg0;
embed_types = mr_42797.arg1;
multi_return_v__ast__Fn_Array_v__ast__Type mr_42435 = (*(multi_return_v__ast__Fn_Array_v__ast__Type*)_t19.data);
method = mr_42435.arg0;
embed_types = mr_42435.arg1;
if (embed_types.len != 0) {
is_method_from_embed = true;
node->from_embed_types = embed_types;
@ -59530,6 +59517,31 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
}
if (has_method) {
v__ast__TypeSymbol* rec_sym = v__ast__Table_sym(c->table, node->left_type);
bool rec_is_generic = v__ast__Type_has_flag(left_type, v__ast__TypeFlag__generic);
if ((rec_sym->info)._typ == 417 /* v.ast.Struct */) {
if (rec_is_generic && node->concrete_types.len == 0) {
node->concrete_types = (*rec_sym->info._v__ast__Struct).generic_types;
} else if (!rec_is_generic && (*rec_sym->info._v__ast__Struct).concrete_types.len > 0 && node->concrete_types.len > 0 && (*rec_sym->info._v__ast__Struct).concrete_types.len + node->concrete_types.len == method.generic_names.len) {
Array_v__ast__Type t_concrete_types = array_clone_to_depth(&node->concrete_types, 0);
node->concrete_types = (*rec_sym->info._v__ast__Struct).concrete_types;
_PUSH_MANY(&node->concrete_types, (t_concrete_types), _t20, Array_v__ast__Type);
}
}
Array_v__ast__Type concrete_types = __new_array_with_default(0, 0, sizeof(v__ast__Type), 0);
for (int _t21 = 0; _t21 < node->concrete_types.len; ++_t21) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t21];
if (v__ast__Type_has_flag(concrete_type, v__ast__TypeFlag__generic)) {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ v__checker__Checker_unwrap_generic(c, concrete_type) }));
} else {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ concrete_type }));
}
}
if (concrete_types.len > 0) {
if (v__ast__Table_register_fn_concrete_types(c->table, v__ast__CallExpr_fkey(node), concrete_types)) {
c->need_recheck_generic_fns = true;
}
}
node->is_noreturn = method.is_noreturn;
node->is_ctor_new = method.is_ctor_new;
if (!method.is_pub && !c->pref->is_test && !string__eq(method.mod, c->mod)) {
@ -59540,9 +59552,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__checker__Checker_error(c, _SLIT("method with `shared` receiver cannot be called inside `lock`/`rlock` block"), node->pos);
}
if ((*(v__ast__Param*)/*ee elem_sym */array_get(method.params, 0)).is_mut) {
multi_return_string_v__token__Pos mr_43928 = v__checker__Checker_fail_if_immutable(c, node->left);
string to_lock = mr_43928.arg0;
v__token__Pos pos = mr_43928.arg1;
multi_return_string_v__token__Pos mr_44578 = v__checker__Checker_fail_if_immutable(c, node->left);
string to_lock = mr_44578.arg0;
v__token__Pos pos = mr_44578.arg1;
if (!v__ast__Expr_is_lvalue(node->left)) {
v__checker__Checker_error(c, _SLIT("cannot pass expression as `mut`"), v__ast__Expr_pos(node->left));
}
@ -59559,11 +59571,11 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
string plural = (method.generic_names.len == 1 ? (_SLIT("")) : (_SLIT("s")));
v__checker__Checker_error(c, str_intp(4, _MOV((StrIntpData[]){{_SLIT("expected "), /*100 &int*/0xfe07, {.d_i32 = method.generic_names.len}}, {_SLIT(" generic parameter"), /*115 &string*/0xfe10, {.d_s = plural}}, {_SLIT(", got "), /*100 &int*/0xfe07, {.d_i32 = node->concrete_types.len}}, {_SLIT0, 0, { .d_c = 0 }}})), node->concrete_list_pos);
}
for (int _t23 = 0; _t23 < node->concrete_types.len; ++_t23) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t23];
Option_void _t24 = v__checker__Checker_ensure_type_exists(c, concrete_type, node->concrete_list_pos);
if (_t24.state != 0 && _t24.err._typ != _IError_None___index) {
IError err = _t24.err;
for (int _t24 = 0; _t24 < node->concrete_types.len; ++_t24) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t24];
Option_void _t25 = v__checker__Checker_ensure_type_exists(c, concrete_type, node->concrete_list_pos);
if (_t25.state != 0 && _t25.err._typ != _IError_None___index) {
IError err = _t25.err;
}
;
@ -59571,11 +59583,11 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
if (v__ast__Type_alias_eq(method.return_type, _const_v__ast__void_type) && method.is_conditional && method.ctdefine_idx != _const_v__ast__invalid_type_idx) {
node->should_be_skipped = v__checker__Checker_evaluate_once_comptime_if_attribute(c, (voidptr)&/*qq*/(*(v__ast__Attr*)/*ee elem_sym */array_get(method.attrs, method.ctdefine_idx)));
}
Option_void _t25 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/method);
if (_t25.state != 0 && _t25.err._typ != _IError_None___index) {
IError err = _t25.err;
v__ast__Type _t26 = method.return_type;
return _t26;
Option_void _t26 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/method);
if (_t26.state != 0 && _t26.err._typ != _IError_None___index) {
IError err = _t26.err;
v__ast__Type _t27 = method.return_type;
return _t27;
}
;
@ -59618,21 +59630,21 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
final_arg_sym = v__ast__Table_sym(c->table, final_arg_typ);
}
if (v__ast__Type_has_flag(exp_arg_typ, v__ast__TypeFlag__generic)) {
Option_v__ast__Type _t27;
if (_t27 = v__ast__Table_resolve_generic_to_concrete(c->table, exp_arg_typ, method.generic_names, concrete_types), _t27.state == 0) {
v__ast__Type exp_utyp = *(v__ast__Type*)_t27.data;
Option_v__ast__Type _t28;
if (_t28 = v__ast__Table_resolve_generic_to_concrete(c->table, exp_arg_typ, method.generic_names, concrete_types), _t28.state == 0) {
v__ast__Type exp_utyp = *(v__ast__Type*)_t28.data;
exp_arg_typ = exp_utyp;
} else {
IError err = _t27.err;
IError err = _t28.err;
continue;
}
if (v__ast__Type_has_flag(got_arg_typ, v__ast__TypeFlag__generic)) {
Option_v__ast__Type _t28;
if (_t28 = v__ast__Table_resolve_generic_to_concrete(c->table, got_arg_typ, method.generic_names, concrete_types), _t28.state == 0) {
v__ast__Type got_utyp = *(v__ast__Type*)_t28.data;
Option_v__ast__Type _t29;
if (_t29 = v__ast__Table_resolve_generic_to_concrete(c->table, got_arg_typ, method.generic_names, concrete_types), _t29.state == 0) {
v__ast__Type got_utyp = *(v__ast__Type*)_t29.data;
got_arg_typ = got_utyp;
} else {
IError err = _t28.err;
IError err = _t29.err;
continue;
}
}
@ -59644,9 +59656,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__checker__Checker_error(c, _SLIT("method with `shared` arguments cannot be called inside `lock`/`rlock` block"), arg->pos);
}
if (arg->is_mut) {
multi_return_string_v__token__Pos mr_47897 = v__checker__Checker_fail_if_immutable(c, arg->expr);
string to_lock = mr_47897.arg0;
v__token__Pos pos = mr_47897.arg1;
multi_return_string_v__token__Pos mr_48547 = v__checker__Checker_fail_if_immutable(c, arg->expr);
string to_lock = mr_48547.arg0;
v__token__Pos pos = mr_48547.arg1;
if (!param_is_mut) {
string tok = v__ast__ShareType_str(arg->share);
v__checker__Checker_error(c, str_intp(5, _MOV((StrIntpData[]){{_SLIT("`"), /*115 &string*/0xfe10, {.d_s = node->name}}, {_SLIT("` parameter `"), /*115 &string*/0xfe10, {.d_s = param.name}}, {_SLIT("` is not `"), /*115 &string*/0xfe10, {.d_s = tok}}, {_SLIT("`, `"), /*115 &string*/0xfe10, {.d_s = tok}}, {_SLIT("` is not needed`"), 0, { .d_c = 0 }}})), v__ast__Expr_pos(arg->expr));
@ -59697,9 +59709,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
continue;
}
Option_void _t29 = v__checker__Checker_check_expected_call_arg(c, got_arg_typ, exp_arg_typ, node->language, *arg);
if (_t29.state != 0 && _t29.err._typ != _IError_None___index) {
IError err = _t29.err;
Option_void _t30 = v__checker__Checker_check_expected_call_arg(c, got_arg_typ, exp_arg_typ, node->language, *arg);
if (_t30.state != 0 && _t30.err._typ != _IError_None___index) {
IError err = _t30.err;
v__ast__TypeSymbol* param_typ_sym = v__ast__Table_sym(c->table, exp_arg_typ);
v__ast__TypeSymbol* arg_typ_sym = v__ast__Table_sym(c->table, got_arg_typ);
if (param_typ_sym->kind == v__ast__Kind__array && arg_typ_sym->kind == v__ast__Kind__array) {
@ -59751,12 +59763,12 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
node->return_type = method.return_type;
}
if (node->concrete_types.len > 0 && method.return_type != 0 && c->table->cur_fn->generic_names.len == 0) {
Option_v__ast__Type _t31;
if (_t31 = v__ast__Table_resolve_generic_to_concrete(c->table, method.return_type, method.generic_names, concrete_types), _t31.state == 0) {
v__ast__Type typ = *(v__ast__Type*)_t31.data;
Option_v__ast__Type _t32;
if (_t32 = v__ast__Table_resolve_generic_to_concrete(c->table, method.return_type, method.generic_names, concrete_types), _t32.state == 0) {
v__ast__Type typ = *(v__ast__Type*)_t32.data;
node->return_type = typ;
v__ast__Type _t32 = typ;
return _t32;
v__ast__Type _t33 = typ;
return _t33;
}
}
if (node->concrete_types.len > 0 && method.generic_names.len == 0) {
@ -59770,11 +59782,11 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
}
}
v__ast__Type _t33 = node->return_type;
return _t33;
v__ast__Type _t34 = node->return_type;
return _t34;
}
v__ast__Type _t34 = method.return_type;
return _t34;
v__ast__Type _t35 = method.return_type;
return _t35;
}
if (string__eq(method_name, _SLIT("str"))) {
if (left_sym->kind == v__ast__Kind__interface_) {
@ -59787,25 +59799,25 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__checker__Checker_error(c, _SLIT(".str() method calls should have no arguments"), node->pos);
}
v__checker__Checker_fail_if_unreadable(c, node->left, left_type, _SLIT("receiver"));
v__ast__Type _t35 = _const_v__ast__string_type;
return _t35;
} else if (string__eq(method_name, _SLIT("free"))) {
v__ast__Type _t36 = _const_v__ast__void_type;
v__ast__Type _t36 = _const_v__ast__string_type;
return _t36;
} else if (string__eq(method_name, _SLIT("free"))) {
v__ast__Type _t37 = _const_v__ast__void_type;
return _t37;
}
Option_v__ast__StructField _t37;
if (_t37 = v__ast__Table_find_field_with_embeds(c->table, left_sym, method_name), _t37.state == 0) {
v__ast__StructField field = *(v__ast__StructField*)_t37.data;
Option_v__ast__StructField _t38;
if (_t38 = v__ast__Table_find_field_with_embeds(c->table, left_sym, method_name), _t38.state == 0) {
v__ast__StructField field = *(v__ast__StructField*)_t38.data;
v__ast__TypeSymbol* field_sym = v__ast__Table_sym(c->table, v__checker__Checker_unwrap_generic(c, field.typ));
if (field_sym->kind == v__ast__Kind__function) {
node->is_method = false;
node->is_field = true;
v__ast__FnType info = /* as */ *(v__ast__FnType*)__as_cast((field_sym->info)._v__ast__FnType,(field_sym->info)._typ, 444) /*expected idx: 444, name: v.ast.FnType */ ;
Option_void _t38 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/info.func);
if (_t38.state != 0 && _t38.err._typ != _IError_None___index) {
IError err = _t38.err;
v__ast__Type _t39 = info.func.return_type;
return _t39;
Option_void _t39 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/info.func);
if (_t39.state != 0 && _t39.err._typ != _IError_None___index) {
IError err = _t39.err;
v__ast__Type _t40 = info.func.return_type;
return _t40;
}
;
@ -59818,9 +59830,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
array_push((array*)&earg_types, _MOV((v__ast__Type[]){ targ }));
if (i < info.func.params.len) {
v__ast__Type exp_arg_typ = (*(v__ast__Param*)/*ee elem_sym */array_get(info.func.params, i)).typ;
Option_void _t41 = v__checker__Checker_check_expected_call_arg(c, targ, v__checker__Checker_unwrap_generic(c, exp_arg_typ), node->language, *arg);
if (_t41.state != 0 && _t41.err._typ != _IError_None___index) {
IError err = _t41.err;
Option_void _t42 = v__checker__Checker_check_expected_call_arg(c, targ, v__checker__Checker_unwrap_generic(c, exp_arg_typ), node->language, *arg);
if (_t42.state != 0 && _t42.err._typ != _IError_None___index) {
IError err = _t42.err;
if (!v__ast__Type_alias_eq(targ, _const_v__ast__void_type)) {
v__checker__Checker_error(c, str_intp(5, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = IError_name_table[err._typ]._method_msg(err._object)}}, {_SLIT(" in argument "), /*100 &int*/0xfe07, {.d_i32 = i + 1}}, {_SLIT(" to `"), /*115 &string*/0xfe10, {.d_s = left_sym->name}}, {_SLIT("."), /*115 &string*/0xfe10, {.d_s = method_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), arg->pos);
}
@ -59832,35 +59844,35 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
node->expected_arg_types = earg_types;
node->is_method = true;
Option_multi_return_v__ast__StructField_Array_v__ast__Type _t42 = v__ast__Table_find_field_from_embeds(c->table, left_sym, method_name);
if (_t42.state != 0) { /*or block*/
IError err = _t42.err;
v__ast__Type _t43 = info.func.return_type;
return _t43;
Option_multi_return_v__ast__StructField_Array_v__ast__Type _t43 = v__ast__Table_find_field_from_embeds(c->table, left_sym, method_name);
if (_t43.state != 0) { /*or block*/
IError err = _t43.err;
v__ast__Type _t44 = info.func.return_type;
return _t44;
}
multi_return_v__ast__StructField_Array_v__ast__Type mr_55362 = (*(multi_return_v__ast__StructField_Array_v__ast__Type*)_t42.data);
node->from_embed_types = mr_55362.arg1;
v__ast__Type _t44 = info.func.return_type;
return _t44;
multi_return_v__ast__StructField_Array_v__ast__Type mr_56012 = (*(multi_return_v__ast__StructField_Array_v__ast__Type*)_t43.data);
node->from_embed_types = mr_56012.arg1;
v__ast__Type _t45 = info.func.return_type;
return _t45;
}
}
if (!v__ast__Type_alias_eq(left_type, _const_v__ast__void_type)) {
Array_string _t45 = {0};
Array_v__ast__Fn _t45_orig = left_sym->methods;
int _t45_len = _t45_orig.len;
_t45 = __new_array(0, _t45_len, sizeof(string));
Array_string _t46 = {0};
Array_v__ast__Fn _t46_orig = left_sym->methods;
int _t46_len = _t46_orig.len;
_t46 = __new_array(0, _t46_len, sizeof(string));
for (int _t46 = 0; _t46 < _t45_len; ++_t46) {
v__ast__Fn it = ((v__ast__Fn*) _t45_orig.data)[_t46];
for (int _t47 = 0; _t47 < _t46_len; ++_t47) {
v__ast__Fn it = ((v__ast__Fn*) _t46_orig.data)[_t47];
string ti = it.name;
array_push((array*)&_t45, &ti);
array_push((array*)&_t46, &ti);
}
v__util__Suggestion suggestion = v__util__new_suggestion(method_name,_t45);
v__util__Suggestion suggestion = v__util__new_suggestion(method_name,_t46);
v__checker__Checker_error(c, v__util__Suggestion_say(suggestion, unknown_method_msg), node->pos);
}
v__ast__Type _t47 = _const_v__ast__void_type;
return _t47;
v__ast__Type _t48 = _const_v__ast__void_type;
return _t48;
}
VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_go_expr(v__checker__Checker* c, v__ast__GoExpr* node) {
@ -62639,7 +62651,7 @@ v__ast__Type v__checker__Checker_struct_init(v__checker__Checker* c, v__ast__Str
Array_v__ast__StructField info_fields_sorted = __new_array_with_default(0, 0, sizeof(v__ast__StructField), 0);
if (node->is_short) {
info_fields_sorted = array_clone_to_depth(&info.fields, 0);
qsort(info_fields_sorted.data, info_fields_sorted.len, info_fields_sorted.element_size, (int (*)(const void *, const void *))&compare_2892273012681280244_v__ast__StructField_by_i);
qsort(info_fields_sorted.data, info_fields_sorted.len, info_fields_sorted.element_size, (int (*)(const void *, const void *))&compare_5995660241070764127_v__ast__StructField_by_i);
}
Array_string inited_fields = __new_array_with_default(0, 0, sizeof(string), 0);
for (int i = 0; i < node->fields.len; ++i) {
@ -87835,6 +87847,7 @@ VV_LOCAL_SYMBOL v__ast__FnDecl v__parser__Parser_fn_decl(v__parser__Parser* p) {
if (is_method && v__ast__Type_has_flag(rec.typ, v__ast__TypeFlag__generic)) {
v__ast__TypeSymbol* sym = v__ast__Table_sym(p->table, rec.typ);
if ((sym->info)._typ == 417 /* v.ast.Struct */) {
Array_string fn_generic_names = array_clone_to_depth(&generic_names, 0);
Array_string _t11 = {0};
Array_v__ast__Type _t11_orig = (*sym->info._v__ast__Struct).generic_types;
int _t11_len = _t11_orig.len;
@ -87845,19 +87858,19 @@ VV_LOCAL_SYMBOL v__ast__FnDecl v__parser__Parser_fn_decl(v__parser__Parser* p) {
string ti = v__ast__Table_sym(p->table, it)->name;
array_push((array*)&_t11, &ti);
}
Array_string rec_generic_names =_t11;
for (int _t13 = 0; _t13 < rec_generic_names.len; ++_t13) {
string gname = ((string*)rec_generic_names.data)[_t13];
generic_names =_t11;
for (int _t13 = 0; _t13 < fn_generic_names.len; ++_t13) {
string gname = ((string*)fn_generic_names.data)[_t13];
if (!Array_string_contains(generic_names, gname)) {
array_push((array*)&generic_names, _MOV((string[]){ string_clone(gname) }));
}
}
}
}
multi_return_Array_v__ast__Param_bool_bool mr_9325 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args2 = mr_9325.arg0;
bool are_args_type_only = mr_9325.arg1;
bool is_variadic = mr_9325.arg2;
multi_return_Array_v__ast__Param_bool_bool mr_9364 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args2 = mr_9364.arg0;
bool are_args_type_only = mr_9364.arg1;
bool is_variadic = mr_9364.arg2;
if (is_c2v_variadic) {
is_variadic = true;
}
@ -88198,9 +88211,9 @@ bool v__parser__Parser_anon_fn_defer_0 = false;
v__parser__Parser_anon_fn_defer_0 = true;
p->scope->detached_from_parent = true;
Array_v__ast__Param inherited_vars = (p->tok.kind == v__token__Kind__lsbr ? (v__parser__Parser_closure_vars(p)) : (__new_array_with_default(0, 0, sizeof(v__ast__Param), 0)));
multi_return_Array_v__ast__Param_bool_bool mr_18790 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args = mr_18790.arg0;
bool is_variadic = mr_18790.arg2;
multi_return_Array_v__ast__Param_bool_bool mr_18829 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args = mr_18829.arg0;
bool is_variadic = mr_18829.arg2;
for (int _t2 = 0; _t2 < args.len; ++_t2) {
v__ast__Param arg = ((v__ast__Param*)args.data)[_t2];
if (arg.name.len == 0 && v__ast__Table_sym(p->table, arg.typ)->kind != v__ast__Kind__placeholder) {
@ -89759,7 +89772,7 @@ v__ast__Type v__parser__Parser_parse_inline_sum_type(v__parser__Parser* p) {
array_push((array*)&_t1, &ti);
}
Array_string variant_names =_t1;
qsort(variant_names.data, variant_names.len, variant_names.element_size, (int (*)(const void *, const void *))&compare_7932637671395545435_string);
qsort(variant_names.data, variant_names.len, variant_names.element_size, (int (*)(const void *, const void *))&compare_14364895672131222426_string);
string name = str_intp(2, _MOV((StrIntpData[]){{_SLIT("_v_anon_sum_type_"), /*115 &string*/0xfe10, {.d_s = Array_string_join(variant_names, _SLIT("_"))}}, {_SLIT0, 0, { .d_c = 0 }}}));
Array_v__ast__Type _t3 = {0};
Array_v__ast__TypeNode _t3_orig = variants;
@ -96610,7 +96623,7 @@ void v__builder__Builder_cc(v__builder__Builder* v) {
v__builder__Builder_build_thirdparty_obj_files(v);
v__builder__Builder_setup_output_name(v);
if (v->pref->os != v__pref__OS__windows && string_contains(ccompiler, _SLIT("++"))) {
string cpp_atomic_h_path = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/Chewing_Bever/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/atomic.h"), 0, { .d_c = 0 }}}));
string cpp_atomic_h_path = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/vieter/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/atomic.h"), 0, { .d_c = 0 }}}));
if (!os__exists(cpp_atomic_h_path)) {
for (int _t4 = 0; _t4 < v->parsed_files.len; ++_t4) {
v__ast__File* file = ((v__ast__File**)v->parsed_files.data)[_t4];
@ -96630,7 +96643,7 @@ void v__builder__Builder_cc(v__builder__Builder* v) {
eprintln( str_intp(2, _MOV((StrIntpData[]){{_SLIT("> creating "), /*115 &string*/0xfe10, {.d_s = cpp_atomic_h_path}}, {_SLIT(" ..."), 0, { .d_c = 0 }}})));
}
#endif
string cppgenv = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/Chewing_Bever/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/gen.v"), 0, { .d_c = 0 }}}));
string cppgenv = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/vieter/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/gen.v"), 0, { .d_c = 0 }}}));
os__execute( str_intp(4, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = os__quoted_path(vexe)}}, {_SLIT(" run "), /*115 &string*/0xfe10, {.d_s = os__quoted_path(cppgenv)}}, {_SLIT(" "), /*115 &string*/0xfe10, {.d_s = os__quoted_path(ccompiler)}}, {_SLIT0, 0, { .d_c = 0 }}})));
break;
}

449
v_win.c
View File

@ -1,11 +1,11 @@
#define V_COMMIT_HASH "c405c1916"
#define V_COMMIT_HASH "3afb88c4e"
#ifndef V_COMMIT_HASH
#define V_COMMIT_HASH "41857b0ac"
#define V_COMMIT_HASH "c405c1916"
#endif
#ifndef V_CURRENT_COMMIT_HASH
#define V_CURRENT_COMMIT_HASH "c405c19"
#define V_CURRENT_COMMIT_HASH "3afb88c"
#endif
// V comptime_definitions:
@ -7386,7 +7386,7 @@ string string_clone(string a);
string string_replace_once(string s, string rep, string with);
string string_replace(string s, string rep, string with);
string string_replace_each(string s, Array_string vals);
VV_LOCAL_SYMBOL int compare_11653268393309465375_RepIndex_by_idx(RepIndex* a, RepIndex* b) {
VV_LOCAL_SYMBOL int compare_3079424758118292824_RepIndex_by_idx(RepIndex* a, RepIndex* b) {
if (a->idx < b->idx) return -1;
else return 1;
}
@ -7563,7 +7563,7 @@ Array_string os__cmdline__only_non_options(Array_string args);
Array_string os__cmdline__only_options(Array_string args);
#define _const_v__token__max_keyword_len 20
v__token__KeywordsMatcher v__token__new_keywords_matcher_T_v__token__Kind(Map_string_v__token__Kind kw_map);
VV_LOCAL_SYMBOL int compare_186646746980636166_v__token__WIndex_by_word(v__token__WIndex* a, v__token__WIndex* b) {
VV_LOCAL_SYMBOL int compare_5690199065019732925_v__token__WIndex_by_word(v__token__WIndex* a, v__token__WIndex* b) {
if (string__lt(a->word, b->word)) return -1;
else return 1;
}
@ -7605,7 +7605,7 @@ Option_v__token__Kind v__token__kind_from_string(string s);
int v__mathutil__min_T_int(int a, int b);
int v__mathutil__max_T_int(int a, int b);
void v__dotgraph__start_digraph(void);
VV_LOCAL_SYMBOL void anon_fn_eb34f0b759dade77__82(void);
VV_LOCAL_SYMBOL void anon_fn_6b9593b3d6ef610a__82(void);
v__dotgraph__DotGraph* v__dotgraph__new(string name, string label, string color);
void v__dotgraph__DotGraph_writeln(v__dotgraph__DotGraph* d, string line);
void v__dotgraph__DotGraph_finish(v__dotgraph__DotGraph* d);
@ -7996,7 +7996,7 @@ Option_void os__execve(string cmdpath, Array_string cmdargs, Array_string envs);
int os__is_atty(int fd);
Option_void os__write_file_array(string path, array buffer);
Option_Array_string os__glob(Array_string patterns);
VV_LOCAL_SYMBOL int compare_3075544183021293552_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_3677745349018262865_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -8669,7 +8669,7 @@ Array_string Array_v__cflag__CFlag_c_options_only_object_files(Array_v__cflag__C
multi_return_Array_string_Array_string_Array_string Array_v__cflag__CFlag_defines_others_libs(Array_v__cflag__CFlag cflags);
VV_LOCAL_SYMBOL Option_string v__pkgconfig__desc(string mod);
Option_v__pkgconfig__Main_ptr v__pkgconfig__main(Array_string args);
VV_LOCAL_SYMBOL int compare_16330786295575367509_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_10129308118656229290_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -8823,7 +8823,7 @@ v__pref__CompilerType v__pref__cc_from_string(string cc_str);
v__pref__Arch v__pref__get_host_arch(void);
VV_LOCAL_SYMBOL void v__pref__Preferences_parse_define(v__pref__Preferences* prefs, string define);
Array_string v__pref__Preferences_should_compile_filtered_files(v__pref__Preferences* prefs, string dir, Array_string files_);
VV_LOCAL_SYMBOL int compare_13661271458656804876_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_11540237029762306605_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -8885,7 +8885,7 @@ void sync__WaitGroup_wait(sync__WaitGroup* wg);
string _const_help__unknown_topic; // a string literal, inited later
void help__print_and_exit(string topic);
VV_LOCAL_SYMBOL string help__known_topics(string topicdir);
VV_LOCAL_SYMBOL int compare_10452767129756656329_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_1468091262560489642_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -8928,13 +8928,13 @@ v__util__Suggestion v__util__new_suggestion(string wanted, Array_string possibil
void v__util__Suggestion_add(v__util__Suggestion* s, string val);
void v__util__Suggestion_add_many(v__util__Suggestion* s, Array_string many);
void v__util__Suggestion_sort(v__util__Suggestion* s);
VV_LOCAL_SYMBOL int compare_6907021362050549619_v__util__Possibility_by_similarity(v__util__Possibility* a, v__util__Possibility* b) {
VV_LOCAL_SYMBOL int compare_15123029833316296960_v__util__Possibility_by_similarity(v__util__Possibility* a, v__util__Possibility* b) {
if (a->similarity < b->similarity) return -1;
else return 1;
}
string v__util__Suggestion_say(v__util__Suggestion s, string msg);
VV_LOCAL_SYMBOL int compare_6907021362050549619_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_15123029833316296960_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -9519,7 +9519,7 @@ v__ast__Type v__checker__Checker_int_lit(v__checker__Checker* c, v__ast__Integer
void v__checker__Checker_struct_decl(v__checker__Checker* c, v__ast__StructDecl* node);
VV_LOCAL_SYMBOL int v__checker__minify_sort_fn(v__ast__StructField* a, v__ast__StructField* b);
v__ast__Type v__checker__Checker_struct_init(v__checker__Checker* c, v__ast__StructInit* node);
VV_LOCAL_SYMBOL int compare_2892273012681280244_v__ast__StructField_by_i(v__ast__StructField* a, v__ast__StructField* b) {
VV_LOCAL_SYMBOL int compare_5995660241070764127_v__ast__StructField_by_i(v__ast__StructField* a, v__ast__StructField* b) {
if (a->i < b->i) return -1;
else return 1;
}
@ -10040,7 +10040,7 @@ v__ast__Type v__parser__Parser_parse_fn_type(v__parser__Parser* p, string name);
v__ast__Type v__parser__Parser_parse_type_with_mut(v__parser__Parser* p, bool is_mut);
v__ast__Language v__parser__Parser_parse_language(v__parser__Parser* p);
v__ast__Type v__parser__Parser_parse_inline_sum_type(v__parser__Parser* p);
VV_LOCAL_SYMBOL int compare_7932637671395545435_string(string* a, string* b) {
VV_LOCAL_SYMBOL int compare_14364895672131222426_string(string* a, string* b) {
if (string__lt(*a, *b)) return -1;
else return 1;
}
@ -12702,7 +12702,7 @@ void v__ast__TypeSymbol_free(v__ast__TypeSymbol* it) {
string_free(&(it->mod));
}
VV_LOCAL_SYMBOL void anon_fn_eb34f0b759dade77__82(void) {
VV_LOCAL_SYMBOL void anon_fn_6b9593b3d6ef610a__82(void) {
println(_SLIT("}"));
}
@ -20379,7 +20379,7 @@ string string_replace_each(string s, Array_string vals) {
if (idxs.len == 0) {
return string_clone(s);
}
qsort(idxs.data, idxs.len, idxs.element_size, (int (*)(const void *, const void *))&compare_11653268393309465375_RepIndex_by_idx);
qsort(idxs.data, idxs.len, idxs.element_size, (int (*)(const void *, const void *))&compare_3079424758118292824_RepIndex_by_idx);
u8* b = malloc_noscan(new_len + 1);
int idx_pos = 0;
RepIndex cur_idx = ((RepIndex*)idxs.data)[idx_pos];
@ -23093,7 +23093,7 @@ v__token__KeywordsMatcher v__token__new_keywords_matcher_T_v__token__Kind(Map_st
}
for (int i = 0; i < _const_v__token__max_keyword_len; ++i) {
if (km.words[v_fixed_index(i, 20)].len > 0) {
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_186646746980636166_v__token__WIndex_by_word);
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_5690199065019732925_v__token__WIndex_by_word);
}
}
v__token__KeywordsMatcher _t4 = km;
@ -23120,7 +23120,7 @@ v__token__KeywordsMatcher v__token__new_keywords_matcher_T_int(Map_string_int kw
}
for (int i = 0; i < _const_v__token__max_keyword_len; ++i) {
if (km.words[v_fixed_index(i, 20)].len > 0) {
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_186646746980636166_v__token__WIndex_by_word);
qsort(km.words[v_fixed_index(i, 20)].data, km.words[v_fixed_index(i, 20)].len, km.words[v_fixed_index(i, 20)].element_size, (int (*)(const void *, const void *))&compare_5690199065019732925_v__token__WIndex_by_word);
}
}
v__token__KeywordsMatcher _t4 = km;
@ -24434,7 +24434,7 @@ inline int v__mathutil__max_T_int(int a, int b) {
void v__dotgraph__start_digraph(void) {
println(_SLIT("digraph G {"));
atexit((voidptr) anon_fn_eb34f0b759dade77__82);
atexit((voidptr) anon_fn_6b9593b3d6ef610a__82);
}
v__dotgraph__DotGraph* v__dotgraph__new(string name, string label, string color) {
@ -27746,7 +27746,7 @@ Option_Array_string os__glob(Array_string patterns) {
;
}
qsort(matches.data, matches.len, matches.element_size, (int (*)(const void *, const void *))&compare_3075544183021293552_string);
qsort(matches.data, matches.len, matches.element_size, (int (*)(const void *, const void *))&compare_3677745349018262865_string);
Option_Array_string _t4;
opt_ok(&(Array_string[]) { matches }, (Option*)(&_t4), sizeof(Array_string));
return _t4;
@ -34838,7 +34838,7 @@ Option_v__pkgconfig__Main_ptr v__pkgconfig__main(Array_string args) {
m->res = _const_v__pkgconfig__version;
} else if (opt->listall) {
Array_string modules = v__pkgconfig__list();
qsort(modules.data, modules.len, modules.element_size, (int (*)(const void *, const void *))&compare_16330786295575367509_string);
qsort(modules.data, modules.len, modules.element_size, (int (*)(const void *, const void *))&compare_10129308118656229290_string);
if (opt->description) {
for (int _t1 = 0; _t1 < modules.len; ++_t1) {
string mod = ((string*)modules.data)[_t1];
@ -36387,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("41857b0ac");
string vhash = _SLIT("c405c1916");
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;
@ -37647,7 +37647,7 @@ VV_LOCAL_SYMBOL void v__pref__Preferences_parse_define(v__pref__Preferences* pre
Array_string v__pref__Preferences_should_compile_filtered_files(v__pref__Preferences* prefs, string dir, Array_string files_) {
Array_string res = __new_array_with_default(0, 0, sizeof(string), 0);
Array_string files = array_clone_to_depth(&files_, 0);
qsort(files.data, files.len, files.element_size, (int (*)(const void *, const void *))&compare_13661271458656804876_string);
qsort(files.data, files.len, files.element_size, (int (*)(const void *, const void *))&compare_11540237029762306605_string);
Array_string all_v_files = __new_array_with_default(0, 0, sizeof(string), 0);
for (int _t1 = 0; _t1 < files.len; ++_t1) {
string file = ((string*)files.data)[_t1];
@ -38845,7 +38845,7 @@ VV_LOCAL_SYMBOL string help__known_topics(string topicdir) {
array_push((array*)&_t3, &ti);
}
Array_string topics =_t3;
qsort(topics.data, topics.len, topics.element_size, (int (*)(const void *, const void *))&compare_10452767129756656329_string);
qsort(topics.data, topics.len, topics.element_size, (int (*)(const void *, const void *))&compare_1468091262560489642_string);
array_push((array*)&res, _MOV((string[]){ string_clone(Array_string_join(topics, _SLIT(", "))) }));
array_push((array*)&res, _MOV((string[]){ string_clone(_SLIT(".")) }));
string _t7 = Array_string_join(res, _SLIT(""));
@ -39342,7 +39342,7 @@ void v__util__Suggestion_add_many(v__util__Suggestion* s, Array_string many) {
}
void v__util__Suggestion_sort(v__util__Suggestion* s) {
qsort(s->known.data, s->known.len, s->known.element_size, (int (*)(const void *, const void *))&compare_6907021362050549619_v__util__Possibility_by_similarity);
qsort(s->known.data, s->known.len, s->known.element_size, (int (*)(const void *, const void *))&compare_15123029833316296960_v__util__Possibility_by_similarity);
}
string v__util__Suggestion_say(v__util__Suggestion s, string msg) {
@ -39371,7 +39371,7 @@ string v__util__Suggestion_say(v__util__Suggestion s, string msg) {
array_push((array*)&_t1, &ti);
}
Array_string values =_t1;
qsort(values.data, values.len, values.element_size, (int (*)(const void *, const void *))&compare_6907021362050549619_string);
qsort(values.data, values.len, values.element_size, (int (*)(const void *, const void *))&compare_15123029833316296960_string);
if (values.len == 1) {
res = /*f*/string__plus(res, str_intp(2, _MOV((StrIntpData[]){{_SLIT(".\n1 possibility: "), /*115 &string*/0xfe10, {.d_s = (*(string*)/*ee elem_sym */array_get(values, 0))}}, {_SLIT("."), 0, { .d_c = 0 }}})));
} else if (values.len < 25) {
@ -48606,136 +48606,140 @@ bool v__checker__Checker_check_types(v__checker__Checker* c, v__ast__Type got, v
bool got_is_ptr = v__ast__Type_is_ptr(got);
bool exp_is_ptr = v__ast__Type_is_ptr(expected);
if (c->pref->translated) {
if (v__ast__Type_alias_eq(expected, _const_v__ast__byteptr_type)) {
if (v__ast__Type_is_int(expected) && v__ast__Type_is_int(got)) {
bool _t2 = true;
return _t2;
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__voidptr_type)) {
if (v__ast__Type_alias_eq(expected, _const_v__ast__byteptr_type)) {
bool _t3 = true;
return _t3;
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__bool_type) && (v__ast__Type_is_any_kind_of_pointer(got) || v__ast__Type_is_int(got))) {
if (v__ast__Type_alias_eq(expected, _const_v__ast__voidptr_type)) {
bool _t4 = true;
return _t4;
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__bool_type) && (v__ast__Type_is_any_kind_of_pointer(got) || v__ast__Type_is_int(got))) {
bool _t5 = true;
return _t5;
}
if (v__ast__Type_is_any_kind_of_pointer(expected)) {
v__ast__Type deref = v__ast__Type_deref(expected);
v__ast__TypeSymbol* got_sym = v__ast__Table_sym(c->table, got);
if (v__ast__Type_is_number(deref) && (v__ast__TypeSymbol_is_number(got_sym) || got_sym->kind == v__ast__Kind__enum_)) {
bool _t5 = true;
return _t5;
bool _t6 = true;
return _t6;
}
}
if ((v__ast__Type_alias_eq(expected, _const_v__ast__rune_type) && v__ast__Type_is_int(got)) || (v__ast__Type_alias_eq(got, _const_v__ast__rune_type) && v__ast__Type_is_int(expected))) {
bool _t6 = true;
return _t6;
bool _t7 = true;
return _t7;
}
v__ast__TypeSymbol* got_sym = v__ast__Table_sym(c->table, got);
v__ast__TypeSymbol* expected_sym = v__ast__Table_sym(c->table, expected);
if (got_sym->kind == v__ast__Kind__enum_) {
if (v__ast__TypeSymbol_is_number(expected_sym)) {
bool _t7 = true;
return _t7;
bool _t8 = true;
return _t8;
}
} else if (got_sym->kind == v__ast__Kind__array_fixed) {
if (v__ast__TypeSymbol_is_number(expected_sym)) {
bool _t8 = true;
return _t8;
} else if (v__ast__Type_is_any_kind_of_pointer(expected)) {
bool _t9 = true;
return _t9;
} else if (v__ast__Type_is_any_kind_of_pointer(expected)) {
bool _t10 = true;
return _t10;
}
} else if (expected_sym->kind == v__ast__Kind__array_fixed) {
if (v__ast__TypeSymbol_is_number(got_sym) && v__ast__Type_is_any_kind_of_pointer(got)) {
bool _t10 = true;
return _t10;
bool _t11 = true;
return _t11;
} else if (got_sym->kind == v__ast__Kind__array) {
v__ast__ArrayFixed info = /* as */ *(v__ast__ArrayFixed*)__as_cast((expected_sym->info)._v__ast__ArrayFixed,(expected_sym->info)._typ, 479) /*expected idx: 479, name: v.ast.ArrayFixed */ ;
v__ast__Array info2 = /* as */ *(v__ast__Array*)__as_cast((got_sym->info)._v__ast__Array,(got_sym->info)._typ, 451) /*expected idx: 451, name: v.ast.Array */ ;
if (v__checker__Checker_check_types(c, info.elem_type, info2.elem_type)) {
bool _t11 = true;
return _t11;
bool _t12 = true;
return _t12;
}
}
}
if (expected_sym->kind == v__ast__Kind__enum_ && v__ast__TypeSymbol_is_number(got_sym)) {
bool _t12 = true;
return _t12;
bool _t13 = true;
return _t13;
}
if (got_is_ptr && exp_is_ptr) {
if (v__ast__TypeSymbol_is_number(expected_sym) && v__ast__TypeSymbol_is_number(got_sym)) {
bool _t13 = true;
return _t13;
bool _t14 = true;
return _t14;
}
}
}
if (got_is_ptr && exp_is_ptr) {
if (v__ast__Type_nr_muls(got) != v__ast__Type_nr_muls(expected)) {
bool _t14 = false;
return _t14;
bool _t15 = false;
return _t15;
}
}
int exp_idx = v__ast__Type_idx(expected);
int got_idx = v__ast__Type_idx(got);
if (exp_idx == got_idx) {
bool _t15 = true;
return _t15;
bool _t16 = true;
return _t16;
}
if (exp_idx == _const_v__ast__voidptr_type_idx || exp_idx == _const_v__ast__byteptr_type_idx || (v__ast__Type_is_ptr(expected) && v__ast__Type_idx(v__ast__Type_deref(expected)) == _const_v__ast__byte_type_idx)) {
if (v__ast__Type_is_ptr(got) || v__ast__Type_is_pointer(got)) {
bool _t16 = true;
return _t16;
}
}
if (v__ast__Type_is_real_pointer(expected)) {
if (v__ast__Type_alias_eq(got, _const_v__ast__int_literal_type)) {
bool _t17 = true;
return _t17;
}
}
if (got_idx == _const_v__ast__voidptr_type_idx || got_idx == _const_v__ast__byteptr_type_idx || (got_idx == _const_v__ast__byte_type_idx && v__ast__Type_is_ptr(got))) {
if (v__ast__Type_is_ptr(expected) || v__ast__Type_is_pointer(expected)) {
if (v__ast__Type_is_real_pointer(expected)) {
if (v__ast__Type_alias_eq(got, _const_v__ast__int_literal_type)) {
bool _t18 = true;
return _t18;
}
}
if (got_idx == _const_v__ast__voidptr_type_idx || got_idx == _const_v__ast__byteptr_type_idx || (got_idx == _const_v__ast__byte_type_idx && v__ast__Type_is_ptr(got))) {
if (v__ast__Type_is_ptr(expected) || v__ast__Type_is_pointer(expected)) {
bool _t19 = true;
return _t19;
}
}
if (v__ast__Type_alias_eq(expected, _const_v__ast__charptr_type) && v__ast__Type_alias_eq(got, v__ast__Type_ref(_const_v__ast__char_type))) {
bool _t19 = true;
return _t19;
bool _t20 = true;
return _t20;
}
if (v__ast__Type_has_flag(expected, v__ast__TypeFlag__optional) || v__ast__Type_has_flag(expected, v__ast__TypeFlag__result)) {
v__ast__TypeSymbol* sym = v__ast__Table_sym(c->table, got);
if (((sym->idx == _const_v__ast__error_type_idx || (v__ast__Type_alias_eq(got, _const_v__ast__none_type) || v__ast__Type_alias_eq(got, _const_v__ast__error_type))) && v__ast__Type_has_flag(expected, v__ast__TypeFlag__optional)) || ((sym->idx == _const_v__ast__error_type_idx || v__ast__Type_alias_eq(got, _const_v__ast__error_type)) && v__ast__Type_has_flag(expected, v__ast__TypeFlag__result))) {
bool _t20 = true;
return _t20;
} else if (!v__checker__Checker_check_basic(c, got, v__ast__Type_clear_flag(v__ast__Type_clear_flag(expected, v__ast__TypeFlag__optional), v__ast__TypeFlag__result))) {
bool _t21 = false;
bool _t21 = true;
return _t21;
} else if (!v__checker__Checker_check_basic(c, got, v__ast__Type_clear_flag(v__ast__Type_clear_flag(expected, v__ast__TypeFlag__optional), v__ast__TypeFlag__result))) {
bool _t22 = false;
return _t22;
}
}
if (!v__checker__Checker_check_basic(c, got, expected)) {
bool _t22 = false;
return _t22;
bool _t23 = false;
return _t23;
}
if (v__ast__Type_is_number(got) && v__ast__Type_is_number(expected)) {
if (v__ast__Type_alias_eq(got, _const_v__ast__rune_type) && v__ast__Type_alias_eq(expected, _const_v__ast__byte_type)) {
bool _t23 = true;
return _t23;
} else if (v__ast__Type_alias_eq(expected, _const_v__ast__rune_type) && v__ast__Type_alias_eq(got, _const_v__ast__byte_type)) {
bool _t24 = true;
return _t24;
} else if (v__ast__Type_alias_eq(expected, _const_v__ast__rune_type) && v__ast__Type_alias_eq(got, _const_v__ast__byte_type)) {
bool _t25 = true;
return _t25;
}
if (!v__ast__Type_alias_eq(v__checker__Checker_promote_num(c, expected, got), expected)) {
bool _t25 = false;
return _t25;
bool _t26 = false;
return _t26;
}
}
if (v__ast__Type_has_flag(expected, v__ast__TypeFlag__generic)) {
bool _t26 = false;
return _t26;
bool _t27 = false;
return _t27;
}
bool _t27 = true;
return _t27;
bool _t28 = true;
return _t28;
}
Option_void v__checker__Checker_check_expected_call_arg(v__checker__Checker* c, v__ast__Type got, v__ast__Type expected_, v__ast__Language language, v__ast__CallArg arg) {
@ -49083,10 +49087,10 @@ VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_promote_num(v__checker__Checker
v__ast__Type type_hi = left_type;
v__ast__Type type_lo = right_type;
if (v__ast__Type_idx(type_hi) < v__ast__Type_idx(type_lo)) {
v__ast__Type _var_17710 = type_hi;
v__ast__Type _var_17719 = type_lo;
type_hi = _var_17719;
type_lo = _var_17710;
v__ast__Type _var_17770 = type_hi;
v__ast__Type _var_17779 = type_lo;
type_hi = _var_17779;
type_lo = _var_17770;
}
int idx_hi = v__ast__Type_idx(type_hi);
int idx_lo = v__ast__Type_idx(type_lo);
@ -57259,6 +57263,9 @@ v__ast__Type v__checker__Checker_fn_call(v__checker__Checker* c, v__ast__CallExp
if (v__ast__Type_alias_eq(arg_typ, _const_v__ast__int_type) && param_typ_sym->kind == v__ast__Kind__enum_) {
continue;
}
if ((v__ast__Type_alias_eq(arg_typ, _const_v__ast__bool_type) && v__ast__Type_is_int(param.typ)) || (v__ast__Type_is_int(arg_typ) && v__ast__Type_alias_eq(param.typ, _const_v__ast__bool_type))) {
continue;
}
bool param_is_number = v__ast__Type_is_number(param.typ);
if (v__ast__Type_is_ptr(param.typ)) {
param_is_number = v__ast__Type_is_number(v__ast__Type_deref(param.typ));
@ -57273,7 +57280,7 @@ v__ast__Type v__checker__Checker_fn_call(v__checker__Checker* c, v__ast__CallExp
if (param.typ == _const_v__ast__voidptr_type_idx || arg_typ == _const_v__ast__voidptr_type_idx) {
continue;
}
if ((arg_typ_sym->kind == v__ast__Kind__array_fixed && param_is_number) || (param_typ_sym->kind == v__ast__Kind__array_fixed && typ_is_number)) {
if ((arg_typ_sym->kind == v__ast__Kind__array_fixed && (param_is_number || v__ast__Type_is_any_kind_of_pointer(param.typ))) || (param_typ_sym->kind == v__ast__Kind__array_fixed && (typ_is_number || v__ast__Type_is_any_kind_of_pointer(arg_typ)))) {
continue;
}
if (v__ast__Type_is_any_kind_of_pointer(param.typ) && typ_is_number) {
@ -57375,12 +57382,6 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__ast__Type left_type = v__checker__Checker_expr(c, node->left);
c->expected_type = left_type;
bool is_generic = v__ast__Type_has_flag(left_type, v__ast__TypeFlag__generic);
if (is_generic && node->concrete_types.len == 0) {
v__ast__TypeSymbol* rec_sym = v__ast__Table_sym(c->table, left_type);
if ((rec_sym->info)._typ == 456 /* v.ast.Struct */) {
node->concrete_types = (*rec_sym->info._v__ast__Struct).generic_types;
}
}
node->left_type = left_type;
node->return_type = left_type;
node->receiver_type = left_type;
@ -57420,51 +57421,37 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__ast__Type _t6 = _const_v__ast__void_type;
return _t6;
}
Array_v__ast__Type concrete_types = __new_array_with_default(0, 0, sizeof(v__ast__Type), 0);
for (int _t7 = 0; _t7 < node->concrete_types.len; ++_t7) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t7];
if (v__ast__Type_has_flag(concrete_type, v__ast__TypeFlag__generic)) {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ v__checker__Checker_unwrap_generic(c, concrete_type) }));
} else {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ concrete_type }));
}
}
if (concrete_types.len > 0) {
if (v__ast__Table_register_fn_concrete_types(c->table, v__ast__CallExpr_fkey(node), concrete_types)) {
c->need_recheck_generic_fns = true;
}
}
if (left_sym->kind == v__ast__Kind__array && Array_string_contains(_const_v__checker__array_builtin_methods, method_name)) {
v__ast__Type _t10 = v__checker__Checker_array_builtin_method_call(c, node, left_type, *v__ast__Table_sym(c->table, left_type));
return _t10;
v__ast__Type _t7 = v__checker__Checker_array_builtin_method_call(c, node, left_type, *v__ast__Table_sym(c->table, left_type));
return _t7;
} else if ((left_sym->kind == v__ast__Kind__map || final_left_sym->kind == v__ast__Kind__map) && (string__eq(method_name, _SLIT("clone")) || string__eq(method_name, _SLIT("keys")) || string__eq(method_name, _SLIT("move")) || string__eq(method_name, _SLIT("delete")))) {
if (left_sym->kind == v__ast__Kind__map) {
v__ast__Type _t11 = v__checker__Checker_map_builtin_method_call(c, node, left_type, *left_sym);
return _t11;
v__ast__Type _t8 = v__checker__Checker_map_builtin_method_call(c, node, left_type, *left_sym);
return _t8;
} else {
v__ast__Type parent_type = (/* as */ *(v__ast__Alias*)__as_cast((left_sym->info)._v__ast__Alias,(left_sym->info)._typ, 471) /*expected idx: 471, name: v.ast.Alias */ ).parent_type;
v__ast__Type _t12 = v__checker__Checker_map_builtin_method_call(c, node, parent_type, *final_left_sym);
return _t12;
v__ast__Type _t9 = v__checker__Checker_map_builtin_method_call(c, node, parent_type, *final_left_sym);
return _t9;
}
} else if (left_sym->kind == v__ast__Kind__array && (string__eq(method_name, _SLIT("insert")) || string__eq(method_name, _SLIT("prepend")))) {
if (string__eq(method_name, _SLIT("insert"))) {
if (node->args.len != 2) {
v__checker__Checker_error(c, _SLIT("`array.insert()` should have 2 arguments, e.g. `insert(1, val)`"), node->pos);
v__ast__Type _t13 = _const_v__ast__void_type;
return _t13;
v__ast__Type _t10 = _const_v__ast__void_type;
return _t10;
} else {
v__ast__Type arg_type = v__checker__Checker_expr(c, (*(v__ast__CallArg*)/*ee elem_sym */array_get(node->args, 0)).expr);
if (!(v__ast__Type_alias_eq(arg_type, _const_v__ast__int_type) || v__ast__Type_alias_eq(arg_type, _const_v__ast__int_literal_type))) {
v__checker__Checker_error(c, _SLIT("the first argument of `array.insert()` should be integer"), v__ast__Expr_pos((*(v__ast__CallArg*)/*ee elem_sym */array_get(node->args, 0)).expr));
v__ast__Type _t14 = _const_v__ast__void_type;
return _t14;
v__ast__Type _t11 = _const_v__ast__void_type;
return _t11;
}
}
} else {
if (node->args.len != 1) {
v__checker__Checker_error(c, _SLIT("`array.prepend()` should have 1 argument, e.g. `prepend(val)`"), node->pos);
v__ast__Type _t15 = _const_v__ast__void_type;
return _t15;
v__ast__Type _t12 = _const_v__ast__void_type;
return _t12;
}
}
v__ast__Array info = /* as */ *(v__ast__Array*)__as_cast((left_sym->info)._v__ast__Array,(left_sym->info)._typ, 451) /*expected idx: 451, name: v.ast.Array */ ;
@ -57477,8 +57464,8 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
} else if (final_left_sym->kind == v__ast__Kind__array && (string__eq(method_name, _SLIT("first")) || string__eq(method_name, _SLIT("last")) || string__eq(method_name, _SLIT("pop")))) {
if ((final_left_sym->info)._typ == 451 /* v.ast.Array */) {
node->return_type = (*final_left_sym->info._v__ast__Array).elem_type;
v__ast__Type _t16 = node->return_type;
return _t16;
v__ast__Type _t13 = node->return_type;
return _t13;
}
} else if (v__pref__Backend_is_js(c->pref->backend) && string_starts_with(left_sym->name, _SLIT("Promise<")) && string__eq(method_name, _SLIT("wait"))) {
v__ast__Struct info = /* as */ *(v__ast__Struct*)__as_cast((left_sym->info)._v__ast__Struct,(left_sym->info)._typ, 456) /*expected idx: 456, name: v.ast.Struct */ ;
@ -57488,31 +57475,31 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
c->table->cur_fn->has_await = true;
node->return_type = (*(v__ast__Type*)/*ee elem_sym */array_get(info.concrete_types, 0));
v__ast__Type_set_flag(node->return_type, v__ast__TypeFlag__optional);
v__ast__Type _t17 = node->return_type;
return _t17;
v__ast__Type _t14 = node->return_type;
return _t14;
} else if (left_sym->kind == v__ast__Kind__thread && string__eq(method_name, _SLIT("wait"))) {
v__ast__Thread info = /* as */ *(v__ast__Thread*)__as_cast((left_sym->info)._v__ast__Thread,(left_sym->info)._typ, 481) /*expected idx: 481, name: v.ast.Thread */ ;
if (node->args.len > 0) {
v__checker__Checker_error(c, _SLIT("wait() does not have any arguments"), (*(v__ast__CallArg*)/*ee elem_sym */array_get(node->args, 0)).pos);
}
node->return_type = info.return_type;
v__ast__Type _t18 = info.return_type;
return _t18;
v__ast__Type _t15 = info.return_type;
return _t15;
} else if (left_sym->kind == v__ast__Kind__char && v__ast__Type_nr_muls(left_type) == 0 && string__eq(method_name, _SLIT("str"))) {
v__checker__Checker_error(c, _SLIT("calling `.str()` on type `char` is not allowed, use its address or cast it to an integer instead"), v__token__Pos_extend(v__ast__Expr_pos(node->left), node->pos));
v__ast__Type _t19 = _const_v__ast__void_type;
return _t19;
v__ast__Type _t16 = _const_v__ast__void_type;
return _t16;
}
v__ast__Fn method = ((v__ast__Fn){.params = __new_array(0, 0, sizeof(v__ast__Param)),.generic_names = __new_array(0, 0, sizeof(string)),.attrs = __new_array(0, 0, sizeof(v__ast__Attr)),.mod = (string){.str=(byteptr)"", .is_lit=1},.file = (string){.str=(byteptr)"", .is_lit=1},.name = (string){.str=(byteptr)"", .is_lit=1},.pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type_pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type = 0,.receiver_type = 0,.usages = 0,.ctdefine_idx = 0,.source_fn = 0,.language = 0,.file_mode = 0,.is_variadic = 0,.is_pub = 0,.is_ctor_new = 0,.is_deprecated = 0,.is_noreturn = 0,.is_unsafe = 0,.is_placeholder = 0,.is_main = 0,.is_test = 0,.is_keep_alive = 0,.is_method = 0,.no_body = 0,.is_conditional = 0,});
bool has_method = false;
bool is_method_from_embed = false;
Option_v__ast__Fn _t20;
if (_t20 = v__ast__Table_find_method(c->table, left_sym, method_name), _t20.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t20.data;
Option_v__ast__Fn _t17;
if (_t17 = v__ast__Table_find_method(c->table, left_sym, method_name), _t17.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t17.data;
method = m;
has_method = true;
} else {
IError err = _t20.err;
IError err = _t17.err;
if (left_sym->kind == v__ast__Kind__struct_ || left_sym->kind == v__ast__Kind__sum_type || left_sym->kind == v__ast__Kind__interface_) {
v__ast__Type parent_type = _const_v__ast__void_type;
if ((left_sym->info)._typ == 456 /* v.ast.Struct */) {
@ -57524,9 +57511,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
if (parent_type != 0) {
v__ast__TypeSymbol* type_sym = v__ast__Table_sym(c->table, parent_type);
Option_v__ast__Fn _t21;
if (_t21 = v__ast__Table_find_method(c->table, type_sym, method_name), _t21.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t21.data;
Option_v__ast__Fn _t18;
if (_t18 = v__ast__Table_find_method(c->table, type_sym, method_name), _t18.state == 0) {
v__ast__Fn m = *(v__ast__Fn*)_t18.data;
method = m;
has_method = true;
is_generic = true;
@ -57536,19 +57523,19 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
if (!has_method) {
has_method = true;
Array_v__ast__Type embed_types = __new_array_with_default(0, 0, sizeof(v__ast__Type), 0);
Option_multi_return_v__ast__Fn_Array_v__ast__Type _t22 = v__ast__Table_find_method_from_embeds(c->table, left_sym, method_name);
if (_t22.state != 0) { /*or block*/
IError err = _t22.err;
Option_multi_return_v__ast__Fn_Array_v__ast__Type _t19 = v__ast__Table_find_method_from_embeds(c->table, left_sym, method_name);
if (_t19.state != 0) { /*or block*/
IError err = _t19.err;
if ((IError_name_table[err._typ]._method_msg(err._object)).len != 0) {
v__checker__Checker_error(c, IError_name_table[err._typ]._method_msg(err._object), node->pos);
}
has_method = false;
*(multi_return_v__ast__Fn_Array_v__ast__Type*) _t22.data = (multi_return_v__ast__Fn_Array_v__ast__Type){.arg0=((v__ast__Fn){.params = __new_array(0, 0, sizeof(v__ast__Param)),.generic_names = __new_array(0, 0, sizeof(string)),.attrs = __new_array(0, 0, sizeof(v__ast__Attr)),.mod = (string){.str=(byteptr)"", .is_lit=1},.file = (string){.str=(byteptr)"", .is_lit=1},.name = (string){.str=(byteptr)"", .is_lit=1},.pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type_pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type = 0,.receiver_type = 0,.usages = 0,.ctdefine_idx = 0,.source_fn = 0,.language = 0,.file_mode = 0,.is_variadic = 0,.is_pub = 0,.is_ctor_new = 0,.is_deprecated = 0,.is_noreturn = 0,.is_unsafe = 0,.is_placeholder = 0,.is_main = 0,.is_test = 0,.is_keep_alive = 0,.is_method = 0,.no_body = 0,.is_conditional = 0,}),.arg1=__new_array_with_default(0, 0, sizeof(v__ast__Type), 0)};
*(multi_return_v__ast__Fn_Array_v__ast__Type*) _t19.data = (multi_return_v__ast__Fn_Array_v__ast__Type){.arg0=((v__ast__Fn){.params = __new_array(0, 0, sizeof(v__ast__Param)),.generic_names = __new_array(0, 0, sizeof(string)),.attrs = __new_array(0, 0, sizeof(v__ast__Attr)),.mod = (string){.str=(byteptr)"", .is_lit=1},.file = (string){.str=(byteptr)"", .is_lit=1},.name = (string){.str=(byteptr)"", .is_lit=1},.pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type_pos = (v__token__Pos){.len = 0,.line_nr = 0,.pos = 0,.col = 0,.last_line = 0,},.return_type = 0,.receiver_type = 0,.usages = 0,.ctdefine_idx = 0,.source_fn = 0,.language = 0,.file_mode = 0,.is_variadic = 0,.is_pub = 0,.is_ctor_new = 0,.is_deprecated = 0,.is_noreturn = 0,.is_unsafe = 0,.is_placeholder = 0,.is_main = 0,.is_test = 0,.is_keep_alive = 0,.is_method = 0,.no_body = 0,.is_conditional = 0,}),.arg1=__new_array_with_default(0, 0, sizeof(v__ast__Type), 0)};
}
multi_return_v__ast__Fn_Array_v__ast__Type mr_42797 = (*(multi_return_v__ast__Fn_Array_v__ast__Type*)_t22.data);
method = mr_42797.arg0;
embed_types = mr_42797.arg1;
multi_return_v__ast__Fn_Array_v__ast__Type mr_42435 = (*(multi_return_v__ast__Fn_Array_v__ast__Type*)_t19.data);
method = mr_42435.arg0;
embed_types = mr_42435.arg1;
if (embed_types.len != 0) {
is_method_from_embed = true;
node->from_embed_types = embed_types;
@ -57559,6 +57546,31 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
}
if (has_method) {
v__ast__TypeSymbol* rec_sym = v__ast__Table_sym(c->table, node->left_type);
bool rec_is_generic = v__ast__Type_has_flag(left_type, v__ast__TypeFlag__generic);
if ((rec_sym->info)._typ == 456 /* v.ast.Struct */) {
if (rec_is_generic && node->concrete_types.len == 0) {
node->concrete_types = (*rec_sym->info._v__ast__Struct).generic_types;
} else if (!rec_is_generic && (*rec_sym->info._v__ast__Struct).concrete_types.len > 0 && node->concrete_types.len > 0 && (*rec_sym->info._v__ast__Struct).concrete_types.len + node->concrete_types.len == method.generic_names.len) {
Array_v__ast__Type t_concrete_types = array_clone_to_depth(&node->concrete_types, 0);
node->concrete_types = (*rec_sym->info._v__ast__Struct).concrete_types;
_PUSH_MANY(&node->concrete_types, (t_concrete_types), _t20, Array_v__ast__Type);
}
}
Array_v__ast__Type concrete_types = __new_array_with_default(0, 0, sizeof(v__ast__Type), 0);
for (int _t21 = 0; _t21 < node->concrete_types.len; ++_t21) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t21];
if (v__ast__Type_has_flag(concrete_type, v__ast__TypeFlag__generic)) {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ v__checker__Checker_unwrap_generic(c, concrete_type) }));
} else {
array_push((array*)&concrete_types, _MOV((v__ast__Type[]){ concrete_type }));
}
}
if (concrete_types.len > 0) {
if (v__ast__Table_register_fn_concrete_types(c->table, v__ast__CallExpr_fkey(node), concrete_types)) {
c->need_recheck_generic_fns = true;
}
}
node->is_noreturn = method.is_noreturn;
node->is_ctor_new = method.is_ctor_new;
if (!method.is_pub && !c->pref->is_test && !string__eq(method.mod, c->mod)) {
@ -57569,9 +57581,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__checker__Checker_error(c, _SLIT("method with `shared` receiver cannot be called inside `lock`/`rlock` block"), node->pos);
}
if ((*(v__ast__Param*)/*ee elem_sym */array_get(method.params, 0)).is_mut) {
multi_return_string_v__token__Pos mr_43928 = v__checker__Checker_fail_if_immutable(c, node->left);
string to_lock = mr_43928.arg0;
v__token__Pos pos = mr_43928.arg1;
multi_return_string_v__token__Pos mr_44578 = v__checker__Checker_fail_if_immutable(c, node->left);
string to_lock = mr_44578.arg0;
v__token__Pos pos = mr_44578.arg1;
if (!v__ast__Expr_is_lvalue(node->left)) {
v__checker__Checker_error(c, _SLIT("cannot pass expression as `mut`"), v__ast__Expr_pos(node->left));
}
@ -57588,11 +57600,11 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
string plural = (method.generic_names.len == 1 ? (_SLIT("")) : (_SLIT("s")));
v__checker__Checker_error(c, str_intp(4, _MOV((StrIntpData[]){{_SLIT("expected "), /*100 &int*/0xfe07, {.d_i32 = method.generic_names.len}}, {_SLIT(" generic parameter"), /*115 &string*/0xfe10, {.d_s = plural}}, {_SLIT(", got "), /*100 &int*/0xfe07, {.d_i32 = node->concrete_types.len}}, {_SLIT0, 0, { .d_c = 0 }}})), node->concrete_list_pos);
}
for (int _t23 = 0; _t23 < node->concrete_types.len; ++_t23) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t23];
Option_void _t24 = v__checker__Checker_ensure_type_exists(c, concrete_type, node->concrete_list_pos);
if (_t24.state != 0 && _t24.err._typ != _IError_None___index) {
IError err = _t24.err;
for (int _t24 = 0; _t24 < node->concrete_types.len; ++_t24) {
v__ast__Type concrete_type = ((v__ast__Type*)node->concrete_types.data)[_t24];
Option_void _t25 = v__checker__Checker_ensure_type_exists(c, concrete_type, node->concrete_list_pos);
if (_t25.state != 0 && _t25.err._typ != _IError_None___index) {
IError err = _t25.err;
}
;
@ -57600,11 +57612,11 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
if (v__ast__Type_alias_eq(method.return_type, _const_v__ast__void_type) && method.is_conditional && method.ctdefine_idx != _const_v__ast__invalid_type_idx) {
node->should_be_skipped = v__checker__Checker_evaluate_once_comptime_if_attribute(c, (voidptr)&/*qq*/(*(v__ast__Attr*)/*ee elem_sym */array_get(method.attrs, method.ctdefine_idx)));
}
Option_void _t25 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/method);
if (_t25.state != 0 && _t25.err._typ != _IError_None___index) {
IError err = _t25.err;
v__ast__Type _t26 = method.return_type;
return _t26;
Option_void _t26 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/method);
if (_t26.state != 0 && _t26.err._typ != _IError_None___index) {
IError err = _t26.err;
v__ast__Type _t27 = method.return_type;
return _t27;
}
;
@ -57647,21 +57659,21 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
final_arg_sym = v__ast__Table_sym(c->table, final_arg_typ);
}
if (v__ast__Type_has_flag(exp_arg_typ, v__ast__TypeFlag__generic)) {
Option_v__ast__Type _t27;
if (_t27 = v__ast__Table_resolve_generic_to_concrete(c->table, exp_arg_typ, method.generic_names, concrete_types), _t27.state == 0) {
v__ast__Type exp_utyp = *(v__ast__Type*)_t27.data;
Option_v__ast__Type _t28;
if (_t28 = v__ast__Table_resolve_generic_to_concrete(c->table, exp_arg_typ, method.generic_names, concrete_types), _t28.state == 0) {
v__ast__Type exp_utyp = *(v__ast__Type*)_t28.data;
exp_arg_typ = exp_utyp;
} else {
IError err = _t27.err;
IError err = _t28.err;
continue;
}
if (v__ast__Type_has_flag(got_arg_typ, v__ast__TypeFlag__generic)) {
Option_v__ast__Type _t28;
if (_t28 = v__ast__Table_resolve_generic_to_concrete(c->table, got_arg_typ, method.generic_names, concrete_types), _t28.state == 0) {
v__ast__Type got_utyp = *(v__ast__Type*)_t28.data;
Option_v__ast__Type _t29;
if (_t29 = v__ast__Table_resolve_generic_to_concrete(c->table, got_arg_typ, method.generic_names, concrete_types), _t29.state == 0) {
v__ast__Type got_utyp = *(v__ast__Type*)_t29.data;
got_arg_typ = got_utyp;
} else {
IError err = _t28.err;
IError err = _t29.err;
continue;
}
}
@ -57673,9 +57685,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__checker__Checker_error(c, _SLIT("method with `shared` arguments cannot be called inside `lock`/`rlock` block"), arg->pos);
}
if (arg->is_mut) {
multi_return_string_v__token__Pos mr_47897 = v__checker__Checker_fail_if_immutable(c, arg->expr);
string to_lock = mr_47897.arg0;
v__token__Pos pos = mr_47897.arg1;
multi_return_string_v__token__Pos mr_48547 = v__checker__Checker_fail_if_immutable(c, arg->expr);
string to_lock = mr_48547.arg0;
v__token__Pos pos = mr_48547.arg1;
if (!param_is_mut) {
string tok = v__ast__ShareType_str(arg->share);
v__checker__Checker_error(c, str_intp(5, _MOV((StrIntpData[]){{_SLIT("`"), /*115 &string*/0xfe10, {.d_s = node->name}}, {_SLIT("` parameter `"), /*115 &string*/0xfe10, {.d_s = param.name}}, {_SLIT("` is not `"), /*115 &string*/0xfe10, {.d_s = tok}}, {_SLIT("`, `"), /*115 &string*/0xfe10, {.d_s = tok}}, {_SLIT("` is not needed`"), 0, { .d_c = 0 }}})), v__ast__Expr_pos(arg->expr));
@ -57726,9 +57738,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
continue;
}
Option_void _t29 = v__checker__Checker_check_expected_call_arg(c, got_arg_typ, exp_arg_typ, node->language, *arg);
if (_t29.state != 0 && _t29.err._typ != _IError_None___index) {
IError err = _t29.err;
Option_void _t30 = v__checker__Checker_check_expected_call_arg(c, got_arg_typ, exp_arg_typ, node->language, *arg);
if (_t30.state != 0 && _t30.err._typ != _IError_None___index) {
IError err = _t30.err;
v__ast__TypeSymbol* param_typ_sym = v__ast__Table_sym(c->table, exp_arg_typ);
v__ast__TypeSymbol* arg_typ_sym = v__ast__Table_sym(c->table, got_arg_typ);
if (param_typ_sym->kind == v__ast__Kind__array && arg_typ_sym->kind == v__ast__Kind__array) {
@ -57780,12 +57792,12 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
node->return_type = method.return_type;
}
if (node->concrete_types.len > 0 && method.return_type != 0 && c->table->cur_fn->generic_names.len == 0) {
Option_v__ast__Type _t31;
if (_t31 = v__ast__Table_resolve_generic_to_concrete(c->table, method.return_type, method.generic_names, concrete_types), _t31.state == 0) {
v__ast__Type typ = *(v__ast__Type*)_t31.data;
Option_v__ast__Type _t32;
if (_t32 = v__ast__Table_resolve_generic_to_concrete(c->table, method.return_type, method.generic_names, concrete_types), _t32.state == 0) {
v__ast__Type typ = *(v__ast__Type*)_t32.data;
node->return_type = typ;
v__ast__Type _t32 = typ;
return _t32;
v__ast__Type _t33 = typ;
return _t33;
}
}
if (node->concrete_types.len > 0 && method.generic_names.len == 0) {
@ -57799,11 +57811,11 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
}
}
v__ast__Type _t33 = node->return_type;
return _t33;
v__ast__Type _t34 = node->return_type;
return _t34;
}
v__ast__Type _t34 = method.return_type;
return _t34;
v__ast__Type _t35 = method.return_type;
return _t35;
}
if (string__eq(method_name, _SLIT("str"))) {
if (left_sym->kind == v__ast__Kind__interface_) {
@ -57816,25 +57828,25 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
v__checker__Checker_error(c, _SLIT(".str() method calls should have no arguments"), node->pos);
}
v__checker__Checker_fail_if_unreadable(c, node->left, left_type, _SLIT("receiver"));
v__ast__Type _t35 = _const_v__ast__string_type;
return _t35;
} else if (string__eq(method_name, _SLIT("free"))) {
v__ast__Type _t36 = _const_v__ast__void_type;
v__ast__Type _t36 = _const_v__ast__string_type;
return _t36;
} else if (string__eq(method_name, _SLIT("free"))) {
v__ast__Type _t37 = _const_v__ast__void_type;
return _t37;
}
Option_v__ast__StructField _t37;
if (_t37 = v__ast__Table_find_field_with_embeds(c->table, left_sym, method_name), _t37.state == 0) {
v__ast__StructField field = *(v__ast__StructField*)_t37.data;
Option_v__ast__StructField _t38;
if (_t38 = v__ast__Table_find_field_with_embeds(c->table, left_sym, method_name), _t38.state == 0) {
v__ast__StructField field = *(v__ast__StructField*)_t38.data;
v__ast__TypeSymbol* field_sym = v__ast__Table_sym(c->table, v__checker__Checker_unwrap_generic(c, field.typ));
if (field_sym->kind == v__ast__Kind__function) {
node->is_method = false;
node->is_field = true;
v__ast__FnType info = /* as */ *(v__ast__FnType*)__as_cast((field_sym->info)._v__ast__FnType,(field_sym->info)._typ, 483) /*expected idx: 483, name: v.ast.FnType */ ;
Option_void _t38 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/info.func);
if (_t38.state != 0 && _t38.err._typ != _IError_None___index) {
IError err = _t38.err;
v__ast__Type _t39 = info.func.return_type;
return _t39;
Option_void _t39 = v__checker__Checker_check_expected_arg_count(c, node, (voidptr)&/*qq*/info.func);
if (_t39.state != 0 && _t39.err._typ != _IError_None___index) {
IError err = _t39.err;
v__ast__Type _t40 = info.func.return_type;
return _t40;
}
;
@ -57847,9 +57859,9 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
array_push((array*)&earg_types, _MOV((v__ast__Type[]){ targ }));
if (i < info.func.params.len) {
v__ast__Type exp_arg_typ = (*(v__ast__Param*)/*ee elem_sym */array_get(info.func.params, i)).typ;
Option_void _t41 = v__checker__Checker_check_expected_call_arg(c, targ, v__checker__Checker_unwrap_generic(c, exp_arg_typ), node->language, *arg);
if (_t41.state != 0 && _t41.err._typ != _IError_None___index) {
IError err = _t41.err;
Option_void _t42 = v__checker__Checker_check_expected_call_arg(c, targ, v__checker__Checker_unwrap_generic(c, exp_arg_typ), node->language, *arg);
if (_t42.state != 0 && _t42.err._typ != _IError_None___index) {
IError err = _t42.err;
if (!v__ast__Type_alias_eq(targ, _const_v__ast__void_type)) {
v__checker__Checker_error(c, str_intp(5, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = IError_name_table[err._typ]._method_msg(err._object)}}, {_SLIT(" in argument "), /*100 &int*/0xfe07, {.d_i32 = i + 1}}, {_SLIT(" to `"), /*115 &string*/0xfe10, {.d_s = left_sym->name}}, {_SLIT("."), /*115 &string*/0xfe10, {.d_s = method_name}}, {_SLIT("`"), 0, { .d_c = 0 }}})), arg->pos);
}
@ -57861,35 +57873,35 @@ v__ast__Type v__checker__Checker_method_call(v__checker__Checker* c, v__ast__Cal
}
node->expected_arg_types = earg_types;
node->is_method = true;
Option_multi_return_v__ast__StructField_Array_v__ast__Type _t42 = v__ast__Table_find_field_from_embeds(c->table, left_sym, method_name);
if (_t42.state != 0) { /*or block*/
IError err = _t42.err;
v__ast__Type _t43 = info.func.return_type;
return _t43;
Option_multi_return_v__ast__StructField_Array_v__ast__Type _t43 = v__ast__Table_find_field_from_embeds(c->table, left_sym, method_name);
if (_t43.state != 0) { /*or block*/
IError err = _t43.err;
v__ast__Type _t44 = info.func.return_type;
return _t44;
}
multi_return_v__ast__StructField_Array_v__ast__Type mr_55362 = (*(multi_return_v__ast__StructField_Array_v__ast__Type*)_t42.data);
node->from_embed_types = mr_55362.arg1;
v__ast__Type _t44 = info.func.return_type;
return _t44;
multi_return_v__ast__StructField_Array_v__ast__Type mr_56012 = (*(multi_return_v__ast__StructField_Array_v__ast__Type*)_t43.data);
node->from_embed_types = mr_56012.arg1;
v__ast__Type _t45 = info.func.return_type;
return _t45;
}
}
if (!v__ast__Type_alias_eq(left_type, _const_v__ast__void_type)) {
Array_string _t45 = {0};
Array_v__ast__Fn _t45_orig = left_sym->methods;
int _t45_len = _t45_orig.len;
_t45 = __new_array(0, _t45_len, sizeof(string));
Array_string _t46 = {0};
Array_v__ast__Fn _t46_orig = left_sym->methods;
int _t46_len = _t46_orig.len;
_t46 = __new_array(0, _t46_len, sizeof(string));
for (int _t46 = 0; _t46 < _t45_len; ++_t46) {
v__ast__Fn it = ((v__ast__Fn*) _t45_orig.data)[_t46];
for (int _t47 = 0; _t47 < _t46_len; ++_t47) {
v__ast__Fn it = ((v__ast__Fn*) _t46_orig.data)[_t47];
string ti = it.name;
array_push((array*)&_t45, &ti);
array_push((array*)&_t46, &ti);
}
v__util__Suggestion suggestion = v__util__new_suggestion(method_name,_t45);
v__util__Suggestion suggestion = v__util__new_suggestion(method_name,_t46);
v__checker__Checker_error(c, v__util__Suggestion_say(suggestion, unknown_method_msg), node->pos);
}
v__ast__Type _t47 = _const_v__ast__void_type;
return _t47;
v__ast__Type _t48 = _const_v__ast__void_type;
return _t48;
}
VV_LOCAL_SYMBOL v__ast__Type v__checker__Checker_go_expr(v__checker__Checker* c, v__ast__GoExpr* node) {
@ -60630,7 +60642,7 @@ v__ast__Type v__checker__Checker_struct_init(v__checker__Checker* c, v__ast__Str
Array_v__ast__StructField info_fields_sorted = __new_array_with_default(0, 0, sizeof(v__ast__StructField), 0);
if (node->is_short) {
info_fields_sorted = array_clone_to_depth(&info.fields, 0);
qsort(info_fields_sorted.data, info_fields_sorted.len, info_fields_sorted.element_size, (int (*)(const void *, const void *))&compare_2892273012681280244_v__ast__StructField_by_i);
qsort(info_fields_sorted.data, info_fields_sorted.len, info_fields_sorted.element_size, (int (*)(const void *, const void *))&compare_5995660241070764127_v__ast__StructField_by_i);
}
Array_string inited_fields = __new_array_with_default(0, 0, sizeof(string), 0);
for (int i = 0; i < node->fields.len; ++i) {
@ -85498,6 +85510,7 @@ VV_LOCAL_SYMBOL v__ast__FnDecl v__parser__Parser_fn_decl(v__parser__Parser* p) {
if (is_method && v__ast__Type_has_flag(rec.typ, v__ast__TypeFlag__generic)) {
v__ast__TypeSymbol* sym = v__ast__Table_sym(p->table, rec.typ);
if ((sym->info)._typ == 456 /* v.ast.Struct */) {
Array_string fn_generic_names = array_clone_to_depth(&generic_names, 0);
Array_string _t11 = {0};
Array_v__ast__Type _t11_orig = (*sym->info._v__ast__Struct).generic_types;
int _t11_len = _t11_orig.len;
@ -85508,19 +85521,19 @@ VV_LOCAL_SYMBOL v__ast__FnDecl v__parser__Parser_fn_decl(v__parser__Parser* p) {
string ti = v__ast__Table_sym(p->table, it)->name;
array_push((array*)&_t11, &ti);
}
Array_string rec_generic_names =_t11;
for (int _t13 = 0; _t13 < rec_generic_names.len; ++_t13) {
string gname = ((string*)rec_generic_names.data)[_t13];
generic_names =_t11;
for (int _t13 = 0; _t13 < fn_generic_names.len; ++_t13) {
string gname = ((string*)fn_generic_names.data)[_t13];
if (!Array_string_contains(generic_names, gname)) {
array_push((array*)&generic_names, _MOV((string[]){ string_clone(gname) }));
}
}
}
}
multi_return_Array_v__ast__Param_bool_bool mr_9325 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args2 = mr_9325.arg0;
bool are_args_type_only = mr_9325.arg1;
bool is_variadic = mr_9325.arg2;
multi_return_Array_v__ast__Param_bool_bool mr_9364 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args2 = mr_9364.arg0;
bool are_args_type_only = mr_9364.arg1;
bool is_variadic = mr_9364.arg2;
if (is_c2v_variadic) {
is_variadic = true;
}
@ -85861,9 +85874,9 @@ bool v__parser__Parser_anon_fn_defer_0 = false;
v__parser__Parser_anon_fn_defer_0 = true;
p->scope->detached_from_parent = true;
Array_v__ast__Param inherited_vars = (p->tok.kind == v__token__Kind__lsbr ? (v__parser__Parser_closure_vars(p)) : (__new_array_with_default(0, 0, sizeof(v__ast__Param), 0)));
multi_return_Array_v__ast__Param_bool_bool mr_18790 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args = mr_18790.arg0;
bool is_variadic = mr_18790.arg2;
multi_return_Array_v__ast__Param_bool_bool mr_18829 = v__parser__Parser_fn_args(p);
Array_v__ast__Param args = mr_18829.arg0;
bool is_variadic = mr_18829.arg2;
for (int _t2 = 0; _t2 < args.len; ++_t2) {
v__ast__Param arg = ((v__ast__Param*)args.data)[_t2];
if (arg.name.len == 0 && v__ast__Table_sym(p->table, arg.typ)->kind != v__ast__Kind__placeholder) {
@ -87422,7 +87435,7 @@ v__ast__Type v__parser__Parser_parse_inline_sum_type(v__parser__Parser* p) {
array_push((array*)&_t1, &ti);
}
Array_string variant_names =_t1;
qsort(variant_names.data, variant_names.len, variant_names.element_size, (int (*)(const void *, const void *))&compare_7932637671395545435_string);
qsort(variant_names.data, variant_names.len, variant_names.element_size, (int (*)(const void *, const void *))&compare_14364895672131222426_string);
string name = str_intp(2, _MOV((StrIntpData[]){{_SLIT("_v_anon_sum_type_"), /*115 &string*/0xfe10, {.d_s = Array_string_join(variant_names, _SLIT("_"))}}, {_SLIT0, 0, { .d_c = 0 }}}));
Array_v__ast__Type _t3 = {0};
Array_v__ast__TypeNode _t3_orig = variants;
@ -94169,7 +94182,7 @@ void v__builder__Builder_cc(v__builder__Builder* v) {
v__builder__Builder_build_thirdparty_obj_files(v);
v__builder__Builder_setup_output_name(v);
if (v->pref->os != v__pref__OS__windows && string_contains(ccompiler, _SLIT("++"))) {
string cpp_atomic_h_path = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/Chewing_Bever/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/atomic.h"), 0, { .d_c = 0 }}}));
string cpp_atomic_h_path = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/vieter/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/atomic.h"), 0, { .d_c = 0 }}}));
if (!os__exists(cpp_atomic_h_path)) {
for (int _t4 = 0; _t4 < v->parsed_files.len; ++_t4) {
v__ast__File* file = ((v__ast__File**)v->parsed_files.data)[_t4];
@ -94184,7 +94197,7 @@ void v__builder__Builder_cc(v__builder__Builder* v) {
}
}
if (_t5) {
string cppgenv = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/Chewing_Bever/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/gen.v"), 0, { .d_c = 0 }}}));
string cppgenv = str_intp(2, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = _SLIT("/woodpecker/src/git.rustybever.be/vieter/v")}}, {_SLIT("/thirdparty/stdatomic/nix/cpp/gen.v"), 0, { .d_c = 0 }}}));
os__execute( str_intp(4, _MOV((StrIntpData[]){{_SLIT0, /*115 &string*/0xfe10, {.d_s = os__quoted_path(vexe)}}, {_SLIT(" run "), /*115 &string*/0xfe10, {.d_s = os__quoted_path(cppgenv)}}, {_SLIT(" "), /*115 &string*/0xfe10, {.d_s = os__quoted_path(ccompiler)}}, {_SLIT0, 0, { .d_c = 0 }}})));
break;
}