builtin: fix multiple array init (#10929)
parent
3d907caa3f
commit
29cda252f1
|
@ -55,7 +55,7 @@ fn __new_array_with_array_default(mylen int, cap int, elm_size int, val array) a
|
||||||
cap: cap_
|
cap: cap_
|
||||||
}
|
}
|
||||||
for i in 0 .. arr.len {
|
for i in 0 .. arr.len {
|
||||||
val_clone := val.clone()
|
val_clone := unsafe { val.clone_to_depth(1) }
|
||||||
unsafe { arr.set_unsafe(i, &val_clone) }
|
unsafe { arr.set_unsafe(i, &val_clone) }
|
||||||
}
|
}
|
||||||
return arr
|
return arr
|
||||||
|
@ -382,7 +382,7 @@ pub fn (a &array) clone_to_depth(depth int) array {
|
||||||
cap: a.cap
|
cap: a.cap
|
||||||
}
|
}
|
||||||
// Recursively clone-generated elements if array element is array type
|
// Recursively clone-generated elements if array element is array type
|
||||||
if depth > 0 {
|
if depth > 0 && a.element_size == sizeof(array) && a.len >= 0 && a.cap >= a.len {
|
||||||
for i in 0 .. a.len {
|
for i in 0 .. a.len {
|
||||||
ar := array{}
|
ar := array{}
|
||||||
unsafe { C.memcpy(&ar, a.get_unsafe(i), int(sizeof(array))) }
|
unsafe { C.memcpy(&ar, a.get_unsafe(i), int(sizeof(array))) }
|
||||||
|
|
|
@ -250,3 +250,10 @@ fn test_array_init_inferred_from_optional() {
|
||||||
fn read() ?[]string {
|
fn read() ?[]string {
|
||||||
return error('failed')
|
return error('failed')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_multi_array_update_data() {
|
||||||
|
mut a := [][][]int{len: 2, init: [][]int{len: 3, init: []int{len: 2}}}
|
||||||
|
a[0][1][1] = 2
|
||||||
|
println(a)
|
||||||
|
assert '$a' == '[[[0, 0], [0, 2], [0, 0]], [[0, 0], [0, 0], [0, 0]]]'
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue