This commit is contained in:
parent
0cad2896ae
commit
568c954062
2 changed files with 89 additions and 10 deletions
65
tests/generics/tobjecttyperel.nim
Normal file
65
tests/generics/tobjecttyperel.nim
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue