auto merge of #1193 : Ms2ger/servo/wrap_object_shared, r=jdm

This commit is contained in:
bors-servo 2013-11-06 07:49:35 -08:00
commit 9d8c97d3b0
23 changed files with 23 additions and 145 deletions

View file

@ -3,10 +3,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::types::*;
use dom::bindings::codegen::*;
use dom::bindings::utils::{Reflectable, Reflector, Traceable};
use js::jsapi::{JSContext, JSObject, JSTracer};
use js::jsapi::{JSContext, JSTracer};
// generate_cacheable_wrapper
macro_rules! generate_cacheable_wrapper(
@ -50,10 +49,6 @@ macro_rules! generate_cacheable_wrapper_base(
self.$parent.mut_reflector()
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
$wrap(cx, scope, self)
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.$parent.GetParentObject(cx)
}

View file

@ -9,7 +9,7 @@ use dom::node::{AbstractNode, ScriptView};
use std::cast;
use std::libc;
use std::ptr;
use js::jsapi::{JSContext, JSObject, JSTracer, JSTRACE_OBJECT, JS_CallTracer};
use js::jsapi::{JSContext, JSTracer, JSTRACE_OBJECT, JS_CallTracer};
use servo_util::tree::TreeNodeRef;
impl Reflectable for AbstractNode<ScriptView> {
@ -21,10 +21,6 @@ impl Reflectable for AbstractNode<ScriptView> {
self.mut_node().mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
fail!(~"need to implement wrapping");
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.node().GetParentObject(cx)
}

View file

@ -541,7 +541,6 @@ pub fn initialize_global(global: *JSObject) {
pub trait Reflectable {
fn reflector<'a>(&'a self) -> &'a Reflector;
fn mut_reflector<'a>(&'a mut self) -> &'a mut Reflector;
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject;
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable>;
}
@ -584,39 +583,24 @@ impl Reflector {
}
#[fixed_stack_segment]
pub fn WrapNewBindingObject(cx: *JSContext, scope: *JSObject,
pub fn WrapNewBindingObject(cx: *JSContext, _scope: *JSObject,
value: @mut Reflectable,
vp: *mut JSVal) -> JSBool {
unsafe {
let reflector = value.mut_reflector();
let obj = reflector.get_jsobject();
if obj.is_not_null() /*&& js::GetObjectCompartment(obj) == js::GetObjectCompartment(scope)*/ {
*vp = RUST_OBJECT_TO_JSVAL(obj);
return 1; // JS_TRUE
}
let obj = value.wrap_object_shared(cx, scope);
if obj.is_null() {
return 0; // JS_FALSE
}
// MOZ_ASSERT(js::IsObjectInContextCompartment(scope, cx));
reflector.set_jsobject(obj);
assert!(obj.is_not_null());
*vp = RUST_OBJECT_TO_JSVAL(obj);
return JS_WrapValue(cx, cast::transmute(vp));
}
}
#[fixed_stack_segment]
pub fn WrapNativeParent(cx: *JSContext, scope: *JSObject, mut p: Option<@mut Reflectable>) -> *JSObject {
pub fn WrapNativeParent(cx: *JSContext, _scope: *JSObject, mut p: Option<@mut Reflectable>) -> *JSObject {
match p {
Some(ref mut p) => {
let obj = p.reflector().get_jsobject();
if obj.is_not_null() {
return obj;
}
let obj = p.wrap_object_shared(cx, scope);
p.mut_reflector().set_jsobject(obj);
assert!(obj.is_not_null());
obj
}
None => unsafe { JS_GetGlobalObject(cx) }

View file

@ -7,7 +7,7 @@ use dom::bindings::utils::Fallible;
use dom::bindings::codegen::BlobBinding;
use dom::window::Window;
use js::jsapi::{JSContext, JSObject};
use js::jsapi::JSContext;
pub struct Blob {
reflector_: Reflector,
@ -42,10 +42,6 @@ impl Reflectable for Blob {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -8,7 +8,8 @@ use dom::bindings::utils::{DOMString, ErrorResult, Fallible};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::AbstractDocument;
use dom::node::{Node, NodeTypeId, ScriptView};
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
pub struct CharacterData {
node: Node<ScriptView>,
@ -67,10 +68,6 @@ impl Reflectable for CharacterData {
self.node.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
fail!(~"need to implement wrapping");
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.node.GetParentObject(cx)
}

View file

@ -6,7 +6,7 @@ use dom::bindings::codegen::ClientRectBinding;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
pub struct ClientRect {
reflector_: Reflector,
@ -72,10 +72,6 @@ impl Reflectable for ClientRect {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -7,7 +7,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::clientrect::ClientRect;
use dom::window::Window;
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
pub struct ClientRectList {
reflector_: Reflector,
@ -58,10 +58,6 @@ impl Reflectable for ClientRectList {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -160,10 +160,6 @@ impl Reflectable for AbstractDocument {
self.mut_document().mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.document().GetParentObject(cx)
}
@ -187,10 +183,6 @@ impl Reflectable for Document {
self.node.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -10,7 +10,7 @@ use dom::document::{AbstractDocument, Document, XML};
use dom::htmldocument::HTMLDocument;
use dom::window::Window;
use js::jsapi::{JSContext, JSObject};
use js::jsapi::JSContext;
pub struct DOMParser {
owner: @mut Window, //XXXjdm Document instead?
@ -61,10 +61,6 @@ impl Reflectable for DOMParser {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.owner as @mut Reflectable)
}

View file

@ -16,7 +16,7 @@ use layout_interface::{ContentBoxesResponse};
use style;
use servo_util::tree::{TreeNodeRef, ElementLike};
use js::jsapi::{JSContext, JSObject};
use js::jsapi::JSContext;
use std::comm;
use std::hashmap::HashMap;
@ -39,10 +39,6 @@ impl Reflectable for Element {
self.node.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
fail!("no wrapping")
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.node.GetParentObject(cx)
}

View file

@ -133,10 +133,6 @@ impl Reflectable for AbstractEvent {
self.mut_event().mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
fail!(~"doesn't make any sense");
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.event().GetParentObject(cx)
}
@ -281,10 +277,6 @@ impl Reflectable for Event {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
let page = page_from_context(cx);
unsafe {

View file

@ -2,7 +2,6 @@
* 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::codegen::EventTargetBinding;
use dom::bindings::utils::{Reflectable, Reflector, DOMString, Fallible, DerivedWrapper};
use dom::bindings::utils::{null_str_as_word_null, InvalidState};
use dom::bindings::codegen::EventListenerBinding::EventListener;
@ -119,10 +118,6 @@ impl Reflectable for AbstractEventTarget {
self.mut_eventtarget().mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.eventtarget().GetParentObject(cx)
}
@ -205,10 +200,6 @@ impl Reflectable for EventTarget {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
EventTargetBinding::Wrap(cx, scope, self)
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
let page = page_from_context(cx);
// TODO(tkuehn): This only handles top-level pages. Needs to handle subframes.

View file

@ -8,7 +8,7 @@ use dom::bindings::codegen::FormDataBinding;
use dom::blob::Blob;
use dom::window::Window;
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
use std::hashmap::HashMap;
@ -58,10 +58,6 @@ impl Reflectable for FormData {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -69,10 +69,6 @@ impl Reflectable for HTMLCollection {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -10,7 +10,7 @@ use dom::htmlcollection::HTMLCollection;
use dom::node::{AbstractNode, ScriptView, ElementNodeTypeId};
use dom::window::Window;
use js::jsapi::{JSObject, JSContext, JSTracer};
use js::jsapi::{JSContext, JSTracer};
use servo_util::tree::{TreeNodeRef, ElementLike};
@ -89,10 +89,6 @@ impl Reflectable for HTMLDocument {
self.parent.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.parent.GetParentObject(cx)
}

View file

@ -11,7 +11,7 @@ use dom::uievent::UIEvent;
use dom::window::Window;
use dom::windowproxy::WindowProxy;
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
pub struct MouseEvent {
parent: UIEvent,
@ -152,10 +152,6 @@ impl Reflectable for MouseEvent {
self.parent.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.parent.GetParentObject(cx)
}

View file

@ -8,7 +8,7 @@ use dom::bindings::codegen::NavigatorBinding;
use dom::window::Window;
use script_task::{page_from_context};
use js::jsapi::{JSContext, JSObject};
use js::jsapi::JSContext;
pub struct Navigator {
reflector_: Reflector //XXXjdm cycle: window->navigator->window
@ -99,10 +99,6 @@ impl Reflectable for Navigator {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
let page = page_from_context(cx);
unsafe {

View file

@ -1057,10 +1057,6 @@ impl Reflectable for Node<ScriptView> {
self.eventtarget.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
fail!(~"need to implement wrapping");
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
match self.parent_node {
Some(node) => Some(unsafe {node.as_cacheable_wrapper()}),

View file

@ -7,7 +7,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::node::{AbstractNode, ScriptView};
use dom::window::Window;
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
enum NodeListType {
Simple(~[AbstractNode<ScriptView>]),
@ -75,10 +75,6 @@ impl Reflectable for NodeList {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -10,7 +10,7 @@ use dom::event::{AbstractEvent, Event, EventTypeId, UIEventTypeId};
use dom::window::Window;
use dom::windowproxy::WindowProxy;
use js::jsapi::{JSObject, JSContext};
use js::jsapi::JSContext;
pub struct UIEvent {
parent: Event,
@ -121,10 +121,6 @@ impl Reflectable for UIEvent {
self.parent.mut_reflector()
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!()
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
self.parent.GetParentObject(cx)
}

View file

@ -5,7 +5,8 @@
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::bindings::codegen::ValidityStateBinding;
use dom::window::Window;
use js::jsapi::{JSContext, JSObject};
use js::jsapi::JSContext;
pub struct ValidityState {
reflector_: Reflector,
@ -75,10 +76,6 @@ impl Reflectable for ValidityState {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
unreachable!();
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
Some(self.window as @mut Reflectable)
}

View file

@ -148,10 +148,6 @@ impl Reflectable for Window {
self.eventtarget.mut_reflector()
}
fn wrap_object_shared(@mut self, cx: *JSContext, scope: *JSObject) -> *JSObject {
WindowBinding::Wrap(cx, scope, self)
}
fn GetParentObject(&self, _cx: *JSContext) -> Option<@mut Reflectable> {
None
}
@ -229,10 +225,8 @@ impl Window {
next_timer_handle: 0
};
let global = WindowBinding::Wrap(cx, ptr::null(), win);
unsafe {
let reflector = ptr::to_unsafe_ptr(win.reflector());
win.wrap_object_shared(cx, ptr::null()); //XXXjdm proper scope
let global = (*reflector).object;
do "window".to_c_str().with_ref |name| {
JS_DefineProperty(cx, global, name,
RUST_OBJECT_TO_JSVAL(global),

View file

@ -5,7 +5,7 @@
use dom::bindings::utils::{Reflectable, Reflector};
use script_task::page_from_context;
use js::jsapi::{JSContext, JSObject};
use js::jsapi::JSContext;
pub struct WindowProxy {
reflector_: Reflector
@ -17,10 +17,6 @@ impl WindowProxy {
reflector_: Reflector::new()
}
}
pub fn init_wrapper(@mut self, cx: *JSContext, scope: *JSObject) {
self.wrap_object_shared(cx, scope);
}
}
impl Reflectable for WindowProxy {
@ -32,10 +28,6 @@ impl Reflectable for WindowProxy {
&mut self.reflector_
}
fn wrap_object_shared(@mut self, _cx: *JSContext, _scope: *JSObject) -> *JSObject {
fail!("not yet implemented")
}
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut Reflectable> {
let page = page_from_context(cx);
unsafe {