1fn main() {
2 let mut vm = mjs_sys::VM::create();
3
4 let val = vm.exec(b"1 / 2\0").unwrap();
5 if val.is_number() {
6 println!("Result: {}", val.as_double().unwrap());
7 }
8
9 let val2 = vm.exec(b"\"foobar\"\0").unwrap();
10 if val2.is_string() {
11 println!("Result: {}", val2.as_str().unwrap().unwrap());
12 }
13
14 let mut js_function = vm
16 .exec(
17 b"
18 function foobar(x) {
19 return 42 + x;
20 }
21 foobar
22 \0",
23 )
24 .unwrap();
25
26 if js_function.is_function() {
27 let this = None;
28 let x = vm.make_number(10.);
29 let args = &[&x];
30 let res = js_function.call(this, args).unwrap();
31 if res.is_number() {
32 println!("Result: {}", res.as_double().unwrap());
33 }
34 }
35
36 fn rust_function(mjs: *mut mjs_sys::mjs) {
38 let mut vm = mjs_sys::VM::from_inner(mjs);
39 let x = vm.arg(0).unwrap().as_int().unwrap();
40 println!("JS -> Rust: {}", x);
41 }
42
43 let js_function = vm.make_foreign(rust_function as _);
44 vm.global().set(b"rust", js_function).unwrap();
45 vm.exec(b"rust(42)\0").unwrap();
46
47 vm.destroy();
48}