From b8e0b83f93e849ea86799928d8626b8d99650ce9 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 27 Aug 2021 21:56:06 -0500 Subject: [PATCH] code cleanup --- bin/onyx | Bin 426608 -> 426640 bytes docs/bugs | 14 +- include/onyxastnodes.h | 3 + src/onyx.c | 1 + src/onyxastnodes.c | 8 + src/onyxchecker.c | 290 ++++++++++------------------- src/onyxparser.c | 2 + src/onyxtypes.c | 16 ++ src/onyxutils.c | 10 +- src/onyxwasm.c | 11 +- tests/bugs/namespace_aliasing | 2 + tests/bugs/namespace_aliasing.onyx | 22 +++ 12 files changed, 181 insertions(+), 198 deletions(-) create mode 100644 tests/bugs/namespace_aliasing create mode 100644 tests/bugs/namespace_aliasing.onyx diff --git a/bin/onyx b/bin/onyx index de8640a752b505348b190164718503e93d54b86d..fa6b43e511e716384641ff219ee2e61e48a84a7e 100755 GIT binary patch delta 101859 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 delta 101903 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�Jv8S7U3jo<{wT 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 *4FH(h#yE%b~S~ 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 QCO@xV(w}X9dDL$E4^1~state < Entity_State_Code_Gen) process_entity(ent); + else break; if (bh_arr_length(context.entities.entities) == 0) { break; diff --git a/src/onyxastnodes.c b/src/onyxastnodes.c index 1f6fb991..439a1ff2 100644 --- a/src/onyxastnodes.c +++ b/src/onyxastnodes.c @@ -856,6 +856,14 @@ char* get_function_name(AstFunction* func) { return ""; } +AstNode* strip_aliases(AstNode* n) { + if (n == NULL) return n; + + while (n->kind == Ast_Kind_Alias) n = (AstNode *) ((AstAlias *) n)->alias; + + return n; +} + AstNumLit* make_bool_literal(bh_allocator a, b32 b) { AstNumLit* bl = onyx_ast_node_new(a, sizeof(AstNumLit), Ast_Kind_NumLit); bl->flags |= Ast_Flag_Comptime; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 7e2b1a44..f57b116d 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -29,6 +29,16 @@ } \ } while (0) +#define ERROR(loc, msg) do { \ + onyx_report_error(loc, msg); \ + return Check_Error; \ + } while (0) + +#define ERROR_(loc, msg, ...) do { \ + onyx_report_error(loc, msg, __VA_ARGS__); \ + return Check_Error; \ + } while (0) + typedef enum CheckStatus { Check_Success, // The node was successfully checked with out errors Check_Complete, // The node is done processing @@ -142,11 +152,10 @@ CheckStatus check_return(AstReturn* retnode) { } if (!type_check_or_auto_cast(&retnode->expr, *expected_return_type)) { - onyx_report_error(retnode->token->pos, + ERROR_(retnode->token->pos, "Expected to return a value of type '%s', returning value of type '%s'.", type_get_name(*expected_return_type), node_get_type_name(retnode->expr)); - return Check_Error; } } else { @@ -156,10 +165,9 @@ CheckStatus check_return(AstReturn* retnode) { } if ((*expected_return_type)->Basic.size > 0) { - onyx_report_error(retnode->token->pos, + ERROR_(retnode->token->pos, "Returning from non-void function without a value. Expected a value of type '%s'.", type_get_name(*expected_return_type)); - return Check_Error; } } @@ -185,8 +193,7 @@ CheckStatus check_if(AstIfWhile* ifnode) { CHECK(expression, &ifnode->cond); if (!type_is_bool(ifnode->cond->type)) { - onyx_report_error(ifnode->cond->token->pos, "Expected expression of type 'bool' for condition, got '%s'", type_get_name(ifnode->cond->type)); - return Check_Error; + ERROR_(ifnode->cond->token->pos, "Expected expression of type 'bool' for condition, got '%s'", type_get_name(ifnode->cond->type)); } if (ifnode->true_stmt) CHECK(statement, (AstNode **) &ifnode->true_stmt); @@ -202,8 +209,7 @@ CheckStatus check_while(AstIfWhile* whilenode) { CHECK(expression, &whilenode->cond); if (!type_is_bool(whilenode->cond->type)) { - onyx_report_error(whilenode->cond->token->pos, "Expected expression of type 'bool' for condition, got '%s'", type_get_name(whilenode->cond->type)); - return Check_Error; + ERROR_(whilenode->cond->token->pos, "Expected expression of type 'bool' for condition, got '%s'", type_get_name(whilenode->cond->type)); } if (whilenode->true_stmt) CHECK(statement, (AstNode **) &whilenode->true_stmt); @@ -220,8 +226,7 @@ CheckStatus check_for(AstFor* fornode) { fornode->loop_type = For_Loop_Invalid; if (types_are_compatible(iter_type, &basic_types[Basic_Kind_I32])) { if (fornode->by_pointer) { - onyx_report_error(fornode->var->token->pos, "Cannot iterate by pointer over a range."); - return Check_Error; + ERROR(fornode->var->token->pos, "Cannot iterate by pointer over a range."); } AstNumLit* low_0 = make_int_literal(context.ast_alloc, 0); @@ -235,8 +240,7 @@ CheckStatus check_for(AstFor* fornode) { } else if (types_are_compatible(iter_type, builtin_range_type_type)) { if (fornode->by_pointer) { - onyx_report_error(fornode->var->token->pos, "Cannot iterate by pointer over a range."); - return Check_Error; + ERROR(fornode->var->token->pos, "Cannot iterate by pointer over a range."); } // NOTE: Blindly copy the first range member's type which will @@ -261,8 +265,7 @@ CheckStatus check_for(AstFor* fornode) { } else if (iter_type->kind == Type_Kind_VarArgs) { if (fornode->by_pointer) { - onyx_report_error(fornode->var->token->pos, "Cannot iterate by pointer over '%s'.", type_get_name(iter_type)); - return Check_Error; + ERROR_(fornode->var->token->pos, "Cannot iterate by pointer over '%s'.", type_get_name(iter_type)); } fornode->var->type = iter_type->VarArgs.ptr_to_data->Pointer.elem; @@ -278,8 +281,7 @@ CheckStatus check_for(AstFor* fornode) { } else if (type_struct_constructed_from_poly_struct(iter_type, builtin_iterator_type)) { if (fornode->by_pointer) { - onyx_report_error(fornode->var->token->pos, "Cannot iterate by pointer over an iterator."); - return Check_Error; + ERROR(fornode->var->token->pos, "Cannot iterate by pointer over an iterator."); } // HACK: This assumes the Iterator type only has a single type argument. @@ -291,10 +293,9 @@ CheckStatus check_for(AstFor* fornode) { fornode->var->flags |= Ast_Flag_Cannot_Take_Addr; if (fornode->loop_type == For_Loop_Invalid) { - onyx_report_error(fornode->iter->token->pos, + ERROR_(fornode->iter->token->pos, "Cannot iterate over a '%s'.", type_get_name(iter_type)); - return Check_Error; } CHECK(block, fornode->stmt); @@ -321,8 +322,7 @@ CheckStatus check_switch(AstSwitch* switchnode) { CHECK(expression, &switchnode->expr); Type* resolved_expr_type = resolve_expression_type(switchnode->expr); if (!type_is_integer(switchnode->expr->type) && switchnode->expr->type->kind != Type_Kind_Enum) { - onyx_report_error(switchnode->expr->token->pos, "expected integer or enum type for switch expression"); - return Check_Error; + ERROR(switchnode->expr->token->pos, "expected integer or enum type for switch expression"); } // LEAK if this has to be yielded @@ -337,16 +337,13 @@ CheckStatus check_switch(AstSwitch* switchnode) { bh_arr_each(AstTyped *, value, sc->values) { CHECK(expression, value); - // :UnaryFieldAccessIsGross - // if ((*value)->kind == Ast_Kind_Unary_Field_Access) { if ((*value)->kind == Ast_Kind_Range_Literal) { AstRangeLiteral* rl = (AstRangeLiteral *) (*value); resolve_expression_type(rl->low); resolve_expression_type(rl->high); if (rl->low->kind != Ast_Kind_NumLit || rl->high->kind != Ast_Kind_NumLit) { - onyx_report_error(rl->token->pos, "case statement expected compile time known range."); - return Check_Error; + ERROR(rl->token->pos, "case statement expected compile time known range."); } promote_numlit_to_larger((AstNumLit *) rl->low); @@ -368,10 +365,8 @@ CheckStatus check_switch(AstSwitch* switchnode) { OnyxToken* tkn = sc->block->token; if ((*value)->token) tkn = (*value)->token; - onyx_report_error(tkn->pos, "Mismatched types in switch-case. Expected '%s', got '%s'.", + ERROR_(tkn->pos, "Mismatched types in switch-case. Expected '%s', got '%s'.", type_get_name(resolved_expr_type), type_get_name((*value)->type)); - - return Check_Error; } if (node_is_type((AstNode*) (*value))) { @@ -388,8 +383,7 @@ CheckStatus check_switch(AstSwitch* switchnode) { } if ((*value)->kind != Ast_Kind_NumLit) { - onyx_report_error((*value)->token->pos, "case statement expected compile time known integer"); - return Check_Error; + ERROR((*value)->token->pos, "case statement expected compile time known integer"); } resolve_expression_type((*value)); @@ -442,8 +436,7 @@ static i32 non_baked_argument_count(Arguments* args) { static CheckStatus check_resolve_callee(AstCall* call, AstTyped** effective_callee) { if (call->kind == Ast_Kind_Intrinsic_Call) return Check_Success; - while (call->callee->kind == Ast_Kind_Alias) - call->callee = ((AstAlias *) call->callee)->alias; + call->callee = (AstTyped *) strip_aliases((AstNode *) call->callee); AstTyped* callee = call->callee; b32 calling_a_macro = 0; @@ -470,8 +463,7 @@ static CheckStatus check_resolve_callee(AstCall* call, AstTyped** effective_call if (callee->kind == Ast_Kind_Macro) { if (current_checking_level == EXPRESSION_LEVEL) { - onyx_report_error(call->token->pos, "Macros calls are not allowed at the expression level yet."); - return Check_Error; + ERROR(call->token->pos, "Macros calls are not allowed at the expression level yet."); } calling_a_macro = 1; @@ -506,10 +498,9 @@ static CheckStatus check_resolve_callee(AstCall* call, AstTyped** effective_call } if (callee->type->kind != Type_Kind_Function) { - onyx_report_error(call->token->pos, + ERROR_(call->token->pos, "Attempting to call something that is not a function, '%b'.", callee->token->text, callee->token->length); - return Check_Error; } *effective_callee = callee; @@ -562,17 +553,13 @@ CheckStatus check_call(AstCall** pcall) { char* err_msg = NULL; fill_in_arguments(&call->args, (AstNode *) callee, &err_msg); - if (err_msg != NULL) { - onyx_report_error(call->token->pos, err_msg); - return Check_Error; - } + if (err_msg != NULL) ERROR(call->token->pos, err_msg); bh_arr(AstArgument *) arg_arr = (bh_arr(AstArgument *)) call->args.values; bh_arr_each(AstArgument *, arg, arg_arr) { if (*arg != NULL) continue; - onyx_report_error(call->token->pos, "Not all arguments were given a value."); - return Check_Error; + ERROR(call->token->pos, "Not all arguments were given a value."); } // HACK HACK HACK @@ -666,14 +653,13 @@ CheckStatus check_call(AstCall** pcall) { if (arg_pos >= (u32) bh_arr_length(arg_arr)) goto type_checking_done; if (!type_check_or_auto_cast(&arg_arr[arg_pos]->value, formal_params[arg_pos])) { - onyx_report_error(arg_arr[arg_pos]->token->pos, + ERROR_(arg_arr[arg_pos]->token->pos, "The procedure '%s' expects a value of type '%s' for %d%s parameter, got '%s'.", get_function_name(callee), type_get_name(formal_params[arg_pos]), arg_pos + 1, bh_num_suffix(arg_pos + 1), node_get_type_name(arg_arr[arg_pos]->value)); - return Check_Error; } arg_arr[arg_pos]->va_kind = VA_Kind_Not_VA; @@ -715,8 +701,7 @@ CheckStatus check_call(AstCall** pcall) { resolve_expression_type(arg_arr[arg_pos]->value); if (arg_arr[arg_pos]->value->type == NULL) { - onyx_report_error(arg_arr[arg_pos]->token->pos, "Unable to resolve type for argument."); - return Check_Error; + ERROR(arg_arr[arg_pos]->token->pos, "Unable to resolve type for argument."); } arg_arr[arg_pos]->va_kind = VA_Kind_Untyped; @@ -731,15 +716,11 @@ type_checking_done: call->flags |= Ast_Flag_Has_Been_Checked; - if (arg_pos < callee->type->Function.needed_param_count) { - onyx_report_error(call->token->pos, "Too few arguments to function call."); - return Check_Error; - } + if (arg_pos < callee->type->Function.needed_param_count) + ERROR(call->token->pos, "Too few arguments to function call."); - if (arg_pos < (u32) arg_count) { - onyx_report_error(call->token->pos, "Too many arguments to function call."); - return Check_Error; - } + if (arg_pos < (u32) arg_count) + ERROR(call->token->pos, "Too many arguments to function call."); callee->flags |= Ast_Flag_Function_Used; @@ -759,24 +740,18 @@ static void report_bad_binaryop(AstBinaryOp* binop) { } CheckStatus check_binaryop_assignment(AstBinaryOp* binop) { - if (current_checking_level == EXPRESSION_LEVEL) { - onyx_report_error(binop->token->pos, "Assignment not valid in expression."); - return Check_Error; - } + if (current_checking_level == EXPRESSION_LEVEL) + ERROR(binop->token->pos, "Assignment not valid in expression."); - if (!is_lval((AstNode *) binop->left)) { - onyx_report_error(binop->left->token->pos, + if (!is_lval((AstNode *) binop->left)) + ERROR_(binop->left->token->pos, "Cannot assign to '%b'.", binop->left->token->text, binop->left->token->length); - return Check_Error; - } - if ((binop->left->flags & Ast_Flag_Const) != 0 && binop->left->type != NULL) { - onyx_report_error(binop->token->pos, + if ((binop->left->flags & Ast_Flag_Const) != 0 && binop->left->type != NULL) + ERROR_(binop->token->pos, "Cannot assign to constant '%b.'.", binop->left->token->text, binop->left->token->length); - return Check_Error; - } if (binop->operation == Binary_Op_Assign) { // NOTE: Raw assignment @@ -789,8 +764,7 @@ CheckStatus check_binaryop_assignment(AstBinaryOp* binop) { if (binop->right->type == NULL) { if (binop->right->entity == NULL || binop->right->entity->state > Entity_State_Check_Types) { - onyx_report_error(binop->token->pos, "Could not resolve type of right hand side to infer."); - return Check_Error; + ERROR(binop->token->pos, "Could not resolve type of right hand side to infer."); } else { YIELD(binop->token->pos, "Trying to resolve try of right hand side."); @@ -800,18 +774,16 @@ CheckStatus check_binaryop_assignment(AstBinaryOp* binop) { if (binop->right->type->kind == Type_Kind_Compound) { AstCompound* lhs = (AstCompound *) binop->left; if (lhs->kind != Ast_Kind_Compound) { - onyx_report_error(binop->token->pos, + ERROR_(binop->token->pos, "Expected left hand side to have %d expressions.", binop->right->type->Compound.count); - return Check_Error; } i32 expr_count = binop->right->type->Compound.count; if (bh_arr_length(lhs->exprs) != expr_count) { - onyx_report_error(binop->token->pos, + ERROR_(binop->token->pos, "Expected left hand side to have %d expressions.", binop->right->type->Compound.count); - return Check_Error; } fori (i, 0, expr_count) { @@ -856,11 +828,10 @@ CheckStatus check_binaryop_assignment(AstBinaryOp* binop) { } if (!type_check_or_auto_cast(&binop->right, binop->left->type)) { - onyx_report_error(binop->token->pos, + ERROR_(binop->token->pos, "Cannot assign value of type '%s' to a '%s'.", node_get_type_name(binop->right), node_get_type_name(binop->left)); - return Check_Error; } binop->type = &basic_types[Basic_Kind_Void]; @@ -938,18 +909,14 @@ CheckStatus check_binaryop_compare(AstBinaryOp** pbinop) { b32 left_ac = node_is_auto_cast((AstNode *) binop->left); b32 right_ac = node_is_auto_cast((AstNode *) binop->right); - if (left_ac && right_ac) { - onyx_report_error(binop->token->pos, "Cannot have auto cast on both sides of binary operator."); - return Check_Error; - } + if (left_ac && right_ac) ERROR(binop->token->pos, "Cannot have auto cast on both sides of binary operator."); else if (type_check_or_auto_cast(&binop->left, rtype)); else if (type_check_or_auto_cast(&binop->right, ltype)); else { - onyx_report_error(binop->token->pos, + ERROR_(binop->token->pos, "Cannot compare '%s' to '%s'.", type_get_name(ltype), type_get_name(rtype)); - return Check_Error; } } @@ -1034,8 +1001,7 @@ CheckStatus check_binaryop(AstBinaryOp** pbinop) { if (expression_types_must_be_known) { if (binop->left->type == NULL || binop->right->type == NULL) { - onyx_report_error(binop->token->pos, "Internal compiler error: one of the operands types is unknown here."); - return Check_Error; + ERROR(binop->token->pos, "Internal compiler error: one of the operands types is unknown here."); } } @@ -1079,8 +1045,7 @@ CheckStatus check_binaryop(AstBinaryOp** pbinop) { if (type_is_compound(binop->left->type)) goto bad_binaryop; if (!type_is_numeric(binop->right->type)) goto bad_binaryop; if (type_is_rawptr(binop->left->type)) { - onyx_report_error(binop->token->pos, "Cannot operate on a 'rawptr'. Cast it to a another pointer type first."); - return Check_Error; + ERROR(binop->token->pos, "Cannot operate on a 'rawptr'. Cast it to a another pointer type first."); } // NOTE: Handle basic pointer math. @@ -1108,18 +1073,16 @@ CheckStatus check_binaryop(AstBinaryOp** pbinop) { b32 right_ac = node_is_auto_cast((AstNode *) binop->right); if (left_ac && right_ac) { - onyx_report_error(binop->token->pos, "Cannot have auto cast on both sides of binary operator."); - return Check_Error; + ERROR(binop->token->pos, "Cannot have auto cast on both sides of binary operator."); } else if (type_check_or_auto_cast(&binop->left, binop->right->type)); else if (type_check_or_auto_cast(&binop->right, binop->left->type)); else { - onyx_report_error(binop->token->pos, + ERROR_(binop->token->pos, "Mismatched types for binary operation '%s'. left: '%s', right: '%s'.", binaryop_string[binop->operation], node_get_type_name(binop->left), node_get_type_name(binop->right)); - return Check_Error; } } @@ -1160,28 +1123,26 @@ CheckStatus check_unaryop(AstUnaryOp** punop) { YIELD(unaryop->token->pos, "Trying to resolve destination type for cast."); if (!cast_is_legal(unaryop->expr->type, unaryop->type, &err)) { - onyx_report_error(unaryop->token->pos, "Cast Error: %s", err); - return Check_Error; + ERROR_(unaryop->token->pos, "Cast Error: %s", err); } + } else { unaryop->type = unaryop->expr->type; } if (unaryop->operation == Unary_Op_Not) { if (!type_is_bool(unaryop->expr->type)) { - onyx_report_error(unaryop->token->pos, + ERROR_(unaryop->token->pos, "Bool negation operator expected bool type, got '%s'.", node_get_type_name(unaryop->expr)); - return Check_Error; } } if (unaryop->operation == Unary_Op_Bitwise_Not) { if (!type_is_integer(unaryop->expr->type)) { - onyx_report_error(unaryop->token->pos, + ERROR_(unaryop->token->pos, "Bitwise operator expected integer type, got '%s'.", node_get_type_name(unaryop->expr)); - return Check_Error; } } @@ -1203,8 +1164,7 @@ CheckStatus check_struct_literal(AstStructLiteral* sl) { if (sl->stnode == NULL) return Check_Success; if (!node_is_type((AstNode *) sl->stnode)) { - onyx_report_error(sl->token->pos, "Type used for struct literal is not a type."); - return Check_Error; + ERROR(sl->token->pos, "Type used for struct literal is not a type."); } fill_in_type((AstTyped *) sl); @@ -1213,10 +1173,9 @@ CheckStatus check_struct_literal(AstStructLiteral* sl) { } if (!type_is_structlike_strict(sl->type)) { - onyx_report_error(sl->token->pos, + ERROR_(sl->token->pos, "'%s' is not constructable using a struct literal.", type_get_name(sl->type)); - return Check_Error; } i32 mem_count = type_structlike_mem_count(sl->type); @@ -1271,13 +1230,12 @@ CheckStatus check_struct_literal(AstStructLiteral* sl) { } if (!type_check_or_auto_cast(actual, formal)) { - onyx_report_error(sl->token->pos, + ERROR_(sl->token->pos, "Mismatched types for %d%s member named '%s', expected '%s', got '%s'.", i + 1, bh_num_suffix(i + 1), smem.name, type_get_name(formal), node_get_type_name(*actual)); - return Check_Error; } sl->flags &= ((*actual)->flags & Ast_Flag_Comptime) | (sl->flags &~ Ast_Flag_Comptime); @@ -1290,30 +1248,26 @@ CheckStatus check_struct_literal(AstStructLiteral* sl) { CheckStatus check_array_literal(AstArrayLiteral* al) { // :Idempotency if ((al->flags & Ast_Flag_Array_Literal_Typed) == 0) { - if (al->atnode == NULL) return Check_Success; + if (al->atnode == NULL) + YIELD(al->token->pos, "Waiting for array literal type to be known."); - if (!node_is_type((AstNode *) al->atnode)) { - onyx_report_error(al->token->pos, "Array type is not a type."); - return Check_Error; - } + if (!node_is_type((AstNode *) al->atnode)) + ERROR(al->token->pos, "Array type is not a type."); fill_in_type((AstTyped *) al); if (al->type == NULL) YIELD(al->token->pos, "Trying to resolve type of array literal."); al->type = type_make_array(context.ast_alloc, al->type, bh_arr_length(al->values)); - if (al->type == NULL || al->type->kind != Type_Kind_Array) { - onyx_report_error(al->token->pos, "Expected array type for array literal. This is a compiler bug."); - return Check_Error; - } + if (al->type == NULL || al->type->kind != Type_Kind_Array) + ERROR(al->token->pos, "Expected array type for array literal. This is a compiler bug."); al->flags |= Ast_Flag_Array_Literal_Typed; } if (al->type->Array.count != (u32) bh_arr_length(al->values)) { - onyx_report_error(al->token->pos, "Wrong array size (%d) for number of values (%d).", + ERROR_(al->token->pos, "Wrong array size (%d) for number of values (%d).", al->type->Array.count, bh_arr_length(al->values)); - return Check_Error; } al->flags |= Ast_Flag_Comptime; @@ -1332,10 +1286,9 @@ CheckStatus check_array_literal(AstArrayLiteral* al) { al->flags &= ((*expr)->flags & Ast_Flag_Comptime) | (al->flags &~ Ast_Flag_Comptime); if (!type_check_or_auto_cast(expr, elem_type)) { - onyx_report_error((*expr)->token->pos, "Mismatched types for value of in array, expected '%s', got '%s'.", + ERROR_((*expr)->token->pos, "Mismatched types for value of in array, expected '%s', got '%s'.", type_get_name(elem_type), node_get_type_name(*expr)); - return Check_Error; } } @@ -1352,18 +1305,16 @@ CheckStatus check_range_literal(AstRangeLiteral** prange) { type_lookup_member(expected_range_type, "low", &smem); if (!type_check_or_auto_cast(&range->low, smem.type)) { - onyx_report_error(range->token->pos, + ERROR_(range->token->pos, "Expected left side of range to be a 32-bit integer, got '%s'.", node_get_type_name(range->low)); - return Check_Error; } type_lookup_member(expected_range_type, "high", &smem); if (!type_check_or_auto_cast(&range->high, smem.type)) { - onyx_report_error(range->token->pos, + ERROR_(range->token->pos, "Expected right side of range to be a 32-bit integer, got '%s'.", node_get_type_name(range->high)); - return Check_Error; } if (range->step == NULL) { @@ -1392,17 +1343,15 @@ CheckStatus check_if_expression(AstIfExpression* if_expr) { CHECK(expression, &if_expr->false_expr); if (!type_check_or_auto_cast(&if_expr->cond, &basic_types[Basic_Kind_Bool])) { - onyx_report_error(if_expr->token->pos, "If-expression expected boolean for condition, got '%s'.", + ERROR_(if_expr->token->pos, "If-expression expected boolean for condition, got '%s'.", type_get_name(if_expr->cond->type)); - return Check_Error; } resolve_expression_type((AstTyped *) if_expr); if (!types_are_compatible(if_expr->true_expr->type, if_expr->false_expr->type)) { - onyx_report_error(if_expr->token->pos, "Mismatched types for if-expression, left side is '%s', and right side is '%s'.", + ERROR_(if_expr->token->pos, "Mismatched types for if-expression, left side is '%s', and right side is '%s'.", type_get_name(if_expr->true_expr->type), type_get_name(if_expr->false_expr->type)); - return Check_Error; } return Check_Success; @@ -1420,8 +1369,7 @@ CheckStatus check_address_of(AstAddressOf* aof) { && aof->expr->kind != Ast_Kind_Memres && aof->expr->kind != Ast_Kind_Local) || (aof->expr->flags & Ast_Flag_Cannot_Take_Addr) != 0) { - onyx_report_error(aof->token->pos, "Cannot take the address of something that is not an l-value."); - return Check_Error; + ERROR(aof->token->pos, "Cannot take the address of something that is not an l-value."); } aof->expr->flags |= Ast_Flag_Address_Taken; @@ -1434,15 +1382,11 @@ CheckStatus check_address_of(AstAddressOf* aof) { CheckStatus check_dereference(AstDereference* deref) { CHECK(expression, &deref->expr); - if (!type_is_pointer(deref->expr->type)) { - onyx_report_error(deref->token->pos, "Cannot dereference non-pointer value."); - return Check_Error; - } + if (!type_is_pointer(deref->expr->type)) + ERROR(deref->token->pos, "Cannot dereference non-pointer value."); - if (deref->expr->type == basic_type_rawptr.basic_type) { - onyx_report_error(deref->token->pos, "Cannot dereference 'rawptr'. Cast to another pointer type first."); - return Check_Error; - } + if (deref->expr->type == basic_type_rawptr.basic_type) + ERROR(deref->token->pos, "Cannot dereference 'rawptr'. Cast to another pointer type first."); deref->type = deref->expr->type->Pointer.elem; @@ -1474,12 +1418,10 @@ CheckStatus check_subscript(AstSubscript** psub) { } } - if (!type_is_array_accessible(sub->addr->type)) { - onyx_report_error(sub->token->pos, + if (!type_is_array_accessible(sub->addr->type)) + ERROR_(sub->token->pos, "Expected pointer or array type for left of array access, got '%s'.", node_get_type_name(sub->addr)); - return Check_Error; - } if (types_are_compatible(sub->expr->type, builtin_range_type_type)) { Type *of = NULL; @@ -1490,8 +1432,7 @@ CheckStatus check_subscript(AstSubscript** psub) { else { // FIXME: Slice creation should be allowed for slice types and dynamic array types, like it // is below, but this code doesn't look at that. - onyx_report_error(sub->token->pos, "Invalid type for left of slice creation."); - return Check_Error; + ERROR(sub->token->pos, "Invalid type for left of slice creation."); } sub->kind = Ast_Kind_Slice; @@ -1504,10 +1445,9 @@ CheckStatus check_subscript(AstSubscript** psub) { resolve_expression_type(sub->expr); if (sub->expr->type->kind != Type_Kind_Basic || (sub->expr->type->Basic.kind != Basic_Kind_I32 && sub->expr->type->Basic.kind != Basic_Kind_U32)) { - onyx_report_error(sub->token->pos, + ERROR_(sub->token->pos, "Expected type u32 or i32 for index, got '%s'.", node_get_type_name(sub->expr)); - return Check_Error; } if (sub->addr->type->kind == Type_Kind_Pointer) @@ -1530,8 +1470,7 @@ CheckStatus check_subscript(AstSubscript** psub) { sub->type = sub->addr->type->Pointer.elem; } else { - onyx_report_error(sub->token->pos, "Invalid type for left of array access."); - return Check_Error; + ERROR(sub->token->pos, "Invalid type for left of array access."); } sub->elem_size = type_size_of(sub->type); @@ -1548,12 +1487,11 @@ CheckStatus check_field_access(AstFieldAccess** pfield) { } if (!type_is_structlike(field->expr->type)) { - onyx_report_error(field->token->pos, + ERROR_(field->token->pos, "Cannot access field '%b' on '%s'. Type is not a struct.", field->token->text, field->token->length, node_get_type_name(field->expr)); - return Check_Error; } // Optimization for (*foo).member. @@ -1579,11 +1517,10 @@ CheckStatus check_field_access(AstFieldAccess** pfield) { return Check_Success; } - onyx_report_error(field->token->pos, + ERROR_(field->token->pos, "Field '%s' does not exists on '%s'.", field->field, node_get_type_name(field->expr)); - return Check_Error; } field->offset = smem.offset; @@ -1822,9 +1759,7 @@ CheckStatus check_global(AstGlobal* global) { fill_in_type((AstTyped *) global); if (global->type == NULL) { - onyx_report_error(global->token->pos, "Unable to resolve type for global."); - - return Check_Error; + YIELD(global->token->pos, "Trying to resolve type for global."); } return Check_Success; @@ -1837,8 +1772,7 @@ CheckStatus check_insert_directive(AstDirectiveInsert** pinsert) { CHECK(expression, &insert->code_expr); if (insert->code_expr->type == NULL) { if (insert->code_expr->entity && insert->code_expr->entity->state >= Entity_State_Code_Gen) { - onyx_report_error(insert->token->pos, "Expected expression of type 'Code'."); - return Check_Error; + ERROR(insert->token->pos, "Expected expression of type 'Code'."); } // Bad wording for the message. @@ -1848,16 +1782,12 @@ CheckStatus check_insert_directive(AstDirectiveInsert** pinsert) { Type* code_type = type_build_from_ast(context.ast_alloc, builtin_code_type); if (!type_check_or_auto_cast(&insert->code_expr, code_type)) { - onyx_report_error(insert->token->pos, "#insert expected a value of type 'Code', got '%s'.", + ERROR_(insert->token->pos, "#insert expected a value of type 'Code', got '%s'.", type_get_name(insert->code_expr->type)); - - return Check_Error; } AstCodeBlock* code_block = (AstCodeBlock *) insert->code_expr; - while (code_block->kind == Ast_Kind_Alias) { - code_block = (AstCodeBlock *) ((AstAlias *) code_block)->alias; - } + code_block = (AstCodeBlock *) strip_aliases((AstNode *) code_block); assert(code_block->kind == Ast_Kind_Code_Block); @@ -1909,8 +1839,7 @@ CheckStatus check_statement(AstNode** pstmt) { CHECK(type, typed_stmt->type_node); if (!node_is_type((AstNode *) typed_stmt->type_node)) { - onyx_report_error(stmt->token->pos, "Local's type is not a type."); - return Check_Error; + ERROR(stmt->token->pos, "Local's type is not a type."); } YIELD(typed_stmt->token->pos, "Waiting for local variable's type."); @@ -1971,7 +1900,7 @@ CheckStatus check_function(AstFunction* func) { if (func->body) { CheckStatus status = check_block(func->body); if (status == Check_Error && func->generated_from) - onyx_report_error(func->generated_from->pos, "Error in polymorphic procedure generated from this location."); + ERROR(func->generated_from->pos, "Error in polymorphic procedure generated from this location."); if (status != Check_Success) return status; } @@ -2040,8 +1969,7 @@ CheckStatus check_struct(AstStructType* s_node) { if ((*smem)->type == NULL) (*smem)->type = (*smem)->initial_value->type; if ((*smem)->type == NULL) { - onyx_report_error((*smem)->initial_value->token->pos, "Unable to deduce type of initial value. This is probably a compiler bug."); - return Check_Error; + ERROR((*smem)->initial_value->token->pos, "Unable to deduce type of initial value. This is probably a compiler bug."); } } } @@ -2053,8 +1981,7 @@ CheckStatus check_struct(AstStructType* s_node) { bh_arr_each(StructMember *, smem, s_node->stcache->Struct.memarr) { if ((*smem)->type->kind == Type_Kind_Compound) { - onyx_report_error(s_node->token->pos, "Compound types are not allowed as struct member types."); - return Check_Error; + ERROR(s_node->token->pos, "Compound types are not allowed as struct member types."); } } @@ -2070,11 +1997,10 @@ CheckStatus check_struct_defaults(AstStructType* s_node) { CHECK(expression, (*smem)->initial_value); if (!type_check_or_auto_cast((*smem)->initial_value, (*smem)->type)) { - onyx_report_error((*(*smem)->initial_value)->token->pos, + ERROR_((*(*smem)->initial_value)->token->pos, "Mismatched type for initial value, expected '%s', got '%s'.", type_get_name((*smem)->type), type_get_name((*(*smem)->initial_value)->type)); - return Check_Error; } resolve_expression_type(*(*smem)->initial_value); @@ -2095,21 +2021,18 @@ CheckStatus check_function_header(AstFunction* func) { AstLocal* local = param->local; if (expect_default_param && param->default_value == NULL) { - onyx_report_error(local->token->pos, + ERROR(local->token->pos, "All parameters must have default values after the first default valued parameter."); - return Check_Error; } if (has_had_varargs && param->vararg_kind != VA_Kind_Not_VA) { - onyx_report_error(local->token->pos, + ERROR(local->token->pos, "Can only have one param that is of variable argument type."); - return Check_Error; } if (has_had_varargs && param->vararg_kind != VA_Kind_Not_VA) { - onyx_report_error(local->token->pos, + ERROR(local->token->pos, "Variable arguments must be last in parameter list"); - return Check_Error; } if (param->vararg_kind == VA_Kind_Untyped) { @@ -2122,8 +2045,7 @@ CheckStatus check_function_header(AstFunction* func) { if (param->default_value != NULL) { if (param->vararg_kind != VA_Kind_Not_VA) { - onyx_report_error(local->token->pos, "Variadic arguments cannot have default values."); - return Check_Error; + ERROR(local->token->pos, "Variadic arguments cannot have default values."); } CHECK(expression, ¶m->default_value); @@ -2138,8 +2060,7 @@ CheckStatus check_function_header(AstFunction* func) { if (local->type_node != NULL) CHECK(type, local->type_node); if (local->type_node != NULL) { if (!node_is_type((AstNode *) local->type_node)) { - onyx_report_error(local->token->pos, "Parameter type is not a type."); - return Check_Error; + ERROR(local->token->pos, "Parameter type is not a type."); } } @@ -2153,8 +2074,7 @@ CheckStatus check_function_header(AstFunction* func) { } if (local->type->kind == Type_Kind_Compound) { - onyx_report_error(param->local->token->pos, "Compound types are not allowed as parameter types. Try splitting this into multiple parameters."); - return Check_Error; + ERROR(param->local->token->pos, "Compound types are not allowed as parameter types. Try splitting this into multiple parameters."); } // NOTE: I decided to make parameter default values not type checked against @@ -2173,10 +2093,8 @@ CheckStatus check_function_header(AstFunction* func) { if (param->vararg_kind != VA_Kind_Not_VA) has_had_varargs = 1; - if (local->type->kind != Type_Kind_Array - && type_size_of(local->type) == 0) { - onyx_report_error(local->token->pos, "Function parameters cannot have zero-width types."); - return Check_Error; + if (local->type->kind != Type_Kind_Array && type_size_of(local->type) == 0) { + ERROR(local->token->pos, "Function parameters cannot have zero-width types."); } } @@ -2201,18 +2119,16 @@ CheckStatus check_memres(AstMemRes* memres) { resolve_expression_type(memres->initial_value); if ((memres->initial_value->flags & Ast_Flag_Comptime) == 0) { - onyx_report_error(memres->initial_value->token->pos, "Top level expressions must be compile time known."); - return Check_Error; + ERROR(memres->initial_value->token->pos, "Top level expressions must be compile time known."); } if (memres->type != NULL) { Type* memres_type = memres->type; if (!type_check_or_auto_cast(&memres->initial_value, memres_type)) { - onyx_report_error(memres->token->pos, + ERROR_(memres->token->pos, "Cannot assign value of type '%s' to a '%s'.", node_get_type_name(memres->initial_value), type_get_name(memres_type)); - return Check_Error; } } else { @@ -2295,13 +2211,11 @@ CheckStatus check_static_if(AstIf* static_if) { expression_types_must_be_known = 0; if (result > Check_Errors_Start || !(static_if->cond->flags & Ast_Flag_Comptime)) { - onyx_report_error(static_if->token->pos, "Expected this condition to be compile time known."); - return Check_Error; + ERROR(static_if->token->pos, "Expected this condition to be compile time known."); } if (!type_is_bool(static_if->cond->type)) { - onyx_report_error(static_if->token->pos, "Expected this condition to be a boolean value."); - return Check_Error; + ERROR(static_if->token->pos, "Expected this condition to be a boolean value."); } static_if->flags |= Ast_Flag_Static_If_Resolved; diff --git a/src/onyxparser.c b/src/onyxparser.c index 5bffc962..8553f3c5 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -1724,6 +1724,8 @@ static AstType* parse_type(OnyxParser* parser) { break; } + next_insertion = NULL; + break; } case '(': { diff --git a/src/onyxtypes.c b/src/onyxtypes.c index b96fa9f9..ec20f8be 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -1119,14 +1119,17 @@ b32 type_struct_is_simple(Type* type) { } b32 type_is_pointer(Type* type) { + if (type == NULL) return 0; return type->kind == Type_Kind_Pointer; } b32 type_is_rawptr(Type* type) { + if (type == NULL) return 0; return type->kind == Type_Kind_Basic && type->Basic.kind == Basic_Kind_Rawptr; } b32 type_is_array(Type* type) { + if (type == NULL) return 0; return type->kind == Type_Kind_Array; } @@ -1139,16 +1142,19 @@ b32 type_is_struct(Type* type) { } b32 type_is_bool(Type* type) { + if (type == NULL) return 0; return type != NULL && type->kind == Type_Kind_Basic && type->Basic.kind == Basic_Kind_Bool; } b32 type_is_small_integer(Type* type) { + if (type == NULL) return 0; if (type->kind != Type_Kind_Basic) return 0; return type->Basic.kind >= Basic_Kind_I8 && type->Basic.kind <= Basic_Kind_U32; } b32 type_is_integer(Type* type) { + if (type == NULL) return 0; if (type->kind != Type_Kind_Basic) return 0; return (type->Basic.kind >= Basic_Kind_I8 && type->Basic.kind <= Basic_Kind_U64) @@ -1156,6 +1162,7 @@ b32 type_is_integer(Type* type) { } b32 type_is_numeric(Type* type) { + if (type == NULL) return 0; if (type->kind == Type_Kind_Enum) return 1; if (type->kind != Type_Kind_Basic) return 0; @@ -1163,6 +1170,7 @@ b32 type_is_numeric(Type* type) { } b32 type_is_compound(Type* type) { + if (type == NULL) return 0; return type->kind != Type_Kind_Basic && type->kind != Type_Kind_Pointer && type->kind != Type_Kind_Enum @@ -1171,6 +1179,7 @@ b32 type_is_compound(Type* type) { } b32 type_is_simd(Type* type) { + if (type == NULL) return 0; if (type->kind != Type_Kind_Basic) return 0; return type->Basic.flags & Basic_Flag_SIMD; } @@ -1184,6 +1193,7 @@ b32 type_results_in_void(Type* type) { } b32 type_is_array_accessible(Type* type) { + if (type == NULL) return 0; if (type_is_pointer(type)) return 1; if (type->kind == Type_Kind_Array) return 1; if (type->kind == Type_Kind_Slice) return 1; @@ -1193,6 +1203,7 @@ b32 type_is_array_accessible(Type* type) { } b32 type_is_structlike(Type* type) { + if (type == NULL) return 0; if (type->kind == Type_Kind_Struct) return 1; if (type->kind == Type_Kind_Slice) return 1; if (type->kind == Type_Kind_DynArray) return 1; @@ -1206,6 +1217,7 @@ b32 type_is_structlike(Type* type) { } b32 type_is_structlike_strict(Type* type) { + if (type == NULL) return 0; if (type->kind == Type_Kind_Struct) return 1; if (type->kind == Type_Kind_Slice) return 1; if (type->kind == Type_Kind_DynArray) return 1; @@ -1214,6 +1226,7 @@ b32 type_is_structlike_strict(Type* type) { } u32 type_structlike_mem_count(Type* type) { + if (type == NULL) return 0; switch (type->kind) { case Type_Kind_Struct: return type->Struct.mem_count; case Type_Kind_Slice: return 2; @@ -1224,6 +1237,7 @@ u32 type_structlike_mem_count(Type* type) { } u32 type_structlike_is_simple(Type* type) { + if (type == NULL) return 0; switch (type->kind) { case Type_Kind_Struct: return type_struct_is_simple(type); case Type_Kind_Slice: return 1; @@ -1234,6 +1248,7 @@ u32 type_structlike_is_simple(Type* type) { } b32 type_is_sl_constructable(Type* type) { + if (type == NULL) return 0; switch (type->kind) { case Type_Kind_Struct: return 1; case Type_Kind_Slice: return 1; @@ -1243,6 +1258,7 @@ b32 type_is_sl_constructable(Type* type) { } b32 type_struct_constructed_from_poly_struct(Type* struct_type, struct AstType* from) { + if (struct_type == NULL) return 0; if (struct_type->kind != Type_Kind_Struct) return 0; return struct_type->Struct.constructed_from == from; diff --git a/src/onyxutils.c b/src/onyxutils.c index e3810567..6e64c768 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -1341,13 +1341,19 @@ char* build_poly_struct_name(AstPolyStructType* ps_type, Type* cs_type) { case PSK_Type: strncat(name_buf, type_get_name(ptype->type), 255); break; case PSK_Value: { // FIX - if (ptype->value->kind == Ast_Kind_NumLit) { - AstNumLit* nl = (AstNumLit *) ptype->value; + AstNode* value = strip_aliases((AstNode *) ptype->value); + + if (value->kind == Ast_Kind_NumLit) { + AstNumLit* nl = (AstNumLit *) value; if (type_is_integer(nl->type)) { strncat(name_buf, bh_bprintf("%l", nl->value.l), 127); } else { strncat(name_buf, "numlit (FIX ME)", 127); } + } else if (value->kind == Ast_Kind_Code_Block) { + AstCodeBlock* code = (AstCodeBlock *) value; + OnyxFilePos code_loc = code->token->pos; + strncat(name_buf, bh_bprintf("code at %s:%d,%d", code_loc.filename, code_loc.line, code_loc.column), 127); } else { strncat(name_buf, "", 127); } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index fa757f6a..399002a1 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -188,6 +188,7 @@ enum StructuredBlockType { SBT_Breakable_Block, // Targeted using break SBT_Continue_Block, // Targeted using continue SBT_Fallthrough_Block, // Targeted using fallthrough + SBT_Return_Block, // Targeted using return, (used for expression macros) SBT_Basic_If, // Cannot be targeted using jump SBT_Breakable_If, // Targeted using break @@ -306,6 +307,7 @@ EMIT_FUNC(enter_structured_block, StructuredBlockType sbt) { /* SBT_Breakable_Block */ 1, /* SBT_Continue_Block */ 2, /* SBT_Fallthrough_Block */ 3, + /* SBT_Return_Block */ 4, /* SBT_Basic_If */ 0, /* SBT_Breakable_If */ 1, @@ -319,6 +321,7 @@ EMIT_FUNC(enter_structured_block, StructuredBlockType sbt) { /* SBT_Breakable_Block */ WI_BLOCK_START, /* SBT_Continue_Block */ WI_BLOCK_START, /* SBT_Fallthrough_Block */ WI_BLOCK_START, + /* SBT_Return_Block */ WI_BLOCK_START, /* SBT_Basic_If */ WI_IF_START, /* SBT_Breakable_If */ WI_IF_START, @@ -348,7 +351,7 @@ EMIT_FUNC(structured_jump, AstJump* jump) { // :CLEANUP These numbers should become constants because they are shared with // enter_structured_block's definitions. - static const u8 wants[Jump_Type_Count] = { 1, 2, 3 }; + static const u8 wants[Jump_Type_Count] = { 1, 2, 3, 4 }; u64 labelidx = 0; u8 wanted = wants[jump->jump]; @@ -2773,6 +2776,7 @@ EMIT_FUNC(cast, AstUnaryOp* cast) { EMIT_FUNC(return, AstReturn* ret) { bh_arr(WasmInstruction) code = *pcode; + // If we have an expression to return, we see if it should be placed on the linear memory stack, or the WASM stack. if (ret->expr) { if (mod->curr_cc == CC_Return_Stack) { WIL(WI_LOCAL_GET, mod->stack_base_idx); @@ -2787,8 +2791,10 @@ EMIT_FUNC(return, AstReturn* ret) { } } + // Clear the normal deferred statements emit_deferred_stmts(mod, &code); + // Clear the rest of the deferred statements if (bh_arr_length(mod->deferred_stmts) != 0) { i32 i = bh_arr_length(mod->deferred_stmts) - 1; while (i >= 0) { @@ -2797,6 +2803,7 @@ EMIT_FUNC(return, AstReturn* ret) { } } + // Make a patch for the two instructions needed to restore the stack pointer SUBMIT_PATCH(mod->stack_leave_patches, 0); WI(WI_NOP); WI(WI_NOP); @@ -3306,6 +3313,8 @@ static b32 emit_raw_data_(OnyxWasmModule* mod, ptr data, AstTyped* node) { //fallthrough } + case Ast_Kind_Code_Block: break; + default: retval = 0; } diff --git a/tests/bugs/namespace_aliasing b/tests/bugs/namespace_aliasing new file mode 100644 index 00000000..da836745 --- /dev/null +++ b/tests/bugs/namespace_aliasing @@ -0,0 +1,2 @@ +Aliasing is working +Aliasing is working diff --git a/tests/bugs/namespace_aliasing.onyx b/tests/bugs/namespace_aliasing.onyx new file mode 100644 index 00000000..94582312 --- /dev/null +++ b/tests/bugs/namespace_aliasing.onyx @@ -0,0 +1,22 @@ +#load "core/std" +use package core + +SomeNamespace :: struct { + foo :: () { + println("Aliasing is working"); + } +} + +main :: (args) => { + { + SN :: SomeNamespace + + SN.foo(); + } + + { + use SomeNamespace; + + foo(); + } +} \ No newline at end of file -- 2.25.1