Commit | Line | Data |
---|---|---|
b16fe73e | 1 | (module $step0_repl |
b16fe73e | 2 | |
33309c6a | 3 | ;; READ |
b16fe73e | 4 | (func $READ (param $str i32) (result i32) |
33309c6a JM |
5 | $str |
6 | ) | |
b16fe73e JM |
7 | |
8 | (func $EVAL (param $ast i32) (param $env i32) (result i32) | |
33309c6a JM |
9 | $ast |
10 | ) | |
b16fe73e | 11 | |
33309c6a | 12 | |
b16fe73e | 13 | (func $PRINT (param $ast i32) (result i32) |
33309c6a JM |
14 | $ast |
15 | ) | |
b16fe73e | 16 | |
33309c6a JM |
17 | ;; REPL |
18 | (func $rep (param $line i32) (result i32) | |
19 | ($PRINT ($EVAL ($READ $line) 0)) | |
20 | ) | |
b16fe73e | 21 | |
ed13313d | 22 | (func $main (param $argc i32 $argv i32) (result i32) |
b16fe73e | 23 | ;; Constant location/value definitions |
349faa83 | 24 | (LET $line (STATIC_ARRAY 201)) |
50eea9ad JM |
25 | |
26 | ;; DEBUG | |
0a19c2f1 | 27 | ;;($printf_1 "memoryBase: 0x%x\n" (global.get $memoryBase)) |
b16fe73e | 28 | |
3ea09886 | 29 | ;; Start REPL |
b16fe73e JM |
30 | (block $repl_done |
31 | (loop $repl_loop | |
50eea9ad JM |
32 | (br_if $repl_done (i32.eqz ($readline "user> " $line))) |
33 | (br_if $repl_loop (i32.eq (i32.load8_u $line) 0)) | |
33309c6a | 34 | ($printf_1 "%s\n" ($rep $line)) |
50eea9ad JM |
35 | (br $repl_loop) |
36 | ) | |
37 | ) | |
b16fe73e | 38 | |
33309c6a JM |
39 | ($print "\n") |
40 | 0 | |
b16fe73e JM |
41 | ) |
42 | ||
ed13313d JM |
43 | ;; init_memory is provided by mem.wam in later steps but we just |
44 | ;; printf in step0 so provide init_memory that just calls that | |
45 | (func $init_memory | |
46 | ($init_printf_mem) | |
47 | ) | |
b16fe73e JM |
48 | ) |
49 |