From e0959b9384f8ea1d36f86bc8ebc44bd81ea3f5a0 Mon Sep 17 00:00:00 2001 From: coolreader18 <33094578+coolreader18@users.noreply.github.com> Date: Wed, 26 Dec 2018 11:21:45 -0600 Subject: [PATCH] Implement error conversion for js_to_py --- wasm/lib/src/lib.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/wasm/lib/src/lib.rs b/wasm/lib/src/lib.rs index 81b3d1cbf..bb8af60c7 100644 --- a/wasm/lib/src/lib.rs +++ b/wasm/lib/src/lib.rs @@ -9,7 +9,7 @@ use js_sys::{Array, Object, Reflect, TypeError}; use rustpython_vm::compile; use rustpython_vm::pyobject::{self, PyFuncArgs, PyObjectRef, PyResult}; use rustpython_vm::VirtualMachine; -use wasm_bindgen::prelude::*; +use wasm_bindgen::{prelude::*, JsCast}; fn py_str_err(vm: &mut VirtualMachine, py_err: &PyObjectRef) -> String { vm.to_pystr(&py_err) @@ -74,7 +74,15 @@ fn js_to_py(vm: &mut VirtualMachine, js_val: JsValue) -> PyObjectRef { .map_err(|err| js_to_py(vm, err)) }, ) - // TODO: Check if exception, convert to python exception + } else if let Some(err) = js_val.dyn_ref::() { + let exc_type = match String::from(err.name()).as_str() { + "TypeError" => &vm.ctx.exceptions.type_error, + "ReferenceError" => &vm.ctx.exceptions.name_error, + "SyntaxError" => &vm.ctx.exceptions.syntax_error, + _ => &vm.ctx.exceptions.exception_type, + } + .clone(); + vm.new_exception(exc_type, err.message().into()) } else { let loads = rustpython_vm::import::import( vm,