diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2020-06-06 11:15:24 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-06 20:15:24 +0200 |
commit | 61f2f1f5c5c563eefc8388c2b655ac816bcf676c (patch) | |
tree | d4cb88ecf8040f627a510a79b66cfe3460422f28 /compiler | |
parent | 336f1e63d0186ab283fdb9868a8f7d8d05293a31 (diff) | |
download | Nim-61f2f1f5c5c563eefc8388c2b655ac816bcf676c.tar.gz |
fix #14576 addr of param (including for lent) now works with nim js (#14577)
* fix #14576 addr(param) now works in nim js * workaround https://github.com/nim-lang/Nim/issues/14578
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgexprs.nim | 1 | ||||
-rw-r--r-- | compiler/jsgen.nim | 11 |
2 files changed, 10 insertions, 2 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index ec54081a2..2850ab750 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -141,6 +141,7 @@ proc genSetNode(p: BProc, n: PNode): Rope = result = genRawSetData(cs, size) proc getStorageLoc(n: PNode): TStorageLoc = + ## deadcode case n.kind of nkSym: case n.sym.kind diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index 0410a7a55..9f022882b 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -1065,8 +1065,11 @@ proc genAsgnAux(p: PProc, x, y: PNode, noCopyNeeded: bool) = lineF(p, "var $1 = $4; $2 = $1[0]; $3 = $1[1];$n", [tmp, a.address, a.res, b.rdLoc]) elif b.typ == etyBaseIndex: lineF(p, "$# = [$#, $#];$n", [a.res, b.address, b.res]) + elif b.typ == etyNone: + internalAssert p.config, b.address == nil + lineF(p, "$# = [$#, 0];$n", [a.address, b.res]) else: - internalError(p.config, x.info, "genAsgn") + internalError(p.config, x.info, $("genAsgn", b.typ, a.typ)) else: lineF(p, "$1 = $2; $3 = $4;$n", [a.address, b.address, a.res, b.res]) else: @@ -1266,6 +1269,10 @@ proc genAddr(p: PProc, n: PNode, r: var TCompRes) = let s = n[0].sym if s.loc.r == nil: internalError(p.config, n.info, "genAddr: 3") case s.kind + of skParam: + r.res = s.loc.r + r.address = nil + r.typ = etyNone of skVar, skLet, skResult: r.kind = resExpr let jsType = mapType(p, n.typ) @@ -1287,7 +1294,7 @@ proc genAddr(p: PProc, n: PNode, r: var TCompRes) = # 'var openArray' for instance produces an 'addr' but this is harmless: gen(p, n[0], r) #internalError(p.config, n.info, "genAddr: 4 " & renderTree(n)) - else: internalError(p.config, n.info, "genAddr: 2") + else: internalError(p.config, n.info, $("genAddr: 2", s.kind)) of nkCheckedFieldExpr: genCheckedFieldOp(p, n[0], n.typ, r) of nkDotExpr: |