diff options
| author | gingerBill <bill@gingerbill.org> | 2021-09-29 15:08:45 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-09-29 15:08:45 +0100 |
| commit | 19ac822e4a8ced676528d9867e211f96e0d1b454 (patch) | |
| tree | 96f33409e68535a7d734287a945601ef4af94944 /core/encoding | |
| parent | 9d797ea225b272a64f52eeb1fd7462827eba9654 (diff) | |
Improve reflect.Type_Info_Complex support
Diffstat (limited to 'core/encoding')
| -rw-r--r-- | core/encoding/json/unmarshal.odin | 16 |
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 |