Commit | Line | Data |
---|---|---|
33309c6a | 1 | (module $step1_read_print |
33309c6a JM |
2 | |
3 | ;; READ | |
4 | (func $READ (param $str i32) (result i32) | |
5 | ($read_str $str) | |
6 | ) | |
7 | ||
8 | ;; EVAL | |
3ea09886 | 9 | (func $EVAL (param $ast i32 $env i32) (result i32) |
33309c6a JM |
10 | $ast |
11 | ) | |
12 | ||
13 | ||
14 | (func $PRINT (param $ast i32) (result i32) | |
3ea09886 | 15 | ($pr_str $ast 1) |
33309c6a JM |
16 | ) |
17 | ||
18 | ;; REPL | |
3ea09886 | 19 | (func $REP (param $line i32 $env i32) (result i32) |
349faa83 JM |
20 | (LET $mv1 0 $mv2 0 $ms 0) |
21 | (block $done | |
0a19c2f1 JM |
22 | (local.set $mv1 ($READ $line)) |
23 | (br_if $done (global.get $error_type)) | |
33309c6a | 24 | |
0a19c2f1 JM |
25 | (local.set $mv2 ($EVAL $mv1 $env)) |
26 | (br_if $done (global.get $error_type)) | |
33309c6a JM |
27 | |
28 | ;; ($PR_MEMORY -1 -1) | |
0a19c2f1 | 29 | (local.set $ms ($PRINT $mv2)) |
33309c6a JM |
30 | ) |
31 | ||
3ea09886 | 32 | ;; release memory from MAL_READ |
33309c6a JM |
33 | ($RELEASE $mv1) |
34 | $ms | |
35 | ) | |
36 | ||
ed13313d | 37 | (func $main (param $argc i32 $argv i32) (result i32) |
349faa83 JM |
38 | (LET $line (STATIC_ARRAY 201) |
39 | $res 0) | |
33309c6a JM |
40 | |
41 | ;; DEBUG | |
0a19c2f1 JM |
42 | ;; ($printf_1 "memoryBase: 0x%x\n" (global.get $memoryBase)) |
43 | ;; ($printf_1 "heap_start: 0x%x\n" (global.get $heap_start)) | |
44 | ;; ($printf_1 "heap_end: 0x%x\n" (global.get $heap_end)) | |
45 | ;; ($printf_1 "mem: 0x%x\n" (global.get $mem)) | |
46 | ;; ($printf_1 "string_mem: %d\n" (global.get $string_mem)) | |
33309c6a | 47 | |
50eea9ad | 48 | ;; ($PR_MEMORY_RAW |
0a19c2f1 JM |
49 | ;; (global.get $mem) (i32.add (global.get $mem) |
50 | ;; (i32.mul (global.get $mem_unused_start) 4))) | |
50eea9ad | 51 | |
0a19c2f1 JM |
52 | (drop ($STRING (global.get $STRING_T) "uvw")) |
53 | (drop ($STRING (global.get $STRING_T) "xyz")) | |
349faa83 JM |
54 | |
55 | ;;($PR_MEMORY -1 -1) | |
50eea9ad JM |
56 | |
57 | ;; Start REPL | |
33309c6a JM |
58 | (block $repl_done |
59 | (loop $repl_loop | |
50eea9ad JM |
60 | (br_if $repl_done (i32.eqz ($readline "user> " $line))) |
61 | (br_if $repl_loop (i32.eq (i32.load8_u $line) 0)) | |
0a19c2f1 JM |
62 | (local.set $res ($REP $line 0)) |
63 | (if (global.get $error_type) | |
33309c6a | 64 | (then |
0a19c2f1 JM |
65 | ($printf_1 "Error: %s\n" (global.get $error_str)) |
66 | (global.set $error_type 0)) | |
33309c6a JM |
67 | (else |
68 | ($printf_1 "%s\n" ($to_String $res)))) | |
69 | ($RELEASE $res) | |
50eea9ad JM |
70 | ;;($PR_MEMORY_SUMMARY_SMALL) |
71 | (br $repl_loop) | |
72 | ) | |
73 | ) | |
33309c6a JM |
74 | |
75 | ($print "\n") | |
3ea09886 | 76 | ;;($PR_MEMORY -1 -1) |
33309c6a JM |
77 | 0 |
78 | ) | |
79 | ||
33309c6a JM |
80 | ) |
81 |