mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +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>
85 lines
1.4 KiB
Nim
85 lines
1.4 KiB
Nim
discard """
|
|
matrix: "--mm:arc; --mm:refc"
|
|
output: '''
|
|
do nothing
|
|
HELLO WORLD!
|
|
'''
|
|
"""
|
|
|
|
|
|
# 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()
|
|
|
|
|
|
|
|
# tmproto
|
|
type
|
|
Obj1 {.inheritable.} = ref object
|
|
Obj2 = ref object of Obj1
|
|
|
|
method beta(x: Obj1): int {.base.}
|
|
|
|
proc delta(x: Obj2): int =
|
|
beta(x)
|
|
|
|
method beta(x: Obj2): int
|
|
|
|
proc alpha(x: Obj1): int =
|
|
beta(x)
|
|
|
|
method beta(x: Obj1): int = 1
|
|
method beta(x: Obj2): int = 2
|
|
|
|
proc gamma(x: Obj1): int =
|
|
beta(x)
|
|
|
|
doAssert alpha(Obj1()) == 1
|
|
doAssert gamma(Obj1()) == 1
|
|
doAssert alpha(Obj2()) == 2
|
|
doAssert gamma(Obj2()) == 2
|
|
doAssert delta(Obj2()) == 2
|
|
|
|
|
|
|
|
# tsimmeth
|
|
import strutils
|
|
var x = "hello world!".toLowerAscii.toUpperAscii
|
|
x.echo()
|
|
|
|
|
|
|
|
# trecmeth
|
|
# Note: We only compile this to verify that code generation
|
|
# for recursive methods works, no code is being executed
|
|
type Obj = ref object of RootObj
|
|
|
|
# Mutual recursion
|
|
method alpha(x: Obj) {.base.}
|
|
method beta(x: Obj) {.base.}
|
|
|
|
method alpha(x: Obj) =
|
|
beta(x)
|
|
|
|
method beta(x: Obj) =
|
|
alpha(x)
|
|
|
|
# Simple recursion
|
|
method gamma(x: Obj) {.base.} =
|
|
gamma(x)
|