Luwa's end goal is to JIT to WASM. Right now it's a bit of a learning environment for me as I've never written a language implementation that required real parsing
I'll try avoid my usual stream of consciousness here, instead that's at my devlog
main.js is nodejs entrypoint
WASM runtime is in rt/. rt/make.lua is luwa-agnostic macro-assembler logic. mkrt.lua produces an rt.wasm which rt.js interfaces
GC is a LISP2 compacting GC. GC performance is a low priority given WASM GC RFC. See rt/gc.lua
VM needs to be reentrant. Currently running coroutine is oluastack. Builtins which call functions work by returning after setting up a necessary callstack. See rt/vm.lua
rt/prelude.lua implements builtins which do not require hand written wasm