aboutsummaryrefslogtreecommitdiff
path: root/core/encoding
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-09-29 15:08:45 +0100
committergingerBill <bill@gingerbill.org>2021-09-29 15:08:45 +0100
commit19ac822e4a8ced676528d9867e211f96e0d1b454 (patch)
tree96f33409e68535a7d734287a945601ef4af94944 /core/encoding
parent9d797ea225b272a64f52eeb1fd7462827eba9654 (diff)
Improve reflect.Type_Info_Complex support
Diffstat (limited to 'core/encoding')
-rw-r--r--core/encoding/json/unmarshal.odin16
1 files changed, 15 insertions, 1 deletions
diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin
index 5094f2f67..23518d8d0 100644
--- a/core/encoding/json/unmarshal.odin
+++ b/core/encoding/json/unmarshal.odin
@@ -467,7 +467,6 @@ unmarsal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unma
}
return nil
-
case:
return UNSUPPORTED_TYPE
}
@@ -560,6 +559,21 @@ unmarsal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) {
}
return assign_array(p, v.data, t.elem, length)
+
+ case reflect.Type_Info_Complex:
+ // NOTE(bill): Allow lengths which are less than the dst array
+ if int(length) > 2 {
+ return UNSUPPORTED_TYPE
+ }
+
+ switch ti.id {
+ case complex32: return assign_array(p, v.data, type_info_of(f16), 2)
+ case complex64: return assign_array(p, v.data, type_info_of(f32), 2)
+ case complex128: return assign_array(p, v.data, type_info_of(f64), 2)
+ }
+
+ return UNSUPPORTED_TYPE
+
}
return UNSUPPORTED_TYPE