diff options
-rw-r--r-- | compiler/semcall.nim | 1 | ||||
-rw-r--r-- | tests/overload/tselfderef.nim | 17 |
2 files changed, 18 insertions, 0 deletions
diff --git a/compiler/semcall.nim b/compiler/semcall.nim index 5f7e5084b..3037a6ecc 100644 --- a/compiler/semcall.nim +++ b/compiler/semcall.nim @@ -215,6 +215,7 @@ proc resolveOverloads(c: PContext, n, orig: PNode, if result.state != csMatch: n.sons.delete(1) orig.sons.delete(1) + excl n.flags, nfExprCall else: return if nfDotField in n.flags: diff --git a/tests/overload/tselfderef.nim b/tests/overload/tselfderef.nim new file mode 100644 index 000000000..708e4043b --- /dev/null +++ b/tests/overload/tselfderef.nim @@ -0,0 +1,17 @@ +# bug #4671 +{.experimental.} +{.this: self.} + +type + SomeObj = object + f: int + +proc f(num: int) = + discard + +var intptr: ptr int +intptr.f() # compiles fine + +proc doSomething(self: var SomeObj) = + var pint: ptr int + pint.f() # Error: expression '.(pint, "f")' cannot be called |