Better compiler errors for accessing undeclared fields, calling undeclared
procedures and procedure fields.
This commit is contained in:
Dominik Picheta 2015-06-04 13:55:48 +01:00
commit 22f6017ab8
7 changed files with 22 additions and 10 deletions

View file

@ -34,7 +34,9 @@ type
errNoneSpeedOrSizeExpectedButXFound, errGuiConsoleOrLibExpectedButXFound, errNoneSpeedOrSizeExpectedButXFound, errGuiConsoleOrLibExpectedButXFound,
errUnknownOS, errUnknownCPU, errGenOutExpectedButXFound, errUnknownOS, errUnknownCPU, errGenOutExpectedButXFound,
errArgsNeedRunOption, errInvalidMultipleAsgn, errColonOrEqualsExpected, errArgsNeedRunOption, errInvalidMultipleAsgn, errColonOrEqualsExpected,
errExprExpected, errUndeclaredIdentifier, errUseQualifier, errTypeExpected, errExprExpected, errUndeclaredIdentifier, errUndeclaredField,
errUndeclaredProcedure, errUndeclaredProcedureField, errUseQualifier,
errTypeExpected,
errSystemNeeds, errExecutionOfProgramFailed, errNotOverloadable, errSystemNeeds, errExecutionOfProgramFailed, errNotOverloadable,
errInvalidArgForX, errStmtHasNoEffect, errXExpectsTypeOrValue, errInvalidArgForX, errStmtHasNoEffect, errXExpectsTypeOrValue,
errXExpectsArrayType, errIteratorCannotBeInstantiated, errExprXAmbiguous, errXExpectsArrayType, errIteratorCannotBeInstantiated, errExprXAmbiguous,
@ -190,6 +192,9 @@ const
errColonOrEqualsExpected: "\':\' or \'=\' expected, but found \'$1\'", errColonOrEqualsExpected: "\':\' or \'=\' expected, but found \'$1\'",
errExprExpected: "expression expected, but found \'$1\'", errExprExpected: "expression expected, but found \'$1\'",
errUndeclaredIdentifier: "undeclared identifier: \'$1\'", errUndeclaredIdentifier: "undeclared identifier: \'$1\'",
errUndeclaredField: "undeclared field: \'$1\'",
errUndeclaredProcedure: "attempting to call undeclared procedure: \'$1\'",
errUndeclaredProcedureField: "attempting to call undeclared procedure field: \'$1\'",
errUseQualifier: "ambiguous identifier: \'$1\' -- use a qualifier", errUseQualifier: "ambiguous identifier: \'$1\' -- use a qualifier",
errTypeExpected: "type expected", errTypeExpected: "type expected",
errSystemNeeds: "system module needs \'$1\'", errSystemNeeds: "system module needs \'$1\'",

View file

@ -209,7 +209,14 @@ proc resolveOverloads(c: PContext, n, orig: PNode,
pickBest(callOp) pickBest(callOp)
if overloadsState == csEmpty and result.state == csEmpty: if overloadsState == csEmpty and result.state == csEmpty:
localError(n.info, errUndeclaredIdentifier, considerQuotedIdent(f).s) if nfDotField in n.flags:
if nfExplicitCall in n.flags:
localError(n.info, errUndeclaredProcedureField,
considerQuotedIdent(f).s)
else:
localError(n.info, errUndeclaredField, considerQuotedIdent(f).s)
else:
localError(n.info, errUndeclaredProcedure, considerQuotedIdent(f).s)
return return
elif result.state != csMatch: elif result.state != csMatch:
if nfExprCall in n.flags: if nfExprCall in n.flags:

View file

@ -1,6 +1,6 @@
discard """ discard """
line: 7 line: 7
errormsg: "undeclared identifier: 'items'" errormsg: "attempting to call undeclared procedure: 'items'"
""" """
type a = enum b,c,d type a = enum b,c,d

View file

@ -1,7 +1,7 @@
discard """ discard """
file: "tissue710.nim" file: "tissue710.nim"
line: 8 line: 8
errorMsg: "undeclared identifier: '||'" errorMsg: "attempting to call undeclared procedure: '||'"
""" """
var sum = 0 var sum = 0
for x in 3..1000: for x in 3..1000:

View file

@ -1,7 +1,7 @@
discard """ discard """
file: "tnoop.nim" file: "tnoop.nim"
line: 11 line: 11
errormsg: "undeclared identifier: 'a'" errormsg: "attempting to call undeclared procedure: 'a'"
""" """

View file

@ -1,7 +1,7 @@
discard """ discard """
file: "topaque.nim" file: "topaque.nim"
line: 16 line: 16
errormsg: "undeclared identifier: \'buffer\'" errormsg: "undeclared field: \'buffer\'"
""" """
# Test the new opaque types # Test the new opaque types

View file

@ -1,7 +1,7 @@
discard """ discard """
file: "twrongtupleaccess.nim" file: "twrongtupleaccess.nim"
line: 9 line: 9
errormsg: "undeclared identifier: \'setBLAH\'" errormsg: "attempting to call undeclared procedure field: \'setBLAH\'"
""" """
# Bugfix # Bugfix