Renamed 'scope' to 'localgroup' since scope didn't feel right
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 8 Jul 2020 20:56:01 +0000 (15:56 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 8 Jul 2020 20:56:01 +0000 (15:56 -0500)
include/onyxastnodes.h
include/onyxsempass.h
onyx
src/onyxparser.c
src/onyxsempass.c
src/onyxsymres.c
src/onyxtypecheck.c
src/onyxutils.c
src/onyxwasm.c

index c1507514aa564582a6c41532a4aa41eb013a9e68..cdb7a71cbdd6a47fe2c4245b6b773851548c05d8 100644 (file)
@@ -10,7 +10,7 @@ typedef struct AstNodeBinOp AstNodeBinOp;
 typedef struct AstNodeAssign AstNodeAssign;
 typedef struct AstNodeNumLit AstNodeNumLit;
 typedef struct AstNodeLocal AstNodeLocal;
-typedef struct AstNodeScope AstNodeScope;
+typedef struct AstNodeLocalGroup AstNodeLocalGroup;
 typedef struct AstNodeReturn AstNodeReturn;
 typedef struct AstNodeBlock AstNodeBlock;
 typedef struct AstNodeIf AstNodeIf;
@@ -30,7 +30,7 @@ typedef enum AstNodeKind {
     AST_NODE_KIND_FUNCTION,
     AST_NODE_KIND_FOREIGN,
     AST_NODE_KIND_BLOCK,
-    AST_NODE_KIND_SCOPE,
+    AST_NODE_KIND_LOCAL_GROUP,
     AST_NODE_KIND_LOCAL,
     AST_NODE_KIND_GLOBAL,
     AST_NODE_KIND_SYMBOL,
@@ -178,10 +178,10 @@ struct AstNodeReturn {
     AstNodeTyped* expr;
 };
 
-struct AstNodeScope {
+struct AstNodeLocalGroup {
     AstNode base;
 
-    AstNodeScope *prev_scope;
+    AstNodeLocalGroup *prev_group;
     AstNodeLocal *last_local;
 };
 
@@ -189,7 +189,7 @@ struct AstNodeBlock {
     AstNode base;
 
     AstNode *body;
-    AstNodeScope *scope;
+    AstNodeLocalGroup *locals;
 };
 
 struct AstNodeIf {
index a2bb79187358b36974c4eedf99ca2662144ea365..220fe8b2705f98005409d4cebe15684f474b3c3f 100644 (file)
@@ -19,11 +19,12 @@ typedef struct OnyxSemPassState {
     OnyxMessages *msgs;
 
     // NOTE: Used in symbol resolution phase
-    AstNodeScope* curr_scope;
+    AstNodeLocalGroup* curr_local_group;
 
     // NOTE: Used in type checking phase
     TypeInfo* expected_return_type;
 
+    // NOTE: All symbols a given point that we can resolve
     bh_table(SemPassSymbol *) symbols;
 } OnyxSemPassState;
 
diff --git a/onyx b/onyx
index e0cd5c77f1552d18e67b77a739aeb7e08a87196d..06e673ce731eb422696e94b4509f95882b577338 100755 (executable)
Binary files a/onyx and b/onyx differ
index 83f2b627b801469e3986ac4469e3edfb104da4e3..7fa72f6fe47574fcf59f7348f4aaaaabd43df7d9 100644 (file)
@@ -590,8 +590,8 @@ static AstNode* parse_statement(OnyxParser* parser) {
 
 static AstNodeBlock* parse_block(OnyxParser* parser) {
     AstNodeBlock* block = make_node(AstNodeBlock, AST_NODE_KIND_BLOCK);
-    AstNodeScope* scope = make_node(AstNodeScope, AST_NODE_KIND_SCOPE);
-    block->scope = scope;
+    AstNodeLocalGroup* lg = make_node(AstNodeLocalGroup, AST_NODE_KIND_LOCAL_GROUP);
+    block->locals = lg;
 
     // --- is for an empty block
     if (parser->curr_token->type == '-') {
index d3b8c9059220fd2b01525b5c879c95d72f9c6bf6..df81f551ccac39d3fd659ec2267a1c268d897b75 100644 (file)
@@ -9,7 +9,7 @@ OnyxSemPassState onyx_sempass_create(bh_allocator alloc, bh_allocator node_alloc
 
         .msgs = msgs,
 
-        .curr_scope = NULL,
+        .curr_local_group = NULL,
         .symbols = NULL,
     };
 
@@ -29,7 +29,7 @@ static void collapse_scopes(OnyxProgram* program) {
     bh_arr_set_length(traversal_queue, 0);
 
     bh_arr_each(AstNodeFunction *, func, program->functions) {
-        AstNodeScope* top_scope = (*func)->body->scope;
+        AstNodeLocalGroup* top_locals = (*func)->body->locals;
 
         bh_arr_push(traversal_queue, (*func)->body);
         while (!bh_arr_is_empty(traversal_queue)) {
@@ -45,13 +45,13 @@ static void collapse_scopes(OnyxProgram* program) {
 
             } else {
 
-                if (block->scope != top_scope && block->scope->last_local != NULL) {
-                    AstNodeLocal* last_local = block->scope->last_local;
+                if (block->locals != top_locals && block->locals->last_local != NULL) {
+                    AstNodeLocal* last_local = block->locals->last_local;
                     while (last_local && last_local->prev_local != NULL) last_local = last_local->prev_local;
 
-                    last_local->prev_local = top_scope->last_local;
-                    top_scope->last_local = block->scope->last_local;
-                    block->scope->last_local = NULL;
+                    last_local->prev_local = top_locals->last_local;
+                    top_locals->last_local = block->locals->last_local;
+                    block->locals->last_local = NULL;
                 }
 
                 AstNode* walker = block->body;
index b91e93b6599b961c709416cf782511ca63e4f18b..463fff61f98029f62abbc5b293518994eae8482e 100644 (file)
@@ -5,8 +5,8 @@ static void symbol_introduce(OnyxSemPassState* state, AstNode* symbol);
 static b32 symbol_unique_introduce(OnyxSemPassState* state, AstNode* symbol);
 static void symbol_remove(OnyxSemPassState* state, AstNode* symbol);
 static AstNode* symbol_resolve(OnyxSemPassState* state, AstNode* symbol);
-static void scope_enter(OnyxSemPassState* state, AstNodeScope* scope);
-static AstNodeScope* scope_leave(OnyxSemPassState* state);
+static void local_group_enter(OnyxSemPassState* state, AstNodeLocalGroup* local_group);
+static void local_group_leave(OnyxSemPassState* state);
 static void symres_local(OnyxSemPassState* state, AstNodeLocal** local);
 static void symres_call(OnyxSemPassState* state, AstNodeCall* call);
 static void symres_expression(OnyxSemPassState* state, AstNode** expr);
@@ -34,8 +34,8 @@ static void symbol_introduce(OnyxSemPassState* state, AstNode* symbol) {
 
     if (symbol->kind == AST_NODE_KIND_LOCAL) {
         AstNodeLocal* local = (AstNodeLocal *) symbol;
-        local->prev_local = state->curr_scope->last_local;
-        state->curr_scope->last_local = local;
+        local->prev_local = state->curr_local_group->last_local;
+        state->curr_local_group->last_local = local;
     }
 
     onyx_token_null_toggle(symbol->token);
@@ -74,21 +74,19 @@ static AstNode* symbol_resolve(OnyxSemPassState* state, AstNode* symbol) {
     return sp_sym->node;
 }
 
-static void scope_enter(OnyxSemPassState* state, AstNodeScope* scope) {
-    scope->prev_scope = state->curr_scope;
-    state->curr_scope = scope;
+static void local_group_enter(OnyxSemPassState* state, AstNodeLocalGroup* local_group) {
+    local_group->prev_group = state->curr_local_group;
+    state->curr_local_group = local_group;
 }
 
-static AstNodeScope* scope_leave(OnyxSemPassState* state) {
-    // NOTE: Can't leave a scope if there is no scope
-    assert(state->curr_scope != NULL);
+static void local_group_leave(OnyxSemPassState* state) {
+    assert(state->curr_local_group != NULL);
 
-    for (AstNodeLocal *walker = state->curr_scope->last_local; walker != NULL; walker = walker->prev_local) {
+    for (AstNodeLocal *walker = state->curr_local_group->last_local; walker != NULL; walker = walker->prev_local) {
         symbol_remove(state, (AstNode *) walker);
     }
 
-    state->curr_scope = state->curr_scope->prev_scope;
-    return state->curr_scope;
+    state->curr_local_group = state->curr_local_group->prev_group;
 }
 
 static b32 symbol_unique_introduce(OnyxSemPassState* state, AstNode* symbol) {
@@ -230,10 +228,10 @@ static void symres_statement_chain(OnyxSemPassState* state, AstNode* walker, Ast
 }
 
 static void symres_block(OnyxSemPassState* state, AstNodeBlock* block) {
-    scope_enter(state, block->scope);
+    local_group_enter(state, block->locals);
     if (block->body)
         symres_statement_chain(state, block->body, &block->body);
-    scope_leave(state);
+    local_group_leave(state);
 }
 
 static void symres_function(OnyxSemPassState* state, AstNodeFunction* func) {
index 04288c44b8ecd1789d63f42adbaadf2d7a176089..869e89af8321a4baa7742dd12d0337229dceb26e 100644 (file)
@@ -311,7 +311,7 @@ static void typecheck_statement_chain(OnyxSemPassState* state, AstNode* start) {
 static void typecheck_block(OnyxSemPassState* state, AstNodeBlock* block) {
     typecheck_statement_chain(state, block->body);
 
-    forll(AstNodeLocal, local, block->scope->last_local, prev_local) {
+    forll(AstNodeLocal, local, block->locals->last_local, prev_local) {
         if (!local->base.type->is_known) {
             onyx_message_add(state->msgs,
                     ONYX_MESSAGE_TYPE_UNRESOLVED_TYPE,
index 60fba38f6580998cf088922bd5ef10e7b124f0db..7fff9577eff0b6ec9d58feb4dbc169812f275c7c 100644 (file)
@@ -45,6 +45,10 @@ const char* onyx_ast_node_kind_string(AstNodeKind kind) {
 }
 
 
+void onyx_ast_print(AstNode* node, i32 indent) {
+    assert(0);
+}
+#if 0
 
 #define print_indent { if (indent > 0) bh_printf("\n"); for (int i = 0; i < indent; i++) bh_printf("  "); }
 
@@ -227,3 +231,5 @@ void onyx_ast_print(AstNode* node, i32 indent) {
         node = node->next;
     }
 }
+
+#endif
index 9370999cdcb20c0c5357be542469a37091e7e895..7f5a50611831dcac5f11c0e62e47c92e521e8e31 100644 (file)
@@ -280,7 +280,6 @@ static void compile_statement(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcod
     bh_arr(WasmInstruction) code = *pcode;
 
     switch (stmt->kind) {
-        case AST_NODE_KIND_SCOPE: break;
         case AST_NODE_KIND_RETURN: compile_return(mod, &code, (AstNodeReturn *) stmt); break;
         case AST_NODE_KIND_ASSIGNMENT: compile_assignment(mod, &code, (AstNodeAssign *) stmt); break;
         case AST_NODE_KIND_IF: compile_if(mod, &code, (AstNodeIf *) stmt); break;
@@ -671,7 +670,7 @@ static i32 generate_type_idx(OnyxWasmModule* mod, AstNodeFunction* fd) {
         type->param_count = param_count;
 
         // HACK ish thing
-         memcpy(type->param_types, type_repr_buf, type->param_count);
+        memcpy(type->param_types, type_repr_buf, type->param_count);
 
         bh_arr_push(mod->functypes, type);
 
@@ -728,7 +727,7 @@ static void compile_function(OnyxWasmModule* mod, AstNodeFunction* fd) {
         // is the same as the order of the local_types above
         u8* count = &wasm_func.locals.i32_count;
         fori (ti, 0, 3) {
-            forll (AstNodeLocal, local, fd->body->scope->last_local, prev_local) {
+            forll (AstNodeLocal, local, fd->body->locals->last_local, prev_local) {
                 if (onyx_type_to_wasm_type(local->base.type) == local_types[ti]) {
                     bh_imap_put(&mod->local_map, (u64) local, localidx++);