diff options
Diffstat (limited to 'src/components/script/dom')
-rw-r--r-- | src/components/script/dom/bindings/callback.rs | 14 | ||||
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 18 |
2 files changed, 16 insertions, 16 deletions
diff --git a/src/components/script/dom/bindings/callback.rs b/src/components/script/dom/bindings/callback.rs index dff5aeb6a2b..a6d7eb6a507 100644 --- a/src/components/script/dom/bindings/callback.rs +++ b/src/components/script/dom/bindings/callback.rs @@ -5,7 +5,7 @@ use dom::bindings::utils::Reflectable; use js::jsapi::{JSContext, JSObject, JS_WrapObject, JS_ObjectIsCallable}; use js::jsapi::{JS_GetProperty, JSTracer, JS_CallTracer}; -use js::jsval::JSVal; +use js::jsval::{JSVal, UndefinedValue}; use js::JSTRACE_OBJECT; use std::cast; @@ -61,20 +61,20 @@ impl CallbackInterface { } } - pub fn GetCallableProperty(&self, cx: *JSContext, name: *libc::c_char, callable: &mut JSVal) -> bool { + pub fn GetCallableProperty(&self, cx: *JSContext, name: &str) -> Result<JSVal, ()> { + let mut callable = UndefinedValue(); unsafe { - if JS_GetProperty(cx, self.callback, name, &*callable) == 0 { - return false; + if name.to_c_str().with_ref(|name| JS_GetProperty(cx, self.callback, name, &mut callable as *mut JSVal as *JSVal)) == 0 { + return Err(()); } if !callable.is_object() || JS_ObjectIsCallable(cx, callable.to_object()) == 0 { //ThrowErrorMessage(cx, MSG_NOT_CALLABLE, description.get()); - return false; + return Err(()); } - - return true; } + Ok(callable) } } diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 5041a1ae756..5fa018408bd 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -5312,19 +5312,19 @@ class CallbackOperationBase(CallbackMethod): "methodName": self.methodName } getCallableFromProp = string.Template( - 'if "${methodName}".to_c_str().with_ref(|name| !self.parent.GetCallableProperty(cx, name, &mut callable)) {\n' - ' return${errorReturn};\n' - '}\n').substitute(replacements) + 'match self.parent.GetCallableProperty(cx, "${methodName}") {\n' + ' Err(_) => return${errorReturn},\n' + ' Ok(callable) => callable,\n' + '}').substitute(replacements) if not self.singleOperation: return 'JS::Rooted<JS::Value> callable(cx);\n' + getCallableFromProp return ( 'let isCallable = unsafe { JS_ObjectIsCallable(cx, self.parent.callback) != 0 };\n' - 'let mut callable = UndefinedValue();\n' - 'if isCallable {\n' - ' callable = unsafe { ObjectValue(&*self.parent.callback) };\n' - '} else {\n' - '%s' - '}\n' % CGIndenter(CGGeneric(getCallableFromProp)).define()) + 'let callable =\n' + + CGIndenter( + CGIfElseWrapper('isCallable', + CGGeneric('unsafe { ObjectValue(&*self.parent.callback) }'), + CGGeneric(getCallableFromProp))).define() + ';\n') class CallbackOperation(CallbackOperationBase): """ |