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
|
discard """
output: '''
Subobject test called
5
'''
"""
type
TClassOfTCustomObject {.pure, inheritable.} = object
base* : ptr TClassOfTCustomObject
className* : string
TClassOfTobj = object of TClassOfTCustomObject
nil
TCustomObject {.inheritable.} = ref object
class* : ptr TClassOfTCustomObject
TObj = ref object of TCustomObject
data: int
var ClassOfTObj: TClassOfTObj
proc initClassOfTObj() =
ClassOfTObj.base = nil
ClassOfTObj.className = "TObj"
initClassOfTObj()
proc initialize*(self: TObj) =
self.class = addr ClassOfTObj
# this generates wrong C code: && instead of &
proc newInstance(T: typedesc): T =
mixin initialize
new(result)
initialize(result)
var o = TObj.newInstance()
type
TestObj* = object of RootObj
t:int
SubObject* = object of TestObj
method test*(t:var TestObj) {.base.} =
echo "test called"
method test*(t:var SubObject) =
echo "Subobject test called"
t.t= 5
var a: SubObject
a.test()
echo a.t
|