suggestion to respect typedarray type (#19257)
* suggestion to respect typedarray * Update jssys.nim Co-authored-by: Sven Keller <s.keller@cortona.de>
This commit is contained in:
parent
c17baaefbc
commit
5d2bab7558
1 changed files with 27 additions and 1 deletions
|
|
@ -587,7 +587,33 @@ proc nimCopy(dest, src: JSRef, ti: PNimType): JSRef =
|
||||||
else:
|
else:
|
||||||
asm "`result` = (`dest` === null || `dest` === undefined) ? {} : `dest`;"
|
asm "`result` = (`dest` === null || `dest` === undefined) ? {} : `dest`;"
|
||||||
nimCopyAux(result, src, ti.node)
|
nimCopyAux(result, src, ti.node)
|
||||||
of tySequence, tyArrayConstr, tyOpenArray, tyArray:
|
of tyArrayConstr, tyArray:
|
||||||
|
# In order to prevent a type change (TypedArray -> Array) and to have better copying performance,
|
||||||
|
# arrays constructors are considered separately
|
||||||
|
asm """
|
||||||
|
if(ArrayBuffer.isView(`src`)) {
|
||||||
|
if(`dest` === null || `dest` === undefined || `dest`.length != `src`.length) {
|
||||||
|
`dest` = new `src`.constructor(`src`);
|
||||||
|
} else {
|
||||||
|
`dest`.set(`src`, 0);
|
||||||
|
}
|
||||||
|
`result` = `dest`;
|
||||||
|
} else {
|
||||||
|
if (`src` === null) {
|
||||||
|
`result` = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (`dest` === null || `dest` === undefined || `dest`.length != `src`.length) {
|
||||||
|
`dest` = new Array(`src`.length);
|
||||||
|
}
|
||||||
|
`result` = `dest`;
|
||||||
|
for (var i = 0; i < `src`.length; ++i) {
|
||||||
|
`result`[i] = nimCopy(`result`[i], `src`[i], `ti`.base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
of tySequence, tyOpenArray:
|
||||||
asm """
|
asm """
|
||||||
if (`src` === null) {
|
if (`src` === null) {
|
||||||
`result` = null;
|
`result` = null;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue