diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/bindings/callback.rs | 17 | ||||
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 6 |
2 files changed, 10 insertions, 13 deletions
diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs index 975e3cb99d9..4baccae098e 100644 --- a/components/script/dom/bindings/callback.rs +++ b/components/script/dom/bindings/callback.rs @@ -4,6 +4,7 @@ //! Base classes to work with IDL callbacks. +use dom::bindings::error::{Fallible, Error}; use dom::bindings::global::global_object_for_js_object; use dom::bindings::js::JSRef; use dom::bindings::utils::Reflectable; @@ -93,22 +94,20 @@ impl CallbackInterface { } /// Returns the property with the given `name`, if it is a callable object, - /// or `Err(())` otherwise. If it returns `Err(())`, a JSAPI exception is - /// pending. + /// or an error otherwise. pub fn get_callable_property(&self, cx: *mut JSContext, name: &str) - -> Result<JSVal, ()> { + -> Fallible<JSVal> { let mut callable = UndefinedValue(); unsafe { - let name = CString::new(name).unwrap(); - if JS_GetProperty(cx, self.callback(), name.as_ptr(), &mut callable) == 0 { - return Err(()); + let c_name = CString::new(name).unwrap(); + if JS_GetProperty(cx, self.callback(), c_name.as_ptr(), &mut callable) == 0 { + return Err(Error::JSFailed); } if !callable.is_object() || JS_ObjectIsCallable(cx, callable.to_object()) == 0 { - // FIXME(#347) - //ThrowErrorMessage(cx, MSG_NOT_CALLABLE, description.get()); - return Err(()); + return Err(Error::Type( + format!("The value of the {} property is not callable", name))); } } Ok(callable) diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index cf7fcfd8e4c..78d8b2f7f6f 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -5304,10 +5304,8 @@ class CallbackOperationBase(CallbackMethod): "methodName": self.methodName } getCallableFromProp = string.Template( - 'match self.parent.get_callable_property(cx, "${methodName}") {\n' - ' Err(_) => return Err(JSFailed),\n' - ' Ok(callable) => callable,\n' - '}').substitute(replacements) + 'try!(self.parent.get_callable_property(cx, "${methodName}"))' + ).substitute(replacements) if not self.singleOperation: return 'JS::Rooted<JS::Value> callable(cx);\n' + getCallableFromProp return ( |