#![allow(
non_upper_case_globals,
non_camel_case_types,
non_snake_case,
improper_ctypes
)]
use ::std::ptr;
use mozjs::jsapi::OnNewGlobalHookOption;
use mozjs::jsval::UndefinedValue;
use mozjs::rooted;
use mozjs::rust::evaluate_script;
use mozjs::rust::wrappers2::*;
use mozjs::rust::CompileOptionsWrapper;
use mozjs::rust::SIMPLE_GLOBAL_CLASS;
use mozjs::rust::{JSEngine, RealmOptions, Runtime};
fn run(mut rt: Runtime) {
let options = RealmOptions::default();
rooted!(&in(rt.cx()) let global = unsafe {
JS_NewGlobalObject(rt.cx(), &SIMPLE_GLOBAL_CLASS, ptr::null_mut(),
OnNewGlobalHookOption::FireOnNewGlobalHook,
&*options)
});
let filename = c"inline.js".to_owned();
let lineno: u32 = 1;
rooted!(&in(rt.cx()) let mut rval = UndefinedValue());
let source: &'static str = "40 + 2";
let options = CompileOptionsWrapper::new(rt.cx_no_gc(), filename, lineno);
let res = evaluate_script(rt.cx(), global.handle(), source, rval.handle_mut(), options);
if res.is_ok() {
assert!(rval.get().is_int32());
assert_eq!(rval.get().to_int32(), 42);
}
}
fn main() {
let engine = JSEngine::init().expect("failed to initalize JS engine");
let runtime = Runtime::new(engine.handle());
run(runtime);
}
#[test]
fn eval_example() {
main()
}