diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 46979ca7ce6..23359cae5fc 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -3107,11 +3107,10 @@ class CGPerSignatureCall(CGThing): self.idlNode.identifier.name)) def getErrorReport(self): - #return CGGeneric('return ThrowMethodFailedWithDetails<%s>(cx, rv, "%s", "%s");' - # % (toStringBool(not self.descriptor.workers), - # self.descriptor.interface.identifier.name, - # self.idlNode.identifier.name)) - return CGGeneric('return 0'); #XXXjdm + return CGGeneric( + 'return throw_method_failed_with_details(cx, result_fallible, "%s", "%s");' % + (self.descriptor.interface.identifier.name, + self.idlNode.identifier.name)) def define(self): return (self.cgRoot.define() + "\n" + self.wrap_return_value()) diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 1163cdb783f..99f0d9f4fa9 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -18,6 +18,7 @@ use std::unstable::raw::Box; use js::glue::*; use js::glue::{DefineFunctionWithReserved, GetObjectJSClass, RUST_OBJECT_TO_JSVAL}; use js::glue::{js_IsObjectProxyClass, js_IsFunctionProxyClass, IsProxyHandlerFamily}; +use js::glue::{ReportError}; use js::jsapi::{JS_AlreadyHasOwnProperty, JS_NewObject, JS_NewFunction}; use js::jsapi::{JS_DefineProperties, JS_WrapValue, JS_ForwardGetPropertyTo}; use js::jsapi::{JS_GetClass, JS_LinkConstructorAndPrototype, JS_GetStringCharsAndLength}; @@ -30,6 +31,7 @@ use js::jsapi::{JSContext, JSObject, JSBool, jsid, JSClass, JSNative, JSTracer}; use js::jsapi::{JSFunctionSpec, JSPropertySpec, JSVal, JSPropertyDescriptor}; use js::jsapi::{JSPropertyOp, JSStrictPropertyOp, JS_NewGlobalObject, JS_InitStandardClasses}; use js::jsapi::{JSString, JS_CallTracer, JSTRACE_OBJECT}; +use js::jsapi::{JS_IsExceptionPending}; use js::jsfriendapi::bindgen::JS_NewObjectWithUniqueType; use js::{JSPROP_ENUMERATE, JSVAL_NULL, JSCLASS_IS_GLOBAL, JSCLASS_IS_DOMJSCLASS}; use js::{JSPROP_PERMANENT, JSID_VOID, JSPROP_NATIVE_ACCESSORS, JSPROP_GETTER}; @@ -251,6 +253,7 @@ pub fn jsval_to_str(cx: *JSContext, v: JSVal, } else { let jsstr = unsafe { JS_ValueToString(cx, v) }; if jsstr.is_null() { + debug!("JS_ValueToString failed"); Err(()) } else { Ok(jsstring_to_str(cx, jsstr)) @@ -265,6 +268,7 @@ pub fn jsval_to_domstring(cx: *JSContext, v: JSVal) -> Result, } else { let jsstr = unsafe { JS_ValueToString(cx, v) }; if jsstr.is_null() { + debug!("JS_ValueToString failed"); Err(()) } else { Ok(Some(jsstring_to_str(cx, jsstr))) @@ -917,6 +921,20 @@ pub fn cx_for_dom_object(obj: &mut T) -> *JSContext { cx_for_dom_reflector(obj.reflector().get_jsobject()) } +#[fixed_stack_segment] +pub fn throw_method_failed_with_details(cx: *JSContext, + result: Result, + interface: &'static str, + member: &'static str) -> JSBool { + assert!(result.is_err()); + assert!(unsafe { JS_IsExceptionPending(cx) } == 0); + let message = format!("Method failed: {}.{}", interface, member); + do message.with_c_str |string| { + unsafe { ReportError(cx, string) }; + } + return 0; +} + /// Check if an element name is valid. See http://www.w3.org/TR/xml/#NT-Name /// for details. #[deriving(Eq)] diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 648339f5c5b..5e9f0e9ffee 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -194,6 +194,7 @@ impl Document { pub fn CreateElement(&self, abstract_self: AbstractDocument, local_name: DOMString) -> Fallible> { if xml_name_type(local_name) == InvalidXMLName { + debug!("Not a valid element name"); return Err(InvalidCharacter); } let local_name = local_name.to_ascii_lower(); diff --git a/src/support/spidermonkey/rust-mozjs b/src/support/spidermonkey/rust-mozjs index 566c2af971a..e3c4f8bfbea 160000 --- a/src/support/spidermonkey/rust-mozjs +++ b/src/support/spidermonkey/rust-mozjs @@ -1 +1 @@ -Subproject commit 566c2af971abaa5e8c51b59fa400a7e07835b257 +Subproject commit e3c4f8bfbea4f5523493c394576e76660fdf175d