This commit is contained in:
Andreas Rumpf
2018-04-21 22:49:15 +02:00
parent 85ea9593b3
commit 14e496fab0
3 changed files with 12 additions and 8 deletions

View File

@@ -66,12 +66,10 @@ proc searchForProcOld*(c: PContext, scope: PScope, fn: PSym): PSym =
proc searchForProcNew(c: PContext, scope: PScope, fn: PSym): PSym =
const flags = {ExactGenericParams, ExactTypeDescValues,
ExactConstraints, IgnoreCC}
var it: TIdentIter
result = initIdentIter(it, scope.symbols, fn.name)
while result != nil:
if result.kind == fn.kind and sameType(result.typ, fn.typ, flags):
if result.kind == fn.kind: #and sameType(result.typ, fn.typ, flags):
case equalParams(result.typ.n, fn.typ.n)
of paramsEqual:
if (sfExported notin result.flags) and (sfExported in fn.flags):
@@ -85,11 +83,8 @@ proc searchForProcNew(c: PContext, scope: PScope, fn: PSym): PSym =
return
of paramsNotEqual:
discard
result = nextIdentIter(it, scope.symbols)
return nil
proc searchForProc*(c: PContext, scope: PScope, fn: PSym): PSym =
result = searchForProcNew(c, scope, fn)
when false:

View File

@@ -777,8 +777,8 @@ proc equalParams(a, b: PNode): TParamsEquality =
return paramsNotEqual # paramsIncompatible;
# continue traversal! If not equal, we can return immediately; else
# it stays incompatible
if not sameTypeOrNil(a.sons[0].typ, b.sons[0].typ, {ExactTypeDescValues}):
if (a.sons[0].typ == nil) or (b.sons[0].typ == nil):
if not sameTypeOrNil(a.typ, b.typ, {ExactTypeDescValues}):
if (a.typ == nil) or (b.typ == nil):
result = paramsNotEqual # one proc has a result, the other not is OK
else:
result = paramsIncompatible # overloading by different

View File

@@ -0,0 +1,9 @@
discard """
errormsg: "overloaded 'x' leads to ambiguous calls"
line: 9
"""
# bug #6393
proc x(): int = 7
proc x(): string = "strange"