From 2f24fce5f1d2df7bf5b3793d83c5e7d6030ddb3c Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 17 Jul 2020 13:55:23 -0500 Subject: [PATCH] if and while can now take any statement --- docs/thoughts | 4 ++- include/onyxastnodes.h | 20 ++++--------- include/onyxsempass.h | 1 + include/onyxwasm.h | 13 ++++----- onyx | Bin 246776 -> 245912 bytes progs/basic.onyx | 24 +++++++++++++-- src/onyxchecker.c | 6 ++-- src/onyxparser.c | 28 +++++++++--------- src/onyxsempass.c | 65 ----------------------------------------- src/onyxsymres.c | 32 +++++++++----------- src/onyxwasm.c | 52 ++++++++++++++++----------------- 11 files changed, 91 insertions(+), 154 deletions(-) diff --git a/docs/thoughts b/docs/thoughts index 8bedc24a..13703fa4 100644 --- a/docs/thoughts +++ b/docs/thoughts @@ -100,4 +100,6 @@ Explicit overriden functions: min(2, 5); min(4.5, 10.4); - +Some WASM intruction optimizations: + - local.set followed by local.get -> local.tee + - Any code after unconditional break before 'end' can be removed diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 967f43ab..1d2293b1 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -110,12 +110,6 @@ typedef enum BinaryOp { // Base Nodes - -// NOTE: AstNode and AstTyped need to be EXACTLY the same for all -// arguments existing in AstNode. I do this to avoid a nested -// "inheiritance" where you would have to say node.base.base.next -// for example - #define AstNode_members { \ AstKind kind; \ u32 flags; \ @@ -137,10 +131,7 @@ struct AstNode AstNode_members; // 'type' is filled out afterwards. If it is NULL, the Type* is built // using the type_node. This can then be used to typecheck this node. #define AstTyped_members { \ - AstKind kind; \ - u32 flags; \ - OnyxToken *token; \ - AstNode *next; \ + AstNode_base; \ AstType *type_node; \ Type *type; \ } @@ -160,15 +151,13 @@ struct AstArgument { AstTyped_base; AstTyped *value; }; // Structure Nodes struct AstLocalGroup { AstNode_base; AstLocalGroup *prev_group; AstLocal *last_local; }; struct AstBlock { AstNode_base; AstNode *body; AstLocalGroup *locals; }; -struct AstWhile { AstNode_base; AstTyped *cond; AstBlock *body; }; +struct AstWhile { AstNode_base; AstTyped *cond; AstNode *stmt; }; struct AstIf { AstNode_base; AstTyped *cond; - union { - AstIf *as_if; - AstBlock* as_block; - } true_block, false_block; + AstNode* true_stmt; + AstNode* false_stmt; }; // Type Nodes @@ -207,6 +196,7 @@ struct AstFunction { AstBlock *body; AstLocal *params; + bh_arr(AstLocal *) locals; union { // NOTE: Used when a function is exported with a specific name diff --git a/include/onyxsempass.h b/include/onyxsempass.h index c5780fa6..97114bcf 100644 --- a/include/onyxsempass.h +++ b/include/onyxsempass.h @@ -20,6 +20,7 @@ typedef struct SemState { // NOTE: Used in symbol resolution phase AstLocalGroup* curr_local_group; + AstFunction* curr_function; // NOTE: Used in type checking phase Type* expected_return_type; diff --git a/include/onyxwasm.h b/include/onyxwasm.h index 24b951c1..55be4e15 100644 --- a/include/onyxwasm.h +++ b/include/onyxwasm.h @@ -282,23 +282,20 @@ typedef struct OnyxWasmModule { // NOTE: Mapping from local ast node ptrs to indicies bh_imap local_map; bh_imap global_map; - - bh_arr(u8) structured_jump_target; + bh_imap func_map; // NOTE: Maps from ast node pointers to the function index // NOTE: Used internally as a map from strings that represent function types, // 0x7f 0x7f : 0x7f ( (i32, i32) -> i32 ) // to the function type index if it has been created. bh_table(i32) type_map; - bh_arr(WasmFuncType*) functypes; // NOTE: This have to be pointers because the type is variadic in size - - bh_arr(WasmFunc) funcs; - bh_imap func_map; // NOTE: Maps from ast node pointers to the function index - bh_table(WasmExport) exports; + bh_arr(u8) structured_jump_target; + bh_arr(WasmFuncType*) types; // NOTE: This have to be pointers because the type is variadic in size bh_arr(WasmImport) imports; - + bh_table(WasmExport) exports; bh_arr(WasmGlobal) globals; + bh_arr(WasmFunc) funcs; u16 next_type_idx; u16 next_func_idx; diff --git a/onyx b/onyx index efc7bf7d7325729e88d39c864f41e9de0e659aab..8457bd029fef3350cbd6cc053d59c4ee343b972d 100755 GIT binary patch delta 88110 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 OdXi74duH>st-;%@t delta 89924 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®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 S`)C(myrQBLOp&{X_4pt9;!|<} diff --git a/progs/basic.onyx b/progs/basic.onyx index 1d10f18e..caed8770 100644 --- a/progs/basic.onyx +++ b/progs/basic.onyx @@ -6,6 +6,10 @@ print :: proc #foreign "host" "print" (val: i32) --- +printf :: proc + #foreign "host" "print" + (val: f32) --- + test :: proc (a: bool) -> bool { return !a; } @@ -36,11 +40,25 @@ main :: proc #export { print(4 + global_value); b := 1 + foo(2); + if b == 13 b = 10; print(b); - if b == 13 {} - else { - print(1024); + if b == 13 print(5678); + else print(1024); + + if b == 13 --- + + while true { + while true { + while true { + foo := 20; + foo = global_value + 10; + print(foo); + break; + } + break; + } + break; } cond :: true; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index a41720b7..ec81e35f 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -97,8 +97,8 @@ static b32 check_if(SemState* state, AstIf* ifnode) { return 1; } - if (ifnode->true_block.as_if) if (check_statement(state, (AstNode *) ifnode->true_block.as_block)) return 1; - if (ifnode->false_block.as_if) if (check_statement(state, (AstNode *) ifnode->false_block.as_block)) return 1; + if (ifnode->true_stmt) if (check_statement(state, ifnode->true_stmt)) return 1; + if (ifnode->false_stmt) if (check_statement(state, ifnode->false_stmt)) return 1; return 0; } @@ -114,7 +114,7 @@ static b32 check_while(SemState* state, AstWhile* whilenode) { return 1; } - return check_block(state, whilenode->body); + return check_statement(state, whilenode->stmt); } static b32 check_call(SemState* state, AstCall* call) { diff --git a/src/onyxparser.c b/src/onyxparser.c index 6e860082..d98a8c6e 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -368,41 +368,41 @@ expression_done: return root; } -// 'if' ('elseif' )* ('else' )? +// 'if' ('elseif' )* ('else' )? static AstIf* parse_if_stmt(OnyxParser* parser) { expect_token(parser, Token_Type_Keyword_If); AstTyped* cond = parse_expression(parser); - AstBlock* true_block = parse_block(parser); + AstNode* true_stmt = parse_statement(parser); AstIf* if_node = make_node(AstIf, Ast_Kind_If); AstIf* root_if = if_node; if_node->cond = cond; - if (true_block != NULL) - if_node->true_block.as_block = true_block; + if (true_stmt != NULL) + if_node->true_stmt = true_stmt; while (parser->curr->type == Token_Type_Keyword_Elseif) { consume_token(parser); AstIf* elseif_node = make_node(AstIf, Ast_Kind_If); cond = parse_expression(parser); - true_block = parse_block(parser); + true_stmt = parse_statement(parser); elseif_node->cond = cond; - if (true_block != NULL) - elseif_node->true_block.as_block = true_block; + if (true_stmt != NULL) + elseif_node->true_stmt = true_stmt; - if_node->false_block.as_if = elseif_node; + if_node->false_stmt = (AstNode *) elseif_node; if_node = elseif_node; } if (parser->curr->type == Token_Type_Keyword_Else) { consume_token(parser); - AstBlock* false_block = parse_block(parser); - if (false_block != NULL) - if_node->false_block.as_block = false_block; + AstNode* false_stmt = parse_statement(parser); + if (false_stmt != NULL) + if_node->false_stmt = false_stmt; } return root_if; @@ -413,12 +413,12 @@ static AstWhile* parse_while_stmt(OnyxParser* parser) { OnyxToken* while_token = expect_token(parser, Token_Type_Keyword_While); AstTyped* cond = parse_expression(parser); - AstBlock* body = parse_block(parser); + AstNode* stmt = parse_statement(parser); AstWhile* while_node = make_node(AstWhile, Ast_Kind_While); while_node->token = while_token; while_node->cond = cond; - while_node->body = body; + while_node->stmt = stmt; return while_node; } @@ -588,6 +588,7 @@ static AstNode* parse_statement(OnyxParser* parser) { break; case '{': + case Token_Type_Empty_Block: needs_semicolon = 0; retval = (AstNode *) parse_block(parser); break; @@ -779,6 +780,7 @@ static b32 parse_possible_directive(OnyxParser* parser, const char* dir) { static AstFunction* parse_function_definition(OnyxParser* parser) { AstFunction* func_def = make_node(AstFunction, Ast_Kind_Function); + bh_arr_new(global_heap_allocator, func_def->locals, 4); func_def->token = expect_token(parser, Token_Type_Keyword_Proc); while (parser->curr->type == '#') { diff --git a/src/onyxsempass.c b/src/onyxsempass.c index bc1d8524..0b502c6e 100644 --- a/src/onyxsempass.c +++ b/src/onyxsempass.c @@ -18,75 +18,10 @@ SemState onyx_sempass_create(bh_allocator alloc, bh_allocator node_alloc, OnyxMe return state; } - -// NOTE: If the compiler is expanded to support more targets than just -// WASM, this function may not be needed. It brings all of the locals -// defined in sub-scopes up to the function-block level. This is a -// requirement of WASM, but not of other targets. -static void hoist_locals(ParserOutput* program) { - bh_arr(AstBlock*) traversal_queue = NULL; - bh_arr_new(global_scratch_allocator, traversal_queue, 4); - bh_arr_set_length(traversal_queue, 0); - - bh_arr_each(AstFunction *, func, program->functions) { - if ((*func)->flags & Ast_Flag_Intrinsic) continue; - - AstLocalGroup* top_locals = (*func)->body->locals; - - bh_arr_push(traversal_queue, (*func)->body); - while (!bh_arr_is_empty(traversal_queue)) { - AstBlock* block = traversal_queue[0]; - - if (block->kind == Ast_Kind_If) { - AstIf* if_node = (AstIf *) block; - if (if_node->true_block.as_block != NULL) - bh_arr_push(traversal_queue, if_node->true_block.as_block); - - if (if_node->false_block.as_block != NULL) - bh_arr_push(traversal_queue, if_node->false_block.as_block); - - } else { - - if (block->locals != top_locals && block->locals->last_local != NULL) { - AstLocal* 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_locals->last_local; - top_locals->last_local = block->locals->last_local; - block->locals->last_local = NULL; - } - - AstNode* walker = block->body; - while (walker) { - if (walker->kind == Ast_Kind_Block) { - bh_arr_push(traversal_queue, (AstBlock *) walker); - - } else if (walker->kind == Ast_Kind_While) { - bh_arr_push(traversal_queue, ((AstWhile *) walker)->body); - - } else if (walker->kind == Ast_Kind_If) { - if (((AstIf *) walker)->true_block.as_block != NULL) - bh_arr_push(traversal_queue, ((AstIf *) walker)->true_block.as_block); - - if (((AstIf *) walker)->false_block.as_block != NULL) - bh_arr_push(traversal_queue, ((AstIf *) walker)->false_block.as_block); - } - - walker = walker->next; - } - } - - bh_arr_deleten(traversal_queue, 0, 1); - } - } -} - void onyx_sempass(SemState* state, ParserOutput* program) { onyx_resolve_symbols(state, program); if (onyx_message_has_errors(state->msgs)) return; onyx_type_check(state, program); if (onyx_message_has_errors(state->msgs)) return; - - hoist_locals(program); } diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 0db1bb0b..a75c15cc 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -40,6 +40,8 @@ static void symbol_introduce(SemState* state, OnyxToken* tkn, AstNode* symbol) { AstLocal* local = (AstLocal *) symbol; local->prev_local = state->curr_local_group->last_local; state->curr_local_group->last_local = local; + + bh_arr_push(state->curr_function->locals, local); } token_toggle_end(tkn); @@ -164,6 +166,7 @@ static AstType* symres_type(SemState* state, AstType* type) { static void symres_local(SemState* state, AstLocal** local) { (*local)->type_node = symres_type(state, (*local)->type_node); + symbol_introduce(state, (*local)->token, (AstNode *) *local); } @@ -240,30 +243,20 @@ static void symres_return(SemState* state, AstReturn* ret) { static void symres_if(SemState* state, AstIf* ifnode) { symres_expression(state, &ifnode->cond); - if (ifnode->true_block.as_if != NULL) { - if (ifnode->true_block.as_if->kind == Ast_Kind_Block) - symres_block(state, ifnode->true_block.as_block); - - else if (ifnode->true_block.as_if->kind == Ast_Kind_If) - symres_if(state, ifnode->true_block.as_if); - - else DEBUG_HERE; - } - - if (ifnode->false_block.as_if != NULL) { - if (ifnode->false_block.as_if->kind == Ast_Kind_Block) - symres_block(state, ifnode->false_block.as_block); - else if (ifnode->false_block.as_if->kind == Ast_Kind_If) - symres_if(state, ifnode->false_block.as_if); - - else DEBUG_HERE; - } + // BUG: This will not work for the following case: + // if cond foo := 10 + // else foo := 20 + // + // The declaration will cause a problem but semantically the above + // doesn't make sense. + if (ifnode->true_stmt != NULL) symres_statement(state, ifnode->true_stmt); + if (ifnode->false_stmt != NULL) symres_statement(state, ifnode->false_stmt); } static void symres_while(SemState* state, AstWhile* whilenode) { symres_expression(state, &whilenode->cond); - symres_block(state, whilenode->body); + symres_statement(state, whilenode->stmt); } // NOTE: Returns 1 if the statment should be removed @@ -315,6 +308,7 @@ static void symres_function(SemState* state, AstFunction* func) { func->type_node = symres_type(state, func->type_node); } + state->curr_function = func; symres_block(state, func->body); for (AstLocal *param = func->params; param != NULL; param = (AstLocal *) param->next) { diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 752e4aaf..721cbc0f 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -344,31 +344,25 @@ COMPILE_FUNC(if, AstIf* if_node) { bh_arr_push(mod->structured_jump_target, 0); - if (if_node->true_block.as_if) { - // NOTE: This is kind of gross, but making a function for this doesn't feel right - - if (if_node->true_block.as_if->kind == Ast_Kind_If) { - forll (AstNode, stmt, (AstNode *) if_node->true_block.as_if, next) { - compile_statement(mod, &code, stmt); - } - } else if (if_node->true_block.as_if->kind == Ast_Kind_Block) { - forll (AstNode, stmt, if_node->true_block.as_block->body, next) { + if (if_node->true_stmt) { + if (if_node->true_stmt->kind == Ast_Kind_Block) { + forll (AstNode, stmt, ((AstBlock *) if_node->true_stmt)->body, next) { compile_statement(mod, &code, stmt); } + } else { + compile_statement(mod, &code, if_node->true_stmt); } } - if (if_node->false_block.as_if) { + if (if_node->false_stmt) { WI(WI_ELSE); - if (if_node->false_block.as_if->kind == Ast_Kind_If) { - forll (AstNode, stmt, (AstNode *) if_node->false_block.as_if, next) { - compile_statement(mod, &code, stmt); - } - } else if (if_node->false_block.as_if->kind == Ast_Kind_Block) { - forll (AstNode, stmt, if_node->false_block.as_block->body, next) { + if (if_node->false_stmt->kind == Ast_Kind_Block) { + forll (AstNode, stmt, ((AstBlock *) if_node->false_stmt)->body, next) { compile_statement(mod, &code, stmt); } + } else { + compile_statement(mod, &code, if_node->false_stmt); } } @@ -392,8 +386,12 @@ COMPILE_FUNC(while, AstWhile* while_node) { bh_arr_push(mod->structured_jump_target, 1); bh_arr_push(mod->structured_jump_target, 2); - forll (AstNode, stmt, while_node->body->body, next) { - compile_statement(mod, &code, stmt); + if (while_node->stmt->kind == Ast_Kind_Block) { + forll (AstNode, stmt, ((AstBlock *) while_node->stmt)->body, next) { + compile_statement(mod, &code, stmt); + } + } else { + compile_statement(mod, &code, while_node->stmt); } bh_arr_pop(mod->structured_jump_target); @@ -784,7 +782,7 @@ static i32 generate_type_idx(OnyxWasmModule* mod, AstFunction* fd) { // HACK ish thing memcpy(type->param_types, type_repr_buf, type->param_count); - bh_arr_push(mod->functypes, type); + bh_arr_push(mod->types, type); bh_table_put(i32, mod->type_map, type_repr_buf, mod->next_type_idx); type_idx = mod->next_type_idx; @@ -854,9 +852,9 @@ static void compile_function(OnyxWasmModule* mod, AstFunction* fd) { // is the same as the order of the local_types above u8* count = &wasm_func.locals.i32_count; fori (ti, 0, 3) { - forll (AstLocal, local, fd->body->locals->last_local, prev_local) { - if (onyx_type_to_wasm_type(local->type) == local_types[ti]) { - bh_imap_put(&mod->local_map, (u64) local, localidx++); + bh_arr_each(AstLocal *, local, fd->locals) { + if (onyx_type_to_wasm_type((*local)->type) == local_types[ti]) { + bh_imap_put(&mod->local_map, (u64) *local, localidx++); (*count)++; } @@ -936,7 +934,7 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc, OnyxMessages* msgs) { .type_map = NULL, .next_type_idx = 0, - .functypes = NULL, + .types = NULL, .funcs = NULL, .next_func_idx = 0, @@ -952,7 +950,7 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc, OnyxMessages* msgs) { .structured_jump_target = NULL, }; - bh_arr_new(alloc, module.functypes, 4); + bh_arr_new(alloc, module.types, 4); bh_arr_new(alloc, module.funcs, 4); bh_arr_new(alloc, module.imports, 4); bh_arr_new(alloc, module.globals, 4); @@ -1009,7 +1007,7 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, ParserOutput* program) { } void onyx_wasm_module_free(OnyxWasmModule* module) { - bh_arr_free(module->functypes); + bh_arr_free(module->types); bh_arr_free(module->funcs); bh_imap_free(&module->local_map); bh_imap_free(&module->func_map); @@ -1094,9 +1092,9 @@ static i32 output_typesection(OnyxWasmModule* module, bh_buffer* buff) { bh_buffer_init(&vec_buff, buff->allocator, 128); i32 vec_len = output_vector( - (void**) module->functypes, + (void**) module->types, sizeof(WasmFuncType*), - bh_arr_length(module->functypes), + bh_arr_length(module->types), (vector_func *) output_functype, &vec_buff); -- 2.25.1