fixed: miscellaneous segfaults
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 27 Apr 2023 16:00:25 +0000 (11:00 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 27 Apr 2023 16:00:25 +0000 (11:00 -0500)
compiler/src/clone.c
compiler/src/symres.c

index 0bcdd608f8bdc5467fd6dae9c8de6e7335142e2a..c44ec994619a193d16cc2978f60e1936d96ba381 100644 (file)
@@ -133,6 +133,7 @@ AstNode* ast_clone_with_captured_entities(bh_allocator a, void* n, bh_arr(AstNod
     AstNode* cloned = ast_clone(a, n);
 
     *ents = captured_entities;
+    captured_entities = NULL;
     return cloned;
 }
 
index 6478c882a96c35c9859c8745b497aaff76957270..c0dd191e0e5d273d985afdee6d4baf785628df31 100644 (file)
@@ -339,18 +339,22 @@ static SymresStatus symres_field_access(AstFieldAccess** fa) {
             token_toggle_end((*fa)->token);
 
             AstPackage *package = (AstPackage *) strip_aliases((AstNode *) (*fa)->expr);
+            char *package_name = "unknown (compiler bug)";
+            if (package && package->package) {
+                package_name = package->package->name;
+            }
 
             if (closest) {
                 onyx_report_error((*fa)->token->pos, Error_Critical, "'%b' was not found in package '%s'. Did you mean '%s'?",
                     (*fa)->token->text,
                     (*fa)->token->length,
-                    package->package->name,
+                    package_name,
                     closest);
             } else {
                 onyx_report_error((*fa)->token->pos, Error_Critical, "'%b' was not found in package '%s'. Perhaps it is defined in a file that wasn't loaded?",
                     (*fa)->token->text,
                     (*fa)->token->length,
-                    package->package->name);
+                    package_name);
             }
             return Symres_Error;