mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Begin work adding bit_field
This commit is contained in:
@@ -35,6 +35,7 @@ Type_Info_Relative_Pointer :: runtime.Type_Info_Relative_Pointer
|
||||
Type_Info_Relative_Multi_Pointer :: runtime.Type_Info_Relative_Multi_Pointer
|
||||
Type_Info_Matrix :: runtime.Type_Info_Matrix
|
||||
Type_Info_Soa_Pointer :: runtime.Type_Info_Soa_Pointer
|
||||
Type_Info_Bit_Field :: runtime.Type_Info_Bit_Field
|
||||
|
||||
Type_Info_Enum_Value :: runtime.Type_Info_Enum_Value
|
||||
|
||||
@@ -70,6 +71,7 @@ Type_Kind :: enum {
|
||||
Relative_Multi_Pointer,
|
||||
Matrix,
|
||||
Soa_Pointer,
|
||||
Bit_Field,
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +108,7 @@ type_kind :: proc(T: typeid) -> Type_Kind {
|
||||
case Type_Info_Relative_Multi_Pointer: return .Relative_Multi_Pointer
|
||||
case Type_Info_Matrix: return .Matrix
|
||||
case Type_Info_Soa_Pointer: return .Soa_Pointer
|
||||
case Type_Info_Bit_Field: return .Bit_Field
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1604,6 +1607,13 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
case Type_Info_Bit_Field:
|
||||
x, y := a, b
|
||||
x.id = v.backing_type.id
|
||||
y.id = v.backing_type.id
|
||||
return equal(x, y, including_indirect_array_recursion, recursion_level+0)
|
||||
|
||||
}
|
||||
|
||||
runtime.print_typeid(a.id)
|
||||
|
||||
@@ -174,6 +174,23 @@ are_types_identical :: proc(a, b: ^Type_Info) -> bool {
|
||||
if x.row_count != y.row_count { return false }
|
||||
if x.column_count != y.column_count { return false }
|
||||
return are_types_identical(x.elem, y.elem)
|
||||
|
||||
case Type_Info_Bit_Field:
|
||||
y := b.variant.(Type_Info_Bit_Field) or_return
|
||||
if !are_types_identical(x.backing_type, y.backing_type) { return false }
|
||||
if len(x.names) != len(y.names) { return false }
|
||||
for _, i in x.names {
|
||||
if x.names[i] != y.names[i] {
|
||||
return false
|
||||
}
|
||||
if !are_types_identical(x.types[i], y.types[i]) {
|
||||
return false
|
||||
}
|
||||
if x.bit_sizes[i] != y.bit_sizes[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
@@ -639,6 +656,20 @@ write_type_writer :: proc(w: io.Writer, ti: ^Type_Info, n_written: ^int = nil) -
|
||||
}
|
||||
io.write_byte(w, ']', &n) or_return
|
||||
|
||||
case Type_Info_Bit_Field:
|
||||
io.write_string(w, "bit_field ", &n) or_return
|
||||
write_type(w, info.backing_type, &n) or_return
|
||||
io.write_string(w, " {", &n) or_return
|
||||
for name, i in info.names {
|
||||
if i > 0 { io.write_string(w, ", ", &n) or_return }
|
||||
io.write_string(w, name, &n) or_return
|
||||
io.write_string(w, ": ", &n) or_return
|
||||
write_type(w, info.types[i], &n) or_return
|
||||
io.write_string(w, " | ", &n) or_return
|
||||
io.write_u64(w, u64(info.bit_sizes[i]), 10, &n) or_return
|
||||
}
|
||||
io.write_string(w, "}", &n) or_return
|
||||
|
||||
case Type_Info_Simd_Vector:
|
||||
io.write_string(w, "#simd[", &n) or_return
|
||||
io.write_i64(w, i64(info.count), 10, &n) or_return
|
||||
|
||||
Reference in New Issue
Block a user