Skip to content

Commit fa5e04c

Browse files
authored
Return error when JS_Eval fails (#258)
1 parent b9165f6 commit fa5e04c

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

crates/cli/src/bytecode.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::Result;
1+
use anyhow::{anyhow, Result};
22
use wasmtime::{Engine, Instance, Linker, Memory, Module, Store};
33
use wasmtime_wasi::{WasiCtx, WasiCtxBuilder};
44

@@ -19,7 +19,7 @@ fn create_wasm_env() -> Result<(Store<WasiCtx>, Instance, Memory)> {
1919
let module = Module::new(&engine, QUICKJS_PROVIDER_MODULE)?;
2020
let mut linker = Linker::new(&engine);
2121
wasmtime_wasi::add_to_linker(&mut linker, |s| s)?;
22-
let wasi = WasiCtxBuilder::new().build();
22+
let wasi = WasiCtxBuilder::new().inherit_stderr().build();
2323
let mut store = Store::new(&engine, wasi);
2424
let instance = linker.instantiate(&mut store, &module)?;
2525
let memory = instance.get_memory(&mut store, "memory").unwrap();
@@ -56,7 +56,9 @@ fn call_compile(
5656
) -> Result<u32> {
5757
let compile_src_fn =
5858
instance.get_typed_func::<(u32, u32), u32, _>(&mut store, "compile_src")?;
59-
let ret_ptr = compile_src_fn.call(&mut store, (js_src_ptr, js_src_len))?;
59+
let ret_ptr = compile_src_fn
60+
.call(&mut store, (js_src_ptr, js_src_len))
61+
.map_err(|_| anyhow!("JS compilation failed"))?;
6062
Ok(ret_ptr)
6163
}
6264

crates/cli/src/opt.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::{bail, Error, Result};
1+
use anyhow::{anyhow, bail, Error, Result};
22
use binaryen::{CodegenConfig, Module};
33
use std::path::Path;
44
use wizer::Wizer;
@@ -25,7 +25,8 @@ impl<'a> Optimizer<'a> {
2525
.allow_wasi(true)?
2626
.inherit_stdio(true)
2727
.wasm_bulk_memory(true)
28-
.run(self.wasm)?;
28+
.run(self.wasm)
29+
.map_err(|_| anyhow!("JS compilation failed"))?;
2930

3031
if self.optimize {
3132
let codegen_cfg = CodegenConfig {

crates/quickjs-wasm-rs/src/js_binding/context.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ impl Context {
7979
JS_EVAL_FLAG_COMPILE_ONLY as i32,
8080
)
8181
};
82+
// returns err with details if JS_Eval fails
83+
Value::new(self.inner, raw)?;
8284

8385
let mut output_size = 0;
8486
unsafe {
@@ -434,6 +436,16 @@ mod tests {
434436
Ok(())
435437
}
436438

439+
#[test]
440+
fn test_compile_errors_when_invalid_using_syntax() -> Result<()> {
441+
let ctx = Context::default();
442+
let contents = "await foo;";
443+
let res = ctx.compile_global(SCRIPT_NAME, contents);
444+
let err = res.unwrap_err();
445+
assert!(err.to_string().starts_with("Uncaught SyntaxError"));
446+
Ok(())
447+
}
448+
437449
#[test]
438450
fn test_creates_a_value_from_f64() -> Result<()> {
439451
let ctx = Context::default();

0 commit comments

Comments
 (0)