From ba755bfe77e358a992f86e5e52b78e00548c8890 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 9 Aug 2020 22:07:02 -0500 Subject: [PATCH] bugfixes --- include/onyxastnodes.h | 4 +-- onyx | Bin 136192 -> 136192 bytes progs/print_funcs.onyx | 59 ++++++++++++++++++++++++++++++----------- progs/stack_based.onyx | 7 ++++- 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index ab6f1c96..6e9401f6 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -136,8 +136,8 @@ typedef enum AstFlags { Ast_Flag_Private_Package = BH_BIT(4), // Global flags - Ast_Flag_Global_Stack_Top = BH_BIT(8), - Ast_Flag_Global_Stack_Base = BH_BIT(9), + Ast_Flag_Global_Stack_Top = BH_BIT(30), + Ast_Flag_Global_Stack_Base = BH_BIT(31), // Function flags Ast_Flag_Inline = BH_BIT(8), diff --git a/onyx b/onyx index d9a0568bce2ba3eede60ebdac58bdc563d52ea72..85f516464e0eeaa952f31e064c2f09299c68e940 100755 GIT binary patch delta 156 zcmZoz!O^gSW5X3Dk?W6GX2;JG4)cAK*lYfC>cgdf8NY9S!Ss3&qxj}4OABfvrmbLL zVED|R@1x@2k?i!N*MrgH-~*OUuOA+a7rH}P_ysw>9|EdyDB<_$uHf+K_2=;H?0W$e zX}!eXdGg=?{~p~A93IUFfWmDbfWj}g0>${{8@A6;X6#(g4AePY<1(WykkPO`<1*t6 F2LR&4K>+{& delta 156 zcmZoz!O^gSW5X3DkyRUa3I!;n%x(Rond!vC_|5u2Z}jFDOs^L)ifz8Kw4gSkZ3P1Z z!)N|{9~B3WhOcFUaxj7-I>)M|TB>N3TDJXJ_9FpoWHL zO#CgU|NZ~((e1$D(R=_X-u3|~{&G7|ERA2jg<<;~Wya3+%!~{S(={$L+A=dSFl^7b I%s9gV0M}GLG5`Po diff --git a/progs/print_funcs.onyx b/progs/print_funcs.onyx index aa668d04..575e0f5b 100644 --- a/progs/print_funcs.onyx +++ b/progs/print_funcs.onyx @@ -32,7 +32,7 @@ print_str_by_byte :: proc (str: ^u8) { c := str; while *c != cast(u8) 0 { print(cast(i32) (*c)); - c = cast(^u8) (cast(i32) c + 1); + c += 1; } } @@ -42,42 +42,69 @@ print_str_len :: proc (str: [] u8, len: i32) { for i: 0, len do print(cast(i32) str[i]); } -print_u64 :: proc (n_: u64) { +print_u64_with_base :: proc (n_: u64, base: u64) { n := n_; str: [128] u8; + for i: 0, 128 do str[i] = cast(u8) 0; + c := cast(^u8) ^str[127]; *c = cast(u8) 0; c -= 1; - if n == cast(u64) 0 { + if n == 0l { *c = cast(u8) 0x30; c -= 1; } else { - while n > cast(u64) 0 { - m :: n % cast(u64) 10; + while n > 0l { + m :: n % base; ch := cast(u8) 0; - if m == cast(u64) 0 do ch = cast(u8) 0x30; - if m == cast(u64) 1 do ch = cast(u8) 0x31; - if m == cast(u64) 2 do ch = cast(u8) 0x32; - if m == cast(u64) 3 do ch = cast(u8) 0x33; - if m == cast(u64) 4 do ch = cast(u8) 0x34; - if m == cast(u64) 5 do ch = cast(u8) 0x35; - if m == cast(u64) 6 do ch = cast(u8) 0x36; - if m == cast(u64) 7 do ch = cast(u8) 0x37; - if m == cast(u64) 8 do ch = cast(u8) 0x38; - if m == cast(u64) 9 do ch = cast(u8) 0x39; + if m == 0l do ch = cast(u8) 0x30; + if m == 1l do ch = cast(u8) 0x31; + if m == 2l do ch = cast(u8) 0x32; + if m == 3l do ch = cast(u8) 0x33; + if m == 4l do ch = cast(u8) 0x34; + if m == 5l do ch = cast(u8) 0x35; + if m == 6l do ch = cast(u8) 0x36; + if m == 7l do ch = cast(u8) 0x37; + if m == 8l do ch = cast(u8) 0x38; + if m == 9l do ch = cast(u8) 0x39; + if m == 10l do ch = cast(u8) 0x41; + if m == 11l do ch = cast(u8) 0x42; + if m == 12l do ch = cast(u8) 0x43; + if m == 13l do ch = cast(u8) 0x44; + if m == 14l do ch = cast(u8) 0x45; + if m == 15l do ch = cast(u8) 0x46; *c = ch; c -= 1; - n /= cast(u64) 10; + n /= base; } } + if base == 16l { + *c = cast(u8) 0x78; + c -= 1; + *c = cast(u8) 0x30; + c -= 1; + } + + if base == 2l { + *c = cast(u8) 0x62; + c -= 1; + *c = cast(u8) 0x30; + c -= 1; + } + print(c + 1); } +print_u64 :: proc (n: u64) do print_u64_with_base(n, 10l); +print_hex :: proc (n: u64) do print_u64_with_base(n, 16l); +print_bin :: proc (n: u64) do print_u64_with_base(n, 2l); +print_ptr :: proc (p: rawptr) do print_hex(cast(u64) p); + print :: proc #overloaded { print_bool, print_i32, diff --git a/progs/stack_based.onyx b/progs/stack_based.onyx index 1abc86d2..364ce910 100644 --- a/progs/stack_based.onyx +++ b/progs/stack_based.onyx @@ -47,7 +47,11 @@ vec_add :: proc (v: Vec3, u: Vec3, use out: ^Vec3) { start :: proc #export { heap_init(); print("Hello, World!"); - print(cast(i32) __heap_start); + print_ptr(__heap_start); + print_ptr(__stack_base); + print_ptr(__stack_top); + print_bin(42l); + print_hex(42l); a := 12345; @@ -88,4 +92,5 @@ start :: proc #export { soa.y[i] = i * i; } print(soa.y[3]); + print_ptr(^soa.y[3]); } \ No newline at end of file -- 2.25.1