Change Function::apply to catch the result

We don't know whether it'll throw or not!
This commit is contained in:
Alex Crichton 2018-07-20 12:44:21 -07:00
parent 75215134a5
commit f3d4a20ec7
3 changed files with 4 additions and 9 deletions

View File

@ -673,8 +673,8 @@ extern "C" {
/// (or an array-like object).
///
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
#[wasm_bindgen(method)]
pub fn apply(this: &Function, context: &JsValue, args: &Array) -> JsValue;
#[wasm_bindgen(method, catch)]
pub fn apply(this: &Function, context: &JsValue, args: &Array) -> Result<JsValue, JsValue>;
/// The bind() method creates a new function that, when called, has its this keyword set to the provided value,
/// with a given sequence of arguments preceding any provided when the new function is called.

View File

@ -20,7 +20,7 @@ fn apply() {
args.push(1.into());
args.push(2.into());
args.push(3.into());
assert_eq!(MAX.apply(&JsValue::undefined(), &args), 3);
assert_eq!(MAX.apply(&JsValue::undefined(), &args).unwrap(), 3);
let arr = JsValue::from(Array::new());
let args = Array::new();

View File

@ -3,7 +3,7 @@ use std::fmt;
use std::mem;
use console_error_panic_hook;
use js_sys::Array;
use js_sys::{Array, Function};
use wasm_bindgen::prelude::*;
/// Runtime test harness support instantiated in JS.
@ -24,11 +24,6 @@ pub struct Context {
#[wasm_bindgen]
extern {
// Redefined from `js_sys` so we can catch the error
pub type Function;
#[wasm_bindgen(method, catch)]
fn apply(this: &Function, new_this: &JsValue, args: &Array) -> Result<JsValue, JsValue>;
#[wasm_bindgen(js_namespace = console, js_name = log)]
#[doc(hidden)]
pub fn console_log(s: &str);