mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-07 21:43:33 +00:00
Fix recursive generic typed defs (#18809)
This commit is contained in:
@@ -378,7 +378,7 @@ proc handleGenericInvocation(cl: var TReplTypeVars, t: PType): PType =
|
||||
cl.typeMap = newTypeMapLayer(cl)
|
||||
|
||||
for i in 1..<t.len:
|
||||
var x = replaceTypeVarsT(cl, t[i])
|
||||
var x = replaceTypeVarsT(cl, header[i])
|
||||
assert x.kind != tyGenericInvocation
|
||||
header[i] = x
|
||||
propagateToOwner(header, x)
|
||||
|
||||
12
tests/generics/trecursivegenerics.nim
Normal file
12
tests/generics/trecursivegenerics.nim
Normal file
@@ -0,0 +1,12 @@
|
||||
block: # Replicates #18728
|
||||
type
|
||||
FlipFlop[A, B] = ref object
|
||||
next: FlipFlop[B, A]
|
||||
|
||||
Trinary[A, B, C] = ref object
|
||||
next: Trinary[B, C, A]
|
||||
|
||||
assert typeof(FlipFlop[int, string]().next) is FlipFlop[string, int]
|
||||
assert typeof(FlipFlop[string, int]().next) is FlipFlop[int, string]
|
||||
assert typeof(Trinary[int, float, string]().next) is Trinary[float, string, int]
|
||||
assert typeof(Trinary[int, float, string]().next.next) is Trinary[string, int, float]
|
||||
Reference in New Issue
Block a user