diff options
Diffstat (limited to 'src/lib.rs')
| -rwxr-xr-x | src/lib.rs | 26 |
1 files changed, 10 insertions, 16 deletions
@@ -34,12 +34,6 @@ fn tr_op(op: &forth::vm::OpCode) -> String { s.to_string() } -fn map_set<T: Into::<JsValue>>(m: &js_sys::Map, k: &str, v: T) { - let jk: js_sys::JsString = k.to_string().into(); - let jv = v.into(); - m.set(&jk, &jv); -} - impl From<&forth::vm::InstructionPointer> for js_sys::Map { fn from(ip: &forth::vm::InstructionPointer) -> Self { let res = Self::new(); @@ -134,7 +128,7 @@ impl ExportedVM { js_sys::Array::from_iter(ops) } ); - map_set(&res, "wordlist", js_sys::Array::from_iter(wl)); + res.set(&"wordlist".into(), &js_sys::Array::from_iter(wl)); // annotations let annos = self.annos.iter().map( @@ -148,31 +142,31 @@ impl ExportedVM { js_sys::Array::from_iter(ops) } ); - map_set(&res, "annos", js_sys::Array::from_iter(annos)); + res.set(&"annos".into(), &js_sys::Array::from_iter(annos)); // instruction pointer let ip: js_sys::Map = (&vm.ip).into(); - map_set(&res, "ip", js_sys::Object::from_entries(&ip)?); + res.set(&"ip".into(), &js_sys::Object::from_entries(&ip)?.into()); // stack let s = vm.stack.0.iter().map(|v| Into::<JsValue>::into(*v as i32)); - map_set(&res, "stack", js_sys::Array::from_iter(s)); + res.set(&"stack".into(), &js_sys::Array::from_iter(s)); // callstack let cs = vm.callstack.0.iter().map(|v| { let ip: js_sys::Map = v.into(); js_sys::Object::from_entries(&ip).expect("can't make object from ip map") }); - map_set(&res, "callstack", js_sys::Array::from_iter(cs)); + res.set(&"callstack".into(), &js_sys::Array::from_iter(cs)); let vars = js_sys::Map::new(); let mut out = vec![]; std::mem::swap(&mut out, &mut vm.out); - map_set(&vars, "out", out); - map_set::<isize>(&vars, "heading", vm.heading.into()); - map_set::<isize>(&vars, "speed", vm.speed.into()); - map_set::<isize>(&vars, "doppler", vm.doppler.into()); - map_set(&res, "vars", js_sys::Object::from_entries(&vars)?); + vars.set(&"out".into(), &out.into()); + vars.set(&"heading".into(), &vm.heading.into()); + vars.set(&"speed".into(), &vm.speed.into()); + vars.set(&"doppler".into(), &vm.doppler.into()); + res.set(&"vars".into(), &js_sys::Object::from_entries(&vars)?.into()); Ok(js_sys::Object::from_entries(&res)?) } |
