Browse Source

Correct #soa RTTI usage

gingerBill 1 year ago
parent
commit
7cf62f00c3
3 changed files with 11 additions and 11 deletions
  1. 8 8
      base/runtime/core_builtin_soa.odin
  2. 1 1
      core/fmt/fmt.odin
  3. 2 2
      core/strings/strings.odin

+ 8 - 8
base/runtime/core_builtin_soa.odin

@@ -102,7 +102,7 @@ make_soa_aligned :: proc($T: typeid/#soa[]$E, length: int, alignment: int, alloc
 
 
 	total_size := 0
 	total_size := 0
 	for i in 0..<field_count {
 	for i in 0..<field_count {
-		type := si.types[i].variant.(Type_Info_Pointer).elem
+		type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 		total_size += type.size * length
 		total_size += type.size * length
 		total_size = align_forward_int(total_size, max_align)
 		total_size = align_forward_int(total_size, max_align)
 	}
 	}
@@ -126,7 +126,7 @@ make_soa_aligned :: proc($T: typeid/#soa[]$E, length: int, alignment: int, alloc
 	data := uintptr(&array)
 	data := uintptr(&array)
 	offset := 0
 	offset := 0
 	for i in 0..<field_count {
 	for i in 0..<field_count {
-		type := si.types[i].variant.(Type_Info_Pointer).elem
+		type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 		offset = align_forward_int(offset, max_align)
 		offset = align_forward_int(offset, max_align)
 
 
@@ -226,7 +226,7 @@ reserve_soa :: proc(array: ^$T/#soa[dynamic]$E, capacity: int, loc := #caller_lo
 
 
 	max_align :: align_of(E)
 	max_align :: align_of(E)
 	for i in 0..<field_count {
 	for i in 0..<field_count {
-		type := si.types[i].variant.(Type_Info_Pointer).elem
+		type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 		old_size += type.size * old_cap
 		old_size += type.size * old_cap
 		new_size += type.size * capacity
 		new_size += type.size * capacity
@@ -249,7 +249,7 @@ reserve_soa :: proc(array: ^$T/#soa[dynamic]$E, capacity: int, loc := #caller_lo
 	old_offset := 0
 	old_offset := 0
 	new_offset := 0
 	new_offset := 0
 	for i in 0..<field_count {
 	for i in 0..<field_count {
-		type := si.types[i].variant.(Type_Info_Pointer).elem
+		type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 		old_offset = align_forward_int(old_offset, max_align)
 		old_offset = align_forward_int(old_offset, max_align)
 		new_offset = align_forward_int(new_offset, max_align)
 		new_offset = align_forward_int(new_offset, max_align)
@@ -307,7 +307,7 @@ append_soa_elem :: proc(array: ^$T/#soa[dynamic]$E, arg: E, loc := #caller_locat
 
 
 		max_align :: align_of(E)
 		max_align :: align_of(E)
 		for i in 0..<field_count {
 		for i in 0..<field_count {
-			type := si.types[i].variant.(Type_Info_Pointer).elem
+			type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 			soa_offset  = align_forward_int(soa_offset, max_align)
 			soa_offset  = align_forward_int(soa_offset, max_align)
 			item_offset = align_forward_int(item_offset, type.align)
 			item_offset = align_forward_int(item_offset, type.align)
@@ -358,7 +358,7 @@ append_soa_elems :: proc(array: ^$T/#soa[dynamic]$E, args: ..E, loc := #caller_l
 
 
 		max_align :: align_of(E)
 		max_align :: align_of(E)
 		for i in 0..<field_count {
 		for i in 0..<field_count {
-			type := si.types[i].variant.(Type_Info_Pointer).elem
+			type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 			soa_offset  = align_forward_int(soa_offset, max_align)
 			soa_offset  = align_forward_int(soa_offset, max_align)
 			item_offset = align_forward_int(item_offset, type.align)
 			item_offset = align_forward_int(item_offset, type.align)
@@ -476,7 +476,7 @@ unordered_remove_soa :: proc(array: ^$T/#soa[dynamic]$E, index: int, loc := #cal
 
 
 		data := uintptr(array)
 		data := uintptr(array)
 		for i in 0..<field_count {
 		for i in 0..<field_count {
-			type := si.types[i].variant.(Type_Info_Pointer).elem
+			type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 			offset := rawptr((^uintptr)(data)^ + uintptr(index*type.size))
 			offset := rawptr((^uintptr)(data)^ + uintptr(index*type.size))
 			final := rawptr((^uintptr)(data)^ + uintptr((len(array)-1)*type.size))
 			final := rawptr((^uintptr)(data)^ + uintptr((len(array)-1)*type.size))
@@ -509,7 +509,7 @@ ordered_remove_soa :: proc(array: ^$T/#soa[dynamic]$E, index: int, loc := #calle
 
 
 		data := uintptr(array)
 		data := uintptr(array)
 		for i in 0..<field_count {
 		for i in 0..<field_count {
-			type := si.types[i].variant.(Type_Info_Pointer).elem
+			type := si.types[i].variant.(Type_Info_Multi_Pointer).elem
 
 
 			offset := (^uintptr)(data)^ + uintptr(index*type.size)
 			offset := (^uintptr)(data)^ + uintptr(index*type.size)
 			length := type.size*(len(array) - index - 1)
 			length := type.size*(len(array) - index - 1)

+ 1 - 1
core/fmt/fmt.odin

@@ -1960,7 +1960,7 @@ fmt_struct :: proc(fi: ^Info, v: any, the_verb: rune, info: runtime.Type_Info_St
 						fmt_arg(fi, any{data, t.id}, verb)
 						fmt_arg(fi, any{data, t.id}, verb)
 					}
 					}
 				} else {
 				} else {
-					t := info.types[i].variant.(runtime.Type_Info_Pointer).elem
+					t := info.types[i].variant.(runtime.Type_Info_Multi_Pointer).elem
 					t_size := uintptr(t.size)
 					t_size := uintptr(t.size)
 					if reflect.is_any(t) {
 					if reflect.is_any(t) {
 						io.write_string(fi.writer, "any{}", &fi.n)
 						io.write_string(fi.writer, "any{}", &fi.n)

+ 2 - 2
core/strings/strings.odin

@@ -91,8 +91,8 @@ Inputs:
 Returns:
 Returns:
 - res: A string created from the null-terminated byte pointer and length
 - res: A string created from the null-terminated byte pointer and length
 */
 */
-string_from_null_terminated_ptr :: proc(ptr: ^byte, len: int) -> (res: string) {
-	s := transmute(string)mem.Raw_String{ptr, len}
+string_from_null_terminated_ptr :: proc(ptr: [^]byte, len: int) -> (res: string) {
+	s := string(ptr[:len])
 	s = truncate_to_byte(s, 0)
 	s = truncate_to_byte(s, 0)
 	return s
 	return s
 }
 }