diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 7 | ||||
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/document.rs | 22 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 9 | ||||
-rw-r--r-- | src/components/script/dom/window.rs | 2 |
5 files changed, 16 insertions, 28 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 17001fd734a..3b35999cb65 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -1792,7 +1792,7 @@ class CGWrapMethod(CGAbstractMethod): else: args = [Argument('*mut JSContext', 'aCx'), Argument("Box<%s>" % descriptor.concreteType, 'aObject', mutable=True)] - retval = 'JS<%s>' % descriptor.concreteType + retval = 'Temporary<%s>' % descriptor.concreteType CGAbstractMethod.__init__(self, descriptor, 'Wrap', retval, args, pub=True) def definition_body(self): @@ -1809,7 +1809,7 @@ assert!(proto.is_not_null()); raw.reflector().set_jsobject(obj); -return raw;""" % CreateBindingJSObject(self.descriptor, "scope")) +Temporary::new(raw)""" % CreateBindingJSObject(self.descriptor, "scope")) else: return CGGeneric("""\ %s @@ -1818,7 +1818,8 @@ with_compartment(aCx, obj, || { JS_SetPrototype(aCx, obj, proto); }); raw.reflector().set_jsobject(obj); -return raw;""" % CreateBindingJSObject(self.descriptor)) + +Temporary::new(raw)""" % CreateBindingJSObject(self.descriptor)) class CGIDLInterface(CGThing): diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 2c494c2008e..99398bfc2f8 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -377,9 +377,9 @@ pub trait Reflectable { pub fn reflect_dom_object<T: Reflectable> (obj: Box<T>, window: &JSRef<window::Window>, - wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<window::Window>, Box<T>) -> JS<T>) + wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<window::Window>, Box<T>) -> Temporary<T>) -> Temporary<T> { - Temporary::new(wrap_fn(window.deref().get_cx(), window, obj)) + wrap_fn(window.get_cx(), window, obj) } #[allow(raw_pointer_deriving)] diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 0bace6cf66a..a79beaedadb 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -47,7 +47,6 @@ use servo_util::namespace::{Namespace, Null}; use servo_util::str::{DOMString, null_str_as_empty_ref}; use std::collections::hashmap::HashMap; -use js::jsapi::JSContext; use std::ascii::StrAsciiExt; use std::cell::{Cell, RefCell}; use url::{Url, from_str}; @@ -192,20 +191,6 @@ impl<'a> DocumentHelpers for JSRef<'a, Document> { } impl Document { - pub fn reflect_document(document: Box<Document>, - window: &JSRef<Window>, - wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<Window>, Box<Document>) -> JS<Document>) - -> Temporary<Document> { - assert!(document.reflector().get_jsobject().is_null()); - let raw_doc = reflect_dom_object(document, window, wrap_fn).root(); - assert!(raw_doc.reflector().get_jsobject().is_not_null()); - - let doc_alias = raw_doc.clone(); - let node: &JSRef<Node> = NodeCast::from_ref(&doc_alias); - node.set_owner_doc(&*raw_doc); - Temporary::from_rooted(&*raw_doc) - } - pub fn new_inherited(window: &JSRef<Window>, url: Option<Url>, is_html_document: IsHTMLDocument, @@ -243,7 +228,12 @@ impl Document { pub fn new(window: &JSRef<Window>, url: Option<Url>, doctype: IsHTMLDocument, content_type: Option<DOMString>) -> Temporary<Document> { let document = Document::new_inherited(window, url, doctype, content_type); - Document::reflect_document(box document, window, DocumentBinding::Wrap) + let document = reflect_dom_object(box document, window, + DocumentBinding::Wrap).root(); + + let node: &JSRef<Node> = NodeCast::from_ref(&*document); + node.set_owner_doc(&*document); + Temporary::from_rooted(&*document) } } diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 9892f0b5f27..aacaa9bbedb 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -907,13 +907,10 @@ impl Node { pub fn reflect_node<N: Reflectable+NodeBase> (node: Box<N>, document: &JSRef<Document>, - wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<Window>, Box<N>) -> JS<N>) + wrap_fn: extern "Rust" fn(*mut JSContext, &JSRef<Window>, Box<N>) -> Temporary<N>) -> Temporary<N> { - assert!(node.reflector().get_jsobject().is_null()); - let window = document.deref().window.root(); - let node = reflect_dom_object(node, &window.root_ref(), wrap_fn).root(); - assert!(node.deref().reflector().get_jsobject().is_not_null()); - Temporary::from_rooted(&*node) + let window = document.window.root(); + reflect_dom_object(node, &*window, wrap_fn) } pub fn new_inherited(type_id: NodeTypeId, doc: &JSRef<Document>) -> Node { diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs index f9dd1b979b1..029303a960e 100644 --- a/src/components/script/dom/window.rs +++ b/src/components/script/dom/window.rs @@ -388,7 +388,7 @@ impl Window { script_chan: ScriptChan, compositor: Box<ScriptListener>, image_cache_task: ImageCacheTask) - -> JS<Window> { + -> Temporary<Window> { let win = box Window { eventtarget: EventTarget::new_inherited(WindowTypeId), script_chan: script_chan, |