1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

array: fix multiple array clone

This commit is contained in:
yuyi
2020-06-19 19:32:55 +08:00
committed by GitHub
parent 8a5ca4cbdc
commit dc8b82e9a4
2 changed files with 21 additions and 1 deletions

View File

@ -282,7 +282,17 @@ pub fn (a &array) clone() array {
len: a.len
cap: a.cap
}
C.memcpy(byteptr(arr.data), a.data, a.cap * a.element_size)
// Recursively clone-generated elements if array element is array type
if a.element_size == sizeof(array) {
for i in 0..a.len {
ar := array{}
C.memcpy(&ar, byteptr(a.data) + i * a.element_size, sizeof(array))
ar_clone := ar.clone()
C.memcpy(byteptr(arr.data) + i * a.element_size, &ar_clone, a.element_size)
}
} else {
C.memcpy(byteptr(arr.data), a.data, a.cap * a.element_size)
}
return arr
}