return ~~(str1[i] - str2[i]);
}
-equal :: proc (str1: str, str2: str) -> bool {
+equal :: proc (str1: str, str2: str) -> bool #operator== {
if str1.count != str2.count do return false;
while i := 0; i < str1.count {
if str1[i] != str2[i] do return false;
return 0;
}
+
static AstTyped* match_overloaded_function(bh_arr(AstTyped *) arg_arr, bh_arr(AstTyped *) overloads) {
bh_arr_each(AstTyped *, node, overloads) {
AstFunction* overload = NULL;
TypeFunction* ol_type = &overload->type->Function;
if (bh_arr_length(arg_arr) < (i32) ol_type->needed_param_count) continue;
+ i32 param_left = ol_type->param_count;
Type** param_type = ol_type->params;
bh_arr_each(AstTyped*, arg, arg_arr) {
+ if (param_left == 0) goto no_match;
+ param_left--;
+
fill_in_type(*arg);
Type* type_to_match = *param_type;
curr_param.vararg_kind = VA_Kind_Not_VA;
curr_param.local = make_node(AstLocal, Ast_Kind_Param);
curr_param.local->token = symbol;
- curr_param.local->flags |= Ast_Flag_Const;
if (param_use) {
curr_param.local->flags |= Ast_Flag_Param_Use;
s_type->Struct.name = s_node->name;
s_type->Struct.mem_count = bh_arr_length(s_node->members);
s_type->Struct.memarr = NULL;
+ s_type->Struct.poly_sln = NULL;
+
bh_table_init(global_heap_allocator, s_type->Struct.members, s_type->Struct.mem_count);
bh_arr_new(global_heap_allocator, s_type->Struct.memarr, s_type->Struct.mem_count);
AstTyped* lval = assign->left;
- if (lval->kind == Ast_Kind_Local) {
+ if (lval->kind == Ast_Kind_Local || lval->kind == Ast_Kind_Param) {
if (bh_imap_get(&mod->local_map, (u64) lval) & LOCAL_IS_WASM) {
u64 localidx = bh_imap_get(&mod->local_map, (u64) lval);
emit_expression(mod, &code, assign->right);