diff options
131 files changed, 345 insertions, 28 deletions
diff --git a/components/layout/lib.rs b/components/layout/lib.rs index 768cfa9992a..171852573c8 100644 --- a/components/layout/lib.rs +++ b/components/layout/lib.rs @@ -8,6 +8,7 @@ #![feature(globs, macro_rules, phase, thread_local, unsafe_destructor)] #![deny(unused_imports, unused_variable)] +#![allow(unrooted_must_root)] #[phase(plugin, link)] extern crate log; diff --git a/components/macros/lib.rs b/components/macros/lib.rs index 554d9833c98..1ce4832b19a 100644 --- a/components/macros/lib.rs +++ b/components/macros/lib.rs @@ -16,18 +16,23 @@ extern crate rustc; extern crate sync; use syntax::ast; +use syntax::attr::AttrMetaMethods; use rustc::lint::{Context, LintPass, LintPassObject, LintArray}; use rustc::plugin::Registry; use rustc::middle::ty::expr_ty; +use rustc::middle::{ty, def}; use rustc::middle::typeck::astconv::AstConv; use rustc::util::ppaux::Repr; declare_lint!(TRANSMUTE_TYPE_LINT, Allow, "Warn and report types being transmuted") +declare_lint!(UNROOTED_MUST_ROOT, Deny, + "Warn and report usage of unrooted jsmanaged objects") -struct Pass; +struct TransmutePass; +struct UnrootedPass; -impl LintPass for Pass { +impl LintPass for TransmutePass { fn get_lints(&self) -> LintArray { lint_array!(TRANSMUTE_TYPE_LINT) } @@ -56,9 +61,109 @@ impl LintPass for Pass { } } +fn lint_unrooted_ty(cx: &Context, ty: &ast::Ty, warning: &str) { + match ty.node { + ast::TyBox(ref t) | ast::TyUniq(ref t) | + ast::TyVec(ref t) | ast::TyFixedLengthVec(ref t, _) | + ast::TyPtr(ast::MutTy { ty: ref t, ..}) | ast::TyRptr(_, ast::MutTy { ty: ref t, ..}) => lint_unrooted_ty(cx, &**t, warning), + ast::TyPath(_, _, id) => { + match cx.tcx.def_map.borrow().get_copy(&id) { + def::DefTy(def_id) => { + if ty::has_attr(cx.tcx, def_id, "must_root") { + cx.span_lint(UNROOTED_MUST_ROOT, ty.span, warning); + } + } + _ => (), + } + } + _ => (), + }; +} + +impl LintPass for UnrootedPass { + fn get_lints(&self) -> LintArray { + lint_array!(UNROOTED_MUST_ROOT) + } + + fn check_struct_def(&mut self, cx: &Context, def: &ast::StructDef, _i: ast::Ident, _gen: &ast::Generics, id: ast::NodeId) { + if cx.tcx.map.expect_item(id).attrs.iter().all(|a| !a.check_name("must_root")) { + for ref field in def.fields.iter() { + lint_unrooted_ty(cx, &*field.node.ty, + "Type must be rooted, use #[must_root] on the struct definition to propagate"); + } + } + } + + fn check_variant(&mut self, cx: &Context, var: &ast::Variant, _gen: &ast::Generics) { + let ref map = cx.tcx.map; + if map.expect_item(map.get_parent(var.node.id)).attrs.iter().all(|a| !a.check_name("must_root")) { + match var.node.kind { + ast::TupleVariantKind(ref vec) => { + for ty in vec.iter() { + lint_unrooted_ty(cx, &*ty.ty, + "Type must be rooted, use #[must_root] on the enum definition to propagate") + } + } + _ => () // Struct variants already caught by check_struct_def + } + } + } + + fn check_fn(&mut self, cx: &Context, kind: &syntax::visit::FnKind, decl: &ast::FnDecl, + block: &ast::Block, _span: syntax::codemap::Span, _id: ast::NodeId) { + match *kind { + syntax::visit::FkItemFn(i, _, _, _) | + syntax::visit::FkMethod(i, _, _) if i.as_str() == "new" || i.as_str() == "new_inherited" => { + return; + } + _ => () + } + match block.rules { + ast::DefaultBlock => { + for arg in decl.inputs.iter() { + lint_unrooted_ty(cx, &*arg.ty, + "Type must be rooted, use #[must_root] on the fn definition to propagate") + } + } + _ => () // fn is `unsafe` + } + } + + // Partially copied from rustc::middle::lint::builtin + // Catches `let` statements which store a #[must_root] value + // Expressions which return out of blocks eventually end up in a `let` + // statement or a function return (which will be caught when it is used elsewhere) + fn check_stmt(&mut self, cx: &Context, s: &ast::Stmt) { + // Catch the let binding + let expr = match s.node { + ast::StmtDecl(ref decl, _) => match decl.node { + ast::DeclLocal(ref loc) => match loc.init { + Some(ref e) => &**e, + _ => return + }, + _ => return + }, + _ => return + }; + + let t = expr_ty(cx.tcx, &*expr); + match ty::get(t).sty { + ty::ty_struct(did, _) | + ty::ty_enum(did, _) => { + if ty::has_attr(cx.tcx, did, "must_root") { + cx.span_lint(UNROOTED_MUST_ROOT, expr.span, + format!("Expression of type {} must be rooted", t.repr(cx.tcx)).as_slice()); + } + } + _ => {} + } + } +} + #[plugin_registrar] pub fn plugin_registrar(reg: &mut Registry) { - reg.register_lint_pass(box Pass as LintPassObject); + reg.register_lint_pass(box TransmutePass as LintPassObject); + reg.register_lint_pass(box UnrootedPass as LintPassObject); } #[macro_export] diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs index 4da59b96b55..be419eb2a61 100644 --- a/components/script/dom/attr.rs +++ b/components/script/dom/attr.rs @@ -71,6 +71,7 @@ impl Str for AttrValue { } #[deriving(Encodable)] +#[must_root] pub struct Attr { reflector_: Reflector, local_name: Atom, @@ -107,8 +108,8 @@ impl Attr { pub fn new(window: &JSRef<Window>, local_name: Atom, value: AttrValue, name: Atom, namespace: Namespace, prefix: Option<DOMString>, owner: &JSRef<Element>) -> Temporary<Attr> { - let attr = Attr::new_inherited(local_name, value, name, namespace, prefix, owner); - reflect_dom_object(box attr, &Window(*window), AttrBinding::Wrap) + reflect_dom_object(box Attr::new_inherited(local_name, value, name, namespace, prefix, owner), + &Window(*window), AttrBinding::Wrap) } } diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs index 266abc3ab10..95b16478b79 100644 --- a/components/script/dom/bindings/callback.rs +++ b/components/script/dom/bindings/callback.rs @@ -139,6 +139,7 @@ pub struct CallSetup { impl CallSetup { /// Performs the setup needed to make a call. + #[allow(unrooted_must_root)] pub fn new<T: CallbackContainer>(callback: &T, handling: ExceptionHandling) -> CallSetup { let global = global_object_for_js_object(callback.callback()); let global = global.root(); diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 1666589940e..4d0f8bdb682 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -2868,7 +2868,10 @@ class CGUnionStruct(CGThing): enumConversions = [ " e%s(ref inner) => inner.to_jsval(cx)," % v["name"] for v in templateVars ] - return ("""pub enum %s { + # XXXManishearth The following should be #[must_root], + # however we currently allow it till #2661 is fixed + return ("""#[allow(unrooted_must_root)] +pub enum %s { %s } diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs index 35b94d0e472..e3b3f9cca1e 100644 --- a/components/script/dom/bindings/global.rs +++ b/components/script/dom/bindings/global.rs @@ -34,6 +34,7 @@ pub enum GlobalRoot<'a, 'b> { /// A traced reference to a global object, for use in fields of traced Rust /// structures. #[deriving(Encodable)] +#[must_root] pub enum GlobalField { WindowField(JS<Window>), WorkerField(JS<WorkerGlobalScope>), diff --git a/components/script/dom/bindings/js.rs b/components/script/dom/bindings/js.rs index ab8b3e3c7f5..7754adce672 100644 --- a/components/script/dom/bindings/js.rs +++ b/components/script/dom/bindings/js.rs @@ -61,6 +61,7 @@ use std::mem; /// Importantly, it requires explicit rooting in order to interact with the inner value. /// Can be assigned into JS-owned member fields (i.e. `JS<T>` types) safely via the /// `JS<T>::assign` method or `OptionalSettable::assign` (for `Option<JS<T>>` fields). +#[allow(unrooted_must_root)] pub struct Temporary<T> { inner: JS<T>, /// On-stack JS pointer to assuage conservative stack scanner @@ -106,11 +107,13 @@ impl<T: Reflectable> Temporary<T> { } /// A rooted, JS-owned value. Must only be used as a field in other JS-owned types. +#[must_root] pub struct JS<T> { ptr: *const T } impl<T> PartialEq for JS<T> { + #[allow(unrooted_must_root)] fn eq(&self, other: &JS<T>) -> bool { self.ptr == other.ptr } @@ -371,6 +374,7 @@ impl RootCollection { } /// Create a new stack-bounded root that will not outlive this collection + #[allow(unrooted_must_root)] fn new_root<'a, 'b, T: Reflectable>(&'a self, unrooted: &JS<T>) -> Root<'a, 'b, T> { Root::new(self, unrooted) } 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 08b65dd084d..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>, } @@ -668,6 +669,7 @@ pub extern fn outerize_global(_cx: *mut JSContext, obj: JSHandleObject) -> *mut } /// Returns the global object of the realm that the given JS object was created in. +#[allow(unrooted_must_root)] pub fn global_object_for_js_object(obj: *mut JSObject) -> GlobalField { unsafe { let global = GetGlobalForObjectCrossCompartment(obj); @@ -689,6 +691,7 @@ pub fn global_object_for_js_object(obj: *mut JSObject) -> GlobalField { /// Get the `JSContext` for the `JSRuntime` associated with the thread /// this object is on. +#[allow(unrooted_must_root)] fn cx_for_dom_reflector(obj: *mut JSObject) -> *mut JSContext { let global = global_object_for_js_object(obj); let global = global.root(); diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index 9afd784a977..1266cce96b9 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/browsercontext.rs b/components/script/dom/browsercontext.rs index a54477a2ff8..b4cbb6be336 100644 --- a/components/script/dom/browsercontext.rs +++ b/components/script/dom/browsercontext.rs @@ -67,6 +67,7 @@ impl BrowserContext { } #[deriving(Encodable)] +#[must_root] pub struct SessionHistoryEntry { document: JS<Document>, children: Vec<BrowserContext> diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs index 6b3f898123f..6297a0718d8 100644 --- a/components/script/dom/canvasrenderingcontext2d.rs +++ b/components/script/dom/canvasrenderingcontext2d.rs @@ -17,6 +17,7 @@ use geom::size::Size2D; use canvas::canvas_render_task::{CanvasMsg, CanvasRenderTask, ClearRect, Close, FillRect, Recreate, StrokeRect}; #[deriving(Encodable)] +#[must_root] pub struct CanvasRenderingContext2D { reflector_: Reflector, global: GlobalField, 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 fee61266cd3..5e82dae3716 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/document.rs b/components/script/dom/document.rs index 8f8f8e5c607..5f2661f9e10 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -69,6 +69,7 @@ pub enum IsHTMLDocument { } #[deriving(Encodable)] +#[must_root] pub struct Document { pub node: Node, reflector_: Reflector, @@ -309,8 +310,8 @@ 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); - let document = reflect_dom_object(box document, &Window(*window), + let document = reflect_dom_object(box Document::new_inherited(window, url, doctype, content_type), + &Window(*window), DocumentBinding::Wrap).root(); let node: &JSRef<Node> = NodeCast::from_ref(&*document); 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/domimplementation.rs b/components/script/dom/domimplementation.rs index 0dbb842ebe4..36d74258ca7 100644 --- a/components/script/dom/domimplementation.rs +++ b/components/script/dom/domimplementation.rs @@ -23,6 +23,7 @@ use dom::text::Text; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct DOMImplementation { document: JS<Document>, reflector_: Reflector, diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs index 65273cab756..d8362fa1e80 100644 --- a/components/script/dom/domparser.rs +++ b/components/script/dom/domparser.rs @@ -14,6 +14,7 @@ use dom::window::Window; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct DOMParser { window: JS<Window>, //XXXjdm Document instead? 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/domrectlist.rs b/components/script/dom/domrectlist.rs index 0c661c4a51d..450e87eda6d 100644 --- a/components/script/dom/domrectlist.rs +++ b/components/script/dom/domrectlist.rs @@ -11,6 +11,7 @@ use dom::domrect::DOMRect; use dom::window::Window; #[deriving(Encodable)] +#[must_root] pub struct DOMRectList { reflector_: Reflector, rects: Vec<JS<DOMRect>>, diff --git a/components/script/dom/domtokenlist.rs b/components/script/dom/domtokenlist.rs index 7c1b1fc3365..e57f0310ec5 100644 --- a/components/script/dom/domtokenlist.rs +++ b/components/script/dom/domtokenlist.rs @@ -17,6 +17,7 @@ use servo_util::namespace::Null; use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS}; #[deriving(Encodable)] +#[must_root] pub struct DOMTokenList { reflector_: Reflector, element: JS<Element>, diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index b0aad2f9bbf..953036788f4 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>| { @@ -220,6 +224,7 @@ pub trait LayoutElementHelpers { } impl LayoutElementHelpers for JS<Element> { + #[allow(unrooted_must_root)] unsafe fn html_element_in_html_document_for_layout(&self) -> bool { if (*self.unsafe_get()).namespace != namespace::HTML { return false 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/formdata.rs b/components/script/dom/formdata.rs index 0de17b83107..1a9f1252f53 100644 --- a/components/script/dom/formdata.rs +++ b/components/script/dom/formdata.rs @@ -19,12 +19,14 @@ use std::cell::RefCell; use std::collections::hashmap::HashMap; #[deriving(Encodable, Clone)] +#[must_root] pub enum FormDatum { StringData(DOMString), FileData(JS<File>) } #[deriving(Encodable)] +#[must_root] pub struct FormData { data: Traceable<RefCell<HashMap<DOMString, Vec<FormDatum>>>>, reflector_: Reflector, @@ -53,6 +55,7 @@ impl FormData { } impl<'a> FormDataMethods for JSRef<'a, FormData> { + #[allow(unrooted_must_root)] fn Append(&self, name: DOMString, value: &JSRef<Blob>, filename: Option<DOMString>) { let file = FileData(JS::from_rooted(&self.get_file_from_blob(value, filename))); self.data.deref().borrow_mut().insert_or_update_with(name.clone(), vec!(file.clone()), @@ -84,7 +87,7 @@ impl<'a> FormDataMethods for JSRef<'a, FormData> { fn Has(&self, name: DOMString) -> bool { self.data.deref().borrow().contains_key_equiv(&name) } - + #[allow(unrooted_must_root)] fn Set(&self, name: DOMString, value: &JSRef<Blob>, filename: Option<DOMString>) { let file = FileData(JS::from_rooted(&self.get_file_from_blob(value, filename))); self.data.deref().borrow_mut().insert(name, vec!(file)); diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs index 8c23abc940f..0a8efa15890 100644 --- a/components/script/dom/htmlanchorelement.rs +++ b/components/script/dom/htmlanchorelement.rs @@ -24,6 +24,7 @@ use servo_util::namespace::Null; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLAnchorElement { pub htmlelement: HTMLElement } @@ -41,6 +42,7 @@ impl HTMLAnchorElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLAnchorElement> { let element = HTMLAnchorElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLAnchorElementBinding::Wrap) diff --git a/components/script/dom/htmlappletelement.rs b/components/script/dom/htmlappletelement.rs index 97a3757f02e..0e2e3cfcfe4 100644 --- a/components/script/dom/htmlappletelement.rs +++ b/components/script/dom/htmlappletelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLAppletElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLAppletElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLAppletElement> { let element = HTMLAppletElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLAppletElementBinding::Wrap) diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs index 3de80a21802..c724b640da6 100644 --- a/components/script/dom/htmlareaelement.rs +++ b/components/script/dom/htmlareaelement.rs @@ -18,6 +18,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLAreaElement { pub htmlelement: HTMLElement } @@ -35,6 +36,7 @@ impl HTMLAreaElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLAreaElement> { let element = HTMLAreaElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLAreaElementBinding::Wrap) diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs index 626e2e99619..02b98f9e679 100644 --- a/components/script/dom/htmlaudioelement.rs +++ b/components/script/dom/htmlaudioelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLAudioElement { pub htmlmediaelement: HTMLMediaElement } @@ -31,6 +32,7 @@ impl HTMLAudioElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLAudioElement> { let element = HTMLAudioElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLAudioElementBinding::Wrap) diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs index fbd3d5cdfca..9d390765c42 100644 --- a/components/script/dom/htmlbaseelement.rs +++ b/components/script/dom/htmlbaseelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLBaseElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLBaseElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLBaseElement> { let element = HTMLBaseElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLBaseElementBinding::Wrap) diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs index b7bb35e618a..298cb133c87 100644 --- a/components/script/dom/htmlbodyelement.rs +++ b/components/script/dom/htmlbodyelement.rs @@ -21,6 +21,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLBodyElement { pub htmlelement: HTMLElement } @@ -38,6 +39,7 @@ impl HTMLBodyElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLBodyElement> { let element = HTMLBodyElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLBodyElementBinding::Wrap) diff --git a/components/script/dom/htmlbrelement.rs b/components/script/dom/htmlbrelement.rs index 70c415ba24a..4e08ef492d0 100644 --- a/components/script/dom/htmlbrelement.rs +++ b/components/script/dom/htmlbrelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLBRElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLBRElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLBRElement> { let element = HTMLBRElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLBRElementBinding::Wrap) diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs index 0c8903603e1..91a8de46617 100644 --- a/components/script/dom/htmlbuttonelement.rs +++ b/components/script/dom/htmlbuttonelement.rs @@ -20,6 +20,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLButtonElement { pub htmlelement: HTMLElement } @@ -37,6 +38,7 @@ impl HTMLButtonElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLButtonElement> { let element = HTMLButtonElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLButtonElementBinding::Wrap) diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index 28902265610..60bec7f4662 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -29,6 +29,7 @@ static DefaultWidth: u32 = 300; static DefaultHeight: u32 = 150; #[deriving(Encodable)] +#[must_root] pub struct HTMLCanvasElement { pub htmlelement: HTMLElement, context: Traceable<Cell<Option<JS<CanvasRenderingContext2D>>>>, @@ -52,6 +53,7 @@ impl HTMLCanvasElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLCanvasElement> { let element = HTMLCanvasElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLCanvasElementBinding::Wrap) diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs index 5bef6c56ff5..bd07b82e53e 100644 --- a/components/script/dom/htmlcollection.rs +++ b/components/script/dom/htmlcollection.rs @@ -30,12 +30,14 @@ impl<S: Encoder<E>, E> Encodable<S, E> for Box<CollectionFilter> { } #[deriving(Encodable)] +#[must_root] pub enum CollectionTypeId { Static(Vec<JS<Element>>), Live(JS<Node>, Box<CollectionFilter>) } #[deriving(Encodable)] +#[must_root] pub struct HTMLCollection { collection: CollectionTypeId, reflector_: Reflector, diff --git a/components/script/dom/htmldataelement.rs b/components/script/dom/htmldataelement.rs index cf35507a824..941ea6a2d29 100644 --- a/components/script/dom/htmldataelement.rs +++ b/components/script/dom/htmldataelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLDataElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLDataElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLDataElement> { let element = HTMLDataElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLDataElementBinding::Wrap) diff --git a/components/script/dom/htmldatalistelement.rs b/components/script/dom/htmldatalistelement.rs index f7ff70e9858..f63180007bc 100644 --- a/components/script/dom/htmldatalistelement.rs +++ b/components/script/dom/htmldatalistelement.rs @@ -17,6 +17,7 @@ use dom::node::{Node, ElementNodeTypeId, window_from_node}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLDataListElement { pub htmlelement: HTMLElement } @@ -34,6 +35,7 @@ impl HTMLDataListElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLDataListElement> { let element = HTMLDataListElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLDataListElementBinding::Wrap) diff --git a/components/script/dom/htmldirectoryelement.rs b/components/script/dom/htmldirectoryelement.rs index 2539a389e19..17e1401b7e8 100644 --- a/components/script/dom/htmldirectoryelement.rs +++ b/components/script/dom/htmldirectoryelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLDirectoryElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLDirectoryElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLDirectoryElement> { let element = HTMLDirectoryElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLDirectoryElementBinding::Wrap) diff --git a/components/script/dom/htmldivelement.rs b/components/script/dom/htmldivelement.rs index 01319b56f98..e121c8d98cb 100644 --- a/components/script/dom/htmldivelement.rs +++ b/components/script/dom/htmldivelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLDivElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLDivElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLDivElement> { let element = HTMLDivElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLDivElementBinding::Wrap) diff --git a/components/script/dom/htmldlistelement.rs b/components/script/dom/htmldlistelement.rs index 0af66bca2c5..745ce780c3e 100644 --- a/components/script/dom/htmldlistelement.rs +++ b/components/script/dom/htmldlistelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLDListElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLDListElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLDListElement> { let element = HTMLDListElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLDListElementBinding::Wrap) diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 076ba5fddce..c9c5b5d4ba8 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)] +#[must_root] pub struct HTMLElement { pub element: Element } @@ -43,6 +44,7 @@ impl HTMLElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLElement> { let element = HTMLElement::new_inherited(HTMLElementTypeId, localName, document); Node::reflect_node(box element, document, HTMLElementBinding::Wrap) diff --git a/components/script/dom/htmlembedelement.rs b/components/script/dom/htmlembedelement.rs index 142e29ab9ef..64314247096 100644 --- a/components/script/dom/htmlembedelement.rs +++ b/components/script/dom/htmlembedelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLEmbedElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLEmbedElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLEmbedElement> { let element = HTMLEmbedElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLEmbedElementBinding::Wrap) diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs index 3bb30fbf7a7..30b8aebf0d3 100644 --- a/components/script/dom/htmlfieldsetelement.rs +++ b/components/script/dom/htmlfieldsetelement.rs @@ -22,6 +22,7 @@ use servo_util::atom::Atom; use servo_util::str::{DOMString, StaticStringVec}; #[deriving(Encodable)] +#[must_root] pub struct HTMLFieldSetElement { pub htmlelement: HTMLElement } @@ -39,6 +40,7 @@ impl HTMLFieldSetElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLFieldSetElement> { let element = HTMLFieldSetElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLFieldSetElementBinding::Wrap) diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs index a26d83fb7d2..b80fa5494d0 100644 --- a/components/script/dom/htmlfontelement.rs +++ b/components/script/dom/htmlfontelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLFontElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLFontElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLFontElement> { let element = HTMLFontElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLFontElementBinding::Wrap) diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs index e31179ed424..5b9c492c7fe 100644 --- a/components/script/dom/htmlformelement.rs +++ b/components/script/dom/htmlformelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLFormElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLFormElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLFormElement> { let element = HTMLFormElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLFormElementBinding::Wrap) diff --git a/components/script/dom/htmlframeelement.rs b/components/script/dom/htmlframeelement.rs index dd362a3947a..2b280272119 100644 --- a/components/script/dom/htmlframeelement.rs +++ b/components/script/dom/htmlframeelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLFrameElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLFrameElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLFrameElement> { let element = HTMLFrameElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLFrameElementBinding::Wrap) diff --git a/components/script/dom/htmlframesetelement.rs b/components/script/dom/htmlframesetelement.rs index ad6168a0613..c1f09c20639 100644 --- a/components/script/dom/htmlframesetelement.rs +++ b/components/script/dom/htmlframesetelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLFrameSetElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLFrameSetElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLFrameSetElement> { let element = HTMLFrameSetElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLFrameSetElementBinding::Wrap) diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs index f3738058179..5c2e619935c 100644 --- a/components/script/dom/htmlheadelement.rs +++ b/components/script/dom/htmlheadelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLHeadElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLHeadElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLHeadElement> { let element = HTMLHeadElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLHeadElementBinding::Wrap) diff --git a/components/script/dom/htmlheadingelement.rs b/components/script/dom/htmlheadingelement.rs index b869e9764e1..d26cf2252bd 100644 --- a/components/script/dom/htmlheadingelement.rs +++ b/components/script/dom/htmlheadingelement.rs @@ -24,6 +24,7 @@ pub enum HeadingLevel { } #[deriving(Encodable)] +#[must_root] pub struct HTMLHeadingElement { pub htmlelement: HTMLElement, pub level: HeadingLevel, @@ -43,6 +44,7 @@ impl HTMLHeadingElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>, level: HeadingLevel) -> Temporary<HTMLHeadingElement> { let element = HTMLHeadingElement::new_inherited(localName, document, level); Node::reflect_node(box element, document, HTMLHeadingElementBinding::Wrap) diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs index 18a92df2679..de417712964 100644 --- a/components/script/dom/htmlhrelement.rs +++ b/components/script/dom/htmlhrelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLHRElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLHRElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLHRElement> { let element = HTMLHRElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLHRElementBinding::Wrap) diff --git a/components/script/dom/htmlhtmlelement.rs b/components/script/dom/htmlhtmlelement.rs index 117cdf78257..a45da2beaff 100644 --- a/components/script/dom/htmlhtmlelement.rs +++ b/components/script/dom/htmlhtmlelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLHtmlElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLHtmlElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLHtmlElement> { let element = HTMLHtmlElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLHtmlElementBinding::Wrap) diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index c819143211d..a5c83002327 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -42,6 +42,7 @@ enum SandboxAllowance { } #[deriving(Encodable)] +#[must_root] pub struct HTMLIFrameElement { pub htmlelement: HTMLElement, pub size: Traceable<Cell<Option<IFrameSize>>>, @@ -122,6 +123,7 @@ impl HTMLIFrameElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLIFrameElement> { let element = HTMLIFrameElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLIFrameElementBinding::Wrap) diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 33d7b7dfd31..903e52bb309 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -26,6 +26,7 @@ use url::{Url, UrlParser}; use std::cell::RefCell; #[deriving(Encodable)] +#[must_root] pub struct HTMLImageElement { pub htmlelement: HTMLElement, image: Untraceable<RefCell<Option<Url>>>, @@ -78,6 +79,7 @@ impl HTMLImageElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLImageElement> { let element = HTMLImageElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLImageElementBinding::Wrap) diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 38d63acc7da..d45bf53fada 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -19,6 +19,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLInputElement { pub htmlelement: HTMLElement, } @@ -36,6 +37,7 @@ impl HTMLInputElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLInputElement> { let element = HTMLInputElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLInputElementBinding::Wrap) diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs index 54349aa5bf5..d45ca193e32 100644 --- a/components/script/dom/htmllabelelement.rs +++ b/components/script/dom/htmllabelelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLLabelElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLLabelElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLLabelElement> { let element = HTMLLabelElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLLabelElementBinding::Wrap) diff --git a/components/script/dom/htmllegendelement.rs b/components/script/dom/htmllegendelement.rs index 168f94bc27e..6668dfbbff7 100644 --- a/components/script/dom/htmllegendelement.rs +++ b/components/script/dom/htmllegendelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLLegendElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLLegendElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLLegendElement> { let element = HTMLLegendElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLLegendElementBinding::Wrap) diff --git a/components/script/dom/htmllielement.rs b/components/script/dom/htmllielement.rs index 5d15d405d94..950fc2b339b 100644 --- a/components/script/dom/htmllielement.rs +++ b/components/script/dom/htmllielement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLLIElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLLIElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLLIElement> { let element = HTMLLIElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLLIElementBinding::Wrap) diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 20833d89326..3c44a9cba8b 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -23,6 +23,7 @@ use std::ascii::StrAsciiExt; use url::UrlParser; #[deriving(Encodable)] +#[must_root] pub struct HTMLLinkElement { pub htmlelement: HTMLElement, } @@ -40,6 +41,7 @@ impl HTMLLinkElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLLinkElement> { let element = HTMLLinkElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLLinkElementBinding::Wrap) diff --git a/components/script/dom/htmlmapelement.rs b/components/script/dom/htmlmapelement.rs index 21e9a04364f..3f2dfa381ee 100644 --- a/components/script/dom/htmlmapelement.rs +++ b/components/script/dom/htmlmapelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLMapElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLMapElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLMapElement> { let element = HTMLMapElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLMapElementBinding::Wrap) diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs index b9e1ad7782d..37aa5400429 100644 --- a/components/script/dom/htmlmediaelement.rs +++ b/components/script/dom/htmlmediaelement.rs @@ -13,6 +13,7 @@ use dom::node::ElementNodeTypeId; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLMediaElement { pub htmlelement: HTMLElement, } diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs index 224d400a216..a8923db5cfc 100644 --- a/components/script/dom/htmlmetaelement.rs +++ b/components/script/dom/htmlmetaelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLMetaElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLMetaElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLMetaElement> { let element = HTMLMetaElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLMetaElementBinding::Wrap) diff --git a/components/script/dom/htmlmeterelement.rs b/components/script/dom/htmlmeterelement.rs index a0eeff8cb92..08495590d70 100644 --- a/components/script/dom/htmlmeterelement.rs +++ b/components/script/dom/htmlmeterelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLMeterElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLMeterElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLMeterElement> { let element = HTMLMeterElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLMeterElementBinding::Wrap) diff --git a/components/script/dom/htmlmodelement.rs b/components/script/dom/htmlmodelement.rs index 6ea001f5185..8b2b837524c 100644 --- a/components/script/dom/htmlmodelement.rs +++ b/components/script/dom/htmlmodelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLModElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLModElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLModElement> { let element = HTMLModElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLModElementBinding::Wrap) diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs index 94c87719563..a702916d40a 100644 --- a/components/script/dom/htmlobjectelement.rs +++ b/components/script/dom/htmlobjectelement.rs @@ -27,6 +27,7 @@ use servo_util::str::DOMString; use url::Url; #[deriving(Encodable)] +#[must_root] pub struct HTMLObjectElement { pub htmlelement: HTMLElement, } @@ -44,6 +45,7 @@ impl HTMLObjectElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLObjectElement> { let element = HTMLObjectElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLObjectElementBinding::Wrap) diff --git a/components/script/dom/htmlolistelement.rs b/components/script/dom/htmlolistelement.rs index 11637fe3bd5..adb3441dd9a 100644 --- a/components/script/dom/htmlolistelement.rs +++ b/components/script/dom/htmlolistelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLOListElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLOListElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLOListElement> { let element = HTMLOListElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLOListElementBinding::Wrap) diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs index 6e90cb45fe5..ed9c61c760d 100644 --- a/components/script/dom/htmloptgroupelement.rs +++ b/components/script/dom/htmloptgroupelement.rs @@ -19,6 +19,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLOptGroupElement { pub htmlelement: HTMLElement } @@ -36,6 +37,7 @@ impl HTMLOptGroupElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLOptGroupElement> { let element = HTMLOptGroupElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLOptGroupElementBinding::Wrap) diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs index d066784b285..22548b0aacc 100644 --- a/components/script/dom/htmloptionelement.rs +++ b/components/script/dom/htmloptionelement.rs @@ -19,6 +19,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLOptionElement { pub htmlelement: HTMLElement } @@ -36,6 +37,7 @@ impl HTMLOptionElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLOptionElement> { let element = HTMLOptionElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLOptionElementBinding::Wrap) diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs index 19926cfe4fc..437ea192478 100644 --- a/components/script/dom/htmloutputelement.rs +++ b/components/script/dom/htmloutputelement.rs @@ -16,6 +16,7 @@ use dom::validitystate::ValidityState; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLOutputElement { pub htmlelement: HTMLElement } @@ -33,6 +34,7 @@ impl HTMLOutputElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLOutputElement> { let element = HTMLOutputElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLOutputElementBinding::Wrap) diff --git a/components/script/dom/htmlparagraphelement.rs b/components/script/dom/htmlparagraphelement.rs index fe4dd4317cf..9e51043e318 100644 --- a/components/script/dom/htmlparagraphelement.rs +++ b/components/script/dom/htmlparagraphelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLParagraphElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLParagraphElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLParagraphElement> { let element = HTMLParagraphElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLParagraphElementBinding::Wrap) diff --git a/components/script/dom/htmlparamelement.rs b/components/script/dom/htmlparamelement.rs index 0f181bd1b32..fc44938f99d 100644 --- a/components/script/dom/htmlparamelement.rs +++ b/components/script/dom/htmlparamelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLParamElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLParamElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLParamElement> { let element = HTMLParamElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLParamElementBinding::Wrap) diff --git a/components/script/dom/htmlpreelement.rs b/components/script/dom/htmlpreelement.rs index 25f9c75bc15..18f80da3808 100644 --- a/components/script/dom/htmlpreelement.rs +++ b/components/script/dom/htmlpreelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLPreElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLPreElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLPreElement> { let element = HTMLPreElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLPreElementBinding::Wrap) diff --git a/components/script/dom/htmlprogresselement.rs b/components/script/dom/htmlprogresselement.rs index 74dcab1730f..b2e0d289efd 100644 --- a/components/script/dom/htmlprogresselement.rs +++ b/components/script/dom/htmlprogresselement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLProgressElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLProgressElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLProgressElement> { let element = HTMLProgressElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLProgressElementBinding::Wrap) diff --git a/components/script/dom/htmlquoteelement.rs b/components/script/dom/htmlquoteelement.rs index 488a82c394d..da8a7b72829 100644 --- a/components/script/dom/htmlquoteelement.rs +++ b/components/script/dom/htmlquoteelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLQuoteElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLQuoteElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLQuoteElement> { let element = HTMLQuoteElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLQuoteElementBinding::Wrap) diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index 3c189791b94..29cb155a984 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -20,6 +20,7 @@ use servo_util::namespace::Null; use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS, StaticStringVec}; #[deriving(Encodable)] +#[must_root] pub struct HTMLScriptElement { pub htmlelement: HTMLElement, } @@ -37,6 +38,7 @@ impl HTMLScriptElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLScriptElement> { let element = HTMLScriptElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLScriptElementBinding::Wrap) diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs index b8b5303cffb..66ca407966d 100644 --- a/components/script/dom/htmlselectelement.rs +++ b/components/script/dom/htmlselectelement.rs @@ -22,6 +22,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLSelectElement { pub htmlelement: HTMLElement } @@ -39,6 +40,7 @@ impl HTMLSelectElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLSelectElement> { let element = HTMLSelectElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLSelectElementBinding::Wrap) diff --git a/components/script/dom/htmlserializer.rs b/components/script/dom/htmlserializer.rs index 624ede52bb7..3737b498bb1 100644 --- a/components/script/dom/htmlserializer.rs +++ b/components/script/dom/htmlserializer.rs @@ -21,6 +21,7 @@ use dom::text::Text; use servo_util::atom::Atom; use servo_util::namespace; +#[allow(unrooted_must_root)] pub fn serialize(iterator: &mut NodeIterator) -> String { let mut html = String::new(); let mut open_elements: Vec<String> = vec!(); diff --git a/components/script/dom/htmlsourceelement.rs b/components/script/dom/htmlsourceelement.rs index cb27b8c75d2..8936d9834f5 100644 --- a/components/script/dom/htmlsourceelement.rs +++ b/components/script/dom/htmlsourceelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLSourceElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLSourceElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLSourceElement> { let element = HTMLSourceElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLSourceElementBinding::Wrap) diff --git a/components/script/dom/htmlspanelement.rs b/components/script/dom/htmlspanelement.rs index 9b98b8fa28d..dc755096bb7 100644 --- a/components/script/dom/htmlspanelement.rs +++ b/components/script/dom/htmlspanelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLSpanElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLSpanElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLSpanElement> { let element = HTMLSpanElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLSpanElementBinding::Wrap) diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs index 3327bc48896..d968c3bc6ee 100644 --- a/components/script/dom/htmlstyleelement.rs +++ b/components/script/dom/htmlstyleelement.rs @@ -18,6 +18,7 @@ use servo_util::str::DOMString; use style::Stylesheet; #[deriving(Encodable)] +#[must_root] pub struct HTMLStyleElement { pub htmlelement: HTMLElement, } @@ -35,6 +36,7 @@ impl HTMLStyleElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLStyleElement> { let element = HTMLStyleElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLStyleElementBinding::Wrap) diff --git a/components/script/dom/htmltablecaptionelement.rs b/components/script/dom/htmltablecaptionelement.rs index 92c45b49400..3797896de92 100644 --- a/components/script/dom/htmltablecaptionelement.rs +++ b/components/script/dom/htmltablecaptionelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableCaptionElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLTableCaptionElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableCaptionElement> { let element = HTMLTableCaptionElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableCaptionElementBinding::Wrap) diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index 116768e23af..269f09fda57 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -13,6 +13,7 @@ use dom::node::ElementNodeTypeId; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableCellElement { pub htmlelement: HTMLElement, } diff --git a/components/script/dom/htmltablecolelement.rs b/components/script/dom/htmltablecolelement.rs index 48d6164e500..3ddc5fe50f5 100644 --- a/components/script/dom/htmltablecolelement.rs +++ b/components/script/dom/htmltablecolelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableColElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLTableColElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableColElement> { let element = HTMLTableColElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableColElementBinding::Wrap) diff --git a/components/script/dom/htmltabledatacellelement.rs b/components/script/dom/htmltabledatacellelement.rs index 07027b5d294..9ab9ad21693 100644 --- a/components/script/dom/htmltabledatacellelement.rs +++ b/components/script/dom/htmltabledatacellelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableDataCellElement { pub htmltablecellelement: HTMLTableCellElement, } @@ -31,6 +32,7 @@ impl HTMLTableDataCellElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableDataCellElement> { let element = HTMLTableDataCellElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableDataCellElementBinding::Wrap) diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index f33b03fb778..9d1200f6e48 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -18,6 +18,7 @@ use dom::node::{Node, NodeHelpers, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableElement { pub htmlelement: HTMLElement, } @@ -35,6 +36,7 @@ impl HTMLTableElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableElement> { let element = HTMLTableElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableElementBinding::Wrap) diff --git a/components/script/dom/htmltableheadercellelement.rs b/components/script/dom/htmltableheadercellelement.rs index 2ad288951da..8dd16bd2da2 100644 --- a/components/script/dom/htmltableheadercellelement.rs +++ b/components/script/dom/htmltableheadercellelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableHeaderCellElement { pub htmltablecellelement: HTMLTableCellElement, } @@ -31,6 +32,7 @@ impl HTMLTableHeaderCellElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableHeaderCellElement> { let element = HTMLTableHeaderCellElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableHeaderCellElementBinding::Wrap) diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs index de8978c75cd..c93d4a30413 100644 --- a/components/script/dom/htmltablerowelement.rs +++ b/components/script/dom/htmltablerowelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableRowElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLTableRowElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableRowElement> { let element = HTMLTableRowElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableRowElementBinding::Wrap) diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs index 1dc372862fc..51bc49ed1ea 100644 --- a/components/script/dom/htmltablesectionelement.rs +++ b/components/script/dom/htmltablesectionelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTableSectionElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLTableSectionElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTableSectionElement> { let element = HTMLTableSectionElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTableSectionElementBinding::Wrap) diff --git a/components/script/dom/htmltemplateelement.rs b/components/script/dom/htmltemplateelement.rs index 12be7665169..ded7b61e096 100644 --- a/components/script/dom/htmltemplateelement.rs +++ b/components/script/dom/htmltemplateelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTemplateElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLTemplateElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTemplateElement> { let element = HTMLTemplateElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTemplateElementBinding::Wrap) diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index 5385fefab7e..7d16a6638f8 100644 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -19,6 +19,7 @@ use servo_util::atom::Atom; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTextAreaElement { pub htmlelement: HTMLElement, } @@ -36,6 +37,7 @@ impl HTMLTextAreaElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTextAreaElement> { let element = HTMLTextAreaElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTextAreaElementBinding::Wrap) diff --git a/components/script/dom/htmltimeelement.rs b/components/script/dom/htmltimeelement.rs index 8eeb695d4c6..7847ba3c17e 100644 --- a/components/script/dom/htmltimeelement.rs +++ b/components/script/dom/htmltimeelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTimeElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLTimeElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTimeElement> { let element = HTMLTimeElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTimeElementBinding::Wrap) diff --git a/components/script/dom/htmltitleelement.rs b/components/script/dom/htmltitleelement.rs index 550a531aa76..41ee2fb362c 100644 --- a/components/script/dom/htmltitleelement.rs +++ b/components/script/dom/htmltitleelement.rs @@ -17,6 +17,7 @@ use dom::text::Text; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTitleElement { pub htmlelement: HTMLElement, } @@ -34,6 +35,7 @@ impl HTMLTitleElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTitleElement> { let element = HTMLTitleElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTitleElementBinding::Wrap) diff --git a/components/script/dom/htmltrackelement.rs b/components/script/dom/htmltrackelement.rs index 5d22571db67..f0902e8d9de 100644 --- a/components/script/dom/htmltrackelement.rs +++ b/components/script/dom/htmltrackelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLTrackElement { pub htmlelement: HTMLElement, } @@ -31,6 +32,7 @@ impl HTMLTrackElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLTrackElement> { let element = HTMLTrackElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLTrackElementBinding::Wrap) diff --git a/components/script/dom/htmlulistelement.rs b/components/script/dom/htmlulistelement.rs index 228152cc663..6b20824522e 100644 --- a/components/script/dom/htmlulistelement.rs +++ b/components/script/dom/htmlulistelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLUListElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLUListElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLUListElement> { let element = HTMLUListElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLUListElementBinding::Wrap) diff --git a/components/script/dom/htmlunknownelement.rs b/components/script/dom/htmlunknownelement.rs index 2956b0c459a..f087e3c2cbf 100644 --- a/components/script/dom/htmlunknownelement.rs +++ b/components/script/dom/htmlunknownelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLUnknownElement { pub htmlelement: HTMLElement } @@ -31,6 +32,7 @@ impl HTMLUnknownElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLUnknownElement> { let element = HTMLUnknownElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLUnknownElementBinding::Wrap) diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs index 365b9a38f20..bd4ca20a6f7 100644 --- a/components/script/dom/htmlvideoelement.rs +++ b/components/script/dom/htmlvideoelement.rs @@ -14,6 +14,7 @@ use dom::node::{Node, ElementNodeTypeId}; use servo_util::str::DOMString; #[deriving(Encodable)] +#[must_root] pub struct HTMLVideoElement { pub htmlmediaelement: HTMLMediaElement } @@ -31,6 +32,7 @@ impl HTMLVideoElement { } } + #[allow(unrooted_must_root)] pub fn new(localName: DOMString, document: &JSRef<Document>) -> Temporary<HTMLVideoElement> { let element = HTMLVideoElement::new_inherited(localName, document); Node::reflect_node(box element, document, HTMLVideoElementBinding::Wrap) 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/namednodemap.rs b/components/script/dom/namednodemap.rs index d60160133c9..6faf74aa564 100644 --- a/components/script/dom/namednodemap.rs +++ b/components/script/dom/namednodemap.rs @@ -12,6 +12,7 @@ use dom::element::Element; use dom::window::Window; #[deriving(Encodable)] +#[must_root] pub struct NamedNodeMap { reflector_: Reflector, owner: JS<Element>, 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 ee173eee1f2..9e1b73feb12 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, @@ -852,6 +853,7 @@ impl<'a> Iterator<JSRef<'a, Node>> for TreeIterator<'a> { } } +#[must_root] pub struct NodeIterator { pub start_node: JS<Node>, pub current_node: Option<JS<Node>>, 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 424eb09416c..322c70c3135 100644 --- a/components/script/dom/nodelist.rs +++ b/components/script/dom/nodelist.rs @@ -11,12 +11,14 @@ use dom::node::{Node, NodeHelpers}; use dom::window::Window; #[deriving(Encodable)] +#[must_root] pub enum NodeListType { Simple(Vec<JS<Node>>), Children(JS<Node>) } #[deriving(Encodable)] +#[must_root] pub struct NodeList { list_type: NodeListType, reflector_: Reflector, diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs index 82b931b0c2e..da112ff27fe 100644 --- a/components/script/dom/performance.rs +++ b/components/script/dom/performance.rs @@ -14,6 +14,7 @@ use time; pub type DOMHighResTimeStamp = f64; #[deriving(Encodable)] +#[must_root] pub struct Performance { reflector_: Reflector, timing: JS<PerformanceTiming>, @@ -28,8 +29,8 @@ impl Performance { } pub fn new(window: &JSRef<Window>) -> Temporary<Performance> { - let performance = Performance::new_inherited(window); - reflect_dom_object(box performance, &Window(*window), + reflect_dom_object(box Performance::new_inherited(window), + &Window(*window), PerformanceBinding::Wrap) } } 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..14e6c8b4f2e 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, @@ -35,8 +36,8 @@ impl ProcessingInstruction { } pub fn new(target: DOMString, data: DOMString, document: &JSRef<Document>) -> Temporary<ProcessingInstruction> { - let node = ProcessingInstruction::new_inherited(target, data, document); - Node::reflect_node(box node, document, ProcessingInstructionBinding::Wrap) + Node::reflect_node(box ProcessingInstruction::new_inherited(target, data, document), + document, ProcessingInstructionBinding::Wrap) } } 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/testbinding.rs b/components/script/dom/testbinding.rs index b5d83fac620..222223d7f44 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -19,6 +19,7 @@ use js::jsapi::JSContext; use js::jsval::{JSVal, NullValue}; #[deriving(Encodable)] +#[must_root] pub struct TestBinding { reflector: Reflector, global: GlobalField, diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs index 1bbd25cb8ff..6f5e97dec74 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, } @@ -35,8 +36,8 @@ impl Text { } pub fn new(text: DOMString, document: &JSRef<Document>) -> Temporary<Text> { - let node = Text::new_inherited(text, document); - Node::reflect_node(box node, document, TextBinding::Wrap) + Node::reflect_node(box Text::new_inherited(text, document), + document, TextBinding::Wrap) } pub fn Constructor(global: &GlobalRef, text: DOMString) -> Fallible<Temporary<Text>> { 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 ce60f3cdb19..75f1aaea79b 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -74,6 +74,7 @@ impl TimerHandle { } #[deriving(Encodable)] +#[must_root] pub struct Window { eventtarget: EventTarget, pub script_chan: ScriptChan, diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 3119b4c96f2..a34d47cef9b 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -30,6 +30,7 @@ use std::ptr; pub struct TrustedWorkerAddress(pub *const c_void); #[deriving(Encodable)] +#[must_root] pub struct Worker { eventtarget: EventTarget, refcount: Cell<uint>, 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/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index b2bfd64eb4e..025403e1698 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -98,6 +98,7 @@ enum SyncOrAsync<'a, 'b> { #[deriving(Encodable)] +#[must_root] pub struct XMLHttpRequest { eventtarget: XMLHttpRequestEventTarget, ready_state: Traceable<Cell<XMLHttpRequestState>>, @@ -132,7 +133,7 @@ pub struct XMLHttpRequest { impl XMLHttpRequest { pub fn new_inherited(global: &GlobalRef) -> XMLHttpRequest { - let xhr = XMLHttpRequest { + XMLHttpRequest { eventtarget: XMLHttpRequestEventTarget::new_inherited(XMLHttpRequestTypeId), ready_state: Traceable::new(Cell::new(Unsent)), timeout: Traceable::new(Cell::new(0u32)), @@ -162,8 +163,7 @@ impl XMLHttpRequest { fetch_time: Traceable::new(Cell::new(0)), timeout_pinned: Traceable::new(Cell::new(false)), terminate_sender: Untraceable::new(RefCell::new(None)), - }; - xhr + } } pub fn new(global: &GlobalRef) -> Temporary<XMLHttpRequest> { reflect_dom_object(box XMLHttpRequest::new_inherited(global), 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 } diff --git a/components/script/lib.rs b/components/script/lib.rs index c153e90bebb..9f3effaa368 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -58,6 +58,7 @@ pub mod dom { /// Generated JS-Rust bindings. pub mod codegen { + #[allow(unrooted_must_root)] pub mod Bindings; pub mod InterfaceTypes; pub mod InheritTypes; diff --git a/components/script/page.rs b/components/script/page.rs index cf532783c8b..6e8f414ef8d 100644 --- a/components/script/page.rs +++ b/components/script/page.rs @@ -425,6 +425,7 @@ impl Page { /// Information for one frame in the browsing context. #[deriving(Encodable)] +#[must_root] pub struct Frame { /// The document for this frame. pub document: JS<Document>, |