mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
* remove deprecated pragma syntax from 0.20.0 closes #4651, closes #16653 with a cheap fix for now due to how early `tfFinal` is set * remove type pragma between name and generics * undo removal, try removing bind expression (0.8.14) * fix test, unremove bind expr * remove again * Update changelog.md Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com> * dependencies @ HEAD & weave test dependencies * try fix package ci Co-authored-by: konsumlamm <44230978+konsumlamm@users.noreply.github.com>
54 lines
1001 B
Nim
54 lines
1001 B
Nim
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
|