From 8bef7f8bd09fa2089476099f8ad6915df3f553c9 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Fri, 18 Apr 2025 12:58:55 -0600 Subject: [PATCH] Arena allocate bytes --- src/compiler.bbb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/compiler.bbb b/src/compiler.bbb index 603448e..6fe3a4b 100644 --- a/src/compiler.bbb +++ b/src/compiler.bbb @@ -233,12 +233,21 @@ arena_allocate_bytes = fn (arena: &Arena, size: u64, alignment: u64) &u8 >aligned_offset = align_forward(arena.position, alignment); >aligned_size_after = aligned_offset + size; + >arena_byte_pointer: &u8 = #pointer_cast(arena); + if (aligned_size_after > arena.os_position) { - #trap(); + >target_committed_size = align_forward(aligned_size_after, arena.granularity); + >size_to_commit = target_committed_size - arena.os_position; + >commit_pointer = arena_byte_pointer + arena.os_position; + os_commit(#int_from_pointer(commit_pointer), size_to_commit, { + .read = 1, + .write = 1, + zero, + }); + arena.os_position = target_committed_size; } - >arena_byte_pointer: &u8 = #pointer_cast(arena); >result = arena_byte_pointer + aligned_offset; arena.position = aligned_size_after; assert(arena.position <= arena.os_position); @@ -246,6 +255,10 @@ arena_allocate_bytes = fn (arena: &Arena, size: u64, alignment: u64) &u8 return result; } +arena_join_string = fn (arena: &Arena, pieces: [][]u8) []u8 +{ +} + GlobalState = struct { arena: &Arena,