Bug fixes with symbol resolution
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 22 Jun 2020 16:16:18 +0000 (11:16 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Mon, 22 Jun 2020 16:16:18 +0000 (11:16 -0500)
include/onyxparser.h
onyx
progs/new_minimal.onyx
src/onyxsempass.c

index 39becb233bfd54839edcdec565f3076d32cbf989..c9d77e6ba4d454f800891ff708c63f8b5eec1ec7 100644 (file)
@@ -153,7 +153,7 @@ struct OnyxAstNodeBlock {
        OnyxTypeInfo *return_type;
        OnyxAstNode *next;
        OnyxAstNode *body;
-       OnyxAstNodeScope *scope; // NOTE: Only set on blocks belonging to functions
+       OnyxAstNodeScope *scope;
 };
 
 struct OnyxAstNodeIf {
diff --git a/onyx b/onyx
index 8cec77ebea577bbd812aee7adc52b376c672fb05..8ad5333c93d3dee356e771b2cfbf2782cf75d8d4 100755 (executable)
Binary files a/onyx and b/onyx differ
index cbb7fe06b4d408f2694a2464d338cf860f9bc520..55cb5174cacec8c950d4e15169049909fad8b4c8 100644 (file)
@@ -1,13 +1,14 @@
 print :: foreign "host" "print" proc (value i32) ---
 
-foo :: proc -> i32 {
-    a := 2 + 4;
-    a = 5;
-    bar(a + 1);
-    print(bar(a));
-    return a;
-}
+diff_square :: proc (a i32, b i32) -> i32 {
+       // Typechecked
+       c := a - b; // Mutable
+       d :: a + b; // Constant
+
+    {
+        c : i32 = a * 2;
+        d : i32 = (c + a) * 2;
+    }
 
-bar :: proc (val i32) -> i32 {
-    return val + 1;
+       return c * d;
 }
index 233646fde2cbc3ee9a744d3e10e47c8fa8d24656..dd2568be8d839b978a770631b7b14016fbf8ca06 100644 (file)
@@ -237,6 +237,7 @@ static b32 symres_statement(OnyxSemPassState* state, OnyxAstNode* stmt) {
         case ONYX_AST_NODE_KIND_IF:         symres_if(state, &stmt->as_if);                         return 0;
         case ONYX_AST_NODE_KIND_CALL:       symres_call(state, stmt);                               return 0;
         case ONYX_AST_NODE_KIND_ARGUMENT:   symres_expression(state, (OnyxAstNode **) &stmt->left); return 0;
+        case ONYX_AST_NODE_KIND_BLOCK:      symres_block(state, &stmt->as_block);                   return 0;
 
         default: return 0;
     }
@@ -251,7 +252,7 @@ static void symres_statement_chain(OnyxSemPassState* state, OnyxAstNode* walker,
             walker->next = NULL;
             walker = tmp;
         } else {
-            trailer = &walker;
+            trailer = &walker->next;
             walker = walker->next;
         }
     }
@@ -296,11 +297,6 @@ void onyx_sempass(OnyxSemPassState* state, OnyxAstNode* root_node) {
         walker = walker->next;
     }
 
-    bh_printf("\n\n");
-    bh_table_each_start(SemPassSymbol*, state->symbols) {
-        bh_printf("%s -> %l\n", key, (u64) value);
-    } bh_table_each_end;
-
     // NOTE: First, resolve all symbols
     walker = root_node;
     while (walker) {