aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/lib.rs1
-rw-r--r--components/macros/lib.rs111
-rw-r--r--components/script/dom/attr.rs5
-rw-r--r--components/script/dom/bindings/callback.rs1
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py5
-rw-r--r--components/script/dom/bindings/global.rs1
-rw-r--r--components/script/dom/bindings/js.rs4
-rw-r--r--components/script/dom/bindings/trace.rs1
-rw-r--r--components/script/dom/bindings/utils.rs5
-rw-r--r--components/script/dom/blob.rs1
-rw-r--r--components/script/dom/browsercontext.rs1
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs1
-rw-r--r--components/script/dom/characterdata.rs1
-rw-r--r--components/script/dom/comment.rs5
-rw-r--r--components/script/dom/console.rs1
-rw-r--r--components/script/dom/customevent.rs1
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs1
-rw-r--r--components/script/dom/document.rs5
-rw-r--r--components/script/dom/documentfragment.rs5
-rw-r--r--components/script/dom/documenttype.rs3
-rw-r--r--components/script/dom/domexception.rs1
-rw-r--r--components/script/dom/domimplementation.rs1
-rw-r--r--components/script/dom/domparser.rs1
-rw-r--r--components/script/dom/domrect.rs5
-rw-r--r--components/script/dom/domrectlist.rs1
-rw-r--r--components/script/dom/domtokenlist.rs1
-rw-r--r--components/script/dom/element.rs9
-rw-r--r--components/script/dom/event.rs1
-rw-r--r--components/script/dom/eventtarget.rs1
-rw-r--r--components/script/dom/file.rs1
-rw-r--r--components/script/dom/formdata.rs5
-rw-r--r--components/script/dom/htmlanchorelement.rs2
-rw-r--r--components/script/dom/htmlappletelement.rs2
-rw-r--r--components/script/dom/htmlareaelement.rs2
-rw-r--r--components/script/dom/htmlaudioelement.rs2
-rw-r--r--components/script/dom/htmlbaseelement.rs2
-rw-r--r--components/script/dom/htmlbodyelement.rs2
-rw-r--r--components/script/dom/htmlbrelement.rs2
-rw-r--r--components/script/dom/htmlbuttonelement.rs2
-rw-r--r--components/script/dom/htmlcanvaselement.rs2
-rw-r--r--components/script/dom/htmlcollection.rs2
-rw-r--r--components/script/dom/htmldataelement.rs2
-rw-r--r--components/script/dom/htmldatalistelement.rs2
-rw-r--r--components/script/dom/htmldirectoryelement.rs2
-rw-r--r--components/script/dom/htmldivelement.rs2
-rw-r--r--components/script/dom/htmldlistelement.rs2
-rw-r--r--components/script/dom/htmlelement.rs2
-rw-r--r--components/script/dom/htmlembedelement.rs2
-rw-r--r--components/script/dom/htmlfieldsetelement.rs2
-rw-r--r--components/script/dom/htmlfontelement.rs2
-rw-r--r--components/script/dom/htmlformelement.rs2
-rw-r--r--components/script/dom/htmlframeelement.rs2
-rw-r--r--components/script/dom/htmlframesetelement.rs2
-rw-r--r--components/script/dom/htmlheadelement.rs2
-rw-r--r--components/script/dom/htmlheadingelement.rs2
-rw-r--r--components/script/dom/htmlhrelement.rs2
-rw-r--r--components/script/dom/htmlhtmlelement.rs2
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/dom/htmlimageelement.rs2
-rw-r--r--components/script/dom/htmlinputelement.rs2
-rw-r--r--components/script/dom/htmllabelelement.rs2
-rw-r--r--components/script/dom/htmllegendelement.rs2
-rw-r--r--components/script/dom/htmllielement.rs2
-rw-r--r--components/script/dom/htmllinkelement.rs2
-rw-r--r--components/script/dom/htmlmapelement.rs2
-rw-r--r--components/script/dom/htmlmediaelement.rs1
-rw-r--r--components/script/dom/htmlmetaelement.rs2
-rw-r--r--components/script/dom/htmlmeterelement.rs2
-rw-r--r--components/script/dom/htmlmodelement.rs2
-rw-r--r--components/script/dom/htmlobjectelement.rs2
-rw-r--r--components/script/dom/htmlolistelement.rs2
-rw-r--r--components/script/dom/htmloptgroupelement.rs2
-rw-r--r--components/script/dom/htmloptionelement.rs2
-rw-r--r--components/script/dom/htmloutputelement.rs2
-rw-r--r--components/script/dom/htmlparagraphelement.rs2
-rw-r--r--components/script/dom/htmlparamelement.rs2
-rw-r--r--components/script/dom/htmlpreelement.rs2
-rw-r--r--components/script/dom/htmlprogresselement.rs2
-rw-r--r--components/script/dom/htmlquoteelement.rs2
-rw-r--r--components/script/dom/htmlscriptelement.rs2
-rw-r--r--components/script/dom/htmlselectelement.rs2
-rw-r--r--components/script/dom/htmlserializer.rs1
-rw-r--r--components/script/dom/htmlsourceelement.rs2
-rw-r--r--components/script/dom/htmlspanelement.rs2
-rw-r--r--components/script/dom/htmlstyleelement.rs2
-rw-r--r--components/script/dom/htmltablecaptionelement.rs2
-rw-r--r--components/script/dom/htmltablecellelement.rs1
-rw-r--r--components/script/dom/htmltablecolelement.rs2
-rw-r--r--components/script/dom/htmltabledatacellelement.rs2
-rw-r--r--components/script/dom/htmltableelement.rs2
-rw-r--r--components/script/dom/htmltableheadercellelement.rs2
-rw-r--r--components/script/dom/htmltablerowelement.rs2
-rw-r--r--components/script/dom/htmltablesectionelement.rs2
-rw-r--r--components/script/dom/htmltemplateelement.rs2
-rw-r--r--components/script/dom/htmltextareaelement.rs2
-rw-r--r--components/script/dom/htmltimeelement.rs2
-rw-r--r--components/script/dom/htmltitleelement.rs2
-rw-r--r--components/script/dom/htmltrackelement.rs2
-rw-r--r--components/script/dom/htmlulistelement.rs2
-rw-r--r--components/script/dom/htmlunknownelement.rs2
-rw-r--r--components/script/dom/htmlvideoelement.rs2
-rw-r--r--components/script/dom/location.rs1
-rw-r--r--components/script/dom/messageevent.rs1
-rw-r--r--components/script/dom/mouseevent.rs1
-rw-r--r--components/script/dom/namednodemap.rs1
-rw-r--r--components/script/dom/navigator.rs1
-rw-r--r--components/script/dom/node.rs2
-rw-r--r--components/script/dom/nodeiterator.rs1
-rw-r--r--components/script/dom/nodelist.rs2
-rw-r--r--components/script/dom/performance.rs5
-rw-r--r--components/script/dom/performancetiming.rs2
-rw-r--r--components/script/dom/processinginstruction.rs5
-rw-r--r--components/script/dom/progressevent.rs1
-rw-r--r--components/script/dom/range.rs1
-rw-r--r--components/script/dom/screen.rs1
-rw-r--r--components/script/dom/testbinding.rs1
-rw-r--r--components/script/dom/text.rs5
-rw-r--r--components/script/dom/treewalker.rs1
-rw-r--r--components/script/dom/uievent.rs1
-rw-r--r--components/script/dom/urlsearchparams.rs1
-rw-r--r--components/script/dom/validitystate.rs1
-rw-r--r--components/script/dom/window.rs1
-rw-r--r--components/script/dom/worker.rs1
-rw-r--r--components/script/dom/workerglobalscope.rs1
-rw-r--r--components/script/dom/workerlocation.rs1
-rw-r--r--components/script/dom/workernavigator.rs1
-rw-r--r--components/script/dom/xmlhttprequest.rs6
-rw-r--r--components/script/dom/xmlhttprequesteventtarget.rs1
-rw-r--r--components/script/dom/xmlhttprequestupload.rs1
-rw-r--r--components/script/lib.rs1
-rw-r--r--components/script/page.rs1
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>,