From dc33638cb256fa47ab723d991e85b746fc690d59 Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Tue, 27 Aug 2013 00:08:47 +0300 Subject: [PATCH] proper discrimination between csEmpty and csNoMatch fixes twrongtupleaccess and topaque --- compiler/semcall.nim | 11 ++++++++--- tests/reject/twrongtupleaccess.nim | 4 +--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/semcall.nim b/compiler/semcall.nim index 643eef0654..c7f4e43876 100644 --- a/compiler/semcall.nim +++ b/compiler/semcall.nim @@ -50,7 +50,8 @@ proc if sym == nil: return initCandidate(best, sym, initialBinding, symScope) initCandidate(alt, sym, initialBinding, symScope) - + best.state = csNoMatch + while sym != nil: if sym.kind in filter: determineType(c, sym) @@ -115,7 +116,8 @@ proc resolveOverloads(c: PContext, n, orig: PNode, pickBest(f) - if result.state == csEmpty: + let overloadsState = result.state + if overloadsState != csMatch: if nfDelegate in n.flags: InternalAssert f.kind == nkIdent let calleeName = newStrNode(nkStrLit, f.ident.s) @@ -127,7 +129,10 @@ proc resolveOverloads(c: PContext, n, orig: PNode, pickBest(callOp) - if result.state == csEmpty: + if overloadsState == csEmpty and result.state == csEmpty: + LocalError(n.info, errUndeclaredIdentifier, considerAcc(f).s) + return + elif result.state != csMatch: if nfExprCall in n.flags: if c.inCompilesContext > 0 or gErrorCounter == 0: LocalError(n.info, errExprXCannotBeCalled, diff --git a/tests/reject/twrongtupleaccess.nim b/tests/reject/twrongtupleaccess.nim index bb09b108d6..1a9ae64a24 100644 --- a/tests/reject/twrongtupleaccess.nim +++ b/tests/reject/twrongtupleaccess.nim @@ -1,12 +1,10 @@ discard """ file: "twrongtupleaccess.nim" line: 9 - errormsg: "undeclared field: \'setBLAH\'" + errormsg: "undeclared identifier: \'setBLAH\'" """ # Bugfix var v = (5.0, 10.0) v.setBLAH(10) - -