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