summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2020-01-14 16:20:48 +0100
committerGitHub <noreply@github.com>2020-01-14 16:20:48 +0100
commit675ca997fba448c2eb096f4bb12ba97125d79bcd (patch)
tree49fe3fbdaee8da905ab6bd7904835b09d3bf8303
parent8b00586488c9b5ef8935d2fbbca4e3dd1a1b1938 (diff)
downloadNim-675ca997fba448c2eb096f4bb12ba97125d79bcd.tar.gz
fixes #9674 [backport] (#13143)
-rw-r--r--compiler/jsgen.nim13
-rw-r--r--tests/js/tcopying.nim10
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()