From 8918bcef54f64cbdfa43e0a4e11fe7fb8ac8315f Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 30 Jun 2020 22:40:32 -0500 Subject: [PATCH] Added initial version of globals More work will be needed; also, might remove the pointer to code style in the WASM compilation step --- include/onyxmsgs.h | 3 +- include/onyxwasm.h | 23 ++- onyx | Bin 209696 -> 220656 bytes progs/test.onyx | 6 +- src/onyx.c | 7 +- src/onyxmsgs.c | 3 +- src/onyxsymres.c | 30 ++-- src/onyxtypecheck.c | 61 ++++++++ src/onyxwasm.c | 362 ++++++++++++++++++++++++++++++++------------ 9 files changed, 370 insertions(+), 125 deletions(-) diff --git a/include/onyxmsgs.h b/include/onyxmsgs.h index ff268f45..f30c5b46 100644 --- a/include/onyxmsgs.h +++ b/include/onyxmsgs.h @@ -16,9 +16,10 @@ typedef enum OnyxMessageType { ONYX_MESSAGE_TYPE_NOT_LVAL, ONYX_MESSAGE_TYPE_ASSIGN_CONST, ONYX_MESSAGE_TYPE_UNKNOWN_SYMBOL, - ONYX_MESSAGE_TYPE_FUNCTION_REDEFINITION, + ONYX_MESSAGE_TYPE_CONFLICTING_GLOBALS, ONYX_MESSAGE_TYPE_BINOP_MISMATCH_TYPE, ONYX_MESSAGE_TYPE_ASSIGNMENT_TYPE_MISMATCH, + ONYX_MESSAGE_TYPE_GLOBAL_TYPE_MISMATCH, ONYX_MESSAGE_TYPE_EXPECTED_EXPRESSION, ONYX_MESSAGE_TYPE_CALL_NON_FUNCTION, diff --git a/include/onyxwasm.h b/include/onyxwasm.h index b86e2c5a..327b08b7 100644 --- a/include/onyxwasm.h +++ b/include/onyxwasm.h @@ -4,6 +4,7 @@ #include "bh.h" #include "onyxparser.h" +#include "onyxmsgs.h" typedef u8 WasmType; @@ -249,6 +250,12 @@ typedef struct WasmFunc { bh_arr(WasmInstruction) code; } WasmFunc; +typedef struct WasmGlobal { + WasmType type; + u8 mutable; + bh_arr(WasmInstruction) initial_value; +} WasmGlobal; + typedef enum WasmForeignKind { WASM_FOREIGN_FUNCTION = 0x00, WASM_FOREIGN_TABLE = 0x01, @@ -269,9 +276,11 @@ typedef struct WasmImport { typedef struct OnyxWasmModule { bh_allocator allocator; + OnyxMessages* msgs; // NOTE: Mapping from local ast node ptrs to indicies bh_imap local_map; + bh_imap global_map; bh_arr(u8) structured_jump_target; @@ -288,13 +297,17 @@ typedef struct OnyxWasmModule { bh_arr(WasmImport) imports; - i32 next_type_idx; - i32 next_func_idx; - i32 next_import_func_idx; - i32 export_count; + bh_arr(WasmGlobal) globals; + + u16 next_type_idx; + u16 next_func_idx; + u16 next_import_func_idx; + u16 next_global_idx; + u16 next_import_global_idx; + u16 export_count; } OnyxWasmModule; -OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc); +OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc, OnyxMessages* msgs); void onyx_wasm_module_compile(OnyxWasmModule* module, OnyxAstNodeFile* program); void onyx_wasm_module_free(OnyxWasmModule* module); void onyx_wasm_module_write_to_file(OnyxWasmModule* module, bh_file file); diff --git a/onyx b/onyx index b186232adac92ad907a8b23da4511e362ccbdb4d..58c12bc7527a5e1e8d8915fb9b5ba72aae880c16 100755 GIT binary patch literal 220656 zcmeFa3wWGG^*_ETO&dyK!=(}sXt+sgfrd+=2-UQ(vOpu@60IP%P+E!$tD&9T3sN_}Rz zawe+h4;~XxyAjFFNknadR#{V$P*k#1o9YD4 zJX;_0x97j7fV9T|h*ZOY;JXY0e;@E_{009z9e{!8{B#ib)Is2%9t1vX5co-hz|R^4 zK5Y>Ab%Vek83f)j2>jSV;GaT=RU-y8r2lH1{fz<)9b{PscMD+YnzH3uO#AB4Y>|1b__Q0F>O&L(`@$Xu5F5Wz%NNzHHj83oo4$nm_Zx zIdkUDAVSmJIdgz;;erJ-=QnAtKrhzJS^SwZ^NP^rGcR8-vne!Z!OWSL@nHt&UO4B{ zORkuC@iZkiW6shM2uMWVUH1L`L{MQCv8-QmGd_n;J zl!4a;;7=QPGys3rz#9Va*A0AX0RArnpB{kkb(G3$b^yMQfzJ!TM;rLE0KCq?TLSPe z8hAPY|B`{X2H;;d@U{T_>jvH)fM0Cj9Rc_^47@V{pJ(8i0DPf=cLm@}47@u4UvA(% z0eI5Da{+kT!1DoktAY0h;6E_%z5x7Q0}tKe*Yo=gydnU9(7-DL@YM!h6@Wi(;MD>6 zlLlTBfIns6wE_5x1|AK-iv~VD0DsrO7X{#b2A&SUKQ!?60KDvIl}jc7FE{X>0DNZy z?+w6rHSmgC{c_&jz^eoBQ3gIQ0IxH2+XC?XaZ0y6052MNM*zO_@rvIWfR8rtOaOkA zfp-PqQ3LM|z%MiKo&bEAf#(A7b_34`;5h^D4Zy1=DF1x{_}K;?TIrYbJOi%?z*`Nx zG63%~@Tvg3;sm8z9e|HB@R|U;<_yK}xk-PyX0~f+`g1uCd^ZBje|ZmlcMHUCuLoY` zf%kdf`+DG2X|0#x22E*ZwFge0*Zx=IfpdLq|Eu-DC5~b;CV1f9ctD*8ZbBVWBIC zEgraceVO*aO$bV;wR+%;QP}_5Jn&H#h~IV({8JuyhX=m52j1y{@8f}glKeyhpGe>n z349`fPbBb(1U`|#CldHX0-s3W6A1(*@NW2k_oMO6713n*D|5?2(dJCkkpAvye0{}} zg4#d+PXPBHx(WY=N7o_6=h@6F#R z#X_Atf1A%-A{J`p`FcKcX;`S1=WF=PC1Igbp6BzKOYuTTp1;9oE)5I4{{i68i}=hX zVIe2a=kb|K^g_2hpUr134GS50KAq285*9k-c`~256fCsinespCucswm_fa29g6N~fFL@XCgH1;IwH=dG+bVrksd^A}Hoowuh zCVm%9Wb@x&#Y!W6(fH!NQ254YKsmm6W2mWGaT|b(%(CwA!=dn+3<|vVP$<-#i5)g@ z{sxHU=-t5ec|cp9X&T;1UWYsX&GD$4{AQ|}}n%e8vWC{KJId)BQ=#UE} z8#1X%M)r!fYGYd>{T|4=@WbVEt}F|+3<*CR>2E2Yj&xefO*;1+NP9Y@-Fh*o9a=-; ziAesaOz{jb(@J?mcqfgBu~~eqiKZILB%NrmunG^1O_E|BScQc-{g8T){XiupvIvre zDx)W?i>=5;GSWy(C=uz(M%Gg#hE5e&qzILtM5M=0#w+SppyvG9TFXe(LXw3r2ECyr zO&u3*M(;bIC_0Q10QgQXIMpyjN};zviH6M*L5*GiSJFdA+~d@fZ0w4T>5k`zBqHkz zQP{F*DwbjHq)r;vM@3?(QS(MXQ=t1l`k=qRITLQa16I(*q=~hdXBo_e1~cZvq;a;G z2OG?KgZU*NCe5_P9BMERHkgO`Fln$Y=AU*}KL7P^A}*x%wT@gU?zQ-oG2`2gTXw@U|#IQ

5t#~RGT4CX{1CMOq* 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

G7Br+8i^Ox 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 MMXyfBz)&C?kZ79oxr4SWq*d(v`+Ij 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%0Dq?`$G24q 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 i32 { // symbol := 5 Global mutable variable // symbol : i32 Global mutable i32 (defaults to 0 initial value) -global_value := 5 + 6; +global_value := 5; +foreign_global :: foreign "dummy" "global" i32 // This is the entry point export main :: proc { + print_i32(global_value); + print_i32(foreign_global); + i := 0; while i < 10 { res :: fib(i); diff --git a/src/onyx.c b/src/onyx.c index ec1d9420..c63b3178 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -167,17 +167,12 @@ i32 onyx_compile(OnyxCompileOptions* opts, CompilerState* compiler_state) { OnyxSemPassState sp_state = onyx_sempass_create(compiler_state->sp_alloc, compiler_state->ast_alloc, &compiler_state->msgs); onyx_sempass(&sp_state, root_file); - if (opts->print_ast) { - onyx_ast_print((OnyxAstNode *) root_file, 0); - bh_printf("\n"); - } - if (onyx_message_has_errors(&compiler_state->msgs)) { return ONYX_COMPILER_PROGRESS_FAILED_SEMPASS; } bh_printf("Creating WASM code\n"); - compiler_state->wasm_mod = onyx_wasm_module_create(opts->allocator); + compiler_state->wasm_mod = onyx_wasm_module_create(opts->allocator, &compiler_state->msgs); onyx_wasm_module_compile(&compiler_state->wasm_mod, root_file); if (onyx_message_has_errors(&compiler_state->msgs)) { diff --git a/src/onyxmsgs.c b/src/onyxmsgs.c index abffedd4..b05432a2 100644 --- a/src/onyxmsgs.c +++ b/src/onyxmsgs.c @@ -9,9 +9,10 @@ static const char* msg_formats[] = { "expected lval '%b'", "attempt to assign to constant '%b'", "unknown symbol '%s'", - "redefinition of function '%s'", + "conflicting declarations of global '%s'", "mismatched types for binary operator, '%s', '%s'", "mismatched types on assignment, expected '%s', got '%s'", + "mismatched types for global '%b'; expected '%s', got '%s'", "expected expression, got '%s'", "attempt to call non-function, '%b'", diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 130b61cb..636f05b6 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -2,11 +2,11 @@ #include "onyxsempass.h" static void symbol_introduce(OnyxSemPassState* state, OnyxAstNode* symbol); +static b32 symbol_unique_introduce(OnyxSemPassState* state, OnyxAstNode* symbol); static void symbol_remove(OnyxSemPassState* state, OnyxAstNode* symbol); static OnyxAstNode* symbol_resolve(OnyxSemPassState* state, OnyxAstNode* symbol); static void scope_enter(OnyxSemPassState* state, OnyxAstNodeScope* scope); static OnyxAstNodeScope* scope_leave(OnyxSemPassState* state); -static b32 define_function(OnyxSemPassState* state, OnyxAstNodeFuncDef* func); static void symres_local(OnyxSemPassState* state, OnyxAstNodeLocal** local); static void symres_call(OnyxSemPassState* state, OnyxAstNode* call); static void symres_expression(OnyxSemPassState* state, OnyxAstNode** expr); @@ -91,27 +91,27 @@ static OnyxAstNodeScope* scope_leave(OnyxSemPassState* state) { return state->curr_scope; } -static b32 define_function(OnyxSemPassState* state, OnyxAstNodeFuncDef* func) { - onyx_token_null_toggle(*func->token); +static b32 symbol_unique_introduce(OnyxSemPassState* state, OnyxAstNode* symbol) { + onyx_token_null_toggle(*symbol->token); // NOTE: If the function hasn't already been defined - if (!bh_table_has(SemPassSymbol *, state->symbols, func->token->token)) { + if (!bh_table_has(SemPassSymbol *, state->symbols, symbol->token->token)) { SemPassSymbol* sp_sym = bh_alloc_item(state->allocator, SemPassSymbol); - sp_sym->node = (OnyxAstNode *) func; + sp_sym->node = symbol; sp_sym->shadowed = NULL; - bh_table_put(SemPassSymbol *, state->symbols, func->token->token, sp_sym); + bh_table_put(SemPassSymbol *, state->symbols, symbol->token->token, sp_sym); } else { onyx_message_add(state->msgs, - ONYX_MESSAGE_TYPE_FUNCTION_REDEFINITION, - func->token->pos, - func->token->token); + ONYX_MESSAGE_TYPE_CONFLICTING_GLOBALS, + symbol->token->pos, + symbol->token->token); // NOTE: I really wish C had defer... - onyx_token_null_toggle(*func->token); + onyx_token_null_toggle(*symbol->token); return 0; } - onyx_token_null_toggle(*func->token); + onyx_token_null_toggle(*symbol->token); return 1; } @@ -259,12 +259,14 @@ void onyx_resolve_symbols(OnyxSemPassState* state, OnyxAstNodeFile* root_node) { while (walker) { switch (walker->kind) { case ONYX_AST_NODE_KIND_FUNCDEF: - if (!define_function(state, &walker->as_funcdef)) return; + case ONYX_AST_NODE_KIND_GLOBAL: + if (!symbol_unique_introduce(state, walker)) return; break; case ONYX_AST_NODE_KIND_FOREIGN: - if (walker->as_foreign.import->kind == ONYX_AST_NODE_KIND_FUNCDEF) { - if (!define_function(state, &walker->as_foreign.import->as_funcdef)) return; + if (walker->as_foreign.import->kind == ONYX_AST_NODE_KIND_FUNCDEF + || walker->as_foreign.import->kind == ONYX_AST_NODE_KIND_GLOBAL) { + if (!symbol_unique_introduce(state, walker->as_foreign.import)) return; } break; diff --git a/src/onyxtypecheck.c b/src/onyxtypecheck.c index ad23ea67..7730a486 100644 --- a/src/onyxtypecheck.c +++ b/src/onyxtypecheck.c @@ -11,6 +11,7 @@ static void typecheck_if(OnyxSemPassState* state, OnyxAstNodeIf* ifnode); static void typecheck_while(OnyxSemPassState* state, OnyxAstNodeWhile* whilenode); static void typecheck_call(OnyxSemPassState* state, OnyxAstNodeCall* call); static void typecheck_expression(OnyxSemPassState* state, OnyxAstNode* expr); +static void typecheck_global(OnyxSemPassState* state, OnyxAstNodeGlobal* global); static void typecheck_assignment(OnyxSemPassState* state, OnyxAstNode* assign) { if (assign->left->kind == ONYX_AST_NODE_KIND_SYMBOL) { @@ -233,6 +234,15 @@ static void typecheck_expression(OnyxSemPassState* state, OnyxAstNode* expr) { } break; + case ONYX_AST_NODE_KIND_GLOBAL: + if (!expr->type->is_known) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + expr->token->pos, + "global with unknown type"); + } + break; + case ONYX_AST_NODE_KIND_ARGUMENT: typecheck_expression(state, expr->left); expr->type = expr->left->type; @@ -250,6 +260,34 @@ static void typecheck_expression(OnyxSemPassState* state, OnyxAstNode* expr) { } } +static void typecheck_global(OnyxSemPassState* state, OnyxAstNodeGlobal* global) { + if (global->initial_value) { + typecheck_expression(state, global->initial_value); + + if (global->type->is_known) { + if (global->type != global->initial_value->type) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_GLOBAL_TYPE_MISMATCH, + global->token->pos, + global->token->token, global->token->length, + global->type->name, global->initial_value->type); + return; + } + } else { + if (global->initial_value->type) + global->type = global->initial_value->type; + } + + } else { + if (!global->type || !global->type->is_known) { + onyx_message_add(state->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + global->token->pos, + "global variable with unknown type"); + } + } +} + static void typecheck_statement(OnyxSemPassState* state, OnyxAstNode* stmt) { switch (stmt->kind) { case ONYX_AST_NODE_KIND_ASSIGNMENT: typecheck_assignment(state, stmt); break; @@ -310,8 +348,30 @@ static void typecheck_function_defintion(OnyxSemPassState* state, OnyxAstNodeFun } void onyx_type_check(OnyxSemPassState* state, OnyxAstNodeFile* root_node) { + // TODO: This code is very ugly, but the types of globals need to + // be resolved before any function can use them + OnyxAstNode* walker; OnyxAstNodeFile* top_walker = root_node; + while (top_walker) { + + walker = top_walker->contents; + while (walker) { + switch (walker->kind) { + case ONYX_AST_NODE_KIND_GLOBAL: + typecheck_global(state, &walker->as_global); + break; + + default: break; + } + + walker = walker->next; + } + + top_walker = top_walker->next; + } + + top_walker = root_node; while (top_walker) { walker = top_walker->contents; @@ -320,6 +380,7 @@ void onyx_type_check(OnyxSemPassState* state, OnyxAstNodeFile* root_node) { case ONYX_AST_NODE_KIND_FUNCDEF: typecheck_function_defintion(state, &walker->as_funcdef); break; + default: break; } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 01c369f0..55af1186 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -1,5 +1,6 @@ #define BH_DEBUG #include "onyxwasm.h" +#include "onyxutils.h" // NOTE: Allows easier testing of types since most of the characters // corresponding to these values are not printable @@ -208,40 +209,50 @@ static WasmType onyx_type_to_wasm_type(OnyxTypeInfo* type) { return WASM_TYPE_VOID; } -static void compile_function_body(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeFuncDef* fd); -static void compile_block(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeBlock* block); -static void compile_statement(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* stmt); -static void compile_assign_lval(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* lval); -static void compile_assignment(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* assign); -static void compile_if(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeIf* if_node); -static void compile_while(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeWhile* while_node); -static void compile_binop(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeBinOp* binop); -static void compile_unaryop(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeUnaryOp* unop); -static void compile_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* expr); -static void compile_cast(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeUnaryOp* cast); -static void compile_return(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* ret); - -static void compile_function_body(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeFuncDef* fd) { +static void compile_function_body(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeFuncDef* fd); +static void compile_block(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeBlock* block); +static void compile_statement(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* stmt); +static void compile_assign_lval(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* lval); +static void compile_assignment(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* assign); +static void compile_if(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeIf* if_node); +static void compile_while(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeWhile* while_node); +static void compile_binop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeBinOp* binop); +static void compile_unaryop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeUnaryOp* unop); +static void compile_expression(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* expr); +static void compile_cast(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeUnaryOp* cast); +static void compile_return(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* ret); + +static void compile_function_body(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeFuncDef* fd) { if (fd->body == NULL) return; + bh_arr(WasmInstruction) code = *pcode; + forll (OnyxAstNode, stmt, fd->body->body, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } - bh_arr_push(func->code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); + + *pcode = code; } -static void compile_block(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeBlock* block) { - bh_arr_push(func->code, ((WasmInstruction){ WI_BLOCK_START, 0x40 })); +static void compile_block(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeBlock* block) { + bh_arr(WasmInstruction) code = *pcode; + + bh_arr_push(code, ((WasmInstruction){ WI_BLOCK_START, 0x40 })); forll (OnyxAstNode, stmt, block->body, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } - bh_arr_push(func->code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); + + *pcode = code; } -static void compile_structured_jump(OnyxWasmModule* mod, WasmFunc* func, b32 jump_backward) { +static void compile_structured_jump(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, b32 jump_backward) { + bh_arr(WasmInstruction) code = *pcode; + i32 labelidx = 0; u8 wanted = jump_backward ? 2 : 1; b32 success = 0; @@ -257,41 +268,59 @@ static void compile_structured_jump(OnyxWasmModule* mod, WasmFunc* func, b32 jum } if (success) { - bh_arr_push(func->code, ((WasmInstruction){ WI_JUMP, labelidx })); + bh_arr_push(code, ((WasmInstruction){ WI_JUMP, labelidx })); } else { assert(("Invalid structured jump", 0)); } + + *pcode = code; } -static void compile_statement(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* stmt) { +static void compile_statement(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* stmt) { + bh_arr(WasmInstruction) code = *pcode; + switch (stmt->kind) { case ONYX_AST_NODE_KIND_SCOPE: break; - case ONYX_AST_NODE_KIND_RETURN: compile_return(mod, func, stmt); break; - case ONYX_AST_NODE_KIND_ASSIGNMENT: compile_assignment(mod, func, stmt); break; - case ONYX_AST_NODE_KIND_IF: compile_if(mod, func, (OnyxAstNodeIf *) stmt); break; - case ONYX_AST_NODE_KIND_WHILE: compile_while(mod, func, (OnyxAstNodeWhile *) stmt); break; - case ONYX_AST_NODE_KIND_BREAK: compile_structured_jump(mod, func, 0); break; - case ONYX_AST_NODE_KIND_CONTINUE: compile_structured_jump(mod, func, 1); break; - case ONYX_AST_NODE_KIND_CALL: compile_expression(mod, func, stmt); break; - case ONYX_AST_NODE_KIND_BLOCK: compile_block(mod, func, (OnyxAstNodeBlock *) stmt); break; + case ONYX_AST_NODE_KIND_RETURN: compile_return(mod, &code, stmt); break; + case ONYX_AST_NODE_KIND_ASSIGNMENT: compile_assignment(mod, &code, stmt); break; + case ONYX_AST_NODE_KIND_IF: compile_if(mod, &code, (OnyxAstNodeIf *) stmt); break; + case ONYX_AST_NODE_KIND_WHILE: compile_while(mod, &code, (OnyxAstNodeWhile *) stmt); break; + case ONYX_AST_NODE_KIND_BREAK: compile_structured_jump(mod, &code, 0); break; + case ONYX_AST_NODE_KIND_CONTINUE: compile_structured_jump(mod, &code, 1); break; + case ONYX_AST_NODE_KIND_CALL: compile_expression(mod, &code, stmt); break; + case ONYX_AST_NODE_KIND_BLOCK: compile_block(mod, &code, (OnyxAstNodeBlock *) stmt); break; default: break; } + + *pcode = code; } -static void compile_assign_lval(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* lval) { +static void compile_assign_lval(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* lval) { + bh_arr(WasmInstruction) code = *pcode; + if (lval->kind == ONYX_AST_NODE_KIND_LOCAL || lval->kind == ONYX_AST_NODE_KIND_PARAM) { i32 localidx = (i32) bh_imap_get(&mod->local_map, (u64) lval); - bh_arr_push(func->code, ((WasmInstruction){ WI_LOCAL_SET, localidx })); + bh_arr_push(code, ((WasmInstruction){ WI_LOCAL_SET, localidx })); + + } else if (lval->kind == ONYX_AST_NODE_KIND_GLOBAL) { + i32 globalidx = (i32) bh_imap_get(&mod->global_map, (u64) lval); + + bh_arr_push(code, ((WasmInstruction){ WI_GLOBAL_SET, globalidx })); + } else { assert(("Invalid lval", 0)); } + + *pcode = code; } -static void compile_if(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeIf* if_node) { - compile_expression(mod, func, if_node->cond); - bh_arr_push(func->code, ((WasmInstruction){ WI_IF_START, 0x40 })); +static void compile_if(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeIf* if_node) { + bh_arr(WasmInstruction) code = *pcode; + + compile_expression(mod, &code, if_node->cond); + bh_arr_push(code, ((WasmInstruction){ WI_IF_START, 0x40 })); bh_arr_push(mod->structured_jump_target, 0); @@ -300,61 +329,71 @@ static void compile_if(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeIf* if_no if (if_node->true_block->kind == ONYX_AST_NODE_KIND_IF) { forll (OnyxAstNode, stmt, if_node->true_block, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } } else if (if_node->true_block->kind == ONYX_AST_NODE_KIND_BLOCK) { forll (OnyxAstNode, stmt, if_node->true_block->as_block.body, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } } } if (if_node->false_block) { - bh_arr_push(func->code, ((WasmInstruction){ WI_ELSE, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_ELSE, 0x00 })); if (if_node->false_block->kind == ONYX_AST_NODE_KIND_IF) { forll (OnyxAstNode, stmt, if_node->false_block, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } } else if (if_node->false_block->kind == ONYX_AST_NODE_KIND_BLOCK) { forll (OnyxAstNode, stmt, if_node->false_block->as_block.body, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } } } bh_arr_pop(mod->structured_jump_target); - bh_arr_push(func->code, ((WasmInstruction){ WI_IF_END, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_IF_END, 0x00 })); + + *pcode = code; } -static void compile_while(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeWhile* while_node) { - bh_arr_push(func->code, ((WasmInstruction){ WI_BLOCK_START, 0x40 })); - bh_arr_push(func->code, ((WasmInstruction){ WI_LOOP_START, 0x40 })); +static void compile_while(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeWhile* while_node) { + bh_arr(WasmInstruction) code = *pcode; + + bh_arr_push(code, ((WasmInstruction){ WI_BLOCK_START, 0x40 })); + bh_arr_push(code, ((WasmInstruction){ WI_LOOP_START, 0x40 })); - compile_expression(mod, func, while_node->cond); - bh_arr_push(func->code, ((WasmInstruction){ WI_I32_EQZ, 0x00 })); - bh_arr_push(func->code, ((WasmInstruction){ WI_COND_JUMP, 0x01 })); + compile_expression(mod, &code, while_node->cond); + bh_arr_push(code, ((WasmInstruction){ WI_I32_EQZ, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_COND_JUMP, 0x01 })); bh_arr_push(mod->structured_jump_target, 1); bh_arr_push(mod->structured_jump_target, 2); forll (OnyxAstNode, stmt, while_node->body->body, next) { - compile_statement(mod, func, stmt); + compile_statement(mod, &code, stmt); } bh_arr_pop(mod->structured_jump_target); bh_arr_pop(mod->structured_jump_target); - bh_arr_push(func->code, ((WasmInstruction){ WI_JUMP, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_JUMP, 0x00 })); + + bh_arr_push(code, ((WasmInstruction){ WI_LOOP_END, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); - bh_arr_push(func->code, ((WasmInstruction){ WI_LOOP_END, 0x00 })); - bh_arr_push(func->code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); + *pcode = code; } -static void compile_assignment(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* assign) { - compile_expression(mod, func, assign->right); - compile_assign_lval(mod, func, assign->left); +static void compile_assignment(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* assign) { + bh_arr(WasmInstruction) code = *pcode; + + compile_expression(mod, &code, assign->right); + compile_assign_lval(mod, &code, assign->left); + + *pcode = code; } // NOTE: These need to be in the same order as @@ -375,7 +414,9 @@ static const WasmInstructionType binop_map[][4] = { /* GTE */ { WI_I32_GE_S, WI_I64_GE_S, WI_F32_GE, WI_F64_GE }, }; -static void compile_binop(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeBinOp* binop) { +static void compile_binop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeBinOp* binop) { + bh_arr(WasmInstruction) code = *pcode; + b32 is_sign_significant = 0; switch (binop->operation) { @@ -412,58 +453,66 @@ static void compile_binop(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeBinOp* } } - compile_expression(mod, func, binop->left); - compile_expression(mod, func, binop->right); + compile_expression(mod, &code, binop->left); + compile_expression(mod, &code, binop->right); - bh_arr_push(func->code, ((WasmInstruction){ binop_instr, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ binop_instr, 0x00 })); + + *pcode = code; } -static void compile_unaryop(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeUnaryOp* unop) { +static void compile_unaryop(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeUnaryOp* unop) { + bh_arr(WasmInstruction) code = *pcode; + switch (unop->operation) { case ONYX_UNARY_OP_NEGATE: { OnyxTypeInfoKind type_kind = unop->type->kind; if (type_kind == ONYX_TYPE_INFO_KIND_INT32) { - bh_arr_push(func->code, ((WasmInstruction){ WI_I32_CONST, 0x00 })); - compile_expression(mod, func, unop->left); - bh_arr_push(func->code, ((WasmInstruction){ WI_I32_SUB, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_I32_CONST, 0x00 })); + compile_expression(mod, &code, unop->left); + bh_arr_push(code, ((WasmInstruction){ WI_I32_SUB, 0x00 })); } else if (type_kind == ONYX_TYPE_INFO_KIND_INT64) { - bh_arr_push(func->code, ((WasmInstruction){ WI_I64_CONST, 0x00 })); - compile_expression(mod, func, unop->left); - bh_arr_push(func->code, ((WasmInstruction){ WI_I64_SUB, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_I64_CONST, 0x00 })); + compile_expression(mod, &code, unop->left); + bh_arr_push(code, ((WasmInstruction){ WI_I64_SUB, 0x00 })); } else { - compile_expression(mod, func, unop->left); + compile_expression(mod, &code, unop->left); if (type_kind == ONYX_TYPE_INFO_KIND_FLOAT32) - bh_arr_push(func->code, ((WasmInstruction){ WI_F32_NEG, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_F32_NEG, 0x00 })); if (type_kind == ONYX_TYPE_INFO_KIND_FLOAT64) - bh_arr_push(func->code, ((WasmInstruction){ WI_F32_NEG, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_F32_NEG, 0x00 })); } break; } case ONYX_UNARY_OP_NOT: - compile_expression(mod, func, unop->left); - bh_arr_push(func->code, ((WasmInstruction){ WI_I32_EQZ, 0x00 })); + compile_expression(mod, &code, unop->left); + bh_arr_push(code, ((WasmInstruction){ WI_I32_EQZ, 0x00 })); break; - case ONYX_UNARY_OP_CAST: compile_cast(mod, func, unop); break; + case ONYX_UNARY_OP_CAST: compile_cast(mod, &code, unop); break; } + + *pcode = code; } -static void compile_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* expr) { +static void compile_expression(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* expr) { + bh_arr(WasmInstruction) code = *pcode; + switch (expr->kind) { case ONYX_AST_NODE_KIND_BIN_OP: - compile_binop(mod, func, &expr->as_binop); + compile_binop(mod, &code, &expr->as_binop); break; case ONYX_AST_NODE_KIND_UNARY_OP: - compile_unaryop(mod, func, &expr->as_unaryop); + compile_unaryop(mod, &code, &expr->as_unaryop); break; case ONYX_AST_NODE_KIND_LOCAL: @@ -471,7 +520,15 @@ static void compile_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* { i32 localidx = (i32) bh_imap_get(&mod->local_map, (u64) expr); - bh_arr_push(func->code, ((WasmInstruction){ WI_LOCAL_GET, localidx })); + bh_arr_push(code, ((WasmInstruction){ WI_LOCAL_GET, localidx })); + break; + } + + case ONYX_AST_NODE_KIND_GLOBAL: + { + i32 globalidx = (i32) bh_imap_get(&mod->global_map, (u64) expr); + + bh_arr_push(code, ((WasmInstruction){ WI_GLOBAL_GET, globalidx })); break; } @@ -495,21 +552,21 @@ static void compile_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* instr.data.d = lit->value.d; } - bh_arr_push(func->code, instr); + bh_arr_push(code, instr); break; } - case ONYX_AST_NODE_KIND_BLOCK: compile_block(mod, func, (OnyxAstNodeBlock *) expr); break; + case ONYX_AST_NODE_KIND_BLOCK: compile_block(mod, &code, (OnyxAstNodeBlock *) expr); break; case ONYX_AST_NODE_KIND_CALL: { OnyxAstNodeCall* call = &expr->as_call; forll (OnyxAstNode, arg, call->arguments, next) { - compile_expression(mod, func, arg->left); + compile_expression(mod, &code, arg->left); } i32 func_idx = (i32) bh_imap_get(&mod->func_map, (u64) call->callee); - bh_arr_push(func->code, ((WasmInstruction){ WI_CALL, func_idx })); + bh_arr_push(code, ((WasmInstruction){ WI_CALL, func_idx })); break; } @@ -519,6 +576,8 @@ static void compile_expression(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* bh_printf("Unhandled case: %d\n", expr->kind); assert(0); } + + *pcode = code; } static const WasmInstructionType cast_map[][6] = { @@ -531,8 +590,10 @@ static const WasmInstructionType cast_map[][6] = { /* F64 */ { WI_I32_FROM_F64_S, WI_I32_FROM_F64_U, WI_I64_FROM_F64_S, WI_I64_FROM_F64_U, WI_F32_FROM_F64, WI_NOP, }, }; -static void compile_cast(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeUnaryOp* cast) { - compile_expression(mod, func, cast->left); +static void compile_cast(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNodeUnaryOp* cast) { + bh_arr(WasmInstruction) code = *pcode; + + compile_expression(mod, &code, cast->left); OnyxTypeInfo* from = cast->left->type; OnyxTypeInfo* to = cast->type; @@ -560,16 +621,22 @@ static void compile_cast(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNodeUnaryOp WasmInstructionType cast_op = cast_map[fromidx][toidx]; if (cast_op != WI_NOP) { - bh_arr_push(func->code, ((WasmInstruction){ cast_op, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ cast_op, 0x00 })); } + + *pcode = code; } -static void compile_return(OnyxWasmModule* mod, WasmFunc* func, OnyxAstNode* ret) { +static void compile_return(OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, OnyxAstNode* ret) { + bh_arr(WasmInstruction) code = *pcode; + if (ret->left) { - compile_expression(mod, func, ret->left); + compile_expression(mod, &code, ret->left); } - bh_arr_push(func->code, ((WasmInstruction){ WI_RETURN, 0x00 })); + bh_arr_push(code, ((WasmInstruction){ WI_RETURN, 0x00 })); + + *pcode = code; } static i32 generate_type_idx(OnyxWasmModule* mod, OnyxAstNodeFuncDef* fd) { @@ -628,6 +695,8 @@ static void compile_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* .code = NULL, }; + bh_arr_new(mod->allocator, wasm_func.code, 4); + if (fd->flags & ONYX_AST_FLAG_EXPORTED) { onyx_token_null_toggle(*fd->token); @@ -669,7 +738,8 @@ static void compile_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* } // Generate code - compile_function_body(mod, &wasm_func, fd); + compile_function_body(mod, &wasm_func.code, fd); + } else { // NOTE: Empty bodies still need a block end instruction bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_BLOCK_END, 0x00 })); @@ -681,6 +751,25 @@ static void compile_function_definition(OnyxWasmModule* mod, OnyxAstNodeFuncDef* bh_imap_clear(&mod->local_map); } +static void compile_global_declaration(OnyxWasmModule* module, OnyxAstNodeGlobal* global) { + WasmGlobal glob = { + .type = onyx_type_to_wasm_type(global->type), + .mutable = (global->flags & ONYX_AST_FLAG_CONST) == 0, + .initial_value = NULL, + }; + + if (!global->initial_value) { + onyx_message_add(module->msgs, + ONYX_MESSAGE_TYPE_LITERAL, + global->token->pos, + "global without initial value"); + return; + } + + compile_expression(module, &glob.initial_value, global->initial_value); + bh_arr_push(module->globals, glob); +} + static void compile_foreign(OnyxWasmModule* module, OnyxAstNodeForeign* foreign) { if (foreign->import->kind == ONYX_AST_NODE_KIND_FUNCDEF) { i32 type_idx = generate_type_idx(module, &foreign->import->as_funcdef); @@ -694,6 +783,18 @@ static void compile_foreign(OnyxWasmModule* module, OnyxAstNodeForeign* foreign) bh_arr_push(module->imports, import); + } else if (foreign->import->kind == ONYX_AST_NODE_KIND_GLOBAL) { + WasmType global_type = onyx_type_to_wasm_type(foreign->import->type); + + WasmImport import = { + .kind = WASM_FOREIGN_GLOBAL, + .idx = global_type, + .mod = foreign->mod_token, + .name = foreign->name_token, + }; + + bh_arr_push(module->imports, import); + } else { DEBUG_HERE; // NOTE: Invalid foreign @@ -701,9 +802,10 @@ static void compile_foreign(OnyxWasmModule* module, OnyxAstNodeForeign* foreign) } } -OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) { +OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc, OnyxMessages* msgs) { OnyxWasmModule module = { .allocator = alloc, + .msgs = msgs, .type_map = NULL, .next_type_idx = 0, @@ -717,6 +819,10 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) { .imports = NULL, .next_import_func_idx = 0, + .next_import_global_idx = 0, + + .globals = NULL, + .next_global_idx = 0, .structured_jump_target = NULL, }; @@ -724,16 +830,18 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) { bh_arr_new(alloc, module.functypes, 4); bh_arr_new(alloc, module.funcs, 4); bh_arr_new(alloc, module.imports, 4); + bh_arr_new(alloc, module.globals, 4); // NOTE: 16 is probably needlessly large - bh_arr_new(bh_heap_allocator(), module.structured_jump_target, 16); + bh_arr_new(global_heap_allocator, module.structured_jump_target, 16); bh_arr_set_length(module.structured_jump_target, 0); - bh_table_init(bh_heap_allocator(), module.type_map, 61); - bh_table_init(bh_heap_allocator(), module.exports, 61); + bh_table_init(global_heap_allocator, module.type_map, 61); + bh_table_init(global_heap_allocator, module.exports, 61); - bh_imap_init(&module.local_map, bh_heap_allocator()); - bh_imap_init(&module.func_map, bh_heap_allocator()); + bh_imap_init(&module.local_map, global_heap_allocator); + bh_imap_init(&module.func_map, global_heap_allocator); + bh_imap_init(&module.global_map, global_heap_allocator); return module; } @@ -745,9 +853,12 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, OnyxAstNodeFile* program) walker = top_walker->contents; while (walker) { - if (walker->kind == ONYX_AST_NODE_KIND_FOREIGN - && walker->as_foreign.import->kind == ONYX_AST_NODE_KIND_FUNCDEF) { - module->next_func_idx++; + if (walker->kind == ONYX_AST_NODE_KIND_FOREIGN) { + if (walker->as_foreign.import->kind == ONYX_AST_NODE_KIND_FUNCDEF) + module->next_func_idx++; + + if (walker->as_foreign.import->kind == ONYX_AST_NODE_KIND_GLOBAL) + module->next_global_idx++; } walker = walker->next; @@ -766,6 +877,11 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, OnyxAstNodeFile* program) bh_imap_put(&module->func_map, (u64) walker, func_idx); } + if (walker->kind == ONYX_AST_NODE_KIND_GLOBAL) { + i32 global_idx = module->next_global_idx++; + bh_imap_put(&module->global_map, (u64) walker, global_idx); + } + if (walker->kind == ONYX_AST_NODE_KIND_FOREIGN) { OnyxAstNodeForeign* foreign = &walker->as_foreign; @@ -773,6 +889,11 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, OnyxAstNodeFile* program) i32 func_idx = module->next_import_func_idx++; bh_imap_put(&module->func_map, (u64) foreign->import, func_idx); } + + if (foreign->import->kind == ONYX_AST_NODE_KIND_GLOBAL) { + i32 global_idx = module->next_import_global_idx++; + bh_imap_put(&module->global_map, (u64) foreign->import, global_idx); + } } walker = walker->next; @@ -790,9 +911,15 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, OnyxAstNodeFile* program) case ONYX_AST_NODE_KIND_FUNCDEF: compile_function_definition(module, &walker->as_funcdef); break; + + case ONYX_AST_NODE_KIND_GLOBAL: + compile_global_declaration(module, &walker->as_global); + break; + case ONYX_AST_NODE_KIND_FOREIGN: compile_foreign(module, &walker->as_foreign); break; + default: break; } @@ -836,6 +963,8 @@ typedef i32 vector_func(void*, bh_buffer*); static const u8 WASM_MAGIC_STRING[] = { 0x00, 0x61, 0x73, 0x6D }; static const u8 WASM_VERSION[] = { 0x01, 0x00, 0x00, 0x00 }; +static void output_instruction(WasmInstruction* instr, bh_buffer* buff); + static i32 output_vector(void** arr, i32 stride, i32 arrlen, vector_func elem, bh_buffer* vec_buff) { i32 len; u8* leb = uint_to_uleb128((u64) arrlen, &len); @@ -928,6 +1057,37 @@ static i32 output_funcsection(OnyxWasmModule* module, bh_buffer* buff) { return buff->length - prev_len; } +static i32 output_globalsection(OnyxWasmModule* module, bh_buffer* buff) { + i32 prev_len = buff->length; + bh_buffer_write_byte(buff, WASM_SECTION_ID_GLOBAL); + + bh_buffer vec_buff; + bh_buffer_init(&vec_buff, buff->allocator, 128); + + i32 leb_len; + u8* leb = uint_to_uleb128((u64) (bh_arr_length(module->globals)), &leb_len); + bh_buffer_append(&vec_buff, leb, leb_len); + + bh_arr_each(WasmGlobal, global, module->globals) { + bh_buffer_write_byte(&vec_buff, global->type); + bh_buffer_write_byte(&vec_buff, global->mutable ? 0x01 : 0x00); + + bh_arr_each(WasmInstruction, instr, global->initial_value) + output_instruction(instr, &vec_buff); + + // NOTE: Initial value expression terminator + bh_buffer_write_byte(&vec_buff, (u8) WI_BLOCK_END); + } + + leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); + bh_buffer_append(buff, leb, leb_len); + + bh_buffer_concat(buff, vec_buff); + bh_buffer_free(&vec_buff); + + return buff->length - prev_len; +} + static i32 output_importsection(OnyxWasmModule* module, bh_buffer* buff) { i32 prev_len = buff->length; bh_buffer_write_byte(buff, WASM_SECTION_ID_IMPORT); @@ -946,6 +1106,11 @@ static i32 output_importsection(OnyxWasmModule* module, bh_buffer* buff) { leb = uint_to_uleb128((u64) import->idx, &leb_len); bh_buffer_append(&vec_buff, leb, leb_len); + + if (import->kind == WASM_FOREIGN_GLOBAL) { + // NOTE: All foreign globals are mutable + bh_buffer_write_byte(&vec_buff, 0x01); + } } leb = uint_to_uleb128((u64) (vec_buff.length), &leb_len); @@ -1062,6 +1227,8 @@ static void output_instruction(WasmInstruction* instr, bh_buffer* buff) { switch (instr->type) { case WI_LOCAL_GET: case WI_LOCAL_SET: + case WI_GLOBAL_GET: + case WI_GLOBAL_SET: case WI_CALL: case WI_BLOCK_START: case WI_LOOP_START: @@ -1141,13 +1308,14 @@ static i32 output_codesection(OnyxWasmModule* module, bh_buffer* buff) { void onyx_wasm_module_write_to_file(OnyxWasmModule* module, bh_file file) { bh_buffer master_buffer; - bh_buffer_init(&master_buffer, bh_heap_allocator(), 128); + bh_buffer_init(&master_buffer, global_heap_allocator, 128); bh_buffer_append(&master_buffer, WASM_MAGIC_STRING, 4); bh_buffer_append(&master_buffer, WASM_VERSION, 4); output_typesection(module, &master_buffer); output_importsection(module, &master_buffer); output_funcsection(module, &master_buffer); + output_globalsection(module, &master_buffer); output_exportsection(module, &master_buffer); output_startsection(module, &master_buffer); output_codesection(module, &master_buffer); -- 2.25.1