Fixes #2798
This commit is contained in:
parent
77b010bd36
commit
d3c4c7c52f
2 changed files with 25 additions and 2 deletions
|
|
@ -880,7 +880,7 @@ proc genFieldAccess(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
if skipTypes(n.sons[0].typ, abstractVarRange).kind == tyTuple:
|
if skipTypes(n.sons[0].typ, abstractVarRange).kind == tyTuple:
|
||||||
r.res = "$1.Field$2" % [r.res, getFieldPosition(n.sons[1]).rope]
|
r.res = "$1.Field$2" % [r.res, getFieldPosition(n.sons[1]).rope]
|
||||||
else:
|
else:
|
||||||
if n.sons[1].kind != nkSym: internalError(n.sons[1].info, "genFieldAddr")
|
if n.sons[1].kind != nkSym: internalError(n.sons[1].info, "genFieldAccess")
|
||||||
var f = n.sons[1].sym
|
var f = n.sons[1].sym
|
||||||
if f.loc.r == nil: f.loc.r = mangleName(f)
|
if f.loc.r == nil: f.loc.r = mangleName(f)
|
||||||
r.res = "$1.$2" % [r.res, f.loc.r]
|
r.res = "$1.$2" % [r.res, f.loc.r]
|
||||||
|
|
@ -970,7 +970,10 @@ proc genAddr(p: PProc, n: PNode, r: var TCompRes) =
|
||||||
of nkCheckedFieldExpr:
|
of nkCheckedFieldExpr:
|
||||||
genCheckedFieldAddr(p, n, r)
|
genCheckedFieldAddr(p, n, r)
|
||||||
of nkDotExpr:
|
of nkDotExpr:
|
||||||
|
if mapType(n.typ) == etyBaseIndex:
|
||||||
genFieldAddr(p, n.sons[0], r)
|
genFieldAddr(p, n.sons[0], r)
|
||||||
|
else:
|
||||||
|
genFieldAccess(p, n.sons[0], r)
|
||||||
of nkBracketExpr:
|
of nkBracketExpr:
|
||||||
var ty = skipTypes(n.sons[0].typ, abstractVarRange)
|
var ty = skipTypes(n.sons[0].typ, abstractVarRange)
|
||||||
if ty.kind in {tyRef, tyPtr}: ty = skipTypes(ty.lastSon, abstractVarRange)
|
if ty.kind in {tyRef, tyPtr}: ty = skipTypes(ty.lastSon, abstractVarRange)
|
||||||
|
|
|
||||||
20
tests/js/tobjfieldbyvar.nim
Normal file
20
tests/js/tobjfieldbyvar.nim
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
discard """
|
||||||
|
output: '''5
|
||||||
|
'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
# bug #2798
|
||||||
|
|
||||||
|
type Inner = object
|
||||||
|
value: int
|
||||||
|
|
||||||
|
type Outer = object
|
||||||
|
i: Inner
|
||||||
|
|
||||||
|
proc test(i: var Inner) =
|
||||||
|
i.value += 5
|
||||||
|
|
||||||
|
var o: Outer
|
||||||
|
test(o.i)
|
||||||
|
|
||||||
|
echo o.i.value
|
||||||
Loading…
Add table
Add a link
Reference in a new issue