diff options
author | Araq <rumpf_a@web.de> | 2012-09-13 18:48:14 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-09-13 18:48:14 +0200 |
commit | 4a435a8fb4551b03bdcbbbd9b074a51fa46928dd (patch) | |
tree | 5d83bf8195b6706c70da921d199d9a04ebc539ee /compiler | |
parent | d336cb4957c6b223ce7e8d717718217cb0665b56 (diff) | |
parent | 36155a6813cb414666753f6b66e04e1044954f85 (diff) | |
download | Nim-4a435a8fb4551b03bdcbbbd9b074a51fa46928dd.tar.gz |
Merge branch 'master' of github.com:Araq/Nimrod
Diffstat (limited to 'compiler')
-rwxr-xr-x | compiler/sigmatch.nim | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/compiler/sigmatch.nim b/compiler/sigmatch.nim index 1f4c9653e..4d407fcb6 100755 --- a/compiler/sigmatch.nim +++ b/compiler/sigmatch.nim @@ -370,23 +370,22 @@ proc typeRel(c: var TCandidate, f, a: PType): TTypeRelation = of tyVar: if a.kind == f.kind: result = typeRel(c, base(f), base(a)) else: result = typeRel(c, base(f), a) - of tyArray, tyArrayConstr: + of tyArray, tyArrayConstr: # tyArrayConstr cannot happen really, but # we wanna be safe here case a.kind - of tyArray: - result = minRel(typeRel(c, f.sons[0], a.sons[0]), - typeRel(c, f.sons[1], a.sons[1])) - if result < isGeneric: result = isNone - of tyArrayConstr: + of tyArray, tyArrayConstr: + var fRange = f.sons[0] + if fRange.kind == tyGenericParam: + var prev = PType(idTableGet(c.bindings, fRange)) + if prev == nil: + put(c.bindings, fRange, a.sons[0]) + fRange = a + else: + fRange = prev result = typeRel(c, f.sons[1], a.sons[1]) - if result < isGeneric: - result = isNone - else: - if (result != isGeneric) and (lengthOrd(f) != lengthOrd(a)): - result = isNone - elif f.sons[0].kind in GenericTypes: - result = minRel(result, typeRel(c, f.sons[0], a.sons[0])) + if result < isGeneric: result = isNone + elif lengthOrd(fRange) != lengthOrd(a): result = isNone else: nil of tyOpenArray, tyVarargs: case a.Kind |