From: Brendan Hansen Date: Sat, 23 Oct 2021 01:33:13 +0000 (-0500) Subject: bugfixes with operator overloading X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=62a11595cba71475c494b3ed7ec3aa6fc3c4a9d6;p=onyx.git bugfixes with operator overloading --- diff --git a/src/checker.c b/src/checker.c index 99621de5..39ffebe3 100644 --- a/src/checker.c +++ b/src/checker.c @@ -86,6 +86,7 @@ CheckStatus check_do_block(AstDoBlock** pdoblock); // HACK HACK HACK b32 expression_types_must_be_known = 0; +b32 all_checks_are_final = 1; #define STATEMENT_LEVEL 1 #define EXPRESSION_LEVEL 2 @@ -601,9 +602,12 @@ static AstCall* binaryop_try_operator_overload(AstBinaryOp* binop, AstTyped* thi args.values[1] = (AstTyped *) make_argument(context.ast_alloc, binop->right); if (third_argument != NULL) args.values[2] = (AstTyped *) make_argument(context.ast_alloc, third_argument); + u32 current_all_checks_are_final = all_checks_are_final; + all_checks_are_final = 0; u32 current_checking_level_store = current_checking_level; bh_arr_each(AstTyped *, v, args.values) check_argument((AstArgument **) v); current_checking_level = current_checking_level_store; + all_checks_are_final = current_all_checks_are_final; if (binop_is_assignment(binop->operation)) { args.values[0] = (AstTyped *) make_address_of(context.ast_alloc, binop->left); @@ -983,12 +987,15 @@ CheckStatus check_binaryop(AstBinaryOp** pbinop) { binop->type = &basic_types[Basic_Kind_Bool]; } - binop->flags |= Ast_Flag_Has_Been_Checked; + if (all_checks_are_final) { + binop->flags |= Ast_Flag_Has_Been_Checked; - if (binop->flags & Ast_Flag_Comptime) { - // NOTE: Not a binary op - *pbinop = (AstBinaryOp *) ast_reduce(context.ast_alloc, (AstTyped *) binop); + if (binop->flags & Ast_Flag_Comptime) { + // NOTE: Not a binary op + *pbinop = (AstBinaryOp *) ast_reduce(context.ast_alloc, (AstTyped *) binop); + } } + return Check_Success; bad_binaryop: diff --git a/src/types.c b/src/types.c index babbe89e..f3fbae9d 100644 --- a/src/types.c +++ b/src/types.c @@ -334,6 +334,7 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { s_type->Struct.name = s_node->name; s_type->Struct.mem_count = bh_arr_length(s_node->members); s_type->Struct.meta_tags = s_node->meta_tags; + s_type->Struct.constructed_from = NULL; type_register(s_type); s_type->Struct.memarr = NULL;