attempt to fix #5621 #5615 generic ref object typeRel (#5633)

This commit is contained in:
andri lim
2017-04-01 02:58:09 +07:00
committed by Andreas Rumpf
parent d7eb146d28
commit fce4b7cd62
2 changed files with 43 additions and 1 deletions

View File

@@ -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

View 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