summary refs log tree commit diff stats
path: root/tests/accept/run/tmultim1.nim
blob: 542c846c787fc997df6b895e40ebdaf6c0dcc965 (plain) (blame)
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
discard """
  file: "tmultim1.nim"
  output: "7"
"""
# Test multi methods

type
  TExpr = object
  TLiteral = object of TExpr
    x: int
  TPlusExpr = object of TExpr
    a, b: ref TExpr
    
method eval(e: ref TExpr): int = quit "to override!"
method eval(e: ref TLiteral): int = return e.x
method eval(e: ref TPlusExpr): int = return eval(e.a) + eval(e.b)

proc newLit(x: int): ref TLiteral =
  new(result)
  result.x = x
  
proc newPlus(a, b: ref TExpr): ref TPlusExpr =
  new(result)
  result.a = a
  result.b = b

echo eval(newPlus(newPlus(newLit(1), newLit(2)), newLit(4))) #OUT 7