mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-02 19:22:40 +00:00
bugfix: don't treat generic types with different static params as the same type
This commit is contained in:
@@ -979,6 +979,9 @@ proc typeRel(c: var TCandidate, f, aOrig: PType, doBind = true): TTypeRelation =
|
||||
of tyStatic:
|
||||
if aOrig.kind == tyStatic:
|
||||
result = typeRel(c, f.lastSon, a)
|
||||
if result != isNone and f.n != nil:
|
||||
if not exprStructuralEquivalent(f.n, a.n):
|
||||
result = isNone
|
||||
if result != isNone: put(c.bindings, f, aOrig)
|
||||
else:
|
||||
result = isNone
|
||||
|
||||
@@ -34,3 +34,20 @@ type
|
||||
yes s.items is Iter[TNumber]
|
||||
no s.items is Iter[float]
|
||||
|
||||
type
|
||||
Foo[N: static[int], T] = object
|
||||
field: array[1..N, T]
|
||||
|
||||
Bar[T] = Foo[4, T]
|
||||
Baz[N: static[int]] = Foo[N, float]
|
||||
|
||||
no Foo[2, float] is Foo[3, float]
|
||||
no Foo[2, float] is Foo[2, int]
|
||||
|
||||
yes Foo[4, string] is Foo[4, string]
|
||||
yes Bar[int] is Foo[4, int]
|
||||
yes Foo[4, int] is Bar[int]
|
||||
|
||||
no Foo[4, int] is Baz[4]
|
||||
yes Foo[4, float] is Baz[4]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user