Merge pull request #464 from dubek/tests-nth-with-nil-element
[jackhill/mal.git] / wasm / step1_read_print.wam
CommitLineData
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 ;; PRINT
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