diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-01-14 16:20:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-14 16:20:48 +0100 |
commit | 675ca997fba448c2eb096f4bb12ba97125d79bcd (patch) | |
tree | 49fe3fbdaee8da905ab6bd7904835b09d3bf8303 | |
parent | 8b00586488c9b5ef8935d2fbbca4e3dd1a1b1938 (diff) | |
download | Nim-675ca997fba448c2eb096f4bb12ba97125d79bcd.tar.gz |
fixes #9674 [backport] (#13143)
-rw-r--r-- | compiler/jsgen.nim | 13 | ||||
-rw-r--r-- | tests/js/tcopying.nim | 10 |
2 files changed, 21 insertions, 2 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 3f4b29238..d63856b87 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -1890,6 +1890,15 @@ proc genReset(p: PProc, n: PNode) = lineF(p, "$1 = genericReset($3, $2);$n", [a, genTypeInfo(p, n[1].typ), tmp]) +proc genMove(p: PProc; n: PNode; r: var TCompRes) = + var a: TCompRes + r.kind = resVal + r.res = p.getTemp() + gen(p, n[1], a) + lineF(p, "$1 = $2;$n", [r.rdLoc, a.rdLoc]) + genReset(p, n) + #lineF(p, "$1 = $2;$n", [dest.rdLoc, src.rdLoc]) + proc genMagic(p: PProc, n: PNode, r: var TCompRes) = var a: TCompRes @@ -2014,7 +2023,7 @@ proc genMagic(p: PProc, n: PNode, r: var TCompRes) = of mNewSeqOfCap: unaryExpr(p, n, r, "", "[]") of mOf: genOf(p, n, r) of mDefault: genDefault(p, n, r) - of mReset: genReset(p, n) + of mReset, mWasMoved: genReset(p, n) of mEcho: genEcho(p, n, r) of mNLen..mNError, mSlurp, mStaticExec: localError(p.config, n.info, errXMustBeCompileTime % n[0].sym.name.s) @@ -2037,6 +2046,8 @@ proc genMagic(p: PProc, n: PNode, r: var TCompRes) = gen(p, n[3], z) r.res = "($1.slice($2, $3+1))" % [x.rdLoc, y.rdLoc, z.rdLoc] r.kind = resExpr + of mMove: + genMove(p, n, r) else: genCall(p, n, r) #else internalError(p.config, e.info, 'genMagic: ' + magicToStr[op]); diff --git a/tests/js/tcopying.nim b/tests/js/tcopying.nim index 1f668be52..306d25090 100644 --- a/tests/js/tcopying.nim +++ b/tests/js/tcopying.nim @@ -6,6 +6,7 @@ discard """ true false 100 300 100 1 +1 ''' """ @@ -69,4 +70,11 @@ block: var nums = [1, 2] foo(nums) - echo nums[0] \ No newline at end of file + echo nums[0] + +proc bug9674 = + var b = @[1,2,3] + var a = move(b) + echo a[0] + +bug9674() |