Remove direct core:mem dependency in core:reflect

This commit is contained in:
gingerBill
2022-08-26 16:46:19 +01:00
parent 027ea587fc
commit 12c8db927b
+23 -24
View File
@@ -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 {