fixes #5241, fixes #5411 inherit from specialized generic typeRel problem (#5573)

This commit is contained in:
andri lim 2017-03-24 05:39:29 +07:00 • committed by Andreas Rumpf
commit 568c954062
2 changed files with 89 additions and 10 deletions

View file

@ -0,0 +1,65 @@
discard """
output: '''(peel: 0, color: 15)
(color: 15)
17
(width: 0.0, taste: nil, color: 13)
(width: 0.0, taste: nil, color: 15)
cool'''
"""
# bug #5241
type
BaseFruit[T] = object of RootObj
color: T
MidLevel[T] = object of BaseFruit[T]
Mango = object of MidLevel[int]
peel: int
Peach[X, T, Y] = object of T
width: X
taste: Y
proc setColor[T](self: var BaseFruit[T]) =
self.color = 15
proc setColor[T](self: var BaseFruit[T], c: int) =
self.color = c
var c: Mango
setColor(c)
echo c
var d: MidLevel[int]
setColor(d)
echo d
type
FooBase[T] = ref object of RootRef
v: T
BarClient = ref object of FooBase[int]
proc getColor[T](f: FooBase[T]): T = 17
var b: BarClient
echo getColor(b)
var z: Peach[float64, BaseFruit[int], string]
z.setColor(13)
echo z
z.setColor()
echo z
# bug #5411
type
Foo[T] = ref object of RootRef
v: T
Bar = ref object of Foo[int]
method m(o: RootRef) {.base.} = assert(false, "Abstract method called")
method m[T](o: Foo[T]) = echo "cool"
var v: Bar
v.new()
v.m() # Abstract method not called anymore