preparations for another bugfix
This commit is contained in:
parent
9911d375b3
commit
0a3efccb55
2 changed files with 16 additions and 1 deletions
|
|
@ -90,6 +90,10 @@ proc pickBestCandidate(c: PContext, headSymbol: PNode,
|
||||||
if c.currentScope.symbols.counter == counterInitial or syms != nil:
|
if c.currentScope.symbols.counter == counterInitial or syms != nil:
|
||||||
matches(c, n, orig, z)
|
matches(c, n, orig, z)
|
||||||
if z.state == csMatch:
|
if z.state == csMatch:
|
||||||
|
#if sym.name.s == "==" and (n.info ?? "temp3"):
|
||||||
|
# echo typeToString(sym.typ)
|
||||||
|
# writeMatches(z)
|
||||||
|
|
||||||
# little hack so that iterators are preferred over everything else:
|
# little hack so that iterators are preferred over everything else:
|
||||||
if sym.kind == skIterator: inc(z.exactMatches, 200)
|
if sym.kind == skIterator: inc(z.exactMatches, 200)
|
||||||
case best.state
|
case best.state
|
||||||
|
|
|
||||||
|
|
@ -224,7 +224,8 @@ proc complexDisambiguation(a, b: PType): int =
|
||||||
let x = a.sons[i].sumGeneric
|
let x = a.sons[i].sumGeneric
|
||||||
let y = b.sons[i].sumGeneric
|
let y = b.sons[i].sumGeneric
|
||||||
#if ggDebug:
|
#if ggDebug:
|
||||||
# echo "came her ", typeToString(a.sons[i]), " ", typeToString(b.sons[i])
|
#echo "came herA ", typeToString(a.sons[i]), " ", x
|
||||||
|
#echo "came herB ", typeToString(b.sons[i]), " ", y
|
||||||
if x != y:
|
if x != y:
|
||||||
if winner == 0:
|
if winner == 0:
|
||||||
if x > y: winner = 1
|
if x > y: winner = 1
|
||||||
|
|
@ -1550,11 +1551,21 @@ proc typeRelImpl(c: var TCandidate, f, aOrig: PType,
|
||||||
result = isNone
|
result = isNone
|
||||||
else:
|
else:
|
||||||
if f.sonsLen > 0 and f.sons[0].kind != tyNone:
|
if f.sonsLen > 0 and f.sons[0].kind != tyNone:
|
||||||
|
when false:
|
||||||
|
let oldInheritancePenalty = c.inheritancePenalty
|
||||||
result = typeRel(c, f.lastSon, a, flags + {trDontBind})
|
result = typeRel(c, f.lastSon, a, flags + {trDontBind})
|
||||||
if doBind and result notin {isNone, isGeneric}:
|
if doBind and result notin {isNone, isGeneric}:
|
||||||
let concrete = concreteType(c, a)
|
let concrete = concreteType(c, a)
|
||||||
if concrete == nil: return isNone
|
if concrete == nil: return isNone
|
||||||
put(c, f, concrete)
|
put(c, f, concrete)
|
||||||
|
when false:
|
||||||
|
# bug #6526
|
||||||
|
if result in {isEqual, isSubtype}:
|
||||||
|
# 'T: Class' is a *better* match than just 'T'
|
||||||
|
# but 'T: Subclass' is even better:
|
||||||
|
c.inheritancePenalty = oldInheritancePenalty - c.inheritancePenalty -
|
||||||
|
100 * ord(result == isEqual)
|
||||||
|
result = isGeneric
|
||||||
else:
|
else:
|
||||||
result = isGeneric
|
result = isGeneric
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue