|
1 | 1 | from random import randint |
2 | 2 |
|
3 | 3 | from attrs import Beer |
| 4 | +from stmts import Pour, Puke, Drink, NewBeer, RandomBranch |
4 | 5 | from dialect import dialect |
5 | | -from stmts import Drink, NewBeer, Pour, Puke, RandomBranch |
6 | 6 |
|
7 | | -from kirin.interp import DialectInterpreter, Interpreter, ResultValue, Successor, impl |
| 7 | +from kirin.interp import Frame, Successor, Interpreter, MethodTable, impl |
8 | 8 |
|
9 | 9 |
|
10 | 10 | @dialect.register |
11 | | -class BeerInterpreter(DialectInterpreter): |
| 11 | +class BeerInterpreter(MethodTable): |
12 | 12 |
|
13 | 13 | @impl(NewBeer) |
14 | | - def new_beer(self, interp: Interpreter, stmt: NewBeer, values: tuple): |
15 | | - return ResultValue(Beer(values[0])) |
| 14 | + def new_beer(self, interp: Interpreter, frame: Frame, stmt: NewBeer): |
| 15 | + return (Beer(frame.get(stmt.brand)),) |
16 | 16 |
|
17 | 17 | @impl(Drink) |
18 | | - def drink(self, interp: Interpreter, stmt: Drink, values: tuple): |
19 | | - print(f"Drinking {values[0].brand}") |
20 | | - return ResultValue() |
| 18 | + def drink(self, interp: Interpreter, frame: Frame, stmt: Drink): |
| 19 | + print(f"Drinking {frame.get(stmt.beverage).brand}") |
| 20 | + return () |
21 | 21 |
|
22 | 22 | @impl(Pour) |
23 | | - def pour(self, interp: Interpreter, stmt: Pour, values: tuple): |
24 | | - print(f"Pouring {values[0].brand} {values[1]}") |
25 | | - return ResultValue() |
| 23 | + def pour(self, interp: Interpreter, frame: Frame, stmt: Pour): |
| 24 | + print(f"Pouring {frame.get(stmt.beverage).brand} {frame.get(stmt.amount)}") |
| 25 | + return () |
26 | 26 |
|
27 | 27 | @impl(Puke) |
28 | | - def puke(self, interp: Interpreter, stmt: Puke, values: tuple): |
| 28 | + def puke(self, interp: Interpreter, frame: Frame, stmt: Puke): |
29 | 29 | print("Puking!!!") |
30 | | - return ResultValue() |
| 30 | + return () |
31 | 31 |
|
32 | 32 | @impl(RandomBranch) |
33 | | - def random_branch(self, interp: Interpreter, stmt: RandomBranch, values: tuple): |
| 33 | + def random_branch(self, interp: Interpreter, frame: Frame, stmt: RandomBranch): |
34 | 34 | frame = interp.state.current_frame() |
35 | 35 | if randint(0, 1): |
36 | 36 | return Successor( |
|
0 commit comments