From 215bf1dd5567820a67a8709a786a91a0b3c668bf Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 28 Aug 2020 22:50:35 -0500 Subject: [PATCH] bugfixes and more testing --- core/builtin.onyx | 50 ++++++++++++++++++++++++++++--------- core/stdio.onyx | 4 ++- core/string.onyx | 29 +++++++++++++++++++--- onyx | Bin 582536 -> 582568 bytes progs/poly_test.onyx | 57 ++++++++++++++++++++++++++++++------------- src/onyxclone.c | 6 +++++ 6 files changed, 114 insertions(+), 32 deletions(-) diff --git a/core/builtin.onyx b/core/builtin.onyx index 0191f775..3224e303 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -38,30 +38,43 @@ calloc :: proc (size: u32) -> rawptr do return alloc(context.allocator, size); cresize :: proc (ptr: rawptr, size: u32) -> rawptr do return resize(context.allocator, ptr, size); cfree :: proc (ptr: rawptr) do free(context.allocator, ptr); -array_init :: proc(arr: ^[..] $T, initial_cap := 4) { +array_init :: proc (arr: ^[..] $T, initial_cap := 4) { arr.count = 0; arr.capacity = initial_cap; arr.data = calloc(sizeof T * arr.capacity); } -array_add :: proc (arr: ^[..] $T, x: T) { - if arr.count + 1 > arr.capacity { - arr.capacity <<= 1; - arr.data = cresize(arr.data, sizeof T * arr.capacity); - } +array_free :: proc (arr: ^[..] $T) { + arr.count = 0; + arr.capacity = 0; + + cfree(arr.data); + arr.data = null; +} + +array_ensure_capacity :: proc (arr: ^[..] $T, cap: u32) { + if arr.capacity >= cap do return; + + while cap > arr.capacity do arr.capacity <<= 1; + arr.data = cresize(arr.data, sizeof T * arr.capacity); +} +array_add :: proc (arr: ^[..] $T, x: T) { + array_ensure_capacity(arr, arr.count + 1); arr.data[arr.count] = x; arr.count += 1; } -array_remove_at :: proc (arr: ^[..] $T, idx: u32) { - if idx >= arr.count do return; +array_add_at :: proc (arr: ^[..] $T, x: T, idx: u32) { + array_ensure_capacity(arr, arr.count + 1); - for i: idx, arr.count - 1 { - arr.data[i] = arr.data[i + 1]; + arr.count += 1; + while i := arr.count; i > idx { + arr.data[i] = arr.data[i - 1]; + i -= 1; } - arr.count -= 1; + arr.data[idx] = x; } array_remove :: proc (arr: ^[..] $T, elem: T) { @@ -75,6 +88,21 @@ array_remove :: proc (arr: ^[..] $T, elem: T) { arr.count -= move; } +array_remove_at :: proc (arr: ^[..] $T, idx: u32) { + if idx >= arr.count do return; + + for i: idx, arr.count - 1 { + arr.data[i] = arr.data[i + 1]; + } + + arr.count -= 1; +} + +array_contains :: proc (arr: ^[..] $T, x: T) -> bool { + for i: 0, arr.count do if arr.data[i] == x do return true; + return false; +} + context : struct { allocator : Allocator; temp_allocator : Allocator; diff --git a/core/stdio.onyx b/core/stdio.onyx index 9fc618e0..5eab4dfe 100644 --- a/core/stdio.onyx +++ b/core/stdio.onyx @@ -10,14 +10,16 @@ print_string :: proc (s: string) { } print_cstring :: proc (s: cstring) do string_builder_append(^cout_state.sb, s); -print_u64 :: proc (n: u64, base := 10l) do string_builder_append(^cout_state.sb, n); +print_u64 :: proc (n: u64, base := 10l) do string_builder_append(^cout_state.sb, n, base); print_u32 :: proc (n: u32, base := 10) do string_builder_append(^cout_state.sb, cast(u64) n, cast(u64) base); +print_bool :: proc (b: bool) do string_builder_append(^cout_state.sb, b); print :: proc #overloaded { print_string, print_cstring, print_u64, print_u32, + print_bool, } print_flush :: proc { diff --git a/core/string.onyx b/core/string.onyx index ac7ab375..0cd56794 100644 --- a/core/string.onyx +++ b/core/string.onyx @@ -138,8 +138,14 @@ string_builder_add_cstring :: proc (use sb: ^StringBuilder, cstr: cstring) -> ^S return string_builder_add_string(sb, s); } -u64_to_string :: proc (n_: u64, base: u64, buf: Buffer) -> string { - n := n_; +i64_to_string :: proc (n_: i64, base: u64, buf: Buffer) -> string { + n := cast(u64) n_; + + is_neg := false; + if n_ < 0l && base == 10l { + is_neg = true; + n = cast(u64) -n_; + } str :: cast(^u8) buf.data; for i: 0, buf.count do str[i] = #char "\0"; @@ -182,19 +188,36 @@ u64_to_string :: proc (n_: u64, base: u64, buf: Buffer) -> string { c -= 1; } + if is_neg { + *c = #char "-"; + len += 1; + c -= 1; + } + return string.{ data = c + 1, count = len }; } string_builder_add_u64 :: proc (use sb: ^StringBuilder, n: u64, base := 10l) -> ^StringBuilder { buf : [256] u8; - s := u64_to_string(n, base, Buffer.{ cast(rawptr) buf, 256 }); + s := i64_to_string(n, base, Buffer.{ cast(rawptr) buf, 256 }); return string_builder_add_string(sb, s); } +string_builder_add_bool :: proc (use sb: ^StringBuilder, b: bool) -> ^StringBuilder { + if b { + return string_builder_add_string(sb, "true"); + } else { + return string_builder_add_string(sb, "false"); + } + + return null; +} + string_builder_append :: proc #overloaded { string_builder_add_string, string_builder_add_cstring, string_builder_add_u64, + string_builder_add_bool, } string_builder_to_string :: proc (use sb: ^StringBuilder) -> string { diff --git a/onyx b/onyx index 1ed9b95e71601b88df7cfe7eba62694c5bd728b1..40d74102c540f67517a5b4d90784215375394f1d 100755 GIT binary patch delta 32962 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 bzG+gT*>Z_!woMY69g)BwvQa4+bZ7hzB_}3b delta 32925 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 diff --git a/progs/poly_test.onyx b/progs/poly_test.onyx index 93ef5a1b..050a3cde 100644 --- a/progs/poly_test.onyx +++ b/progs/poly_test.onyx @@ -24,11 +24,11 @@ use package file use package stdio print_arr_details :: proc (arr: ^[..] $T) { - print("\nArray details:\n"); + print("\nArray details:\n\tSize: "); print(arr.count); - print("\n"); + print("\n\tCapacity: "); print(arr.capacity); - print("\n"); + print("\n\tData ptr: "); print(cast(u32) arr.data, 16); print("\n\n"); } @@ -43,26 +43,49 @@ print_arr :: proc (arr: ^[..] $T) { } main :: proc (args: [] cstring) { - arr : [..] i32; - array_init(^arr, 24); + iarr : [..] i32; + array_init(^iarr, 24); + defer array_free(^iarr); + + print_arr_details(^iarr); + + array_add(^iarr, 1234); + + for i: 0, 12 do array_add(^iarr, i % 5); + + print_arr_details(^iarr); + print_arr(^iarr); - print_arr_details(^arr); + array_remove_at(^iarr, 4); - array_add(^arr, 1234); + print_arr_details(^iarr); + print_arr(^iarr); - for i: 0, 12 do array_add(^arr, i % 5); + array_remove(^iarr, 1); + array_remove(^iarr, 4); - print_arr_details(^arr); - print_arr(^arr); + print_arr_details(^iarr); + print_arr(^iarr); - array_remove_at(^arr, 4); + array_add_at(^iarr, 5678, 2); - print_arr_details(^arr); - print_arr(^arr); + print_arr_details(^iarr); + print_arr(^iarr); - array_remove(^arr, 1); - array_remove(^arr, 4); - print_arr_details(^arr); - print_arr(^arr); + + barr : [..] i64; + array_init(^barr, 10); + defer array_free(^barr); + + for i: 0, 1000 { + array_add(^barr, cast(u64) (3 * i * i + 4 * i - 2)); + } + + print_arr_details(^barr); + print_arr(^barr); + + print("Does the array contain 2638? "); + print(array_contains(^barr, 2638l)); + print("\n"); } \ No newline at end of file diff --git a/src/onyxclone.c b/src/onyxclone.c index 1c95c46e..459d4630 100644 --- a/src/onyxclone.c +++ b/src/onyxclone.c @@ -219,6 +219,10 @@ AstNode* ast_clone(bh_allocator a, void* n) { case Ast_Kind_While: ((AstIfWhile *) nn)->local = (AstLocal *) ast_clone(a, ((AstIfWhile *) node)->local); ((AstIfWhile *) nn)->assignment = (AstBinaryOp *) ast_clone(a, ((AstIfWhile *) node)->assignment); + + if (((AstIfWhile *) nn)->assignment) + ((AstIfWhile *) nn)->assignment->left = (AstTyped *) ((AstIfWhile *) nn)->local; + ((AstIfWhile *) nn)->cond = (AstTyped *) ast_clone(a, ((AstIfWhile *) node)->cond); ((AstIfWhile *) nn)->true_stmt = (AstBlock *) ast_clone(a, ((AstIfWhile *) node)->true_stmt); ((AstIfWhile *) nn)->false_stmt = (AstBlock *) ast_clone(a, ((AstIfWhile *) node)->false_stmt); @@ -230,6 +234,8 @@ AstNode* ast_clone(bh_allocator a, void* n) { dw->local = (AstLocal *) ast_clone(a, sw->local); dw->assignment = (AstBinaryOp *) ast_clone(a, sw->assignment); + if (dw->assignment) + dw->assignment->left = (AstTyped *) sw->local; dw->expr = (AstTyped *) ast_clone(a, sw->expr); dw->default_case = (AstBlock *) ast_clone(a, sw->default_case); -- 2.25.1