From 6d98c717deb16d265fb1d26528182eb16b07f784 Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Thu, 4 Aug 2016 00:30:08 +0200 Subject: [PATCH] fixes #4564 --- compiler/semexprs.nim | 8 +++++--- tests/template/mlt.nim | 3 +++ tests/template/tlt.nim | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 tests/template/mlt.nim create mode 100644 tests/template/tlt.nim diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index 70f795d4a0..fd18dc3d7f 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -752,14 +752,16 @@ proc semIndirectOp(c: PContext, n: PNode, flags: TExprFlags): PNode = var prc = n.sons[0] if n.sons[0].kind == nkDotExpr: checkSonsLen(n.sons[0], 2) - n.sons[0] = semFieldAccess(c, n.sons[0]) - if n.sons[0].kind == nkDotCall: + let n0 = semFieldAccess(c, n.sons[0]) + if n0.kind == nkDotCall: # it is a static call! - result = n.sons[0] + result = n0 result.kind = nkCall result.flags.incl nfExplicitCall for i in countup(1, sonsLen(n) - 1): addSon(result, n.sons[i]) return semExpr(c, result, flags) + else: + n.sons[0] = n0 else: n.sons[0] = semExpr(c, n.sons[0], {efInCall}) let t = n.sons[0].typ diff --git a/tests/template/mlt.nim b/tests/template/mlt.nim new file mode 100644 index 0000000000..e567cf0855 --- /dev/null +++ b/tests/template/mlt.nim @@ -0,0 +1,3 @@ + +type Point* = ref object of RootObj +proc `>`*(p1, p2: Point): bool = false diff --git a/tests/template/tlt.nim b/tests/template/tlt.nim new file mode 100644 index 0000000000..75c7dd9919 --- /dev/null +++ b/tests/template/tlt.nim @@ -0,0 +1,7 @@ + +import mlt +# bug #4564 +type Bar* = ref object of RootObj +proc foo(a: Bar): int = 0 +var a: Bar +let b = a.foo() > 0