aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2025-06-10 09:58:16 +0100
committergingerBill <bill@gingerbill.org>2025-06-10 09:58:16 +0100
commit4a044a0fce8d617a44bb734332c08a720b803c0e (patch)
treedbfbc28017d82d6ddaa0308a64966debe06dc763
parent3b9ce3f1423dce2b8797d8e64d22028fb5f3139d (diff)
Update subtype based `Type_Info`bill/subtype-type-info
-rw-r--r--core/encoding/cbor/marshal.odin4
-rw-r--r--core/encoding/cbor/unmarshal.odin4
-rw-r--r--core/encoding/json/unmarshal.odin2
-rw-r--r--core/reflect/reflect.odin10
-rw-r--r--src/llvm_backend_type.cpp28
5 files changed, 16 insertions, 32 deletions
diff --git a/core/encoding/cbor/marshal.odin b/core/encoding/cbor/marshal.odin
index 446df1fbd..abf1fd9e1 100644
--- a/core/encoding/cbor/marshal.odin
+++ b/core/encoding/cbor/marshal.odin
@@ -612,7 +612,7 @@ _marshal_into_encoder :: proc(e: Encoder, v: any, ti: ^runtime.Type_Info) -> (er
case:
panic("unknown bit_size size")
}
- case runtime.Type_Info_Matrix:
+ case ^runtime.Type_Info_Matrix:
count := info.column_count * info.elem_stride
err_conv(_encode_u64(e, u64(count), .Array)) or_return
@@ -631,7 +631,7 @@ _marshal_into_encoder :: proc(e: Encoder, v: any, ti: ^runtime.Type_Info) -> (er
}
return
- case runtime.Type_Info_Simd_Vector:
+ case ^runtime.Type_Info_Simd_Vector:
err_conv(_encode_u64(e, u64(info.count), .Array)) or_return
if impl, ok := _tag_implementations_type[info.elem.id]; ok {
diff --git a/core/encoding/cbor/unmarshal.odin b/core/encoding/cbor/unmarshal.odin
index 99ebf0950..3736707a9 100644
--- a/core/encoding/cbor/unmarshal.odin
+++ b/core/encoding/cbor/unmarshal.odin
@@ -591,7 +591,7 @@ _unmarshal_array :: proc(d: Decoder, v: any, ti: ^reflect.Type_Info, hdr: Header
if out_of_space { return _unsupported(v, hdr) }
return
- case reflect.Type_Info_Matrix:
+ case ^reflect.Type_Info_Matrix:
count := t.column_count * t.elem_stride
length, _ := err_conv(_decode_len_container(d, add)) or_return
if length > count {
@@ -604,7 +604,7 @@ _unmarshal_array :: proc(d: Decoder, v: any, ti: ^reflect.Type_Info, hdr: Header
if out_of_space { return _unsupported(v, hdr) }
return
- case reflect.Type_Info_Simd_Vector:
+ case ^reflect.Type_Info_Simd_Vector:
length, _ := err_conv(_decode_len_container(d, add)) or_return
if length > t.count {
return _unsupported(v, hdr)
diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin
index 2b4c1d2c1..6968e548f 100644
--- a/core/encoding/json/unmarshal.odin
+++ b/core/encoding/json/unmarshal.odin
@@ -123,7 +123,7 @@ assign_int :: proc(val: any, i: $T) -> bool {
}
t := runtime.type_info_base(ti)
#partial switch info in t.variant {
- case runtime.Type_Info_Integer:
+ case ^runtime.Type_Info_Integer:
switch info.endianness {
case .Platform: return false
case .Little: return ODIN_ENDIAN != .Little
diff --git a/core/reflect/reflect.odin b/core/reflect/reflect.odin
index c85effabd..3e669ca33 100644
--- a/core/reflect/reflect.odin
+++ b/core/reflect/reflect.odin
@@ -261,7 +261,7 @@ length :: proc(val: any) -> int {
return (^runtime.Raw_String)(val.data).len
}
- case Type_Info_Simd_Vector:
+ case ^Type_Info_Simd_Vector:
return a.count
}
@@ -291,7 +291,7 @@ capacity :: proc(val: any) -> int {
case ^Type_Info_Map:
return runtime.map_cap((^runtime.Raw_Map)(val.data)^)
- case Type_Info_Simd_Vector:
+ case ^Type_Info_Simd_Vector:
return a.count
}
@@ -1656,11 +1656,11 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
return equal(va, vb, including_indirect_array_recursion, recursion_level+1)
case ^Type_Info_Map:
return false
- case Type_Info_Float:
+ case ^Type_Info_Float:
x, _ := as_f64(a)
y, _ := as_f64(b)
return x == y
- case Type_Info_Complex:
+ case ^Type_Info_Complex:
switch x in a {
case complex32:
#no_type_assert y := b.(complex32)
@@ -1673,7 +1673,7 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
return x == y
}
return false
- case Type_Info_Quaternion:
+ case ^Type_Info_Quaternion:
switch x in a {
case quaternion64:
#no_type_assert y := b.(quaternion64)
diff --git a/src/llvm_backend_type.cpp b/src/llvm_backend_type.cpp
index aa1d8fea1..eba926abc 100644
--- a/src/llvm_backend_type.cpp
+++ b/src/llvm_backend_type.cpp
@@ -594,29 +594,13 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ
lbValue v_count = lb_const_int(m, t_int, fields.count);
- vals[1] = llvm_const_slice(m, lbValue{name_array.value, alloc_type_pointer(t_string)}, v_count);
- vals[2] = llvm_const_slice(m, lbValue{value_array.value, alloc_type_pointer(t_type_info_enum_value)}, v_count);
- else {
- vals[1] = LLVMConstNull(lb_type(m, base_type(t_type_info_enum)->Struct.fields[1]->type));
- vals[2] = LLVMConstNull(lb_type(m, base_type(t_type_info_enum)->Struct.fields[2]->type));
+ vals[2] = llvm_const_slice(m, lbValue{name_array.value, alloc_type_pointer(t_string)}, v_count);
+ vals[3] = llvm_const_slice(m, lbValue{value_array.value, alloc_type_pointer(t_type_info_enum_value)}, v_count);
+ } else {
+ vals[2] = LLVMConstNull(LLVMStructGetTypeAtIndex(stype, 2));
+ vals[3] = LLVMConstNull(LLVMStructGetTypeAtIndex(stype, 3));
}
-
- LLVMValueRef name_init = llvm_const_array(lb_type(m, t_string), name_values, cast(unsigned)fields.count);
- LLVMValueRef value_init = llvm_const_array(lb_type(m, t_type_info_enum_value), value_values, cast(unsigned)fields.count);
- LLVMSetInitializer(name_array.value, name_init);
- LLVMSetInitializer(value_array.value, value_init);
- LLVMSetGlobalConstant(name_array.value, true);
- LLVMSetGlobalConstant(value_array.value, true);
-
- lbValue v_count = lb_const_int(m, t_int, fields.count);
-
- vals[2] = llvm_const_slice(m, lbValue{name_array.value, alloc_type_pointer(t_string)}, v_count);
- vals[3] = llvm_const_slice(m, lbValue{value_array.value, alloc_type_pointer(t_type_info_enum_value)}, v_count);
- } else {
- vals[2] = LLVMConstNull(LLVMStructGetTypeAtIndex(stype, 2));
- vals[3] = LLVMConstNull(LLVMStructGetTypeAtIndex(stype, 3));
- }
- break;
+ break;
case Type_Union: {
tag_type = t_type_info_union;