diff options
author | Araq <rumpf_a@web.de> | 2016-07-14 01:11:47 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2016-07-14 01:11:47 +0200 |
commit | 928ac1e9945582bf443ecc8a54aa5be76f17ecbd (patch) | |
tree | 264003f79787a89ab55e97dd6366dc3e83ab2c9e /compiler/semexprs.nim | |
parent | c48102254a47bfbdbd4deb0d31c4d8cd91ce938b (diff) | |
parent | 491e8d04ec3d1631f5bde71148649b05c27d8b7d (diff) | |
download | Nim-928ac1e9945582bf443ecc8a54aa5be76f17ecbd.tar.gz |
Merge branch 'devel' of github.com:nim-lang/Nim into devel
Diffstat (limited to 'compiler/semexprs.nim')
-rw-r--r-- | compiler/semexprs.nim | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index f8723bf64..17feab85d 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -1065,8 +1065,11 @@ proc semSym(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode = result = newSymNode(s, n.info) result.typ = makeTypeDesc(c, s.typ) of skField: - if c.p != nil and c.p.selfSym != nil: - var ty = skipTypes(c.p.selfSym.typ, {tyGenericInst, tyVar, tyPtr, tyRef}) + var p = c.p + while p != nil and p.selfSym == nil: + p = p.next + if p != nil and p.selfSym != nil: + var ty = skipTypes(p.selfSym.typ, {tyGenericInst, tyVar, tyPtr, tyRef}) while tfBorrowDot in ty.flags: ty = ty.skipTypes({tyDistinct}) var check: PNode = nil if ty.kind == tyObject: @@ -1079,7 +1082,7 @@ proc semSym(c: PContext, n: PNode, s: PSym, flags: TExprFlags): PNode = markUsed(n.info, f) styleCheckUse(n.info, f) result = newNodeIT(nkDotExpr, n.info, f.typ) - result.add makeDeref(newSymNode(c.p.selfSym)) + result.add makeDeref(newSymNode(p.selfSym)) result.add newSymNode(f) # we now have the correct field if check != nil: check.sons[0] = result |