From 19ac822e4a8ced676528d9867e211f96e0d1b454 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 29 Sep 2021 15:08:45 +0100 Subject: [PATCH] Improve reflect.Type_Info_Complex support --- core/encoding/json/unmarshal.odin | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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