make type vs proc ambiguous handling more consistent; fixes #6726; fixes #6693

This commit is contained in:
Araq
2017-12-15 12:16:03 +01:00
parent 950dadbc71
commit 8db5b32ff7
5 changed files with 16 additions and 3 deletions

View File

@@ -132,3 +132,5 @@ This now needs to be written as:
the new ``rand`` procs. The module now exports the state of the random
number generator as type ``Rand`` so multiple threads can easily use their
own random number generators that do not require locking.
- The compiler is now more consistent in its treatment of ambiguous symbols:
Types that shadow procs and vice versa are marked as ambiguous (bug #6693).

View File

@@ -27,7 +27,7 @@ proc rawImportSymbol(c: PContext, s: PSym) =
# check if we have already a symbol of the same name:
var check = strTableGet(c.importTable.symbols, s.name)
if check != nil and check.id != s.id:
if s.kind notin OverloadableSyms:
if s.kind notin OverloadableSyms or check.kind notin OverloadableSyms:
# s and check need to be qualified:
incl(c.ambiguousSymbols, s.id)
incl(c.ambiguousSymbols, check.id)

View File

@@ -2217,10 +2217,10 @@ proc semExpr(c: PContext, n: PNode, flags: TExprFlags = {}): PNode =
# XXX think about this more (``set`` procs)
if n.len == 2:
result = semConv(c, n)
elif n.len == 1:
result = semObjConstr(c, n, flags)
elif contains(c.ambiguousSymbols, s.id):
errorUseQualifier(c, n.info, s)
elif n.len == 1:
result = semObjConstr(c, n, flags)
elif s.magic == mNone: result = semDirectOp(c, n, flags)
else: result = semMagic(c, n, s, flags)
of skProc, skFunc, skMethod, skConverter, skIterator:

2
tests/modules/mrange.nim Normal file
View File

@@ -0,0 +1,2 @@
proc range*() = echo "yo"

View File

@@ -0,0 +1,9 @@
discard """
errormsg: "ambiguous identifier: 'range' --use system.range or mrange.range"
line: 9
"""
# bug #6726
import mrange
range()