Merge pull request #2708 from nanoant/patch/dont-convert-subtype-typedesc-params

Fix #2662: Don't convert subtype typedesc params
This commit is contained in:
Andreas Rumpf
2015-05-13 19:24:27 +02:00
2 changed files with 23 additions and 1 deletions

View File

@@ -1281,7 +1281,10 @@ proc paramTypesMatchAux(m: var TCandidate, f, argType: PType,
result = implicitConv(nkHiddenStdConv, f, arg, m, c)
of isSubtype:
inc(m.subtypeMatches)
result = implicitConv(nkHiddenSubConv, f, arg, m, c)
if f.kind == tyTypeDesc:
result = arg
else:
result = implicitConv(nkHiddenSubConv, f, arg, m, c)
of isSubrange:
inc(m.subtypeMatches)
if f.kind == tyVar:

View File

@@ -0,0 +1,19 @@
import typetraits
type
Base = object of RootObj
Child = object of Base
proc pr(T: typedesc[Base]) = echo "proc " & T.name
method me(T: typedesc[Base]) = echo "method " & T.name
iterator it(T: typedesc[Base]) = yield "yield " & T.name
Base.pr
Child.pr
Base.me
when false:
Child.me #<- bug #2710
for s in Base.it: echo s
for s in Child.it: echo s #<- bug #2662