From 333ff4492e2e97a4ab8c83bec499de33f93ff216 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 29 Jul 2020 22:41:08 -0500 Subject: [PATCH] Testing language features; small bugfixes --- .vimspector.json | 2 +- onyx | Bin 347792 -> 347896 bytes progs/alloc.onyx | 75 +++++++++++++++++++++++++++++++++++------- progs/alloc_test.onyx | 19 +++++------ src/onyxchecker.c | 3 +- src/onyxparser.c | 4 +++ src/onyxwasm.c | 6 ++++ 7 files changed, 85 insertions(+), 24 deletions(-) diff --git a/.vimspector.json b/.vimspector.json index d4b26ba9..343544d8 100644 --- a/.vimspector.json +++ b/.vimspector.json @@ -6,7 +6,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/onyx", - "args": ["progs/fcf.onyx"], + "args": ["progs/alloc_test.onyx"], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], diff --git a/onyx b/onyx index 10d3bbe2ac6f73e0d98adb162947ad2927080364..b7b0cae59a832202f5d6df92aa18a7b5d34c4fd5 100755 GIT binary patch delta 32010 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 diff --git a/progs/alloc.onyx b/progs/alloc.onyx index 064665e3..7ca0b850 100644 --- a/progs/alloc.onyx +++ b/progs/alloc.onyx @@ -1,4 +1,4 @@ -package alloc +package memory use "progs/intrinsics" @@ -11,6 +11,35 @@ use package intrinsics { // Need to define this somewhere null :: cast(rawptr) 0; +AllocAction :: enum { + Alloc; + Free; + Resize; +} + +Allocator :: struct { + data: rawptr; + func: alloc_proc; +} + +alloc_proc :: #type proc (rawptr, AllocAction, u32, u32, rawptr) -> rawptr; + +alloc :: proc (a: ^Allocator, size: u32) -> rawptr { + return a.func(a.data, AllocAction.Alloc, size, 16, null); +} + +free :: proc (a: ^Allocator, ptr: rawptr) { + a.func(a.data, AllocAction.Free, 0, 0, ptr); +} + + + + + + + +heap_allocator : Allocator; + heap_state : struct { free_list : ^heap_block; next_alloc : rawptr; @@ -18,7 +47,7 @@ heap_state : struct { } heap_block :: struct { - size : i32; + size : u32; next : ^heap_block; } @@ -26,16 +55,17 @@ heap_init :: proc { heap_state.free_list = null; heap_state.next_alloc = __heap_start; heap_state.remaining_space = (memory_size() << 16) - cast(u32) __heap_start; -} -heap_align_to :: 16 + heap_allocator.data = null; + heap_allocator.func = heap_alloc_proc; +} -heap_alloc :: proc (size_: i32) -> rawptr { +heap_alloc :: proc (size_: u32, align: u32) -> rawptr { if size_ == 0 return null; size := size_ + sizeof heap_block; - if size % heap_align_to != 0 { - size += heap_align_to - (size % heap_align_to); + if size % align != 0 { + size += align - (size % align); } prev := ^heap_state.free_list; @@ -62,13 +92,36 @@ heap_alloc :: proc (size_: i32) -> rawptr { return cast(rawptr) (cast(u32) ret + sizeof heap_block); } - - // grow the memory with memory_grow - return cast(rawptr) -1; + + new_pages :: (size - heap_state.remaining_space) >> 16; + if memory_grow(new_pages) == -1 { + // out of memory + return null; + } + heap_state.remaining_space += new_pages << 16; + + ret := cast(^heap_block) heap_state.next_alloc; + ret.size = size; + ret.next = null; + + heap_state.next_alloc = cast(rawptr) (cast(u32) heap_state.next_alloc + size); + heap_state.remaining_space -= size; + + return cast(rawptr) (cast(u32) ret + sizeof heap_block); } heap_free :: proc (ptr: rawptr) { hb_ptr := cast(^heap_block) (cast(u32) ptr - sizeof heap_block); hb_ptr.next = heap_state.free_list; heap_state.free_list = hb_ptr; -} \ No newline at end of file +} + +heap_alloc_proc :: proc (data: rawptr, aa: AllocAction, size: u32, align: u32, oldptr: rawptr) -> rawptr { + if aa == AllocAction.Alloc return heap_alloc(size, align); + if aa == AllocAction.Free { + heap_free(oldptr); + return null; + } + + return null; +} diff --git a/progs/alloc_test.onyx b/progs/alloc_test.onyx index 72fa5af8..212e1fa1 100644 --- a/progs/alloc_test.onyx +++ b/progs/alloc_test.onyx @@ -1,17 +1,17 @@ use "progs/alloc" use "progs/print_funcs" -use package alloc +use package memory use package printing proc #export "main" { asdf :: "staring asdfkjasd asdflkjasdflkajsdflk"; heap_init(); - first := cast([] i32) heap_alloc(sizeof [4] i32); + first := cast([] i32) alloc(^heap_allocator, sizeof [4] i32); for i: 0, 4 first[i] = i * 2; - second := cast([] f32) heap_alloc(sizeof [24] f32); + second := cast([] f32) alloc(^heap_allocator, sizeof [24] f32); for i: 0, 24 second[i] = cast(f32) i; print(cast(u32) first); @@ -20,22 +20,19 @@ proc #export "main" { for i: 0, 4 print(first[i]); for i: 0, 24 print(second[i]); - heap_free(first); + free(^heap_allocator, first); - third := cast(^i32) heap_alloc(sizeof i32); + third := cast(^i32) alloc(^heap_allocator, sizeof i32); print(cast(u32) third); *third = 1234; print(*third); - heap_free(second); + free(^heap_allocator, second); - fourth := cast([] i32) heap_alloc(sizeof [128]i32); + fourth := cast([] i32) alloc(^heap_allocator, sizeof [128]i32); print(cast(u32) fourth); - fifth := cast(^i32) heap_alloc(sizeof i32); + fifth := cast(^i32) alloc(^heap_allocator, sizeof i32); print(cast(u32) fifth); - - sixth := heap_alloc(8 << 16); - print(cast(u32) sixth); } \ No newline at end of file diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 0bf8eade..c170994b 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -467,7 +467,8 @@ CHECK(address_of, AstAddressOf* aof) { if (aof->expr->kind != Ast_Kind_Array_Access && aof->expr->kind != Ast_Kind_Dereference - && aof->expr->kind != Ast_Kind_Field_Access) { + && aof->expr->kind != Ast_Kind_Field_Access + && aof->expr->kind != Ast_Kind_Memres) { onyx_message_add(Msg_Type_Literal, aof->token->pos, "cannot take the address of this"); diff --git a/src/onyxparser.c b/src/onyxparser.c index c439108a..583c5993 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -1312,6 +1312,10 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { "%b", symbol->text, symbol->length); } + if (node->kind == Ast_Kind_Type_Alias) { + node->token = symbol; + } + // HACK add_node_to_process(parser, (AstNode *) node); } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 687e27b6..17c8b8d2 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -958,6 +958,12 @@ COMPILE_FUNC(expression, AstTyped* expr) { break; } + case Ast_Kind_Memres: { + AstMemRes* memres = (AstMemRes *) aof->expr; + WID(WI_I32_CONST, memres->addr); + break; + } + default: onyx_message_add(Msg_Type_Literal, aof->token->pos, -- 2.25.1