summaryrefslogtreecommitdiff
path: root/tiger-compiler/tests/object/good/funny.tig
blob: b43e82bf497f45b6e861513078d00bb09fb8265c (plain)
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
let
  class Exp
  {
      var id : int := 0
      method id_get() : int = self.id
      method accept(v : Visitor) = ()
  }
  class AssignExp extends Exp
  {
      var expression : string := "var foo := bar"
      method get_expression() : string = self.expression
      method set_expression(new_expr : string) = (self.expression = new_expr; ())
  }
  class Visitor
  {
      method visit(e : Exp) = print_int(e.id_get())
  }
  class PrintVisitor extends Visitor
  {
      method visit(e : AssignExp) = print(e.get_expression())
  }

  var exp := new AssignExp
  var visitor := new PrintVisitor
in
  exp.accept(visitor);
  exp.set_expression("var bar := foo");
  exp.accept(visitor)
end