aboutsummaryrefslogtreecommitdiff
path: root/core/runtime
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-28 12:06:46 +0000
committergingerBill <bill@gingerbill.org>2023-01-28 12:09:24 +0000
commitc45ca1bfcccb9b8f001a62a52c56eeeb5c73be88 (patch)
treec4c79f9da168c82039df23c22fcdacebb3698ad0 /core/runtime
parent94edf89b20d7bef9b9afef82a2d306657e3ace26 (diff)
Correct `arena_temp_end` usage when no allocation ever happens for that arena
Diffstat (limited to 'core/runtime')
-rw-r--r--core/runtime/print.odin67
1 files changed, 67 insertions, 0 deletions
diff --git a/core/runtime/print.odin b/core/runtime/print.odin
index 959dad3a9..1925587fd 100644
--- a/core/runtime/print.odin
+++ b/core/runtime/print.odin
@@ -2,6 +2,73 @@ package runtime
_INTEGER_DIGITS :: "0123456789abcdefghijklmnopqrstuvwxyz"
+when !ODIN_DISALLOW_RTTI {
+ print_any_single :: proc(arg: any) {
+ x := arg
+ if loc, ok := x.(Source_Code_Location); ok {
+ print_caller_location(loc)
+ return
+ }
+ x.id = typeid_base(x.id)
+ switch v in x {
+ case typeid: print_typeid(v)
+ case ^Type_Info: print_type(v)
+
+ case string: print_string(v)
+ case cstring: print_string(string(v))
+ case []byte: print_string(string(v))
+
+ case rune: print_rune(v)
+
+ case u8: print_u64(u64(v))
+ case u16: print_u64(u64(v))
+ case u16le: print_u64(u64(v))
+ case u16be: print_u64(u64(v))
+ case u32: print_u64(u64(v))
+ case u32le: print_u64(u64(v))
+ case u32be: print_u64(u64(v))
+ case u64: print_u64(u64(v))
+ case u64le: print_u64(u64(v))
+ case u64be: print_u64(u64(v))
+
+ case i8: print_i64(i64(v))
+ case i16: print_i64(i64(v))
+ case i16le: print_i64(i64(v))
+ case i16be: print_i64(i64(v))
+ case i32: print_i64(i64(v))
+ case i32le: print_i64(i64(v))
+ case i32be: print_i64(i64(v))
+ case i64: print_i64(i64(v))
+ case i64le: print_i64(i64(v))
+ case i64be: print_i64(i64(v))
+
+ case int: print_int(v)
+ case uint: print_uint(v)
+ case uintptr: print_uintptr(v)
+
+ case:
+ ti := type_info_of(x.id)
+ #partial switch v in ti.variant {
+ case Type_Info_Pointer:
+ print_uintptr((^uintptr)(x.data)^)
+ return
+ }
+
+ print_string("<invalid-value>")
+ }
+ }
+ println_any :: proc(args: ..any) {
+ loop: for arg, i in args {
+ if i != 0 {
+ print_string(" ")
+ }
+ print_any_single(arg)
+ }
+ print_string("\n")
+ }
+}
+
+
encode_rune :: proc "contextless" (c: rune) -> ([4]u8, int) {
r := c