Browse Source

Improve reflect.Type_Info_Complex support

gingerBill 3 years ago
parent
commit
19ac822e4a
1 changed files with 15 additions and 1 deletions
  1. 15 1
      core/encoding/json/unmarshal.odin

+ 15 - 1
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