aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-06-11 01:38:14 +0100
committergingerBill <bill@gingerbill.org>2022-06-11 01:38:14 +0100
commit6ed5cbee12d45b6085a3b7e6f7c4bbd8fbce8f27 (patch)
treeeb1624b1fd85239935f82de72da0ebb4fd43418f
parent5b200ccdf8f3e1f15279a3394f2439dafbfa1c03 (diff)
Refactor to `fmt_array`
-rw-r--r--core/fmt/fmt.odin50
1 files changed, 25 insertions, 25 deletions
diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin
index 702f160e6..4772ffb71 100644
--- a/core/fmt/fmt.odin
+++ b/core/fmt/fmt.odin
@@ -952,9 +952,9 @@ fmt_string :: proc(fi: ^Info, s: string, verb: rune) {
if ol, ok := fi.optional_len.?; ok {
s = s[:min(len(s), ol)]
}
- if !fi.in_bad && fi.record_level >= 0 && verb == 'v' {
- verb = 'q'
- }
+ // if !fi.in_bad && fi.record_level >= 0 && verb == 'v' {
+ // verb = 'q'
+ // }
switch verb {
case 's', 'v':
@@ -1456,6 +1456,25 @@ fmt_struct :: proc(fi: ^Info, v: any, the_verb: rune, info: runtime.Type_Info_St
}
}
+fmt_array :: proc(fi: ^Info, data: rawptr, n: int, elem_size: int, elem: ^reflect.Type_Info, verb: rune) {
+ if (verb == 's' || verb == 'q') && reflect.is_byte(elem) {
+ if data == nil && n > 0 {
+ io.write_string(fi.writer, "nil")
+ return
+ }
+ s := strings.string_from_ptr((^byte)(data), n)
+ fmt_string(fi, s, verb)
+ } else if verb == 'p' {
+ fmt_pointer(fi, data, 'p')
+ } else {
+ if data == nil && n > 0 {
+ io.write_string(fi.writer, "nil")
+ return
+ }
+ fmt_write_array(fi, data, n, elem_size, elem.id, verb)
+ }
+}
+
fmt_value :: proc(fi: ^Info, v: any, verb: rune) {
write_padded_number :: proc(fi: ^Info, i: i64, width: int) {
n := width-1
@@ -1779,12 +1798,7 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) {
if ol, ok := fi.optional_len.?; ok {
n = min(n, ol)
}
- if (verb == 's' || verb == 'q') && reflect.is_byte(info.elem) {
- s := strings.string_from_ptr((^byte)(v.data), n)
- fmt_string(fi, s, verb)
- } else {
- fmt_write_array(fi, v.data, n, info.elem_size, info.elem.id, verb)
- }
+ fmt_array(fi, v.data, n, info.elem_size, info.elem, verb)
case runtime.Type_Info_Slice:
slice := cast(^mem.Raw_Slice)v.data
@@ -1792,14 +1806,7 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) {
if ol, ok := fi.optional_len.?; ok {
n = min(n, ol)
}
- if (verb == 's' || verb == 'q') && reflect.is_byte(info.elem) {
- s := strings.string_from_ptr((^byte)(slice.data), n)
- fmt_string(fi, s, verb)
- } else if verb == 'p' {
- fmt_pointer(fi, slice.data, 'p')
- } else {
- fmt_write_array(fi, slice.data, n, info.elem_size, info.elem.id, verb)
- }
+ fmt_array(fi, v.data, n, info.elem_size, info.elem, verb)
case runtime.Type_Info_Dynamic_Array:
array := cast(^mem.Raw_Dynamic_Array)v.data
@@ -1807,14 +1814,7 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) {
if ol, ok := fi.optional_len.?; ok {
n = min(n, ol)
}
- if (verb == 's' || verb == 'q') && reflect.is_byte(info.elem) {
- s := strings.string_from_ptr((^byte)(array.data), n)
- fmt_string(fi, s, verb)
- } else if verb == 'p' {
- fmt_pointer(fi, array.data, 'p')
- } else {
- fmt_write_array(fi, array.data, n, info.elem_size, info.elem.id, verb)
- }
+ fmt_array(fi, v.data, n, info.elem_size, info.elem, verb)
case runtime.Type_Info_Simd_Vector:
io.write_byte(fi.writer, '<', &fi.n)