diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-08-08 20:11:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-08 20:11:00 +0200 |
commit | 1f34117c06a594ae89fff75129e9068941145e7e (patch) | |
tree | 481554e112a98f4934f155ab13880f0501b4fb0b | |
parent | e3b4a0c3a28f73fd8ad21456c083396974be3833 (diff) | |
parent | bb683cb9839633a1f58a9f44fa994d4c803dd124 (diff) | |
download | Nim-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.nim | 11 |
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] |