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>
97 lines
1.8 KiB
Nim
97 lines
1.8 KiB
Nim
discard """
|
|
output: '''
|
|
collide: unit, thing
|
|
collide: unit, thing
|
|
collide: thing, unit
|
|
collide: thing, thing
|
|
collide: unit, thing |
|
|
collide: unit, thing |
|
|
collide: thing, unit |
|
|
do nothing
|
|
'''
|
|
joinable: false
|
|
disabled: true
|
|
"""
|
|
|
|
|
|
# tmultim2
|
|
type
|
|
TThing {.inheritable.} = object
|
|
TUnit = object of TThing
|
|
x: int
|
|
TParticle = object of TThing
|
|
a, b: int
|
|
|
|
method collide(a, b: TThing) {.base, inline.} =
|
|
echo "collide: thing, thing"
|
|
|
|
method collide(a: TThing, b: TUnit) {.inline.} =
|
|
echo "collide: thing, unit"
|
|
|
|
method collide(a: TUnit, b: TThing) {.inline.} =
|
|
echo "collide: unit, thing"
|
|
|
|
proc test(a, b: TThing) {.inline.} =
|
|
collide(a, b)
|
|
|
|
proc staticCollide(a, b: TThing) {.inline.} =
|
|
procCall collide(a, b)
|
|
|
|
var
|
|
a: TThing
|
|
b, c: TUnit
|
|
collide(b, c) # ambiguous (unit, thing) or (thing, unit)? -> prefer unit, thing!
|
|
test(b, c)
|
|
collide(a, b)
|
|
staticCollide(a, b)
|
|
|
|
|
|
|
|
# tmultim6
|
|
type
|
|
Thing {.inheritable.} = object
|
|
Unit[T] = object of Thing
|
|
x: T
|
|
Particle = object of Thing
|
|
a, b: int
|
|
|
|
method collide(a, b: Thing) {.base, inline.} =
|
|
quit "to override!"
|
|
|
|
method collide[T](a: Thing, b: Unit[T]) {.inline.} =
|
|
echo "collide: thing, unit |"
|
|
|
|
method collide[T](a: Unit[T], b: Thing) {.inline.} =
|
|
echo "collide: unit, thing |"
|
|
|
|
proc test(a, b: Thing) {.inline.} =
|
|
collide(a, b)
|
|
|
|
var
|
|
aaa: Thing
|
|
bbb, ccc: Unit[string]
|
|
collide(bbb, Thing(ccc))
|
|
test(bbb, ccc)
|
|
collide(aaa, bbb)
|
|
|
|
|
|
|
|
# tmethods1
|
|
method somethin(obj: RootObj) {.base.} =
|
|
echo "do nothing"
|
|
|
|
type
|
|
TNode* {.inheritable.} = object
|
|
PNode* = ref TNode
|
|
|
|
PNodeFoo* = ref object of TNode
|
|
|
|
TSomethingElse = object
|
|
PSomethingElse = ref TSomethingElse
|
|
|
|
method foo(a: PNode, b: PSomethingElse) {.base.} = discard
|
|
method foo(a: PNodeFoo, b: PSomethingElse) = discard
|
|
|
|
var o: RootObj
|
|
o.somethin()
|