From 47f09833fe1e6d5ba730e17f059bee935a5c98c6 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 19 Jul 2020 20:37:53 -0500 Subject: [PATCH] small bugfixes; testing pointers --- include/onyxastnodes.h | 1 + onyx | Bin 274784 -> 275224 bytes progs/arrays.onyx | 45 +++++++++++++++++++++++++++++++++++++++-- src/onyxparser.c | 1 + src/onyxsymres.c | 2 +- src/onyxwasm.c | 23 +++++++++++++++++++-- 6 files changed, 67 insertions(+), 5 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index c2fc7c67..14281d03 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -361,6 +361,7 @@ extern const BuiltinSymbol builtin_symbols[]; static inline b32 is_lval(AstNode* node) { return (node->kind == Ast_Kind_Local) || (node->kind == Ast_Kind_Global) + || (node->kind == Ast_Kind_Dereference) || (node->kind == Ast_Kind_Array_Access); } diff --git a/onyx b/onyx index 03babad22da9c27cb3fd3ccf2e1e3a45c95bc39e..deefae6b1fd5570dbcc721f8cf2e93d9430fd83d 100755 GIT binary patch delta 29572 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 A6aWAK delta 28148 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 diff --git a/progs/arrays.onyx b/progs/arrays.onyx index a7ec6d2d..5b0f5d8e 100644 --- a/progs/arrays.onyx +++ b/progs/arrays.onyx @@ -52,11 +52,15 @@ str_test :: proc #export { } // Don't need to bind this function to a symbol -proc #export "main" { +proc #export "main2" { print(__heap_start as i32); - global_arr = __heap_start as ^i32; len :: 10; + global_arr = alloc((len * 4) as u32) as ^i32; + other_arr := alloc((len * 4) as u32) as ^i32; + + print(global_arr as i32); + print(other_arr as i32); for i: 0, len global_arr[i] = (len - i) * 10; @@ -67,3 +71,40 @@ proc #export "main" { print(1234567); print(global_arr, len); } + + + + + + + + + + + + +alloc :: proc (size: u32) -> rawptr { + heap_u32 :: __heap_start as ^u32; + + curr_offset := *heap_u32; + if curr_offset == 0 as u32 curr_offset = 8 as u32; + + *heap_u32 = curr_offset + size; + + return ((__heap_start as u32) + curr_offset) as rawptr; +} + + + + + +multi_arr_test :: proc #export "main" { + arrs := alloc((10 * 4) as u32) as ^^i32; + + for i: 0, 10 { + arrs[i] = alloc((10 * 4) as u32) as ^i32; + } + + for y: 0, 10 for x: 0, 10 arrs[y][x] = x + y * 10; + for y: 0, 10 for x: 0, 10 print(arrs[x][y]); +} diff --git a/src/onyxparser.c b/src/onyxparser.c index a630e36b..03de4daa 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -602,6 +602,7 @@ static AstNode* parse_statement(OnyxParser* parser) { case '+': case '-': case '!': + case '*': case Token_Type_Literal_Numeric: case Token_Type_Literal_String: retval = (AstNode *) parse_expression(parser); diff --git a/src/onyxsymres.c b/src/onyxsymres.c index ca3c274f..02cff8b6 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -15,7 +15,7 @@ AstBasicType basic_type_f32 = { { Ast_Kind_Basic_Type, 0, "f32" }, &basic_ AstBasicType basic_type_f64 = { { Ast_Kind_Basic_Type, 0, "f64" }, &basic_types[Basic_Kind_F64] }; AstBasicType basic_type_rawptr = { { Ast_Kind_Basic_Type, 0, "rawptr" }, &basic_types[Basic_Kind_Rawptr] }; -AstNumLit builtin_heap_start = { Ast_Kind_NumLit, 0, NULL, NULL, (AstType *) &basic_type_rawptr, NULL, 0 }; +AstNumLit builtin_heap_start = { Ast_Kind_NumLit, Ast_Flag_Const, NULL, NULL, (AstType *) &basic_type_rawptr, NULL, 0 }; const BuiltinSymbol builtin_symbols[] = { { "void", (AstNode *) &basic_type_void }, diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 7e949cc3..cefd6e72 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -332,6 +332,25 @@ COMPILE_FUNC(assignment, AstBinaryOp* assign) { compile_expression(mod, &code, assign->right); WID(WI_GLOBAL_SET, globalidx); + } else if (lval->kind == Ast_Kind_Dereference) { + AstDereference* deref = (AstDereference *) lval; + compile_expression(mod, &code, deref->expr); + compile_expression(mod, &code, assign->right); + + i32 store_size = deref->type->Basic.size; + i32 is_integer = (deref->type->Basic.flags & Basic_Flag_Integer) + || (deref->type->Basic.flags & Basic_Flag_Pointer); + + if (is_integer) { + if (store_size == 1) WID(WI_I32_STORE_8, ((WasmInstructionData) { 0, 0 })); + else if (store_size == 2) WID(WI_I32_STORE_16, ((WasmInstructionData) { 1, 0 })); + else if (store_size == 4) WID(WI_I32_STORE, ((WasmInstructionData) { 2, 0 })); + else if (store_size == 8) WID(WI_I64_STORE, ((WasmInstructionData) { 3, 0 })); + } else { + if (store_size == 4) WID(WI_F32_STORE, ((WasmInstructionData) { 2, 0 })); + else if (store_size == 8) WID(WI_F64_STORE, ((WasmInstructionData) { 3, 0 })); + } + } else if (lval->kind == Ast_Kind_Array_Access) { AstArrayAccess* aa = (AstArrayAccess *) lval; compile_expression(mod, &code, aa->expr); @@ -786,7 +805,7 @@ COMPILE_FUNC(expression, AstTyped* expr) { else if (load_size == 4) instr = WI_I32_LOAD; else if (load_size == 8) instr = WI_I64_LOAD; - if (alignment < 4 && is_unsigned) instr += 1; + if (load_size < 4 && is_unsigned) instr += 1; } else { if (load_size == 4) instr = WI_F32_LOAD; else if (load_size == 8) instr = WI_F64_LOAD; @@ -825,7 +844,7 @@ COMPILE_FUNC(expression, AstTyped* expr) { else if (load_size == 4) instr = WI_I32_LOAD; else if (load_size == 8) instr = WI_I64_LOAD; - if (alignment < 4 && is_unsigned) instr += 1; + if (load_size < 4 && is_unsigned) instr += 1; } else { if (load_size == 4) instr = WI_F32_LOAD; else if (load_size == 8) instr = WI_F64_LOAD; -- 2.25.1