mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 04:02:41 +00:00
@@ -472,7 +472,7 @@ proc replaceTypeVarsTAux(cl: var TReplTypeVars, t: PType): PType =
|
||||
var r = replaceTypeVarsT(cl, result.sons[i])
|
||||
if result.kind == tyObject:
|
||||
# carefully coded to not skip the precious tyGenericInst:
|
||||
let r2 = r.skipTypes({tyGenericInst, tyAlias})
|
||||
let r2 = r.skipTypes({tyAlias})
|
||||
if r2.kind in {tyPtr, tyRef}:
|
||||
r = skipTypes(r2, {tyPtr, tyRef})
|
||||
result.sons[i] = r
|
||||
|
||||
42
tests/generics/tobjecttyperel2.nim
Normal file
42
tests/generics/tobjecttyperel2.nim
Normal file
@@ -0,0 +1,42 @@
|
||||
discard """
|
||||
output: '''1
|
||||
a
|
||||
13'''
|
||||
"""
|
||||
|
||||
# bug #5621 #5615
|
||||
type
|
||||
Obj5[T] = ref object of RootObj
|
||||
x_impl: T
|
||||
|
||||
proc x[T](v476205: Obj5[T]): T {.used.} =
|
||||
v476205.x_impl
|
||||
|
||||
type
|
||||
Obj6[T, U] = ref object of Obj5[T]
|
||||
y_impl: U
|
||||
|
||||
proc newObj6[T, U](x: T; y: U): Obj6[T, U] =
|
||||
new(result)
|
||||
result.x_impl = x
|
||||
result.y_impl = y
|
||||
|
||||
proc x[T, U](v477606: Obj6[T, U]): T {.used.} =
|
||||
v477606.x_impl
|
||||
|
||||
proc y[T, U](v477608: Obj6[T, U]): U {.used.} =
|
||||
v477608.y_impl
|
||||
|
||||
let e = newObj6(1, "a")
|
||||
echo e.x
|
||||
echo e.y
|
||||
|
||||
type
|
||||
Fruit[T] = ref object of RootObj
|
||||
Apple[T] = ref object of Fruit[T]
|
||||
|
||||
proc getColor[T](v: Fruit[T]): T = 13
|
||||
|
||||
var w: Apple[int]
|
||||
let r = getColor(w)
|
||||
echo r
|
||||
Reference in New Issue
Block a user