From: Brendan Hansen Date: Tue, 31 Aug 2021 16:05:58 +0000 (-0500) Subject: bugfix with do expressions X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=a80169ff1bae6163779cb4ab2f2a9ed86d588244;p=onyx.git bugfix with do expressions --- diff --git a/bin/onyx b/bin/onyx index 983758a2..f4d51571 100755 Binary files a/bin/onyx and b/bin/onyx differ diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 59978901..3ec91cf5 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -1380,8 +1380,10 @@ CheckStatus check_do_block(AstDoBlock** pdoblock) { doblock->block->rules = Block_Rule_Do_Block; CHECK(block, doblock->block); - if (doblock->type == &type_auto_return) - ERROR(doblock->token->pos, "Unable to determine type of do-block expression."); + if (doblock->type == &type_auto_return) { + // ERROR(doblock->token->pos, "Unable to determine type of do-block expression."); + doblock->type = &basic_types[Basic_Kind_Void]; + } expected_return_type = old_expected_return_type; doblock->flags |= Ast_Flag_Has_Been_Checked; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 0992b0ed..b048e6c8 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -158,7 +158,7 @@ static SymresStatus symres_type(AstType** type) { SYMRES(field_access, (AstFieldAccess **) type); if (!node_is_type((AstNode *) *type)) - onyx_report_error((*type)->token->pos, "Field access did not result in a type."); + onyx_report_error((*type)->token->pos, "Field access did not result in a type. (%s)", onyx_ast_node_kind_string((*type)->kind)); break; } @@ -285,9 +285,11 @@ static SymresStatus symres_field_access(AstFieldAccess** fa) { SYMRES(expression, &(*fa)->expr); if ((*fa)->expr == NULL) return Symres_Error; - AstNode* resolution = try_symbol_resolve_from_node((AstNode *) (*fa)->expr, (*fa)->token); + AstTyped* expr = (AstTyped *) strip_aliases((AstNode *) (*fa)->expr); + + AstNode* resolution = try_symbol_resolve_from_node((AstNode *) expr, (*fa)->token); if (resolution) *((AstNode **) fa) = resolution; - else if ((*fa)->expr->kind == Ast_Kind_Package) { + else if (expr->kind == Ast_Kind_Package) { if (report_unresolved_symbols) { onyx_report_error((*fa)->token->pos, "'%b' was not found in package '%s'. Perhaps it is defined in a file that wasn't loaded?", (*fa)->token->text,