diff options
Diffstat (limited to 'components')
40 files changed, 53 insertions, 12 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 42d944e9781..b160508a761 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -83,6 +83,7 @@ pub fn trace_jsval(tracer: *mut JSTracer, description: &str, val: JSVal) { } /// Trace the `JSObject` held by `reflector`. +#[allow(unrooted_must_root)] pub fn trace_reflector(tracer: *mut JSTracer, description: &str, reflector: &Reflector) { trace_object(tracer, description, reflector.get_jsobject()) } diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index ae9a19a3a29..0f6ab2098fe 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -455,8 +455,9 @@ pub fn reflect_dom_object<T: Reflectable> } /// A struct to store a reference to the reflector of a DOM object. -#[allow(raw_pointer_deriving)] +#[allow(raw_pointer_deriving, unrooted_must_root)] #[deriving(PartialEq)] +#[must_root] pub struct Reflector { object: Cell<*mut JSObject>, } diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index 1a7d2a21636..0bbdca9f93d 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -16,6 +16,7 @@ pub enum BlobType { } #[deriving(Encodable)] +#[must_root] pub struct Blob { reflector_: Reflector, type_: BlobType diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs index ebb17cf6993..371d53884ff 100644 --- a/components/script/dom/characterdata.rs +++ b/components/script/dom/characterdata.rs @@ -18,6 +18,7 @@ use servo_util::str::DOMString; use std::cell::RefCell; #[deriving(Encodable)] +#[must_root] pub struct CharacterData { pub node: Node, pub data: Traceable<RefCell<DOMString>>, diff --git a/components/script/dom/comment.rs b/components/script/dom/comment.rs index e50b24b2a58..dd070df87ac 100644 --- a/components/script/dom/comment.rs +++ b/components/script/dom/comment.rs @@ -17,6 +17,7 @@ use servo_util::str::DOMString; /// An HTML comment. #[deriving(Encodable)] +#[must_root] pub struct Comment { pub characterdata: CharacterData, } @@ -35,8 +36,8 @@ impl Comment { } pub fn new(text: DOMString, document: &JSRef<Document>) -> Temporary<Comment> { - let node = Comment::new_inherited(text, document); - Node::reflect_node(box node, document, CommentBinding::Wrap) + Node::reflect_node(box Comment::new_inherited(text, document), + document, CommentBinding::Wrap) } pub fn Constructor(global: &GlobalRef, data: DOMString) -> Fallible<Temporary<Comment>> { diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 3e74617ebcf..d761252eaef 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -10,6 +10,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct Console { pub reflector_: Reflector } diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs index 159601783ac..5c3db95ff75 100644 --- a/components/script/dom/customevent.rs +++ b/components/script/dom/customevent.rs @@ -19,6 +19,7 @@ use servo_util::str::DOMString; use std::cell::Cell; #[deriving(Encodable)] +#[must_root] pub struct CustomEvent { event: Event, detail: Traceable<Cell<Traceable<JSVal>>>, diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 15bf075df44..54d7684a0c6 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -37,6 +37,7 @@ use native::task::NativeTaskBuilder; use url::Url; #[deriving(Encodable)] +#[must_root] pub struct DedicatedWorkerGlobalScope { workerglobalscope: WorkerGlobalScope, receiver: Untraceable<Receiver<ScriptMsg>>, diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs index 1f3fcb29424..c8d8b961113 100644 --- a/components/script/dom/documentfragment.rs +++ b/components/script/dom/documentfragment.rs @@ -19,6 +19,7 @@ use dom::nodelist::NodeList; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct DocumentFragment { pub node: Node, } @@ -38,8 +39,8 @@ impl DocumentFragment { } pub fn new(document: &JSRef<Document>) -> Temporary<DocumentFragment> { - let node = DocumentFragment::new_inherited(document); - Node::reflect_node(box node, document, DocumentFragmentBinding::Wrap) + Node::reflect_node(box DocumentFragment::new_inherited(document), + document, DocumentFragmentBinding::Wrap) } pub fn Constructor(global: &GlobalRef) -> Fallible<Temporary<DocumentFragment>> { diff --git a/components/script/dom/documenttype.rs b/components/script/dom/documenttype.rs index 5f101942139..f0d6bba5bac 100644 --- a/components/script/dom/documenttype.rs +++ b/components/script/dom/documenttype.rs @@ -14,6 +14,7 @@ use servo_util::str::DOMString; /// The `DOCTYPE` tag. #[deriving(Encodable)] +#[must_root] pub struct DocumentType { pub node: Node, pub name: DOMString, @@ -40,7 +41,7 @@ impl DocumentType { system_id: system_id.unwrap_or("".to_string()) } } - + #[allow(unrooted_must_root)] pub fn new(name: DOMString, public_id: Option<DOMString>, system_id: Option<DOMString>, diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs index 7d1ba33ffb8..633eaa452f0 100644 --- a/components/script/dom/domexception.rs +++ b/components/script/dom/domexception.rs @@ -60,6 +60,7 @@ impl DOMErrorName { } #[deriving(Encodable)] +#[must_root] pub struct DOMException { pub code: DOMErrorName, pub reflector_: Reflector diff --git a/components/script/dom/domrect.rs b/components/script/dom/domrect.rs index 2cf75ee4eb9..cc2643ac4b5 100644 --- a/components/script/dom/domrect.rs +++ b/components/script/dom/domrect.rs @@ -11,6 +11,7 @@ use dom::window::Window; use servo_util::geometry::Au; #[deriving(Encodable)] +#[must_root] pub struct DOMRect { reflector_: Reflector, top: f32, @@ -34,8 +35,8 @@ impl DOMRect { pub fn new(window: &JSRef<Window>, top: Au, bottom: Au, left: Au, right: Au) -> Temporary<DOMRect> { - let rect = DOMRect::new_inherited(top, bottom, left, right); - reflect_dom_object(box rect, &Window(*window), DOMRectBinding::Wrap) + reflect_dom_object(box DOMRect::new_inherited(top, bottom, left, right), + &Window(*window), DOMRectBinding::Wrap) } } diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index e38b0ee82c2..ff7e4e1e925 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -42,6 +42,7 @@ use std::cell::{Cell, RefCell}; use std::mem; #[deriving(Encodable)] +#[must_root] pub struct Element { pub node: Node, pub local_name: Atom, @@ -160,8 +161,8 @@ impl Element { } pub fn new(local_name: DOMString, namespace: Namespace, prefix: Option<DOMString>, document: &JSRef<Document>) -> Temporary<Element> { - let element = Element::new_inherited(ElementTypeId, local_name, namespace, prefix, document); - Node::reflect_node(box element, document, ElementBinding::Wrap) + Node::reflect_node(box Element::new_inherited(ElementTypeId, local_name, namespace, prefix, document), + document, ElementBinding::Wrap) } } @@ -173,6 +174,7 @@ pub trait RawLayoutElementHelpers { impl RawLayoutElementHelpers for Element { #[inline] + #[allow(unrooted_must_root)] unsafe fn get_attr_val_for_layout(&self, namespace: &Namespace, name: &str) -> Option<&'static str> { // cast to point to T in RefCell<T> directly @@ -188,6 +190,7 @@ impl RawLayoutElementHelpers for Element { } #[inline] + #[allow(unrooted_must_root)] unsafe fn get_attr_atom_for_layout(&self, namespace: &Namespace, name: &str) -> Option<Atom> { // cast to point to T in RefCell<T> directly @@ -203,6 +206,7 @@ impl RawLayoutElementHelpers for Element { } #[inline] + #[allow(unrooted_must_root)] unsafe fn has_class_for_layout(&self, name: &str) -> bool { let attrs: *const Vec<JS<Attr>> = mem::transmute(&self.attrs); (*attrs).iter().find(|attr: & &JS<Attr>| { diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs index 15709ad5bc1..075a660cf45 100644 --- a/components/script/dom/event.rs +++ b/components/script/dom/event.rs @@ -35,6 +35,7 @@ pub enum EventTypeId { } #[deriving(Encodable)] +#[must_root] pub struct Event { pub type_id: EventTypeId, reflector_: Reflector, diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index 4f2cba18def..689dd3096e2 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -62,6 +62,7 @@ pub struct EventListenerEntry { } #[deriving(Encodable)] +#[must_root] pub struct EventTarget { pub type_id: EventTargetTypeId, reflector_: Reflector, diff --git a/components/script/dom/file.rs b/components/script/dom/file.rs index c4c07e03399..cfa6daab91b 100644 --- a/components/script/dom/file.rs +++ b/components/script/dom/file.rs @@ -11,6 +11,7 @@ use dom::blob::{Blob, BlobType, FileTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct File { pub blob: Blob, pub name: DOMString, diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 076ba5fddce..08ab88463c4 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -22,6 +22,7 @@ use servo_util::namespace; use servo_util::str::DOMString; #[deriving(Encodable)] +#[allow(unrooted_must_root)] pub struct HTMLElement { pub element: Element } diff --git a/components/script/dom/location.rs b/components/script/dom/location.rs index e310c52d49e..0a1f6fd842f 100644 --- a/components/script/dom/location.rs +++ b/components/script/dom/location.rs @@ -15,6 +15,7 @@ use servo_util::str::DOMString; use std::rc::Rc; #[deriving(Encodable)] +#[must_root] pub struct Location { reflector_: Reflector, //XXXjdm cycle: window->Location->window page: Rc<Page>, diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs index 13c8cf52dfd..9b6ab748256 100644 --- a/components/script/dom/messageevent.rs +++ b/components/script/dom/messageevent.rs @@ -20,6 +20,7 @@ use js::jsapi::JSContext; use js::jsval::JSVal; #[deriving(Encodable)] +#[must_root] pub struct MessageEvent { event: Event, data: Traceable<JSVal>, diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index aa750b501ba..f214f6de684 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -19,6 +19,7 @@ use servo_util::str::DOMString; use std::cell::Cell; #[deriving(Encodable)] +#[must_root] pub struct MouseEvent { pub mouseevent: UIEvent, pub screen_x: Traceable<Cell<i32>>, diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs index d1d7596aa6e..12ac99ec2cd 100644 --- a/components/script/dom/navigator.rs +++ b/components/script/dom/navigator.rs @@ -11,6 +11,7 @@ use dom::window::Window; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct Navigator { pub reflector_: Reflector //XXXjdm cycle: window->navigator->window } diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 90dd959e10f..b46adc488fd 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -68,6 +68,7 @@ use serialize::{Encoder, Encodable}; /// An HTML node. #[deriving(Encodable)] +#[must_root] pub struct Node { /// The JavaScript reflector for this node. pub eventtarget: EventTarget, diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs index f890f71cf4f..5febb54cd5a 100644 --- a/components/script/dom/nodeiterator.rs +++ b/components/script/dom/nodeiterator.rs @@ -9,6 +9,7 @@ use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; #[deriving(Encodable)] +#[must_root] pub struct NodeIterator { pub reflector_: Reflector } diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs index 0ebd2e0db25..322c70c3135 100644 --- a/components/script/dom/nodelist.rs +++ b/components/script/dom/nodelist.rs @@ -25,7 +25,6 @@ pub struct NodeList { } impl NodeList { - #[allow(unrooted_must_root)] pub fn new_inherited(list_type: NodeListType) -> NodeList { NodeList { list_type: list_type, @@ -33,7 +32,6 @@ impl NodeList { } } - #[allow(unrooted_must_root)] pub fn new(window: &JSRef<Window>, list_type: NodeListType) -> Temporary<NodeList> { reflect_dom_object(box NodeList::new_inherited(list_type), diff --git a/components/script/dom/performancetiming.rs b/components/script/dom/performancetiming.rs index f4331e06c0b..4e12942010b 100644 --- a/components/script/dom/performancetiming.rs +++ b/components/script/dom/performancetiming.rs @@ -10,6 +10,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::window::Window; #[deriving(Encodable)] +#[must_root] pub struct PerformanceTiming { reflector_: Reflector, navigationStart: u64, @@ -26,6 +27,7 @@ impl PerformanceTiming { } } + #[allow(unrooted_must_root)] pub fn new(window: &JSRef<Window>) -> Temporary<PerformanceTiming> { let timing = PerformanceTiming::new_inherited(window.navigationStart, window.navigationStartPrecise); diff --git a/components/script/dom/processinginstruction.rs b/components/script/dom/processinginstruction.rs index 40e6ca63e04..26dd207f343 100644 --- a/components/script/dom/processinginstruction.rs +++ b/components/script/dom/processinginstruction.rs @@ -15,6 +15,7 @@ use servo_util::str::DOMString; /// An HTML processing instruction node. #[deriving(Encodable)] +#[must_root] pub struct ProcessingInstruction { pub characterdata: CharacterData, pub target: DOMString, diff --git a/components/script/dom/progressevent.rs b/components/script/dom/progressevent.rs index d001785984f..03230615d3d 100644 --- a/components/script/dom/progressevent.rs +++ b/components/script/dom/progressevent.rs @@ -14,6 +14,7 @@ use dom::event::{Event, ProgressEventTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct ProgressEvent { event: Event, length_computable: bool, diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs index 3ed02410a1e..b1f1ba7bf9c 100644 --- a/components/script/dom/range.rs +++ b/components/script/dom/range.rs @@ -12,6 +12,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::document::Document; #[deriving(Encodable)] +#[must_root] pub struct Range { reflector_: Reflector } diff --git a/components/script/dom/screen.rs b/components/script/dom/screen.rs index 0e184d94ec3..9b2155baadc 100644 --- a/components/script/dom/screen.rs +++ b/components/script/dom/screen.rs @@ -10,6 +10,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::window::Window; #[deriving(Encodable)] +#[must_root] pub struct Screen { reflector_: Reflector, } diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs index 1bbd25cb8ff..a8cbef5b852 100644 --- a/components/script/dom/text.rs +++ b/components/script/dom/text.rs @@ -17,6 +17,7 @@ use servo_util::str::DOMString; /// An HTML text node. #[deriving(Encodable)] +#[must_root] pub struct Text { pub characterdata: CharacterData, } diff --git a/components/script/dom/treewalker.rs b/components/script/dom/treewalker.rs index dc192c359ce..89717cfb64f 100644 --- a/components/script/dom/treewalker.rs +++ b/components/script/dom/treewalker.rs @@ -9,6 +9,7 @@ use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; #[deriving(Encodable)] +#[must_root] pub struct TreeWalker { pub reflector_: Reflector } diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs index c91f0fdb787..e8e381425bc 100644 --- a/components/script/dom/uievent.rs +++ b/components/script/dom/uievent.rs @@ -18,6 +18,7 @@ use servo_util::str::DOMString; use std::cell::Cell; #[deriving(Encodable)] +#[must_root] pub struct UIEvent { pub event: Event, view: Cell<Option<JS<Window>>>, diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs index 63fffe6bbf5..e1d3d3e9902 100644 --- a/components/script/dom/urlsearchparams.rs +++ b/components/script/dom/urlsearchparams.rs @@ -22,6 +22,7 @@ use std::fmt::radix; use std::ascii::OwnedStrAsciiExt; #[deriving(Encodable)] +#[must_root] pub struct URLSearchParams { data: Traceable<RefCell<HashMap<DOMString, Vec<DOMString>>>>, reflector_: Reflector, diff --git a/components/script/dom/validitystate.rs b/components/script/dom/validitystate.rs index c2901009c41..382a55fa8c6 100644 --- a/components/script/dom/validitystate.rs +++ b/components/script/dom/validitystate.rs @@ -9,6 +9,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::window::Window; #[deriving(Encodable)] +#[must_root] pub struct ValidityState { reflector_: Reflector, state: u8, diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 23b6c71e029..d9c9cd5c6c6 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -73,6 +73,7 @@ impl TimerHandle { } #[deriving(Encodable)] +#[must_root] pub struct Window { eventtarget: EventTarget, pub script_chan: ScriptChan, diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index dcf205cf3a9..04cff550a03 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -30,6 +30,7 @@ pub enum WorkerGlobalScopeId { } #[deriving(Encodable)] +#[must_root] pub struct WorkerGlobalScope { pub eventtarget: EventTarget, worker_url: Untraceable<Url>, diff --git a/components/script/dom/workerlocation.rs b/components/script/dom/workerlocation.rs index 0d32c211554..8154d4d01b7 100644 --- a/components/script/dom/workerlocation.rs +++ b/components/script/dom/workerlocation.rs @@ -15,6 +15,7 @@ use servo_util::str::DOMString; use url::Url; #[deriving(Encodable)] +#[must_root] pub struct WorkerLocation { reflector_: Reflector, url: Untraceable<Url>, diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs index e732696617d..4acdaa67ff3 100644 --- a/components/script/dom/workernavigator.rs +++ b/components/script/dom/workernavigator.rs @@ -11,6 +11,7 @@ use dom::workerglobalscope::WorkerGlobalScope; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct WorkerNavigator { reflector_: Reflector, } diff --git a/components/script/dom/xmlhttprequesteventtarget.rs b/components/script/dom/xmlhttprequesteventtarget.rs index 06c42fbdc4e..5b3489edce0 100644 --- a/components/script/dom/xmlhttprequesteventtarget.rs +++ b/components/script/dom/xmlhttprequesteventtarget.rs @@ -12,6 +12,7 @@ use dom::eventtarget::{EventTarget, EventTargetHelpers, XMLHttpRequestTargetType use dom::xmlhttprequest::XMLHttpRequestId; #[deriving(Encodable)] +#[must_root] pub struct XMLHttpRequestEventTarget { pub eventtarget: EventTarget, } diff --git a/components/script/dom/xmlhttprequestupload.rs b/components/script/dom/xmlhttprequestupload.rs index 477d382bffe..57e98ff62f8 100644 --- a/components/script/dom/xmlhttprequestupload.rs +++ b/components/script/dom/xmlhttprequestupload.rs @@ -12,6 +12,7 @@ use dom::xmlhttprequest::{XMLHttpRequestUploadTypeId}; use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget; #[deriving(Encodable)] +#[must_root] pub struct XMLHttpRequestUpload { eventtarget: XMLHttpRequestEventTarget } |