mirror of
https://github.com/kanaka/mal.git
synced 2024-10-05 18:08:55 +03:00
8a19f60386
- Reorder README to have implementation list after "learning tool" bullet. - This also moves tests/ and libs/ into impls. It would be preferrable to have these directories at the top level. However, this causes difficulties with the wasm implementations which need pre-open directories and have trouble with paths starting with "../../". So in lieu of that, symlink those directories to the top-level. - Move the run_argv_test.sh script into the tests directory for general hygiene.
50 lines
1018 B
Plaintext
50 lines
1018 B
Plaintext
(module $step0_repl
|
|
|
|
;; READ
|
|
(func $READ (param $str i32) (result i32)
|
|
$str
|
|
)
|
|
|
|
(func $EVAL (param $ast i32) (param $env i32) (result i32)
|
|
$ast
|
|
)
|
|
|
|
;; PRINT
|
|
(func $PRINT (param $ast i32) (result i32)
|
|
$ast
|
|
)
|
|
|
|
;; REPL
|
|
(func $rep (param $line i32) (result i32)
|
|
($PRINT ($EVAL ($READ $line) 0))
|
|
)
|
|
|
|
(func $main (param $argc i32 $argv i32) (result i32)
|
|
;; Constant location/value definitions
|
|
(LET $line (STATIC_ARRAY 201))
|
|
|
|
;; DEBUG
|
|
;;($printf_1 "memoryBase: 0x%x\n" (global.get $memoryBase))
|
|
|
|
;; Start REPL
|
|
(block $repl_done
|
|
(loop $repl_loop
|
|
(br_if $repl_done (i32.eqz ($readline "user> " $line)))
|
|
(br_if $repl_loop (i32.eq (i32.load8_u $line) 0))
|
|
($printf_1 "%s\n" ($rep $line))
|
|
(br $repl_loop)
|
|
)
|
|
)
|
|
|
|
($print "\n")
|
|
0
|
|
)
|
|
|
|
;; init_memory is provided by mem.wam in later steps but we just
|
|
;; printf in step0 so provide init_memory that just calls that
|
|
(func $init_memory
|
|
($init_printf_mem)
|
|
)
|
|
)
|
|
|