From 8cad63f7d691af1c6ef20481895f32de1f51a66c Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 7 Sep 2021 22:19:02 -0500 Subject: [PATCH] bugfixes in compiler and core libraries --- .vimspector.json.old | 24 +++ bin/onyx | Bin 430984 -> 431048 bytes core/alloc/heap.onyx | 338 +++++++++++++++++------------------ core/random.onyx | 13 +- examples/11_map.onyx | 4 +- include/onyxutils.h | 2 +- modules/bmfont/position.onyx | 42 ++--- modules/ui/ui.onyx | 11 +- src/onyxchecker.c | 2 + src/onyxutils.c | 2 +- 10 files changed, 233 insertions(+), 205 deletions(-) create mode 100644 .vimspector.json.old diff --git a/.vimspector.json.old b/.vimspector.json.old new file mode 100644 index 00000000..b8923072 --- /dev/null +++ b/.vimspector.json.old @@ -0,0 +1,24 @@ +{ "configurations": { + "cpptools-run": { + "adapter": "vscode-cpptools", + "configuration": { + "type": "cppdbg", + "request": "launch", + "program": "/home/brendan/dev/c/onyx/bin/onyx-debug", + "args": ["-VVV", "-I", "/home/brendan/dev/c/onyx", "-o", "site/analyzer.wasm", "-r", "js", "--no-colors", "src/build.onyx", "--doc", "doc/source_reference" ], + "stopAtEntry": true, + "cwd": "/home/brendan/dev/onyx/wasm_analyzer", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + } + } +} diff --git a/bin/onyx b/bin/onyx index 122314bb0ef4dc366ba45d8e150944a0f1793f77..8a4f175d476239d8bd10574cb4c3c6bb654a2f53 100755 GIT binary patch delta 89039 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¿zUYe)eisUW4*kV>@owN{5G84;%4)3Wvo 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 UN%|KOvP7rVz!5QZwbA|m0V%XZZ~y=R delta 89572 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 diff --git a/core/alloc/heap.onyx b/core/alloc/heap.onyx index 33722d0b..09645b8e 100644 --- a/core/alloc/heap.onyx +++ b/core/alloc/heap.onyx @@ -13,92 +13,118 @@ Enable_Debug :: false #load "core/intrinsics/wasm" -uintptr :: #type u32 +init :: () { + heap_state.free_list = null; + heap_state.next_alloc = cast(rawptr) (cast(uintptr) __heap_start + 8); + heap_state.remaining_space = (memory_size() << 16) - cast(u32) __heap_start; -use package core.intrinsics.wasm { - memory_size, memory_grow, - memory_copy, memory_fill, -} -#private_file memory :: package core.memory -#private_file math :: package core.math - -// The global heap state -#private_file -heap_state : struct { - free_list : ^heap_freed_block; - next_alloc : rawptr; - remaining_space : u32; + use package core.alloc { heap_allocator } + heap_allocator.data = ^heap_state; + heap_allocator.func = heap_alloc_proc; } -#private_file -heap_block :: struct { - size : u32; - magic_number : u32; -} +get_watermark :: () => cast(u32) heap_state.next_alloc; -#private_file -heap_freed_block :: struct { - use base: heap_block; - next : ^heap_freed_block; - prev : ^heap_freed_block; -} +#private_file { + use package core.intrinsics.wasm { + memory_size, memory_grow, + memory_copy, memory_fill, + } -#private_file -heap_allocated_block :: struct { - use base: heap_block; -} + memory :: package core.memory + math :: package core.math -#private_file Allocated_Flag :: 0x1 -#private_file Free_Block_Magic_Number :: 0xdeadbeef -#private_file Block_Split_Size :: 512 - -// FIX: This does not respect the choice of alignment -#private_file -heap_alloc :: (size_: u32, align: u32) -> rawptr { - if size_ == 0 do return null; - - size := size_ + sizeof heap_block; - size = math.max(size, sizeof heap_freed_block); - memory.align(~~^size, ~~align); - - prev := ^heap_state.free_list; - hb := heap_state.free_list; - while hb != null { - if hb.size >= size { - #if Enable_Debug { - assert(hb.size & Allocated_Flag == 0, "Allocated block in free list."); - assert(hb.magic_number == Free_Block_Magic_Number, "Malformed free block in free list."); - } + uintptr :: #type u32 - if hb.size - size >= Block_Split_Size { - hb.size = size; + // The global heap state + heap_state : struct { + free_list : ^heap_freed_block; + next_alloc : rawptr; + remaining_space : u32; + } - new_block := cast(^heap_freed_block) (cast(uintptr) hb + size); - new_block.size = hb.size - size; - new_block.next = hb.next; - new_block.prev = hb.prev; - new_block.magic_number = Free_Block_Magic_Number; + heap_block :: struct { + size : u32; + magic_number : u32; + } + + heap_freed_block :: struct { + use base: heap_block; + next : ^heap_freed_block; + prev : ^heap_freed_block; + } - if hb.next != null do hb.next.prev = new_block; - *prev = new_block; + heap_allocated_block :: struct { + use base: heap_block; + } - } else { - if hb.next != null do hb.next.prev = hb.prev; - *prev = hb.next; + Allocated_Flag :: 0x1 + Free_Block_Magic_Number :: 0xdeadbeef + Block_Split_Size :: 512 + + // FIX: This does not respect the choice of alignment + heap_alloc :: (size_: u32, align: u32) -> rawptr { + if size_ == 0 do return null; + + size := size_ + sizeof heap_block; + size = math.max(size, sizeof heap_freed_block); + memory.align(~~^size, ~~align); + + prev := ^heap_state.free_list; + hb := heap_state.free_list; + while hb != null { + if hb.size >= size { + #if Enable_Debug { + assert(hb.size & Allocated_Flag == 0, "Allocated block in free list."); + assert(hb.magic_number == Free_Block_Magic_Number, "Malformed free block in free list."); + } + + if hb.size - size >= Block_Split_Size { + hb.size = size; + + new_block := cast(^heap_freed_block) (cast(uintptr) hb + size); + new_block.size = hb.size - size; + new_block.next = hb.next; + new_block.prev = hb.prev; + new_block.magic_number = Free_Block_Magic_Number; + + if hb.next != null do hb.next.prev = new_block; + *prev = new_block; + + } else { + if hb.next != null do hb.next.prev = hb.prev; + *prev = hb.next; + } + + hb.next = null; + hb.prev = null; + hb.magic_number = 0; + hb.size |= Allocated_Flag; + return cast(rawptr) (cast(uintptr) hb + sizeof heap_allocated_block); } - hb.next = null; - hb.prev = null; - hb.magic_number = 0; - hb.size |= Allocated_Flag; - return cast(rawptr) (cast(uintptr) hb + sizeof heap_allocated_block); + prev = ^hb.next; + hb = hb.next; } - prev = ^hb.next; - hb = hb.next; - } + if size < heap_state.remaining_space { + ret := cast(^heap_allocated_block) heap_state.next_alloc; + ret.size = size; + ret.size |= Allocated_Flag; + + heap_state.next_alloc = cast(rawptr) (cast(uintptr) heap_state.next_alloc + size); + heap_state.remaining_space -= size; + + return cast(rawptr) (cast(uintptr) ret + sizeof heap_allocated_block); + } + + new_pages := ((size - heap_state.remaining_space) >> 16) + 1; + if memory_grow(new_pages) == -1 { + // out of memory + return null; + } + heap_state.remaining_space += new_pages << 16; - if size < heap_state.remaining_space { ret := cast(^heap_allocated_block) heap_state.next_alloc; ret.size = size; ret.size |= Allocated_Flag; @@ -109,128 +135,98 @@ heap_alloc :: (size_: u32, align: u32) -> rawptr { return cast(rawptr) (cast(uintptr) ret + sizeof heap_allocated_block); } - new_pages := ((size - heap_state.remaining_space) >> 16) + 1; - if memory_grow(new_pages) == -1 { - // out of memory - return null; - } - heap_state.remaining_space += new_pages << 16; - - ret := cast(^heap_allocated_block) heap_state.next_alloc; - ret.size = size; - ret.size |= Allocated_Flag; + heap_free :: (ptr: rawptr) { + #if Enable_Debug do assert(ptr != null, "Trying to free a null pointer."); - heap_state.next_alloc = cast(rawptr) (cast(uintptr) heap_state.next_alloc + size); - heap_state.remaining_space -= size; + hb_ptr := cast(^heap_freed_block) (cast(uintptr) ptr - sizeof heap_allocated_block); + #if Enable_Debug do assert(hb_ptr.size & Allocated_Flag == Allocated_Flag, "Corrupted heap on free. This could be due to a double free, or using memory past were you allocated it."); - return cast(rawptr) (cast(uintptr) ret + sizeof heap_allocated_block); -} - -#private_file -heap_free :: (ptr: rawptr) { - #if Enable_Debug do assert(ptr != null, "Trying to free a null pointer."); - - hb_ptr := cast(^heap_freed_block) (cast(uintptr) ptr - sizeof heap_allocated_block); - #if Enable_Debug do assert(hb_ptr.size & Allocated_Flag == Allocated_Flag, "Corrupted heap on free. This could be due to a double free, or using memory past were you allocated it."); - - hb_ptr.size &= ~Allocated_Flag; - orig_size := hb_ptr.size - sizeof heap_allocated_block; + hb_ptr.size &= ~Allocated_Flag; + orig_size := hb_ptr.size - sizeof heap_allocated_block; - #if Enable_Debug do memory_fill(ptr, ~~0xcc, orig_size); + #if Enable_Debug do memory_fill(ptr, ~~0xcc, orig_size); - // CLEANUP: This is not complete. This only checks if the block after the freed block is also free. - // There are three other cases related to the block before this one that need to be handled for - // the best efficiency and minimal fragmentation. - if cast(uintptr) hb_ptr + hb_ptr.size < cast(uintptr) heap_state.next_alloc { - next_block := cast(^heap_freed_block) (cast(uintptr) hb_ptr + hb_ptr.size); + // CLEANUP: This is not complete. This only checks if the block after the freed block is also free. + // There are three other cases related to the block before this one that need to be handled for + // the best efficiency and minimal fragmentation. + if cast(uintptr) hb_ptr + hb_ptr.size < cast(uintptr) heap_state.next_alloc { + next_block := cast(^heap_freed_block) (cast(uintptr) hb_ptr + hb_ptr.size); - if next_block.size & Allocated_Flag == 0 && next_block.magic_number == Free_Block_Magic_Number { - hb_ptr.size += next_block.size; + if next_block.size & Allocated_Flag == 0 && next_block.magic_number == Free_Block_Magic_Number { + hb_ptr.size += next_block.size; - if next_block.next != null do next_block.next.prev = next_block.prev; - if next_block.prev != null do next_block.prev.next = next_block.next; - else do heap_state.free_list = next_block.next; + if next_block.next != null do next_block.next.prev = next_block.prev; + if next_block.prev != null do next_block.prev.next = next_block.next; + else do heap_state.free_list = next_block.next; - next_block.next = null; - next_block.prev = null; + next_block.next = null; + next_block.prev = null; + } } - } - - hb_ptr.magic_number = Free_Block_Magic_Number; - hb_ptr.prev = null; - hb_ptr.next = heap_state.free_list; - if heap_state.free_list != null do heap_state.free_list.prev = hb_ptr; - heap_state.free_list = hb_ptr; -} + hb_ptr.magic_number = Free_Block_Magic_Number; + hb_ptr.prev = null; + hb_ptr.next = heap_state.free_list; -#private_file -heap_resize :: (ptr: rawptr, new_size_: u32, align: u32) -> rawptr { - if ptr == null do return null; + if heap_state.free_list != null do heap_state.free_list.prev = hb_ptr; + heap_state.free_list = hb_ptr; + } - new_size := new_size_ + sizeof heap_block; - new_size = math.max(new_size, sizeof heap_freed_block); - new_size = ~~memory.align(cast(u64) new_size, ~~align); - - hb_ptr := cast(^heap_allocated_block) (cast(uintptr) ptr - sizeof heap_allocated_block); - #if Enable_Debug do assert(hb_ptr.size & Allocated_Flag == Allocated_Flag, "Corrupted heap on resize."); - hb_ptr.size &= ~Allocated_Flag; + heap_resize :: (ptr: rawptr, new_size_: u32, align: u32) -> rawptr { + if ptr == null do return null; - old_size := hb_ptr.size; + new_size := new_size_ + sizeof heap_block; + new_size = math.max(new_size, sizeof heap_freed_block); + new_size = ~~memory.align(cast(u64) new_size, ~~align); + + hb_ptr := cast(^heap_allocated_block) (cast(uintptr) ptr - sizeof heap_allocated_block); + #if Enable_Debug do assert(hb_ptr.size & Allocated_Flag == Allocated_Flag, "Corrupted heap on resize."); + hb_ptr.size &= ~Allocated_Flag; - // If there is already enough space in the current allocated block, - // just return the block that already exists and has the memory in it. - if old_size >= new_size { - hb_ptr.size |= Allocated_Flag; - return ptr; - } + old_size := hb_ptr.size; - // If we are at the end of the allocation space, just extend it - if cast(uintptr) hb_ptr + hb_ptr.size >= cast(uintptr) heap_state.next_alloc { - needed_size := cast(u32) memory.align(cast(u64) (new_size - old_size), 16); + // If there is already enough space in the current allocated block, + // just return the block that already exists and has the memory in it. + if old_size >= new_size { + hb_ptr.size |= Allocated_Flag; + return ptr; + } - if needed_size >= heap_state.remaining_space { - new_pages := ((needed_size - heap_state.remaining_space) >> 16) + 1; - if memory_grow(new_pages) == -1 { - // out of memory - return null; + // If we are at the end of the allocation space, just extend it + if cast(uintptr) hb_ptr + hb_ptr.size >= cast(uintptr) heap_state.next_alloc { + needed_size := cast(u32) memory.align(cast(u64) (new_size - old_size), 16); + + if needed_size >= heap_state.remaining_space { + new_pages := ((needed_size - heap_state.remaining_space) >> 16) + 1; + if memory_grow(new_pages) == -1 { + // out of memory + return null; + } + heap_state.remaining_space += new_pages << 16; } - heap_state.remaining_space += new_pages << 16; + + hb_ptr.size = new_size; + hb_ptr.size |= Allocated_Flag; + heap_state.next_alloc = cast(rawptr) (cast(uintptr) heap_state.next_alloc + needed_size); + heap_state.remaining_space -= needed_size; + return ptr; } - hb_ptr.size = new_size; hb_ptr.size |= Allocated_Flag; - heap_state.next_alloc = cast(rawptr) (cast(uintptr) heap_state.next_alloc + needed_size); - heap_state.remaining_space -= needed_size; - return ptr; + new_ptr := heap_alloc(new_size_, align); + memory_copy(new_ptr, ptr, old_size - sizeof heap_block); + heap_free(ptr); + return new_ptr; } - hb_ptr.size |= Allocated_Flag; - new_ptr := heap_alloc(new_size_, align); - memory_copy(new_ptr, ptr, old_size - sizeof heap_block); - heap_free(ptr); - return new_ptr; -} + heap_alloc_proc :: (data: rawptr, aa: AllocationAction, size: u32, align: u32, oldptr: rawptr) -> rawptr { + switch aa { + case .Alloc do return heap_alloc(size, align); + case .Resize do return heap_resize(oldptr, size, align); + case .Free do heap_free(oldptr); + } -#private_file -heap_alloc_proc :: (data: rawptr, aa: AllocationAction, size: u32, align: u32, oldptr: rawptr) -> rawptr { - switch aa { - case .Alloc do return heap_alloc(size, align); - case .Resize do return heap_resize(oldptr, size, align); - case .Free do heap_free(oldptr); + return null; } - - return null; -} - -init :: () { - heap_state.free_list = null; - heap_state.next_alloc = cast(rawptr) (cast(uintptr) __heap_start + 8); - heap_state.remaining_space = (memory_size() << 16) - cast(u32) __heap_start; - - use package core.alloc { heap_allocator } - heap_allocator.data = ^heap_state; - heap_allocator.func = heap_alloc_proc; } -get_watermark :: () => cast(u32) heap_state.next_alloc; \ No newline at end of file diff --git a/core/random.onyx b/core/random.onyx index 97994808..85ba22c0 100644 --- a/core/random.onyx +++ b/core/random.onyx @@ -1,16 +1,19 @@ package core.random -#private_file seed : i32 = 8675309 +#private_file seed : i64 = 867530932187 -#private_file RANDOM_MULTIPLIER :: 1664525 -#private_file RANDOM_INCREMENT :: 1013904223 +#private_file RANDOM_MULTIPLIER :: 25214903917 +#private_file RANDOM_INCREMENT :: cast(i64) 11 // #private_file RANDOM_MODULUS :: 1 << 32 -set_seed :: (s: u32) do seed = s; +set_seed :: #match { + (s: u32) do seed = ~~s; , + (s: u64) do seed = s; , +} int :: (s := ^seed) -> u32 { *s = *s * RANDOM_MULTIPLIER + RANDOM_INCREMENT; - return *s; + return cast(u32) ((*s >> 16) & ~~0xffffffff); } between :: (lo: i32, hi: i32) -> i32 do return int () % (hi + 1 - lo) + lo; diff --git a/examples/11_map.onyx b/examples/11_map.onyx index bba7b9e4..5cab4dac 100644 --- a/examples/11_map.onyx +++ b/examples/11_map.onyx @@ -8,7 +8,7 @@ main :: (args: [] cstr) { // provide an 'any-to-any' hash map in it's core libraries. // To use it, simply create one like so: - ages : map.Map(str, u32); + ages : Map(str, u32); map.init(^ages, default=0, hash_count=16); defer map.free(^ages); @@ -29,7 +29,7 @@ main :: (args: [] cstr) { map.put(^ages, "Pam", 24); // To retrieve an entry's value, use the map.get procedure. - print_age :: (ages: ^map.Map(str, u32), name: str) { + print_age :: (ages: ^Map(str, u32), name: str) { age := map.get(ages, name); printf("{}'s age is {}.\n", name, age); } diff --git a/include/onyxutils.h b/include/onyxutils.h index cd726711..96957887 100644 --- a/include/onyxutils.h +++ b/include/onyxutils.h @@ -39,4 +39,4 @@ i32 string_process_escape_seqs(char* dest, char* src, i32 len); // :RelativeFiles This should lookup for the file relative to "relative_to" char* lookup_included_file(char* filename, char* relative_to, b32 add_onyx_suffix, b32 search_included_folders); -extern AstNode node_that_signals_a_yield; \ No newline at end of file +extern AstTyped node_that_signals_a_yield; diff --git a/modules/bmfont/position.onyx b/modules/bmfont/position.onyx index 85795384..6cd60255 100644 --- a/modules/bmfont/position.onyx +++ b/modules/bmfont/position.onyx @@ -1,32 +1,34 @@ package bmfont -#private_file math :: package core.math +#private_file { + math :: package core.math -#private_file Renderable_Glyph :: struct { - pos_x, pos_y : f32; - pos_w, pos_h : f32; + renderable_glyph: Renderable_Glyph; + Renderable_Glyph :: struct { + pos_x, pos_y : f32; + pos_w, pos_h : f32; - tex_x, tex_y : f32; - tex_w, tex_h : f32; + tex_x, tex_y : f32; + tex_w, tex_h : f32; - x_advance : f32; -} -#private_file renderable_glyph: Renderable_Glyph; + x_advance : f32; + } -#private_file Rendering_Context :: struct { - font : ^BMFont; - size : f32; + rendering_context: Rendering_Context; + Rendering_Context :: struct { + font : ^BMFont; + size : f32; - x, y : f32; + x, y : f32; - original_x : f32; - baseline : f32; - line_height : f32; + original_x : f32; + baseline : f32; + line_height : f32; - text : str; - text_position : u32; + text : str; + text_position : u32; + } } -#private_file rendering_context: Rendering_Context; @FontSizing // Currently, `size` is just a multipler for the baked font size. This should be changed to be height in pixels, or 'em's. @Rename @@ -99,4 +101,4 @@ get_character_positions :: (font: ^BMFont, size: f32, text: str, x: f32, y: f32) close = close, data = ^rendering_context, }; -} \ No newline at end of file +} diff --git a/modules/ui/ui.onyx b/modules/ui/ui.onyx index da3cc025..980cc8c7 100644 --- a/modules/ui/ui.onyx +++ b/modules/ui/ui.onyx @@ -5,14 +5,15 @@ use package core @Temporary DEFAULT_TEXT_SIZE :: 1.0f - UI_Id :: #type u32 -#private hot_item : UI_Id = 0 -#private active_item : UI_Id = 0 -#private hot_item_was_set := false +#private { + hot_item : UI_Id = 0 + active_item : UI_Id = 0 + hot_item_was_set := false -#private current_font : ^Font; + current_font : ^Font; +} init_ui :: () { map.init(^font_registry, hash_count=4); diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 3ec91cf5..e2edab7a 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -223,6 +223,8 @@ CheckStatus check_for(AstFor* fornode) { resolve_expression_type(fornode->iter); Type* iter_type = fornode->iter->type; + if (iter_type == NULL) YIELD(fornode->token->pos, "Waiting for iteration expression type to be known."); + fornode->loop_type = For_Loop_Invalid; if (types_are_compatible(iter_type, &basic_types[Basic_Kind_I32])) { if (fornode->by_pointer) { diff --git a/src/onyxutils.c b/src/onyxutils.c index 5c35c5fd..e53256ce 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -249,7 +249,7 @@ void scope_clear(Scope* scope) { // HACK HACK HACK nocheckin static b32 flag_to_yield = 0; -AstNode node_that_signals_a_yield = { 0 }; +AstTyped node_that_signals_a_yield = { Ast_Kind_Function, 0 }; static void ensure_polyproc_cache_is_created(AstPolyProc* pp) { if (pp->concrete_funcs == NULL) { -- 2.25.1