1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-17 16:47:22 +03:00
mal/impls/wasm/step0_repl.wam
Joel Martin 8a19f60386 Move implementations into impls/ dir
- 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.
2020-02-10 23:50:16 -06:00

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)
)
)