diff options
author | zah <zahary@gmail.com> | 2017-03-17 18:11:37 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2017-03-17 17:11:37 +0100 |
commit | a20a8e6adb9847cdbae2862a004d762a28d8c454 (patch) | |
tree | 8fa539589fc83d9fdb0ba50707a9cc083cd302a5 /compiler | |
parent | d701de5733f2d1294206df5f2efedfbb62a0f28c (diff) | |
download | Nim-a20a8e6adb9847cdbae2862a004d762a28d8c454.tar.gz |
fixes #4756 (#5557)
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/sigmatch.nim | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index bc9888df9..ae7be3c6d 100644 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -1086,8 +1086,12 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation = of tyBuiltInTypeClass: considerPreviousT: let targetKind = f.sons[0].kind - if targetKind == a.skipTypes({tyRange, tyGenericInst, tyBuiltInTypeClass, tyAlias}).kind or - (targetKind in {tyProc, tyPointer} and a.kind == tyNil): + let effectiveArgType = a.skipTypes({tyRange, tyGenericInst, + tyBuiltInTypeClass, tyAlias}) + let typeClassMatches = targetKind == effectiveArgType.kind and + not effectiveArgType.isEmptyContainer + if typeClassMatches or + (targetKind in {tyProc, tyPointer} and effectiveArgType.kind == tyNil): put(c, f, a) return isGeneric else: |