This commit is contained in:
Andreas Rumpf
2016-10-19 19:28:27 +02:00
parent 34b826a64d
commit d0ec83eaa8
2 changed files with 27 additions and 4 deletions

View File

@@ -1021,11 +1021,9 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
var fskip = skippedNone
let aobj = x.skipToObject(askip)
let fobj = genericBody.lastSon.skipToObject(fskip)
var depth = -1
if fobj != nil and aobj != nil and askip == fskip:
let depth = isObjectSubtype(c, aobj, fobj, f)
if depth >= 0:
c.inheritancePenalty += depth
return if depth == 0: isGeneric else: isSubtype
depth = isObjectSubtype(c, aobj, fobj, f)
result = typeRel(c, genericBody, x)
if result != isNone:
# see tests/generics/tgeneric3.nim for an example that triggers this
@@ -1047,6 +1045,11 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
else:
put(c, f.sons[i], x)
if depth >= 0:
c.inheritancePenalty += depth
# bug #4863: We still need to bind generic alias crap, so
# we cannot return immediately:
result = if depth == 0: isGeneric else: isSubtype
of tyAnd:
considerPreviousT:
result = isEqual

View File

@@ -0,0 +1,20 @@
discard """
output: '''G:0,1:0.1
G:0,1:0.1
H:1:0.1'''
"""
type
G[i,j:static[int]] = object
v:float
H[j:static[int]] = G[0,j]
proc p[i,j:static[int]](x:G[i,j]) = echo "G:",i,",",j,":",x.v
proc q[j:static[int]](x:H[j]) = echo "H:",j,":",x.v
var
g0 = G[0,1](v: 0.1)
h0:H[1] = g0
p(g0)
p(h0)
q(h0)
# bug #4863