From: Brendan Hansen Date: Wed, 8 Jul 2020 20:56:01 +0000 (-0500) Subject: Renamed 'scope' to 'localgroup' since scope didn't feel right X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=b7a09d2b1d3c66e09dddd75cb7a586009d91dd0e;p=onyx.git Renamed 'scope' to 'localgroup' since scope didn't feel right --- diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index c1507514..cdb7a71c 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -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 { diff --git a/include/onyxsempass.h b/include/onyxsempass.h index a2bb7918..220fe8b2 100644 --- a/include/onyxsempass.h +++ b/include/onyxsempass.h @@ -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 e0cd5c77..06e673ce 100755 Binary files a/onyx and b/onyx differ diff --git a/src/onyxparser.c b/src/onyxparser.c index 83f2b627..7fa72f6f 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -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 == '-') { diff --git a/src/onyxsempass.c b/src/onyxsempass.c index d3b8c905..df81f551 100644 --- a/src/onyxsempass.c +++ b/src/onyxsempass.c @@ -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; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index b91e93b6..463fff61 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -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) { diff --git a/src/onyxtypecheck.c b/src/onyxtypecheck.c index 04288c44..869e89af 100644 --- a/src/onyxtypecheck.c +++ b/src/onyxtypecheck.c @@ -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, diff --git a/src/onyxutils.c b/src/onyxutils.c index 60fba38f..7fff9577 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -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 diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 9370999c..7f5a5061 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -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++);