* fix #11354 jsgen not carefully handle genAddr with nkHiddenAddr,nkStmtListExpr; genAsgn with lvalue tyVar and rvalue tyPtr * correct logic * add test for #11354 * handle nkHiddenAddr when n.len == 1 * Update compiler/jsgen.nim * Update compiler/jsgen.nim * Apply suggestions from code review Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
This commit is contained in:
parent
191c388792
commit
cac09a43ae
2 changed files with 30 additions and 1 deletions
|
|
@ -1069,6 +1069,10 @@ proc genAsgnAux(p: PProc, x, y: PNode, noCopyNeeded: bool) =
|
||||||
elif b.typ == etyNone:
|
elif b.typ == etyNone:
|
||||||
internalAssert p.config, b.address == nil
|
internalAssert p.config, b.address == nil
|
||||||
lineF(p, "$# = [$#, 0];$n", [a.address, b.res])
|
lineF(p, "$# = [$#, 0];$n", [a.address, b.res])
|
||||||
|
elif x.typ.kind == tyVar and y.typ.kind == tyPtr:
|
||||||
|
lineF(p, "$# = [$#, $#];$n", [a.res, b.address, b.res])
|
||||||
|
lineF(p, "$1 = $2;$n", [a.address, b.res])
|
||||||
|
lineF(p, "$1 = $2;$n", [a.rdLoc, b.rdLoc])
|
||||||
else:
|
else:
|
||||||
internalError(p.config, x.info, $("genAsgn", b.typ, a.typ))
|
internalError(p.config, x.info, $("genAsgn", b.typ, a.typ))
|
||||||
else:
|
else:
|
||||||
|
|
@ -1318,7 +1322,12 @@ proc genAddr(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
of nkObjDownConv:
|
of nkObjDownConv:
|
||||||
gen(p, n[0], r)
|
gen(p, n[0], r)
|
||||||
of nkHiddenDeref:
|
of nkHiddenDeref:
|
||||||
gen(p, n[0][0], r)
|
gen(p, n[0], r)
|
||||||
|
of nkHiddenAddr:
|
||||||
|
gen(p, n[0], r)
|
||||||
|
of nkStmtListExpr:
|
||||||
|
if n.len == 1: gen(p, n[0], r)
|
||||||
|
else: internalError(p.config, n[0].info, "genAddr for complex nkStmtListExpr")
|
||||||
else: internalError(p.config, n[0].info, "genAddr: " & $n[0].kind)
|
else: internalError(p.config, n[0].info, "genAddr: " & $n[0].kind)
|
||||||
|
|
||||||
proc attachProc(p: PProc; content: Rope; s: PSym) =
|
proc attachProc(p: PProc; content: Rope; s: PSym) =
|
||||||
|
|
|
||||||
20
tests/js/t11354.nim
Normal file
20
tests/js/t11354.nim
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
discard """
|
||||||
|
output: '''
|
||||||
|
0
|
||||||
|
@[@[0, 1]]
|
||||||
|
'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
type
|
||||||
|
TrackySeq[T] = object
|
||||||
|
s: seq[T]
|
||||||
|
pos: int
|
||||||
|
|
||||||
|
proc foobar(ls: var TrackySeq[seq[int]], i: int): var seq[int] =
|
||||||
|
echo ls.pos # removing this, or making the return explicit works
|
||||||
|
ls.s[i]
|
||||||
|
|
||||||
|
var foo: TrackySeq[seq[int]]
|
||||||
|
foo.s.add(@[0])
|
||||||
|
foo.foobar(0).add(1)
|
||||||
|
echo foo.s
|
||||||
Loading…
Add table
Add a link
Reference in a new issue