diff --git a/makefile b/makefile index ac2b5ab4..eaeef8dc 100644 --- a/makefile +++ b/makefile @@ -31,7 +31,7 @@ rtverifyn-singeli: wasi-o3: @${MAKE} singeli=0 t=wasi_o3 f="-DWASM -DWASI -DNO_MMAP -O3 -DCATCH_ERRORS=0 -D_WASI_EMULATED_MMAN --target=wasm32-wasi" LDFLAGS="-lwasi-emulated-mman --target=wasm32-wasi -Wl,-z,stack-size=8388608 -Wl,--initial-memory=67108864" LD_LIBS= PIE= c emcc-o3: - @${MAKE} singeli=0 t=emcc_o3 f='-DWASM -DEMCC -O3' LDFLAGS='-s EXPORTED_FUNCTIONS=_main,_cbqn_runLine -s EXPORTED_RUNTIME_METHODS=ccall,cwrap -s ALLOW_MEMORY_GROWTH=1' CC=emcc OUTPUT=BQN.js c + @${MAKE} singeli=0 t=emcc_o3 f='-DWASM -DEMCC -O3' LDFLAGS='-s EXPORTED_FUNCTIONS=_main,_cbqn_runLine,_cbqn_evalSrc -s EXPORTED_RUNTIME_METHODS=ccall,cwrap -s ALLOW_MEMORY_GROWTH=1' CC=emcc OUTPUT=BQN.js c # compiler setup diff --git a/src/main.c b/src/main.c index 04d55437..0fe7660a 100644 --- a/src/main.c +++ b/src/main.c @@ -209,7 +209,7 @@ void cbqn_runLine0(char* ln, i64 read) { gc_maybeGC(); } -void cbqn_runLine(char* ln, i64 read) { +void cbqn_runLine(char* ln, i64 len) { if(CATCH) { fprintf(stderr, "Error: "); printErrMsg(thrownMsg); fputc('\n', stderr); vm_pst(envCurr+1, envStart+envPrevHeight); @@ -220,16 +220,39 @@ void cbqn_runLine(char* ln, i64 read) { gc_maybeGC(); return; } - cbqn_runLine0(ln, read); + cbqn_runLine0(ln, len); popCatch(); } +#if WASM +void cbqn_evalSrc(char* src, i64 len) { + Body* body = m_nnsDesc(); + B ns = m_nns(body); + Scope* sc = ptr_inc(c(NS, ns)->sc); + ptr_dec(v(ns)); + + B code = fromUTF8l(src); + Block* block = bqn_compSc(code, inc(replPath), emptySVec(), sc, true); + + ptr_dec(sc->body); + sc->body = ptr_inc(block->bodies[0]); + B res = execBlockInline(block, sc); + ptr_dec(block); + ptr_dec(sc); + B resFmt = bqn_fmt(res); + + printRaw(resFmt); dec(resFmt); + putchar('\n'); +} +#endif + #if EMCC int main() { repl_init(); } #else int main(int argc, char* argv[]) { + repl_init(); bool startREPL = argc==1; bool silentREPL = false; bool execStdin = false;