mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Remove direct core:mem dependency in core:reflect
This commit is contained in:
+23
-24
@@ -1,7 +1,6 @@
|
|||||||
package reflect
|
package reflect
|
||||||
|
|
||||||
import "core:runtime"
|
import "core:runtime"
|
||||||
import "core:mem"
|
|
||||||
import "core:intrinsics"
|
import "core:intrinsics"
|
||||||
_ :: intrinsics
|
_ :: intrinsics
|
||||||
|
|
||||||
@@ -224,7 +223,7 @@ align_of_typeid :: proc(T: typeid) -> int {
|
|||||||
as_bytes :: proc(v: any) -> []byte {
|
as_bytes :: proc(v: any) -> []byte {
|
||||||
if v != nil {
|
if v != nil {
|
||||||
sz := size_of_typeid(v.id)
|
sz := size_of_typeid(v.id)
|
||||||
return mem.slice_ptr((^byte)(v.data), sz)
|
return ([^]byte)(v.data)[:sz]
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -266,19 +265,19 @@ length :: proc(val: any) -> int {
|
|||||||
return a.count
|
return a.count
|
||||||
|
|
||||||
case Type_Info_Slice:
|
case Type_Info_Slice:
|
||||||
return (^mem.Raw_Slice)(val.data).len
|
return (^runtime.Raw_Slice)(val.data).len
|
||||||
|
|
||||||
case Type_Info_Dynamic_Array:
|
case Type_Info_Dynamic_Array:
|
||||||
return (^mem.Raw_Dynamic_Array)(val.data).len
|
return (^runtime.Raw_Dynamic_Array)(val.data).len
|
||||||
|
|
||||||
case Type_Info_Map:
|
case Type_Info_Map:
|
||||||
return (^mem.Raw_Map)(val.data).entries.len
|
return (^runtime.Raw_Map)(val.data).entries.len
|
||||||
|
|
||||||
case Type_Info_String:
|
case Type_Info_String:
|
||||||
if a.is_cstring {
|
if a.is_cstring {
|
||||||
return len((^cstring)(val.data)^)
|
return len((^cstring)(val.data)^)
|
||||||
} else {
|
} else {
|
||||||
return (^mem.Raw_String)(val.data).len
|
return (^runtime.Raw_String)(val.data).len
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
@@ -301,10 +300,10 @@ capacity :: proc(val: any) -> int {
|
|||||||
return a.count
|
return a.count
|
||||||
|
|
||||||
case Type_Info_Dynamic_Array:
|
case Type_Info_Dynamic_Array:
|
||||||
return (^mem.Raw_Dynamic_Array)(val.data).cap
|
return (^runtime.Raw_Dynamic_Array)(val.data).cap
|
||||||
|
|
||||||
case Type_Info_Map:
|
case Type_Info_Map:
|
||||||
return (^mem.Raw_Map)(val.data).entries.cap
|
return (^runtime.Raw_Map)(val.data).entries.cap
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -344,14 +343,14 @@ index :: proc(val: any, i: int, loc := #caller_location) -> any {
|
|||||||
return any{data, a.elem.id}
|
return any{data, a.elem.id}
|
||||||
|
|
||||||
case Type_Info_Slice:
|
case Type_Info_Slice:
|
||||||
raw := (^mem.Raw_Slice)(val.data)
|
raw := (^runtime.Raw_Slice)(val.data)
|
||||||
runtime.bounds_check_error_loc(loc, i, raw.len)
|
runtime.bounds_check_error_loc(loc, i, raw.len)
|
||||||
offset := uintptr(a.elem.size * i)
|
offset := uintptr(a.elem.size * i)
|
||||||
data := rawptr(uintptr(raw.data) + offset)
|
data := rawptr(uintptr(raw.data) + offset)
|
||||||
return any{data, a.elem.id}
|
return any{data, a.elem.id}
|
||||||
|
|
||||||
case Type_Info_Dynamic_Array:
|
case Type_Info_Dynamic_Array:
|
||||||
raw := (^mem.Raw_Dynamic_Array)(val.data)
|
raw := (^runtime.Raw_Dynamic_Array)(val.data)
|
||||||
runtime.bounds_check_error_loc(loc, i, raw.len)
|
runtime.bounds_check_error_loc(loc, i, raw.len)
|
||||||
offset := uintptr(a.elem.size * i)
|
offset := uintptr(a.elem.size * i)
|
||||||
data := rawptr(uintptr(raw.data) + offset)
|
data := rawptr(uintptr(raw.data) + offset)
|
||||||
@@ -360,7 +359,7 @@ index :: proc(val: any, i: int, loc := #caller_location) -> any {
|
|||||||
case Type_Info_String:
|
case Type_Info_String:
|
||||||
if a.is_cstring { return nil }
|
if a.is_cstring { return nil }
|
||||||
|
|
||||||
raw := (^mem.Raw_String)(val.data)
|
raw := (^runtime.Raw_String)(val.data)
|
||||||
runtime.bounds_check_error_loc(loc, i, raw.len)
|
runtime.bounds_check_error_loc(loc, i, raw.len)
|
||||||
offset := uintptr(size_of(u8) * i)
|
offset := uintptr(size_of(u8) * i)
|
||||||
data := rawptr(uintptr(raw.data) + offset)
|
data := rawptr(uintptr(raw.data) + offset)
|
||||||
@@ -837,17 +836,17 @@ set_union_value :: proc(dst: any, value: any) -> bool {
|
|||||||
ti := runtime.type_info_base(type_info_of(dst.id))
|
ti := runtime.type_info_base(type_info_of(dst.id))
|
||||||
if info, ok := ti.variant.(runtime.Type_Info_Union); ok {
|
if info, ok := ti.variant.(runtime.Type_Info_Union); ok {
|
||||||
if value.id == nil {
|
if value.id == nil {
|
||||||
mem.zero(dst.data, ti.size)
|
intrinsics.mem_zero(dst.data, ti.size)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if ti.id == runtime.typeid_base(value.id) {
|
if ti.id == runtime.typeid_base(value.id) {
|
||||||
mem.copy(dst.data, value.data, ti.size)
|
intrinsics.mem_copy(dst.data, value.data, ti.size)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if type_info_union_is_pure_maybe(info) {
|
if type_info_union_is_pure_maybe(info) {
|
||||||
if variant := info.variants[0]; variant.id == value.id {
|
if variant := info.variants[0]; variant.id == value.id {
|
||||||
mem.copy(dst.data, value.data, variant.size)
|
intrinsics.mem_copy(dst.data, value.data, variant.size)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -859,7 +858,7 @@ set_union_value :: proc(dst: any, value: any) -> bool {
|
|||||||
if !info.no_nil {
|
if !info.no_nil {
|
||||||
tag += 1
|
tag += 1
|
||||||
}
|
}
|
||||||
mem.copy(dst.data, value.data, variant.size)
|
intrinsics.mem_copy(dst.data, value.data, variant.size)
|
||||||
set_union_variant_raw_tag(dst, tag)
|
set_union_variant_raw_tag(dst, tag)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -1352,11 +1351,11 @@ as_raw_data :: proc(a: any) -> (value: rawptr, valid: bool) {
|
|||||||
|
|
||||||
case Type_Info_Slice:
|
case Type_Info_Slice:
|
||||||
valid = true
|
valid = true
|
||||||
value = (^mem.Raw_Slice)(a.data).data
|
value = (^runtime.Raw_Slice)(a.data).data
|
||||||
|
|
||||||
case Type_Info_Dynamic_Array:
|
case Type_Info_Dynamic_Array:
|
||||||
valid = true
|
valid = true
|
||||||
value = (^mem.Raw_Dynamic_Array)(a.data).data
|
value = (^runtime.Raw_Dynamic_Array)(a.data).data
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
@@ -1398,7 +1397,7 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if .Simple_Compare in t.flags {
|
if .Simple_Compare in t.flags {
|
||||||
return mem.compare_byte_ptrs((^byte)(a.data), (^byte)(b.data), t.size) == 0
|
return runtime.memory_compare(a.data, b.data, t.size) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
t = runtime.type_info_core(t)
|
t = runtime.type_info_core(t)
|
||||||
@@ -1436,7 +1435,7 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
|
|||||||
Type_Info_Relative_Pointer,
|
Type_Info_Relative_Pointer,
|
||||||
Type_Info_Soa_Pointer,
|
Type_Info_Soa_Pointer,
|
||||||
Type_Info_Matrix:
|
Type_Info_Matrix:
|
||||||
return mem.compare_byte_ptrs((^byte)(a.data), (^byte)(b.data), t.size) == 0
|
return runtime.memory_compare(a.data, b.data, t.size) == 0
|
||||||
|
|
||||||
case Type_Info_String:
|
case Type_Info_String:
|
||||||
if v.is_cstring {
|
if v.is_cstring {
|
||||||
@@ -1490,8 +1489,8 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
|
|||||||
if !including_indirect_array_recursion {
|
if !including_indirect_array_recursion {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
array_a := (^mem.Raw_Slice)(a.data)
|
array_a := (^runtime.Raw_Slice)(a.data)
|
||||||
array_b := (^mem.Raw_Slice)(b.data)
|
array_b := (^runtime.Raw_Slice)(b.data)
|
||||||
if array_a.len != array_b.len {
|
if array_a.len != array_b.len {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -1510,8 +1509,8 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
|
|||||||
if !including_indirect_array_recursion {
|
if !including_indirect_array_recursion {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
array_a := (^mem.Raw_Dynamic_Array)(a.data)
|
array_a := (^runtime.Raw_Dynamic_Array)(a.data)
|
||||||
array_b := (^mem.Raw_Dynamic_Array)(b.data)
|
array_b := (^runtime.Raw_Dynamic_Array)(b.data)
|
||||||
if array_a.len != array_b.len {
|
if array_a.len != array_b.len {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -1519,7 +1518,7 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if .Simple_Compare in v.elem.flags {
|
if .Simple_Compare in v.elem.flags {
|
||||||
return mem.compare_byte_ptrs((^byte)(array_a.data), (^byte)(array_b.data), array_a.len * v.elem.size) == 0
|
return runtime.memory_compare((^byte)(array_a.data), (^byte)(array_b.data), array_a.len * v.elem.size) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
for i in 0..<array_a.len {
|
for i in 0..<array_a.len {
|
||||||
|
|||||||
Reference in New Issue
Block a user