summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-07-12 10:26:43 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-07-12 10:26:43 +0200
commit4f7a2e9def798b708ec48585c6553d258b6e4890 (patch)
tree2256a16ec2ab28dd9f75977625ee8e52cdf073a9
parent84c3830c6bb7b73a526dff81946ba53ebd4f0edb (diff)
downloadNim-4f7a2e9def798b708ec48585c6553d258b6e4890.tar.gz
fixes #4358
-rw-r--r--compiler/semexprs.nim9
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