diff --git a/vm/src/obj/objsequence.rs b/vm/src/obj/objsequence.rs index 893e8cd82..2fd97d279 100644 --- a/vm/src/obj/objsequence.rs +++ b/vm/src/obj/objsequence.rs @@ -78,6 +78,7 @@ pub trait PySliceableSequence { } else if step.is_positive() { let range = self.get_slice_range(start, stop); if range.start < range.end { + #[allow(clippy::range_plus_one)] match step.to_i32() { Some(1) => Ok(self.do_slice(range)), Some(num) => Ok(self.do_stepped_slice(range, num as usize)), diff --git a/wasm/lib/src/browser_module.rs b/wasm/lib/src/browser_module.rs index 8766d06b4..e30f65391 100644 --- a/wasm/lib/src/browser_module.rs +++ b/wasm/lib/src/browser_module.rs @@ -75,8 +75,8 @@ fn browser_fetch(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { if let Some(headers) = headers { let h = request.headers(); for (key, value) in rustpython_vm::obj::objdict::get_key_value_pairs(&headers) { - let ref key = vm.to_str(&key)?.value; - let ref value = vm.to_str(&value)?.value; + let key = &vm.to_str(&key)?.value; + let value = &vm.to_str(&value)?.value; h.set(key, value) .map_err(|err| convert::js_py_typeerror(vm, err))?; } @@ -163,9 +163,8 @@ pub struct PyPromise { } impl PyValue for PyPromise { - fn class(_vm: &mut VirtualMachine) -> PyObjectRef { - // TODO - unimplemented!() + fn class(vm: &mut VirtualMachine) -> PyObjectRef { + vm.class(BROWSER_NAME, "Promise") } } @@ -183,7 +182,7 @@ pub fn get_promise_value(obj: &PyObjectRef) -> Promise { } pub fn import_promise_type(vm: &mut VirtualMachine) -> PyResult { - match import_module(vm, PathBuf::default(), BROWSER_NAME)?.get_attr("Promise".into()) { + match import_module(vm, PathBuf::default(), BROWSER_NAME)?.get_attr("Promise") { Some(promise) => Ok(promise), None => Err(vm.new_not_implemented_error("No Promise".to_string())), } diff --git a/wasm/lib/src/convert.rs b/wasm/lib/src/convert.rs index 42d4675f0..1cf890768 100644 --- a/wasm/lib/src/convert.rs +++ b/wasm/lib/src/convert.rs @@ -129,10 +129,7 @@ pub fn py_to_js(vm: &mut VirtualMachine, py_obj: PyObjectRef) -> JsValue { } arr.into() } else { - let dumps = rustpython_vm::import::import_module(vm, std::path::PathBuf::default(), "json") - .expect("Couldn't get json module") - .get_attr("dumps".into()) - .expect("Couldn't get json dumps"); + let dumps = vm.class("json", "dumps"); match vm.invoke(dumps, PyFuncArgs::new(vec![py_obj], vec![])) { Ok(value) => { let json = vm.to_pystr(&value).unwrap(); @@ -156,7 +153,7 @@ pub fn object_entries(obj: &Object) -> impl Iterator Result { result .map(|value| py_to_js(vm, value)) - .map_err(|err| py_err_to_js_err(vm, &err).into()) + .map_err(|err| py_err_to_js_err(vm, &err)) } pub fn js_to_py(vm: &mut VirtualMachine, js_val: JsValue) -> PyObjectRef { @@ -229,11 +226,7 @@ pub fn js_to_py(vm: &mut VirtualMachine, js_val: JsValue) -> PyObjectRef { // Because `JSON.stringify(undefined)` returns undefined vm.get_none() } else { - let loads = rustpython_vm::import::import_module(vm, std::path::PathBuf::default(), "json") - .expect("Couldn't get json module") - .get_attr("loads".into()) - .expect("Couldn't get json dumps"); - + let loads = vm.class("json", "dumps"); let json = match js_sys::JSON::stringify(&js_val) { Ok(json) => String::from(json), Err(_) => return vm.get_none(), diff --git a/wasm/lib/src/vm_class.rs b/wasm/lib/src/vm_class.rs index dfca86f52..408e2b3cc 100644 --- a/wasm/lib/src/vm_class.rs +++ b/wasm/lib/src/vm_class.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use std::rc::{Rc, Weak}; use js_sys::{Object, Reflect, SyntaxError, TypeError}; -use wasm_bindgen::{prelude::*, JsCast}; +use wasm_bindgen::prelude::*; use rustpython_vm::compile; use rustpython_vm::frame::{NameProtocol, Scope};