diff options
author | Adam Strzelecki <ono@java.pl> | 2015-05-13 16:53:39 +0200 |
---|---|---|
committer | Adam Strzelecki <ono@java.pl> | 2015-05-13 19:10:54 +0200 |
commit | 179d82c55bda199b32a108f4ba474f47a83584c9 (patch) | |
tree | fc57492f9a8b6f6721406d92d44138551422e08d | |
parent | 0bf78e262950aeaa97bf3b64e88728a5681fd2e5 (diff) | |
download | Nim-179d82c55bda199b32a108f4ba474f47a83584c9.tar.gz |
Fix #2662: Don't convert subtype typedesc params
There is no point to issue implicit HiddenStdConv encountering subtype of typedesc[Base] parameter on overload resolution, since this will anyway never reach codegen. This change effectively fixes compiler bug for: iterator it(T: typedesc[Base]) = ... for s in it(SubclassOfBase): ... Where HiddenStdConv triggered implicit instantiation of variable of type typedesc[Base] in for transform, that eventually fails at getUniqueType, that refuses to work for typedesc.
-rw-r--r-- | compiler/sigmatch.nim | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 2a9d15b5a..7ea2c3d6f 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -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: |