diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index b36f0ebd860..1d1eb1e4fe0 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1569,16 +1569,7 @@ for (uint32_t i = 0; i < length; ++i) { wrappingCode = "" if (not descriptor.interface.isExternal() and not descriptor.interface.isCallback()): - if descriptor.wrapperCache: - wrapMethod = "WrapNewBindingObject" - else: - if not isCreator: - raise MethodNotCreatorError(descriptor.interface.identifier.name) - wrapMethod = "WrapNewBindingNonWrapperCachedObject" - if descriptor.pointerType == '': - wrap = "%s.wrap(cx, ${obj}, ${jsvalPtr} as *mut JSVal)" % result - else: - wrap = "%s(cx, ${obj}, %s as @mut Reflectable, ${jsvalPtr} as *mut JSVal)" % (wrapMethod, result) + wrap = "GetReflector(cx, (%s).reflector(), ${jsvalPtr} as *mut JSVal)" % result # We don't support prefable stuff in workers. assert(not descriptor.prefable or not descriptor.workers) if not descriptor.prefable: @@ -1596,11 +1587,7 @@ for (uint32_t i = 0; i < length; ++i) { failed = wrapAndSetPtr("HandleNewBindingWrappingFailure(cx, ${obj}, %s, ${jsvalPtr})" % result) wrappingCode += wrapAndSetPtr(wrap, failed) else: - #wrap = "WrapObject(cx, ${obj}, %s, %s${jsvalPtr})" % (result, getIID) - if descriptor.pointerType == '': - wrap = "(%s.wrap(cx, ${obj}, ${jsvalPtr}) != 0)" % result - else: - wrap = "if WrapNewBindingObject(cx, ${obj}, %s as @mut Reflectable, ${jsvalPtr}) { 1 } else { 0 };" % result + wrap = "GetReflector(cx, (%s).reflector(), ${jsvalPtr} as *mut JSVal)" % result wrappingCode += wrapAndSetPtr(wrap) return (wrappingCode, False) diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 0cd5456b34e..2754d6261a0 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -4,7 +4,6 @@ use dom::bindings::codegen::PrototypeList; use dom::bindings::codegen::PrototypeList::MAX_PROTO_CHAIN_LENGTH; -use dom::node::{AbstractNode, ScriptView}; use dom::window; use std::libc::c_uint; @@ -583,16 +582,14 @@ impl Reflector { } #[fixed_stack_segment] -pub fn WrapNewBindingObject(cx: *JSContext, _scope: *JSObject, - value: @mut Reflectable, - vp: *mut JSVal) -> JSBool { - unsafe { - let reflector = value.mut_reflector(); +pub fn GetReflector(cx: *JSContext, reflector: &Reflector, + vp: *mut JSVal) -> JSBool { let obj = reflector.get_jsobject(); assert!(obj.is_not_null()); - *vp = RUST_OBJECT_TO_JSVAL(obj); - return JS_WrapValue(cx, cast::transmute(vp)); - } + unsafe { + *vp = RUST_OBJECT_TO_JSVAL(obj); + return JS_WrapValue(cx, cast::transmute(vp)); + } } #[fixed_stack_segment] @@ -732,20 +729,6 @@ pub fn InitIds(cx: *JSContext, specs: &[JSPropertySpec], ids: &mut [jsid]) -> bo true } -pub trait DerivedWrapper { - fn wrap(&mut self, cx: *JSContext, scope: *JSObject, vp: *mut JSVal) -> i32; -} - -impl DerivedWrapper for AbstractNode { - #[fixed_stack_segment] - fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, vp: *mut JSVal) -> i32 { - let obj = self.reflector().get_jsobject(); - assert!(obj.is_not_null()); - unsafe { *vp = RUST_OBJECT_TO_JSVAL(obj) }; - return true as i32; - } -} - #[deriving(ToStr)] pub enum Error { FailureUnknown, diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index da54a70f19e..c828e7f24d9 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -4,7 +4,7 @@ use dom::comment::Comment; use dom::bindings::codegen::DocumentBinding; -use dom::bindings::utils::{Reflectable, Reflector, DerivedWrapper, Traceable, reflect_dom_object}; +use dom::bindings::utils::{Reflectable, Reflector, Traceable, reflect_dom_object}; use dom::bindings::utils::{ErrorResult, Fallible, NotSupported, InvalidCharacter}; use dom::bindings::utils::{DOMString, null_str_as_empty_ref, null_str_as_empty, null_str_as_word_null}; use dom::bindings::utils::is_valid_element_name; @@ -21,8 +21,7 @@ use dom::uievent::UIEvent; use dom::window::Window; use dom::htmltitleelement::HTMLTitleElement; use html::hubbub_html_parser::build_element_from_tag; -use js::jsapi::{JSObject, JSContext, JSVal, JSTracer}; -use js::glue::RUST_OBJECT_TO_JSVAL; +use js::jsapi::{JSObject, JSContext, JSTracer}; use servo_util::tree::{TreeNodeRef, ElementLike}; use std::hashmap::HashMap; @@ -165,15 +164,6 @@ impl Reflectable for AbstractDocument { } } -impl DerivedWrapper for AbstractDocument { - #[fixed_stack_segment] - fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, vp: *mut JSVal) -> i32 { - unsafe { *vp = RUST_OBJECT_TO_JSVAL(self.reflector().get_jsobject()) }; - return 1; - } -} - - impl Reflectable for Document { fn reflector<'a>(&'a self) -> &'a Reflector { self.node.reflector() diff --git a/src/components/script/dom/event.rs b/src/components/script/dom/event.rs index febd318cad7..3683ec757ac 100644 --- a/src/components/script/dom/event.rs +++ b/src/components/script/dom/event.rs @@ -5,14 +5,13 @@ use dom::eventtarget::AbstractEventTarget; use dom::window::Window; use dom::bindings::codegen::EventBinding; -use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object, DerivedWrapper}; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::utils::{DOMString, ErrorResult, Fallible, null_str_as_word_null}; use dom::mouseevent::MouseEvent; use dom::uievent::UIEvent; use geom::point::Point2D; -use js::jsapi::{JSObject, JSContext, JSVal}; -use js::glue::RUST_OBJECT_TO_JSVAL; +use js::jsapi::JSContext; use script_task::page_from_context; @@ -112,18 +111,6 @@ impl AbstractEvent { } } -impl DerivedWrapper for AbstractEvent { - #[fixed_stack_segment] - fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, vp: *mut JSVal) -> i32 { - let wrapper = self.reflector().get_jsobject(); - if wrapper.is_not_null() { - unsafe { *vp = RUST_OBJECT_TO_JSVAL(wrapper) }; - return 1; - } - unreachable!() - } -} - impl Reflectable for AbstractEvent { fn reflector<'a>(&'a self) -> &'a Reflector { self.event().reflector() diff --git a/src/components/script/dom/eventtarget.rs b/src/components/script/dom/eventtarget.rs index 92f913addf5..ddcdda44b16 100644 --- a/src/components/script/dom/eventtarget.rs +++ b/src/components/script/dom/eventtarget.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use dom::bindings::utils::{Reflectable, Reflector, DOMString, Fallible, DerivedWrapper}; +use dom::bindings::utils::{Reflectable, Reflector, DOMString, Fallible}; use dom::bindings::utils::{null_str_as_word_null, InvalidState}; use dom::bindings::codegen::EventListenerBinding::EventListener; use dom::event::AbstractEvent; @@ -10,8 +10,7 @@ use dom::eventdispatcher::dispatch_event; use dom::node::{AbstractNode, ScriptView}; use script_task::page_from_context; -use js::jsapi::{JSObject, JSContext, JSVal}; -use js::glue::RUST_OBJECT_TO_JSVAL; +use js::jsapi::JSContext; use std::cast; use std::hashmap::HashMap; @@ -97,18 +96,6 @@ impl AbstractEventTarget { } } -impl DerivedWrapper for AbstractEventTarget { - #[fixed_stack_segment] - fn wrap(&mut self, _cx: *JSContext, _scope: *JSObject, vp: *mut JSVal) -> i32 { - let wrapper = self.reflector().get_jsobject(); - if wrapper.is_not_null() { - unsafe { *vp = RUST_OBJECT_TO_JSVAL(wrapper) }; - return 1; - } - unreachable!() - } -} - impl Reflectable for AbstractEventTarget { fn reflector<'a>(&'a self) -> &'a Reflector { self.eventtarget().reflector()