aboutsummaryrefslogtreecommitdiff
path: root/core/runtime
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-04-19 15:34:40 +0100
committergingerBill <bill@gingerbill.org>2023-04-19 15:34:40 +0100
commit2d699fd13bb4bb15e9a36b0b1fe44d274b538f3e (patch)
tree9c394da198d2ca200bc4c01d0dc8cf214eb9cfbf /core/runtime
parent13c321b8fba9ab4bce2a2e715f04c22a0fb65927 (diff)
Fix again append on zero sized types
Diffstat (limited to 'core/runtime')
-rw-r--r--core/runtime/core_builtin.odin10
1 files changed, 5 insertions, 5 deletions
diff --git a/core/runtime/core_builtin.odin b/core/runtime/core_builtin.odin
index 4c96cd34a..4b152e7cc 100644
--- a/core/runtime/core_builtin.odin
+++ b/core/runtime/core_builtin.odin
@@ -317,9 +317,8 @@ append_elem :: proc(array: ^$T/[dynamic]$E, arg: E, loc := #caller_location) ->
if array == nil {
return 0
}
- array := (^Raw_Dynamic_Array)(array)
-
when size_of(E) == 0 {
+ array := (^Raw_Dynamic_Array)(array)
array.len += 1
return 1
} else {
@@ -346,7 +345,6 @@ append_elems :: proc(array: ^$T/[dynamic]$E, args: ..E, loc := #caller_location)
if array == nil {
return 0
}
- array := (^Raw_Dynamic_Array)(array)
arg_len := len(args)
if arg_len <= 0 {
@@ -354,6 +352,7 @@ append_elems :: proc(array: ^$T/[dynamic]$E, args: ..E, loc := #caller_location)
}
when size_of(E) == 0 {
+ array := (^Raw_Dynamic_Array)(array)
array.len += arg_len
return arg_len
} else {
@@ -363,12 +362,13 @@ append_elems :: proc(array: ^$T/[dynamic]$E, args: ..E, loc := #caller_location)
}
arg_len = min(cap(array)-len(array), arg_len)
if arg_len > 0 {
+ a := (^Raw_Dynamic_Array)(array)
when size_of(E) != 0 {
- data := ([^]E)(array.data)
+ data := ([^]E)(a.data)
assert(condition=data != nil, loc=loc)
intrinsics.mem_copy(&data[a.len], raw_data(args), size_of(E) * arg_len)
}
- array.len += arg_len
+ a.len += arg_len
}
return arg_len
}