summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-08-08 20:11:00 +0200
committerGitHub <noreply@github.com>2016-08-08 20:11:00 +0200
commit1f34117c06a594ae89fff75129e9068941145e7e (patch)
tree481554e112a98f4934f155ab13880f0501b4fb0b
parente3b4a0c3a28f73fd8ad21456c083396974be3833 (diff)
parentbb683cb9839633a1f58a9f44fa994d4c803dd124 (diff)
downloadNim-1f34117c06a594ae89fff75129e9068941145e7e.tar.gz
Merge pull request #4577 from oderwat/fix-referr-js
Fix using ptr to seq in js backend.
-rw-r--r--compiler/jsgen.nim11
1 files changed, 9 insertions, 2 deletions
diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim
index 244bba681..a0b54812f 100644
--- a/compiler/jsgen.nim
+++ b/compiler/jsgen.nim
@@ -1445,8 +1445,11 @@ proc genVarInit(p: PProc, v: PSym, n: PNode) =
     a: TCompRes
     s: Rope
   if n.kind == nkEmpty:
+    let mname = mangleName(v, p.target)
     addf(p.body, "var $1 = $2;$n" | "$$$1 = $2;$n",
-         [mangleName(v, p.target), createVar(p, v.typ, isIndirect(v))])
+         [mname, createVar(p, v.typ, isIndirect(v))])
+    if v.typ.kind in { tyVar, tyPtr, tyRef } and mapType(p, v.typ) == etyBaseIndex:
+      addf(p.body, "var $1_Idx = 0;$n", [ mname ])
   else:
     discard mangleName(v, p.target)
     gen(p, n, a)
@@ -1948,9 +1951,13 @@ proc genProc(oldProc: PProc, prc: PSym): Rope =
   let header = generateHeader(p, prc.typ)
   if prc.typ.sons[0] != nil and sfPure notin prc.flags:
     resultSym = prc.ast.sons[resultPos].sym
+    let mname = mangleName(resultSym, p.target)
     resultAsgn = ("var $# = $#;$n" | "$$$# = $#;$n") % [
-        mangleName(resultSym, p.target),
+        mname,
         createVar(p, resultSym.typ, isIndirect(resultSym))]
+    if resultSym.typ.kind in { tyVar, tyPtr, tyRef } and mapType(p, resultSym.typ) == etyBaseIndex:
+      resultAsgn.add "var $#_Idx = 0;$n" % [
+        mname ];
     gen(p, prc.ast.sons[resultPos], a)
     if mapType(p, resultSym.typ) == etyBaseIndex:
       returnStmt = "return [$#, $#];$n" % [a.address, a.res]