From e7d1cc07f7cd1b5d5e9685293706b2f9520fda4e Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 26 Sep 2020 16:34:52 -0500 Subject: [PATCH] added very basic implementation of printf --- core/builtin.onyx | 8 ++++ core/stdio.onyx | 89 +++++++++++++++++++++++++++++++++++++++++ onyx | Bin 494164 -> 494404 bytes progs/vararg_test.onyx | 11 +---- src/onyxtypes.c | 10 +++++ 5 files changed, 109 insertions(+), 9 deletions(-) diff --git a/core/builtin.onyx b/core/builtin.onyx index 92c28622..9e4e5fdd 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -18,6 +18,14 @@ vararg :: #type ^struct { count: i32; } +vararg_get :: proc (va: vararg, ret: ^$T) -> bool { + if va.count <= 0 do return false; + *ret = *cast(^T) va.data; + va.data = cast(rawptr) (cast(^u8) va.data + sizeof T); + va.count -= 1; + return true; +} + null :: cast(rawptr) 0; // --------------------------------- diff --git a/core/stdio.onyx b/core/stdio.onyx index 9b686ec4..f37512fd 100644 --- a/core/stdio.onyx +++ b/core/stdio.onyx @@ -44,6 +44,95 @@ println :: proc (x: $T) { print("\n"); } +printf :: proc (format: string, va: ...) { + buffer: [2048] u8; + len := 0; + + state := 0; + + for ch: format do switch (state) { + case 0 { + if ch == #char "%" do state = 1; + else { + buffer[len] = ch; + len += 1; + } + } + + case 1 { + switch (ch) { + case #char "%" { buffer[len] = ch; len += 1; } + + case #char "i" { + n : i32; + if !vararg_get(va, ^n) do return; + + ibuf : [128] u8; + istr := i64_to_string(~~n, 10l, Buffer.{ ~~ibuf, 128 }); + + for a: istr { + buffer[len] = a; + len += 1; + } + } + + case #char "l" { + n : i64; + if !vararg_get(va, ^n) do return; + + ibuf : [128] u8; + istr := i64_to_string(n, 10l, Buffer.{ ~~ibuf, 128 }); + + for a: istr { + buffer[len] = a; + len += 1; + } + } + + case #char "f" { + n : f32; + if !vararg_get(va, ^n) do return; + + fbuf : [128] u8; + fstr := f64_to_string(~~n, fbuf[0 .. 128]); + + for a: fstr { + buffer[len] = a; + len += 1; + } + } + + case #char "d" { + n : f64; + if !vararg_get(va, ^n) do return; + + fbuf : [128] u8; + fstr := f64_to_string(n, fbuf[0 .. 128]); + + for a: fstr { + buffer[len] = a; + len += 1; + } + } + + case #char "s" { + str : string; + if !vararg_get(va, ^str) do return; + + for a: str { + buffer[len] = a; + len += 1; + } + } + } + + state = 0; + } + } + + print(string.{ ~~buffer, len }); +} + // This works on both slices and arrays print_array :: proc (arr: $T, sep := " ") { for i: 0 .. arr.count { diff --git a/onyx b/onyx index 6c79fdedb1c7f90d473dee5061b21196c5ee8391..d18afafd741cdbb3469a06597f3fbdb6422250e1 100755 GIT binary patch delta 33490 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 z zB_4(8m@o!;9`ab^CCKBD(~-v`Z$_SgyaRb6^7qJ-kWVI}kbuHPB!#5Gmxtxt9gg@7luL-CNxK$i5!JI3%M8aY~V?ri!3i4s(1<1L`smRxm7b4$BUWEJzc`@?e$V(){JlIF5DNDlycjTqW z0m#dc>mW1aw#dto2O_UPo`$>Zy~QiE<|37 z{0?~?vRzX(;Pt?A9k`>g0Taq0Z$z$&ya~A;@;AsWkT)ZDLf(Sh7kMl4aO7>+zF|BH z8JI8w`CH^g$lHfHB(cPi3wKZJ;-H|_aawA z&O#1D-iO>2`FrGc$or9_ku^F0APz#|04BsE|A0IV`5^K<wSpsk6vDcTNbyP_S6b~M@qv1L0b`RRkZbm6=z}-6k4EdkG4D7L1@RJorrb{ z+9b4d(WanXf_5d^O=w$m?%c7nA*yr7R-Gd>OD}V2e;Phn3!Y-0XlLg-ZKwu2HqXs0 zKe)KIajv-;rDKlsKjxdOIi7TAC0EZ$2kw__uH%@Coa?~*3C=5~;(5jRI>C>T9~a|y zft?JFDsFHz%Wc&y3(PLOS&G^1zaz8%zmXFVDOOY)zmsCF>l5P%vk5;jo@Qw?ZI6cr wzJ7tZByYCB?B)oglR?*Myx#)oVJ33sG`>#q92L);!|yIIH>P0yQq2|qA5a7@!~g&Q diff --git a/progs/vararg_test.onyx b/progs/vararg_test.onyx index c66dc106..eddefa22 100644 --- a/progs/vararg_test.onyx +++ b/progs/vararg_test.onyx @@ -9,15 +9,6 @@ old_va_test :: proc (prefix: string, va: ..i32) { for v: va do println(v); } -vararg_get :: proc (va: vararg, ret: ^$T) -> bool { - if va.count <= 0 do return false; - *ret = *cast(^T) va.data; - va.data = cast(rawptr) (cast(^u8) va.data + sizeof T); - va.count -= 1; - return true; -} - -// va is just a rawptr with no bounds checking new_va_test :: proc (prefix: string, va: ...) { println(prefix); @@ -31,4 +22,6 @@ new_va_test :: proc (prefix: string, va: ...) { main :: proc (args: [] cstring) { new_va_test("foo", 1, 2, 3.0f, 5.0f); old_va_test("bar", 1); + + printf("Hello, %i, %s!\n", 1234, "World"); } diff --git a/src/onyxtypes.c b/src/onyxtypes.c index f18a4d0d..298a066c 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -589,12 +589,14 @@ b32 type_lookup_member(Type* type, char* member, StructMember* smem) { smem->idx = 0; smem->offset = 0; smem->type = type->Slice.ptr_to_data; + smem->name = "data"; return 1; } if (strcmp(member, "count") == 0) { smem->idx = 1; smem->offset = 4; smem->type = &basic_types[Basic_Kind_U32]; + smem->name = "count"; return 1; } @@ -606,18 +608,21 @@ b32 type_lookup_member(Type* type, char* member, StructMember* smem) { smem->idx = 0; smem->offset = 0; smem->type = type->DynArray.ptr_to_data; + smem->name = "data"; return 1; } if (strcmp(member, "count") == 0) { smem->idx = 1; smem->offset = 4; smem->type = &basic_types[Basic_Kind_U32]; + smem->name = "count"; return 1; } if (strcmp(member, "capacity") == 0) { smem->idx = 2; smem->offset = 8; smem->type = &basic_types[Basic_Kind_U32]; + smem->name = "capacity"; return 1; } } @@ -646,12 +651,14 @@ b32 type_lookup_member_by_idx(Type* type, i32 idx, StructMember* smem) { smem->idx = 0; smem->offset = 0; smem->type = type->Slice.ptr_to_data; + smem->name = "data"; return 1; } if (idx == 1) { smem->idx = 1; smem->offset = 4; smem->type = &basic_types[Basic_Kind_U32]; + smem->name = "count"; return 1; } @@ -663,18 +670,21 @@ b32 type_lookup_member_by_idx(Type* type, i32 idx, StructMember* smem) { smem->idx = 0; smem->offset = 0; smem->type = type->DynArray.ptr_to_data; + smem->name = "data"; return 1; } if (idx == 1) { smem->idx = 1; smem->offset = 4; smem->type = &basic_types[Basic_Kind_U32]; + smem->name = "count"; return 1; } if (idx == 2) { smem->idx = 2; smem->offset = 8; smem->type = &basic_types[Basic_Kind_U32]; + smem->name = "capacity"; return 1; } } -- 2.25.1