Uses QuickJS through the rquickjs
crate to evalulate JavaScript source code or QuickJS bytecode.
Refer to the crate level documentation to learn more.
Example usage:
use anyhow::Result;
use javy::quickjs::{
function::{MutFn, Rest},
Ctx, Function, Value
};
use javy::{from_js_error, Runtime};
fn main() -> Result<()> {
let runtime = Runtime::default();
let context = runtime.context();
context.with(|cx| {
let globals = cx.globals();
globals.set(
"print_hello",
Function::new(
cx.clone(),
MutFn::new(|_: Ctx<'_>, _: Rest<Value<'_>>| {
println!("Hello, world!");
}),
)?,
)
})?;
context.with(|cx| {
cx.eval_with_options("print_hello();", Default::default())
.map_err(|e| from_js_error(cx.clone(), e))
.map(|_: ()| ())
})?;
Ok(())
}
Publishing to crates.io
To publish this crate to crates.io, run ./publish.sh. You will likely need to
run git submodule deinit test262 so the working tree is small enough for the
publishing to succeed.