summary refs log blame commit diff stats
path: root/tests/method/tmultim1.nim
blob: 010468a5bf81e39d8872fbe8a76aceac4e752d94 (plain) (tree)
1
2
3
4
5
6
7
8
9



                      


                    
                                         
                                    
          

                                     
 
                                                              

                                                            
 
                              

              
 
                                          




                                                                   

 
discard """
  file: "tmultim1.nim"
  output: "7"
"""
# Test multi methods

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