diff --git a/crates/js-sys/src/lib.rs b/crates/js-sys/src/lib.rs index 3747feab..ff2362c4 100644 --- a/crates/js-sys/src/lib.rs +++ b/crates/js-sys/src/lib.rs @@ -2953,8 +2953,8 @@ pub mod WebAssembly { /// efficiently shared with Workers, and instantiated multiple times. /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module - #[wasm_bindgen(constructor, js_namespace = WebAssembly)] - pub fn new(buffer_source: &JsValue) -> Module; + #[wasm_bindgen(constructor, js_namespace = WebAssembly, catch)] + pub fn new(buffer_source: &JsValue) -> Result; /// The `WebAssembly.customSections()` function returns a copy of the /// contents of all custom sections in the given module with the given @@ -2994,8 +2994,8 @@ pub mod WebAssembly { /// of the given size and element type. /// /// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table - #[wasm_bindgen(constructor, js_namespace = WebAssembly)] - pub fn new(table_descriptor: &Object) -> Table; + #[wasm_bindgen(constructor, js_namespace = WebAssembly, catch)] + pub fn new(table_descriptor: &Object) -> Result; /// The `length` prototype property of the `WebAssembly.Table` object /// returns the length of the table, i.e. the number of elements in the diff --git a/crates/js-sys/tests/wasm/WebAssembly.js b/crates/js-sys/tests/wasm/WebAssembly.js index ec9310a3..51d0c343 100644 --- a/crates/js-sys/tests/wasm/WebAssembly.js +++ b/crates/js-sys/tests/wasm/WebAssembly.js @@ -17,7 +17,12 @@ function getTableObject() { return { element: "anyfunc", initial: 1 } } +function getInvalidTableObject() { + return { element: "anyfunc", initial: 1, maximum: 0 } +} + module.exports = { - getWasmArray, + getInvalidTableObject, getTableObject, + getWasmArray, }; diff --git a/crates/js-sys/tests/wasm/WebAssembly.rs b/crates/js-sys/tests/wasm/WebAssembly.rs index 6070720b..fe16378e 100644 --- a/crates/js-sys/tests/wasm/WebAssembly.rs +++ b/crates/js-sys/tests/wasm/WebAssembly.rs @@ -11,6 +11,9 @@ extern { #[wasm_bindgen(js_name = getTableObject)] fn get_table_object() -> Object; + + #[wasm_bindgen(js_name = getInvalidTableObject)] + fn get_invalid_table_object() -> Object; } fn get_invalid_wasm() -> JsValue { @@ -66,46 +69,61 @@ fn compile_valid() -> impl Future { #[wasm_bindgen_test] fn module_inheritance() { - let module = WebAssembly::Module::new(&get_valid_wasm()); + let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); assert!(module.is_instance_of::()); assert!(module.is_instance_of::()); let _: &Object = module.as_ref(); } +#[wasm_bindgen_test] +fn module_error() { + let error = WebAssembly::Module::new(&get_invalid_wasm()).err().unwrap(); + assert!(error.is_instance_of::()); + + let error = WebAssembly::Module::new(&get_bad_type_wasm()).err().unwrap(); + assert!(error.is_instance_of::()); +} + #[wasm_bindgen_test] fn module_custom_sections() { - let module = WebAssembly::Module::new(&get_valid_wasm()); + let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let cust_sec = WebAssembly::Module::custom_sections(&module, "abcd"); assert_eq!(cust_sec.length(), 0); } #[wasm_bindgen_test] fn module_exports() { - let module = WebAssembly::Module::new(&get_valid_wasm()); + let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let exports = WebAssembly::Module::exports(&module); assert_eq!(exports.length(), 1); } #[wasm_bindgen_test] fn module_imports() { - let module = WebAssembly::Module::new(&get_valid_wasm()); + let module = WebAssembly::Module::new(&get_valid_wasm()).unwrap(); let imports = WebAssembly::Module::imports(&module); assert_eq!(imports.length(), 1); } #[wasm_bindgen_test] fn table_inheritance() { - let table = WebAssembly::Table::new(&get_table_object().into()); + let table = WebAssembly::Table::new(&get_table_object().into()).unwrap(); assert!(table.is_instance_of::()); assert!(table.is_instance_of::()); let _: &Object = table.as_ref(); } +#[wasm_bindgen_test] +fn table_error() { + let error = WebAssembly::Table::new(&get_invalid_table_object()).err().unwrap(); + assert!(error.is_instance_of::()); +} + #[wasm_bindgen_test] fn table() { - let table = WebAssembly::Table::new(&get_table_object().into()); + let table = WebAssembly::Table::new(&get_table_object().into()).unwrap(); assert_eq!(table.length(), 1); }