fixed a NASTY stack and local bug
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 16 Dec 2020 18:17:00 +0000 (12:17 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 16 Dec 2020 18:17:00 +0000 (12:17 -0600)
src/onyxsymres.c
src/onyxwasm.c

index 9107fe6628448083307d297b254d4b5b8a7d5a54..4eae838e33b8f5624a72ea9336c8cc14462ec002 100644 (file)
@@ -446,7 +446,7 @@ static void symres_if(AstIfWhile* ifnode) {
         ifnode->scope = scope_create(semstate.node_allocator, semstate.curr_scope, ifnode->token->pos);
         scope_enter(ifnode->scope);
 
-        symbol_introduce(semstate.curr_scope, ifnode->local->token, (AstNode *) ifnode->local);
+        symres_local(&ifnode->local);
 
         symres_statement((AstNode **) &ifnode->assignment);
     }
@@ -464,7 +464,7 @@ static void symres_while(AstIfWhile* whilenode) {
         whilenode->scope = scope_create(semstate.node_allocator, semstate.curr_scope, whilenode->token->pos);
         scope_enter(whilenode->scope);
 
-        symbol_introduce(semstate.curr_scope, whilenode->local->token, (AstNode *) whilenode->local);
+        symres_local(&whilenode->local);
 
         symres_statement((AstNode **) &whilenode->assignment);
     }
@@ -483,7 +483,7 @@ static void symres_for(AstFor* fornode) {
 
     symres_expression(&fornode->iter);
 
-    symbol_introduce(semstate.curr_scope, fornode->var->token, (AstNode *) fornode->var);
+    symres_local(&fornode->var);
 
     symres_block(fornode->stmt);
 
index 9b9b35c5aaa715e3335a5689b46ef3ed80c8b068..55c8f59a4cd7c5ae031e5ea7e786091b3b8851f1 100644 (file)
@@ -1010,6 +1010,7 @@ EMIT_FUNC(for_slice, AstFor* for_node, u64 iter_local) {
             if (!type_is_structlike(var->type)) {
                 emit_store_instruction(mod, &code, var->type, offset);
             } else {
+                offset = 0;
                 emit_local_location(mod, &code, var, &offset);
                 emit_store_instruction(mod, &code, var->type, offset);
             }
@@ -3071,7 +3072,8 @@ OnyxWasmModule onyx_wasm_module_create(bh_allocator alloc) {
         .next_global_idx = 0,
 
         .data = NULL,
-        .next_datum_offset = 0,
+        .next_datum_offset = 32, // Starting offset so null pointers don't immediately
+                                 // break constant data.       - brendanfh 2020/12/16
 
         .elems = NULL,
         .next_elem_idx = 0,