1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
discard """
output: '''TBar2
TFoo
'''
"""
## XXX this output needs to be adapted for VCC which produces different results.
# It turned out that it's hard to generate correct for these two test cases at
# the same time.
type
TFoo = ref object of RootObj
Data: int
TBar = ref object of TFoo
nil
TBar2 = ref object of TBar
d2: int
template super(self: TBar): TFoo = self
template super(self: TBar2): TBar = self
proc Foo(self: TFoo) =
echo "TFoo"
#proc Foo(self: TBar) =
# echo "TBar"
# Foo(super(self))
# works when this code is uncommented
proc Foo(self: TBar2) =
echo "TBar2"
Foo(super(self))
var b: TBar2
new(b)
Foo(b)
# bug #837
type
PView* = ref TView
TView* {.inheritable.} = object
data: int
PWindow* = ref TWindow
TWindow* = object of TView
data3: int
PDesktop* = ref TDesktop
TDesktop* = object of TView
data2: int
proc makeDesktop(): PDesktop = new(TDesktop)
proc makeWindow(): PWindow = new(TWindow)
proc thisCausesError(a: PView, b: PView) =
discard
var dd = makeDesktop()
var aa = makeWindow()
thisCausesError(dd, aa)
# bug #5892
type
Foo6 = distinct array[4, float32]
AnotherFoo = distinct array[4, float32]
AbstractAnimationSampler* = ref object of RootObj
AnimationSampler*[T] = ref object of AbstractAnimationSampler
sampleImpl: proc(s: AnimationSampler[T], p: float): T
ArrayAnimationSampler*[T] = ref object of AnimationSampler[T]
proc newArrayAnimationSampler*[T](): ArrayAnimationSampler[T] =
result.new()
result.sampleImpl = nil
discard newArrayAnimationSampler[Foo6]()
discard newArrayAnimationSampler[AnotherFoo]()
type
DefaultIsNone* = pointer | ptr | ref | proc {.nimcall.} | cstring | cstringArray
OptionKind* {.pure.} = enum None, Some
OptionA* [T] = object of RootObj
when T is DefaultIsNone:
value: T
else:
value: T
kind: OptionKind
SomeA* [T] = object of OptionA[T]
|