mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
* merge magics * merge metatype tests * merge method tests * merge objects tests * change `import future` to `import sugar` Nim in Action tests are left with `import future`, to ensure compatibility. * merge overload tests * merge proc tests * merge procvar tests * merge range tests * merge seq tests * merge sets tests * remove wrong assert from `tsets3` * fix `jsTests` * better fix
72 lines
1.1 KiB
Nim
72 lines
1.1 KiB
Nim
discard """
|
|
output: '''
|
|
7
|
|
Hi derived!
|
|
hello
|
|
'''
|
|
"""
|
|
|
|
|
|
# tmultim1
|
|
type
|
|
Expression = ref object {.inheritable.}
|
|
Literal = ref object of Expression
|
|
x: int
|
|
PlusExpr = ref object of Expression
|
|
a, b: Expression
|
|
|
|
method eval(e: Expression): int {.base.} = quit "to override!"
|
|
method eval(e: Literal): int = return e.x
|
|
method eval(e: PlusExpr): int = return eval(e.a) + eval(e.b)
|
|
|
|
proc newLit(x: int): Literal =
|
|
new(result)
|
|
result.x = x
|
|
|
|
proc newPlus(a, b: Expression): PlusExpr =
|
|
new(result)
|
|
result.a = a
|
|
result.b = b
|
|
|
|
echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4))) #OUT 7
|
|
|
|
|
|
|
|
# tmultim3
|
|
import mmultim3
|
|
|
|
type TBObj* = object of TObj
|
|
|
|
method test123(a : ref TBObj) =
|
|
echo("Hi derived!")
|
|
|
|
var aa: ref TBObj
|
|
new(aa)
|
|
myObj = aa
|
|
testMyObj()
|
|
|
|
|
|
|
|
# tmultim4
|
|
type Test = object of RootObj
|
|
|
|
method doMethod(a: ref RootObj) {.base, raises: [IoError].} =
|
|
quit "override"
|
|
|
|
method doMethod(a: ref Test) =
|
|
echo "hello"
|
|
if a == nil:
|
|
raise newException(IoError, "arg")
|
|
|
|
proc doProc(a: ref Test) =
|
|
echo "hello"
|
|
|
|
proc newTest(): ref Test =
|
|
new(result)
|
|
|
|
var s:ref Test = newTest()
|
|
|
|
#doesn't work
|
|
for z in 1..4:
|
|
s.doMethod()
|
|
break |