bugfix with do expressions
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 31 Aug 2021 16:05:58 +0000 (11:05 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 31 Aug 2021 16:05:58 +0000 (11:05 -0500)
bin/onyx
src/onyxchecker.c
src/onyxsymres.c

index 983758a2188f4310f35eba9535c7d67f42e2c52a..f4d515716ef1e05a460e52ec6e516df41ed7319b 100755 (executable)
Binary files a/bin/onyx and b/bin/onyx differ
index 59978901eaa196bac09356381b5d1695f8301124..3ec91cf568f35ca1adfccc02d45f8dc796a56f0f 100644 (file)
@@ -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;
index 0992b0edb67812ae9b9164a6cd9720f33184948d..b048e6c841707b9364db3b89e36da395e6d7283d 100644 (file)
@@ -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,