aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/msg/constellation_msg.rs6
-rw-r--r--components/plugins/jstraceable.rs15
-rw-r--r--components/script/dom/attr.rs5
-rw-r--r--components/script/dom/bindings/callback.rs11
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py17
-rw-r--r--components/script/dom/bindings/global.rs2
-rw-r--r--components/script/dom/bindings/str.rs3
-rw-r--r--components/script/dom/bindings/trace.rs146
-rw-r--r--components/script/dom/bindings/utils.rs2
-rw-r--r--components/script/dom/blob.rs4
-rw-r--r--components/script/dom/browsercontext.rs4
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs2
-rw-r--r--components/script/dom/characterdata.rs2
-rw-r--r--components/script/dom/comment.rs2
-rw-r--r--components/script/dom/console.rs2
-rw-r--r--components/script/dom/customevent.rs2
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs2
-rw-r--r--components/script/dom/document.rs12
-rw-r--r--components/script/dom/documentfragment.rs2
-rw-r--r--components/script/dom/documenttype.rs2
-rw-r--r--components/script/dom/domexception.rs5
-rw-r--r--components/script/dom/domimplementation.rs2
-rw-r--r--components/script/dom/domparser.rs2
-rw-r--r--components/script/dom/domrect.rs2
-rw-r--r--components/script/dom/domrectlist.rs2
-rw-r--r--components/script/dom/domtokenlist.rs2
-rw-r--r--components/script/dom/element.rs5
-rw-r--r--components/script/dom/event.rs7
-rw-r--r--components/script/dom/eventtarget.rs14
-rw-r--r--components/script/dom/file.rs2
-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.rs29
-rw-r--r--components/script/dom/htmldataelement.rs2
-rw-r--r--components/script/dom/htmldatalistelement.rs5
-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.rs5
-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.rs4
-rw-r--r--components/script/dom/htmlhrelement.rs2
-rw-r--r--components/script/dom/htmlhtmlelement.rs2
-rw-r--r--components/script/dom/htmliframeelement.rs4
-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.rs2
-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/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.rs2
-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.rs2
-rw-r--r--components/script/dom/macros.rs12
-rw-r--r--components/script/dom/messageevent.rs2
-rw-r--r--components/script/dom/mouseevent.rs2
-rw-r--r--components/script/dom/namednodemap.rs2
-rw-r--r--components/script/dom/navigator.rs2
-rw-r--r--components/script/dom/node.rs15
-rw-r--r--components/script/dom/nodeiterator.rs2
-rw-r--r--components/script/dom/nodelist.rs4
-rw-r--r--components/script/dom/performance.rs2
-rw-r--r--components/script/dom/performancetiming.rs2
-rw-r--r--components/script/dom/processinginstruction.rs2
-rw-r--r--components/script/dom/progressevent.rs2
-rw-r--r--components/script/dom/range.rs2
-rw-r--r--components/script/dom/screen.rs2
-rw-r--r--components/script/dom/testbinding.rs2
-rw-r--r--components/script/dom/text.rs2
-rw-r--r--components/script/dom/treewalker.rs6
-rw-r--r--components/script/dom/uievent.rs2
-rw-r--r--components/script/dom/urlsearchparams.rs2
-rw-r--r--components/script/dom/validitystate.rs2
-rw-r--r--components/script/dom/window.rs9
-rw-r--r--components/script/dom/worker.rs2
-rw-r--r--components/script/dom/workerglobalscope.rs5
-rw-r--r--components/script/dom/workerlocation.rs2
-rw-r--r--components/script/dom/workernavigator.rs2
-rw-r--r--components/script/dom/xmlhttprequest.rs8
-rw-r--r--components/script/dom/xmlhttprequesteventtarget.rs2
-rw-r--r--components/script/dom/xmlhttprequestupload.rs2
-rw-r--r--components/script/layout_interface.rs15
-rw-r--r--components/script/lib.rs1
-rw-r--r--components/script/page.rs8
-rw-r--r--components/script/script_task.rs10
133 files changed, 325 insertions, 278 deletions
diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs
index 35b07024acd..500f996aa79 100644
--- a/components/msg/constellation_msg.rs
+++ b/components/msg/constellation_msg.rs
@@ -9,7 +9,6 @@ use geom::rect::Rect;
use geom::size::TypedSize2D;
use geom::scale_factor::ScaleFactor;
use layers::geometry::DevicePixel;
-use serialize::Encodable;
use servo_util::geometry::{PagePx, ViewportPx};
use std::comm::{channel, Sender, Receiver};
use url::Url;
@@ -37,7 +36,6 @@ pub struct Failure {
pub subpage_id: Option<SubpageId>,
}
-#[deriving(Encodable)]
pub struct WindowSizeData {
/// The size of the initial layout viewport, before parsing an
/// http://www.w3.org/TR/css-device-adapt/#initial-viewport
@@ -77,8 +75,8 @@ pub enum NavigationDirection {
Back,
}
-#[deriving(Clone, PartialEq, Eq, Hash, Encodable)]
+#[deriving(Clone, PartialEq, Eq, Hash)]
pub struct PipelineId(pub uint);
-#[deriving(Clone, PartialEq, Eq, Hash, Encodable)]
+#[deriving(Clone, PartialEq, Eq, Hash)]
pub struct SubpageId(pub uint);
diff --git a/components/plugins/jstraceable.rs b/components/plugins/jstraceable.rs
index 5a113ab1691..6c3998f2d52 100644
--- a/components/plugins/jstraceable.rs
+++ b/components/plugins/jstraceable.rs
@@ -49,16 +49,7 @@ fn jstraceable_substructure(cx: &mut ExtCtxt, trait_span: Span, substr: &Substru
let fields = match *substr.fields {
Struct(ref fs) => fs,
- EnumMatching(index, variant, ref fs) => {
- // Determine the discriminant. We will feed this value to the byte
- // iteration function.
- let discriminant = match variant.node.disr_expr {
- Some(ref d) => d.clone(),
- None => cx.expr_uint(trait_span, index)
- };
-
- stmts.push(call_hash(trait_span, discriminant));
-
+ EnumMatching(_, _, ref fs) => {
fs
}
_ => cx.span_bug(trait_span, "impossible substructure in `jstraceable`")
@@ -68,9 +59,5 @@ fn jstraceable_substructure(cx: &mut ExtCtxt, trait_span: Span, substr: &Substru
stmts.push(call_hash(span, self_.clone()));
}
- if stmts.len() == 0 {
- cx.span_bug(trait_span, "#[jstraceable] needs at least one field");
- }
-
cx.expr_block(cx.block(trait_span, stmts, None))
}
diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs
index 2da30a8c58c..fe1a57c4440 100644
--- a/components/script/dom/attr.rs
+++ b/components/script/dom/attr.rs
@@ -28,7 +28,8 @@ pub enum AttrSettingType {
ReplacedAttr,
}
-#[deriving(PartialEq, Clone, Encodable)]
+#[deriving(PartialEq, Clone)]
+#[jstraceable]
pub enum AttrValue {
StringAttrValue(DOMString),
TokenListAttrValue(DOMString, Vec<Atom>),
@@ -72,7 +73,7 @@ impl Str for AttrValue {
}
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Attr {
reflector_: Reflector,
diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs
index 5c1f4c771cb..4f9c04f6e42 100644
--- a/components/script/dom/bindings/callback.rs
+++ b/components/script/dom/bindings/callback.rs
@@ -13,8 +13,6 @@ use js::jsval::{JSVal, UndefinedValue};
use std::ptr;
-use serialize::{Encodable, Encoder};
-
/// The exception handling used for a call.
pub enum ExceptionHandling {
/// Report any exception and don't throw it to the caller code.
@@ -28,7 +26,8 @@ pub enum ExceptionHandling {
}
/// A common base class for representing IDL callback function types.
-#[deriving(Clone,PartialEq,Encodable)]
+#[deriving(Clone,PartialEq)]
+#[jstraceable]
pub struct CallbackFunction {
object: CallbackObject
}
@@ -44,7 +43,8 @@ impl CallbackFunction {
}
/// A common base class for representing IDL callback interface types.
-#[deriving(Clone,PartialEq,Encodable)]
+#[deriving(Clone,PartialEq)]
+#[jstraceable]
pub struct CallbackInterface {
object: CallbackObject
}
@@ -52,7 +52,8 @@ pub struct CallbackInterface {
/// A common base class for representing IDL callback function and
/// callback interface types.
#[allow(raw_pointer_deriving)]
-#[deriving(Clone,PartialEq,Encodable)]
+#[deriving(Clone,PartialEq)]
+#[jstraceable]
struct CallbackObject {
/// The underlying `JSObject`.
callback: Traceable<*mut JSObject>,
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index f73ccbb10fe..14acae9bfa2 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2754,7 +2754,8 @@ use js::jsapi::JSContext;
use js::jsval::JSVal;
#[repr(uint)]
-#[deriving(Encodable, PartialEq)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum valuelist {
%s
}
@@ -4893,7 +4894,7 @@ class CGCallback(CGClass):
bases=[ClassBase(baseName)],
constructors=self.getConstructors(),
methods=realMethods+getters+setters,
- decorators="#[deriving(PartialEq,Clone,Encodable)]")
+ decorators="#[deriving(PartialEq,Clone)]#[jstraceable]")
def getConstructors(self):
return [ClassConstructor(
@@ -5438,7 +5439,6 @@ class GlobalGenRoots():
CGGeneric("use dom::bindings::js::{JS, JSRef, Temporary};\n"),
CGGeneric("use dom::bindings::trace::JSTraceable;\n"),
CGGeneric("use dom::bindings::utils::Reflectable;\n"),
- CGGeneric("use serialize::{Encodable, Encoder};\n"),
CGGeneric("use js::jsapi::JSTracer;\n\n")]
for descriptor in descriptors:
name = descriptor.name
@@ -5500,16 +5500,7 @@ class GlobalGenRoots():
'toBound': name + 'Derived'})),
CGGeneric("impl %s for %s {}\n\n" % (name + 'Cast', name))]
- trace = [CGGeneric(string.Template('''impl JSTraceable for ${name} {
- fn trace(&self, tracer: *mut JSTracer) {
- unsafe {
- self.encode(&mut *tracer).ok().expect("failed to encode");
- }
- }
-}
-''').substitute({'name': name}))]
-
- allprotos += protos + derived + cast + trace
+ allprotos += protos + derived + cast
curr = CGList(allprotos)
curr = CGWrapper(curr, pre=AUTOGENERATED_WARNING_COMMENT)
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs
index 7bf8ecc343d..ac40de4370c 100644
--- a/components/script/dom/bindings/global.rs
+++ b/components/script/dom/bindings/global.rs
@@ -33,7 +33,7 @@ pub enum GlobalRoot<'a, 'b> {
/// A traced reference to a global object, for use in fields of traced Rust
/// structures.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub enum GlobalField {
WindowField(JS<Window>),
diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs
index 825716bdf3e..4ec9e08197b 100644
--- a/components/script/dom/bindings/str.rs
+++ b/components/script/dom/bindings/str.rs
@@ -10,7 +10,8 @@ use std::path::BytesContainer;
use std::str;
/// Encapsulates the IDL `ByteString` type.
-#[deriving(Encodable,Clone,Eq,PartialEq)]
+#[deriving(Clone,Eq,PartialEq)]
+#[jstraceable]
pub struct ByteString(Vec<u8>);
impl ByteString {
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index e29e64a3e23..f8f63091db0 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -11,57 +11,51 @@
//! 1. The GC calls `_trace` defined in `FooBinding` during the marking
//! phase. (This happens through `JSClass.trace` for non-proxy bindings, and
//! through `ProxyTraps.trace` otherwise.)
-//! 2. `_trace` calls `Foo::trace()` (an implementation of `JSTraceable`,
-//! defined in `InheritTypes.rs`).
-//! 3. `Foo::trace()` calls `Foo::encode()` (an implementation of `Encodable`).
-//! This implementation is typically derived by a `#[deriving(Encodable)]`
-//! annotation on the Rust struct.
-//! 4. For all fields (except those wrapped in `Untraceable`), `Foo::encode()`
-//! calls `encode()` on the field.
-//!
-//! For example, for fields of type `JS<T>`, `JS<T>::encode()` calls
+//! 2. `_trace` calls `Foo::trace()` (an implementation of `JSTraceable`).
+//! This is typically derived via a #[jstraceable] annotation
+//! 4. For all fields (except those wrapped in `Untraceable`), `Foo::trace()`
+//! calls `trace()` on the field.
+//! For example, for fields of type `JS<T>`, `JS<T>::trace()` calls
//! `trace_reflector()`.
//! 6. `trace_reflector()` calls `trace_object()` with the `JSObject` for the
//! reflector.
//! 7. `trace_object()` calls `JS_CallTracer()` to notify the GC, which will
//! add the object to the graph, and will trace that object as well.
+//!
+//! The untraceable!() macro adds an empty implementation of JSTraceable to
+//! a datatype.
use dom::bindings::js::JS;
use dom::bindings::utils::{Reflectable, Reflector};
-
use js::jsapi::{JSObject, JSTracer, JS_CallTracer, JSTRACE_OBJECT};
use js::jsval::JSVal;
use libc;
-use url::Url;
-use std::mem;
-use std::num;
+use std::rc::Rc;
use std::cell::{Cell, RefCell};
-use serialize::{Encodable, Encoder};
+
+use url::Url;
+use servo_util::atom::Atom;
+use servo_util::namespace::Namespace;
+use msg::constellation_msg::{PipelineId, SubpageId, WindowSizeData};
+use net::image_cache_task::ImageCacheTask;
+use script_traits::ScriptControlChan;
+use std::collections::hashmap::HashMap;
+use collections::hash::Hash;
+use style::PropertyDeclarationBlock;
// IMPORTANT: We rely on the fact that we never attempt to encode DOM objects using
// any encoder but JSTracer. Since we derive trace hooks automatically,
// we are unfortunately required to use generic types everywhere and
// unsafely cast to the concrete JSTracer we actually require.
-fn get_jstracer<'a, S: Encoder<E>, E>(s: &'a mut S) -> &'a mut JSTracer {
- unsafe {
- mem::transmute(s)
+impl<T: Reflectable> JSTraceable for JS<T> {
+ fn trace(&self, trc: *mut JSTracer) {
+ trace_reflector(trc, "", self.reflector());
}
}
-impl<T: Reflectable+Encodable<S, E>, S: Encoder<E>, E> Encodable<S, E> for JS<T> {
- fn encode(&self, s: &mut S) -> Result<(), E> {
- trace_reflector(get_jstracer(s), "", self.reflector());
- Ok(())
- }
-}
-
-impl<S: Encoder<E>, E> Encodable<S, E> for Reflector {
- fn encode(&self, _s: &mut S) -> Result<(), E> {
- Ok(())
- }
-}
+untraceable!(Reflector)
/// A trait to allow tracing (only) DOM objects.
pub trait JSTraceable {
@@ -122,12 +116,6 @@ impl<T> Untraceable<T> {
}
}
-impl<S: Encoder<E>, E, T> Encodable<S, E> for Untraceable<T> {
- fn encode(&self, _s: &mut S) -> Result<(), E> {
- Ok(())
- }
-}
-
impl<T> Deref<T> for Untraceable<T> {
fn deref<'a>(&'a self) -> &'a T {
&self.inner
@@ -167,28 +155,88 @@ impl<T> Deref<T> for Traceable<T> {
}
}
-impl<S: Encoder<E>, E, T: Encodable<S, E>> Encodable<S, E> for Traceable<RefCell<T>> {
- fn encode(&self, s: &mut S) -> Result<(), E> {
- self.borrow().encode(s)
+impl<T: JSTraceable> JSTraceable for RefCell<T> {
+ fn trace(&self, trc: *mut JSTracer) {
+ self.borrow().trace(trc)
+ }
+}
+
+impl<T: JSTraceable> JSTraceable for Rc<T> {
+ fn trace(&self, trc: *mut JSTracer) {
+ self.trace(trc)
+ }
+}
+
+impl<T: JSTraceable> JSTraceable for Box<T> {
+ fn trace(&self, trc: *mut JSTracer) {
+ self.trace(trc)
+ }
+}
+
+impl<T: JSTraceable+Copy> JSTraceable for Traceable<Cell<T>> {
+ fn trace(&self, trc: *mut JSTracer) {
+ self.deref().get().trace(trc)
+ }
+}
+
+
+impl<T: JSTraceable+Copy> JSTraceable for Cell<T> {
+ fn trace(&self, trc: *mut JSTracer) {
+ self.get().trace(trc)
}
}
-impl<S: Encoder<E>, E, T: Encodable<S, E>+Copy> Encodable<S, E> for Traceable<Cell<T>> {
- fn encode(&self, s: &mut S) -> Result<(), E> {
- self.deref().get().encode(s)
+impl JSTraceable for Traceable<*mut JSObject> {
+ fn trace(&self, trc: *mut JSTracer) {
+ trace_object(trc, "object", **self);
}
}
-impl<S: Encoder<E>, E> Encodable<S, E> for Traceable<*mut JSObject> {
- fn encode(&self, s: &mut S) -> Result<(), E> {
- trace_object(get_jstracer(s), "object", **self);
- Ok(())
+impl JSTraceable for Traceable<JSVal> {
+ fn trace(&self, trc: *mut JSTracer) {
+ trace_jsval(trc, "val", **self);
}
}
-impl<S: Encoder<E>, E> Encodable<S, E> for Traceable<JSVal> {
- fn encode(&self, s: &mut S) -> Result<(), E> {
- trace_jsval(get_jstracer(s), "val", **self);
- Ok(())
+// XXXManishearth Check if the following three are optimized to no-ops
+// if e.trace() is a no-op (e.g it is an untraceable type)
+impl<T: JSTraceable> JSTraceable for Vec<T> {
+ #[inline]
+ fn trace(&self, trc: *mut JSTracer) {
+ for e in self.iter() {
+ e.trace(trc);
+ }
}
}
+
+impl<T: JSTraceable> JSTraceable for Option<T> {
+ #[inline]
+ fn trace(&self, trc: *mut JSTracer) {
+ self.as_ref().map(|e| e.trace(trc));
+ }
+}
+
+impl<K: Eq+Hash, V: JSTraceable> JSTraceable for HashMap<K, V> {
+ #[inline]
+ fn trace(&self, trc: *mut JSTracer) {
+ for e in self.iter() {
+ e.val1().trace(trc);
+ }
+ }
+}
+
+untraceable!(bool, f32, f64, String, Url)
+untraceable!(SubpageId, WindowSizeData, PipelineId)
+untraceable!(uint, u8, u16, u32, u64)
+untraceable!(int, i8, i16, i32, i64)
+untraceable!(Untraceable<T>)
+untraceable!(ImageCacheTask, ScriptControlChan)
+untraceable!(Atom, Namespace)
+untraceable!(PropertyDeclarationBlock)
+
+impl<'a> JSTraceable for &'a str {
+ #[inline]
+ fn trace(&self, _: *mut JSTracer) {
+ // Do nothing
+ }
+} \ No newline at end of file
diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs
index a923371ae8e..8453b0f95c2 100644
--- a/components/script/dom/bindings/utils.rs
+++ b/components/script/dom/bindings/utils.rs
@@ -52,7 +52,7 @@ use js::{JSFUN_CONSTRUCTOR, JSPROP_READONLY};
use js;
#[allow(raw_pointer_deriving)]
-#[deriving(Encodable)]
+#[jstraceable]
pub struct GlobalStaticData {
pub windowproxy_handler: Untraceable<*const libc::c_void>,
}
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs
index 1266cce96b9..71f83dffd96 100644
--- a/components/script/dom/blob.rs
+++ b/components/script/dom/blob.rs
@@ -9,13 +9,13 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::bindings::error::Fallible;
use dom::bindings::codegen::Bindings::BlobBinding;
-#[deriving(Encodable)]
+#[jstraceable]
pub enum BlobType {
BlobTypeId,
FileTypeId
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Blob {
reflector_: Reflector,
diff --git a/components/script/dom/browsercontext.rs b/components/script/dom/browsercontext.rs
index c9ac5e2f040..927078d4d30 100644
--- a/components/script/dom/browsercontext.rs
+++ b/components/script/dom/browsercontext.rs
@@ -16,7 +16,7 @@ use libc::c_void;
use std::ptr;
#[allow(raw_pointer_deriving)]
-#[deriving(Encodable)]
+#[jstraceable]
pub struct BrowserContext {
history: Vec<SessionHistoryEntry>,
active_index: uint,
@@ -66,7 +66,7 @@ impl BrowserContext {
}
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct SessionHistoryEntry {
document: JS<Document>,
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs
index 84553ee2a93..cf6b8c58704 100644
--- a/components/script/dom/canvasrenderingcontext2d.rs
+++ b/components/script/dom/canvasrenderingcontext2d.rs
@@ -16,7 +16,7 @@ use geom::size::Size2D;
use canvas::canvas_render_task::{CanvasMsg, CanvasRenderTask, ClearRect, Close, FillRect, Recreate, StrokeRect};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct CanvasRenderingContext2D {
reflector_: Reflector,
diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs
index 14c1123f1bd..3cf6fef31f8 100644
--- a/components/script/dom/characterdata.rs
+++ b/components/script/dom/characterdata.rs
@@ -17,7 +17,7 @@ use servo_util::str::DOMString;
use std::cell::RefCell;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct CharacterData {
pub node: Node,
diff --git a/components/script/dom/comment.rs b/components/script/dom/comment.rs
index aa0718390ed..e2ac14ba2f5 100644
--- a/components/script/dom/comment.rs
+++ b/components/script/dom/comment.rs
@@ -16,7 +16,7 @@ use dom::node::{CommentNodeTypeId, Node};
use servo_util::str::DOMString;
/// An HTML comment.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Comment {
pub characterdata: CharacterData,
diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs
index d8757b3eb81..015939d9ad6 100644
--- a/components/script/dom/console.rs
+++ b/components/script/dom/console.rs
@@ -9,7 +9,7 @@ use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Console {
pub reflector_: Reflector
diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs
index 7549176d2ee..37868e11432 100644
--- a/components/script/dom/customevent.rs
+++ b/components/script/dom/customevent.rs
@@ -18,7 +18,7 @@ use servo_util::str::DOMString;
use std::cell::Cell;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct CustomEvent {
event: Event,
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 8842aee2f37..b7e700158d4 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -36,7 +36,7 @@ use std::task::TaskBuilder;
use native::task::NativeTaskBuilder;
use url::Url;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DedicatedWorkerGlobalScope {
workerglobalscope: WorkerGlobalScope,
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 8ce2971642d..6b1cc305772 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -65,13 +65,14 @@ use std::cell::{Cell, RefCell};
use url::Url;
use time;
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum IsHTMLDocument {
HTMLDocument,
NonHTMLDocument,
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Document {
pub node: Node,
@@ -100,6 +101,7 @@ impl DocumentDerived for EventTarget {
}
}
+#[jstraceable]
struct ImagesFilter;
impl CollectionFilter for ImagesFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
@@ -107,6 +109,7 @@ impl CollectionFilter for ImagesFilter {
}
}
+#[jstraceable]
struct EmbedsFilter;
impl CollectionFilter for EmbedsFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
@@ -114,6 +117,7 @@ impl CollectionFilter for EmbedsFilter {
}
}
+#[jstraceable]
struct LinksFilter;
impl CollectionFilter for LinksFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
@@ -121,6 +125,7 @@ impl CollectionFilter for LinksFilter {
}
}
+#[jstraceable]
struct FormsFilter;
impl CollectionFilter for FormsFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
@@ -128,6 +133,7 @@ impl CollectionFilter for FormsFilter {
}
}
+#[jstraceable]
struct ScriptsFilter;
impl CollectionFilter for ScriptsFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
@@ -135,6 +141,7 @@ impl CollectionFilter for ScriptsFilter {
}
}
+#[jstraceable]
struct AnchorsFilter;
impl CollectionFilter for AnchorsFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
@@ -142,6 +149,7 @@ impl CollectionFilter for AnchorsFilter {
}
}
+#[jstraceable]
struct AppletsFilter;
impl CollectionFilter for AppletsFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs
index 3a2a04c299e..cba1215dde0 100644
--- a/components/script/dom/documentfragment.rs
+++ b/components/script/dom/documentfragment.rs
@@ -18,7 +18,7 @@ use dom::node::{DocumentFragmentNodeTypeId, Node, NodeHelpers, window_from_node}
use dom::nodelist::NodeList;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DocumentFragment {
pub node: Node,
diff --git a/components/script/dom/documenttype.rs b/components/script/dom/documenttype.rs
index 8bbf0185a48..709a3896a94 100644
--- a/components/script/dom/documenttype.rs
+++ b/components/script/dom/documenttype.rs
@@ -13,7 +13,7 @@ use dom::node::{Node, DoctypeNodeTypeId, NodeHelpers};
use servo_util::str::DOMString;
/// The `DOCTYPE` tag.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DocumentType {
pub node: Node,
diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs
index ff2993baac8..392cff0222d 100644
--- a/components/script/dom/domexception.rs
+++ b/components/script/dom/domexception.rs
@@ -13,7 +13,8 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use servo_util::str::DOMString;
#[repr(uint)]
-#[deriving(Show, Encodable)]
+#[deriving(Show)]
+#[jstraceable]
pub enum DOMErrorName {
IndexSizeError = DOMExceptionConstants::INDEX_SIZE_ERR as uint,
HierarchyRequestError = DOMExceptionConstants::HIERARCHY_REQUEST_ERR as uint,
@@ -59,7 +60,7 @@ impl DOMErrorName {
}
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DOMException {
pub code: DOMErrorName,
diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs
index 5ce1706b78f..e93d26cb6c9 100644
--- a/components/script/dom/domimplementation.rs
+++ b/components/script/dom/domimplementation.rs
@@ -22,7 +22,7 @@ use dom::node::Node;
use dom::text::Text;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DOMImplementation {
document: JS<Document>,
diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs
index a467fd1812d..50aa923d399 100644
--- a/components/script/dom/domparser.rs
+++ b/components/script/dom/domparser.rs
@@ -13,7 +13,7 @@ use dom::document::{Document, HTMLDocument, NonHTMLDocument};
use dom::window::Window;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DOMParser {
window: JS<Window>, //XXXjdm Document instead?
diff --git a/components/script/dom/domrect.rs b/components/script/dom/domrect.rs
index 53ca08ba482..0cc1770e6d8 100644
--- a/components/script/dom/domrect.rs
+++ b/components/script/dom/domrect.rs
@@ -10,7 +10,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
use servo_util::geometry::Au;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DOMRect {
reflector_: Reflector,
diff --git a/components/script/dom/domrectlist.rs b/components/script/dom/domrectlist.rs
index 5520002afe3..8d019a5012c 100644
--- a/components/script/dom/domrectlist.rs
+++ b/components/script/dom/domrectlist.rs
@@ -10,7 +10,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::domrect::DOMRect;
use dom::window::Window;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DOMRectList {
reflector_: Reflector,
diff --git a/components/script/dom/domtokenlist.rs b/components/script/dom/domtokenlist.rs
index 8e44de023b9..c7b0ba70360 100644
--- a/components/script/dom/domtokenlist.rs
+++ b/components/script/dom/domtokenlist.rs
@@ -16,7 +16,7 @@ use servo_util::atom::Atom;
use servo_util::namespace::Null;
use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct DOMTokenList {
reflector_: Reflector,
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 08605354ace..49aac16473b 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -43,7 +43,7 @@ use std::ascii::StrAsciiExt;
use std::cell::{Cell, RefCell};
use std::mem;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Element {
pub node: Node,
@@ -71,7 +71,8 @@ impl Reflectable for Element {
}
}
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum ElementTypeId {
HTMLElementTypeId,
HTMLAnchorElementTypeId,
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index 88270fde8eb..69caf3f137c 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -15,7 +15,7 @@ use std::cell::{Cell, RefCell};
use time;
-#[deriving(Encodable)]
+#[jstraceable]
pub enum EventPhase {
PhaseNone = EventConstants::NONE as int,
PhaseCapturing = EventConstants::CAPTURING_PHASE as int,
@@ -23,7 +23,8 @@ pub enum EventPhase {
PhaseBubbling = EventConstants::BUBBLING_PHASE as int,
}
-#[deriving(PartialEq, Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum EventTypeId {
CustomEventTypeId,
HTMLEventTypeId,
@@ -34,7 +35,7 @@ pub enum EventTypeId {
UIEventTypeId
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Event {
pub type_id: EventTypeId,
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 62404fe4004..682379bfdce 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -26,13 +26,15 @@ use url::Url;
use std::collections::hashmap::HashMap;
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum ListenerPhase {
Capturing,
Bubbling,
}
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum EventTargetTypeId {
NodeTargetTypeId(NodeTypeId),
WindowTypeId,
@@ -41,7 +43,8 @@ pub enum EventTargetTypeId {
XMLHttpRequestTargetTypeId(XMLHttpRequestId)
}
-#[deriving(PartialEq, Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum EventListenerType {
Additive(EventListener),
Inline(EventListener),
@@ -55,13 +58,14 @@ impl EventListenerType {
}
}
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub struct EventListenerEntry {
pub phase: ListenerPhase,
pub listener: EventListenerType
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct EventTarget {
pub type_id: EventTargetTypeId,
diff --git a/components/script/dom/file.rs b/components/script/dom/file.rs
index 52ea7feff74..c04dcd526f1 100644
--- a/components/script/dom/file.rs
+++ b/components/script/dom/file.rs
@@ -10,7 +10,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::blob::{Blob, BlobType, FileTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct File {
pub blob: Blob,
diff --git a/components/script/dom/formdata.rs b/components/script/dom/formdata.rs
index 4a023505244..51371154b84 100644
--- a/components/script/dom/formdata.rs
+++ b/components/script/dom/formdata.rs
@@ -18,14 +18,15 @@ use servo_util::str::DOMString;
use std::cell::RefCell;
use std::collections::hashmap::HashMap;
-#[deriving(Encodable, Clone)]
+#[deriving(Clone)]
+#[jstraceable]
#[must_root]
pub enum FormDatum {
StringData(DOMString),
FileData(JS<File>)
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct FormData {
data: Traceable<RefCell<HashMap<DOMString, Vec<FormDatum>>>>,
diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs
index 6414c7d0c3c..a545ee189e3 100644
--- a/components/script/dom/htmlanchorelement.rs
+++ b/components/script/dom/htmlanchorelement.rs
@@ -23,7 +23,7 @@ use servo_util::atom::Atom;
use servo_util::namespace::Null;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLAnchorElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlappletelement.rs b/components/script/dom/htmlappletelement.rs
index c5a2139437a..973ac76bd31 100644
--- a/components/script/dom/htmlappletelement.rs
+++ b/components/script/dom/htmlappletelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLAppletElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs
index f75cc726e15..c6590bf3936 100644
--- a/components/script/dom/htmlareaelement.rs
+++ b/components/script/dom/htmlareaelement.rs
@@ -17,7 +17,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLAreaElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs
index def3a045874..bd2fbc1f417 100644
--- a/components/script/dom/htmlaudioelement.rs
+++ b/components/script/dom/htmlaudioelement.rs
@@ -13,7 +13,7 @@ use dom::htmlmediaelement::HTMLMediaElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLAudioElement {
pub htmlmediaelement: HTMLMediaElement
diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs
index 58fa14a6463..7aa7b83f52b 100644
--- a/components/script/dom/htmlbaseelement.rs
+++ b/components/script/dom/htmlbaseelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLBaseElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs
index efdf4065145..b09adcb2d17 100644
--- a/components/script/dom/htmlbodyelement.rs
+++ b/components/script/dom/htmlbodyelement.rs
@@ -20,7 +20,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLBodyElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlbrelement.rs b/components/script/dom/htmlbrelement.rs
index 7f7b4114e0b..7b363a938af 100644
--- a/components/script/dom/htmlbrelement.rs
+++ b/components/script/dom/htmlbrelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLBRElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index c3b0b0e50f8..d90038c0b14 100644
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -19,7 +19,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLButtonElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index be12b3042ef..8609de6425d 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -28,7 +28,7 @@ use std::cell::Cell;
static DefaultWidth: u32 = 300;
static DefaultHeight: u32 = 150;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLCanvasElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs
index b321d40b4eb..7a3a68fe2b0 100644
--- a/components/script/dom/htmlcollection.rs
+++ b/components/script/dom/htmlcollection.rs
@@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::HTMLCollectionBinding::HTMLCollectionMetho
use dom::bindings::codegen::InheritTypes::{ElementCast, NodeCast};
use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, Temporary};
+use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::element::{Element, AttributeHandlers, ElementHelpers};
use dom::node::{Node, NodeHelpers};
@@ -16,27 +17,20 @@ use servo_util::namespace;
use servo_util::namespace::Namespace;
use servo_util::str::{DOMString, split_html_space_chars};
-use serialize::{Encoder, Encodable};
use std::ascii::StrAsciiExt;
-pub trait CollectionFilter {
+pub trait CollectionFilter : JSTraceable {
fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool;
}
-impl<S: Encoder<E>, E> Encodable<S, E> for Box<CollectionFilter+'static> {
- fn encode(&self, _s: &mut S) -> Result<(), E> {
- Ok(())
- }
-}
-
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub enum CollectionTypeId {
Static(Vec<JS<Element>>),
Live(JS<Node>, Box<CollectionFilter+'static>)
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLCollection {
collection: CollectionTypeId,
@@ -65,7 +59,8 @@ impl HTMLCollection {
fn all_elements(window: JSRef<Window>, root: JSRef<Node>,
namespace_filter: Option<Namespace>) -> Temporary<HTMLCollection> {
- struct AllElementFilter {
+ #[jstraceable]
+struct AllElementFilter {
namespace_filter: Option<Namespace>
}
impl CollectionFilter for AllElementFilter {
@@ -86,7 +81,8 @@ impl HTMLCollection {
return HTMLCollection::all_elements(window, root, None);
}
- struct TagNameFilter {
+ #[jstraceable]
+struct TagNameFilter {
tag: Atom,
ascii_lower_tag: Atom,
}
@@ -121,7 +117,8 @@ impl HTMLCollection {
if tag.as_slice() == "*" {
return HTMLCollection::all_elements(window, root, namespace_filter);
}
- struct TagNameNSFilter {
+ #[jstraceable]
+struct TagNameNSFilter {
tag: Atom,
namespace_filter: Option<Namespace>
}
@@ -145,7 +142,8 @@ impl HTMLCollection {
pub fn by_class_name(window: JSRef<Window>, root: JSRef<Node>, classes: DOMString)
-> Temporary<HTMLCollection> {
- struct ClassNameFilter {
+ #[jstraceable]
+struct ClassNameFilter {
classes: Vec<DOMString>
}
impl CollectionFilter for ClassNameFilter {
@@ -160,7 +158,8 @@ impl HTMLCollection {
}
pub fn children(window: JSRef<Window>, root: JSRef<Node>) -> Temporary<HTMLCollection> {
- struct ElementChildFilter;
+ #[jstraceable]
+struct ElementChildFilter;
impl CollectionFilter for ElementChildFilter {
fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool {
root.is_parent_of(NodeCast::from_ref(elem))
diff --git a/components/script/dom/htmldataelement.rs b/components/script/dom/htmldataelement.rs
index f7d93e2295e..9950199045a 100644
--- a/components/script/dom/htmldataelement.rs
+++ b/components/script/dom/htmldataelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLDataElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmldatalistelement.rs b/components/script/dom/htmldatalistelement.rs
index 6ca6cb7fe3d..841378ae065 100644
--- a/components/script/dom/htmldatalistelement.rs
+++ b/components/script/dom/htmldatalistelement.rs
@@ -16,7 +16,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId, window_from_node};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLDataListElement {
pub htmlelement: HTMLElement
@@ -44,7 +44,8 @@ impl HTMLDataListElement {
impl<'a> HTMLDataListElementMethods for JSRef<'a, HTMLDataListElement> {
fn Options(self) -> Temporary<HTMLCollection> {
- struct HTMLDataListOptionsFilter;
+ #[jstraceable]
+struct HTMLDataListOptionsFilter;
impl CollectionFilter for HTMLDataListOptionsFilter {
fn filter(&self, elem: JSRef<Element>, _root: JSRef<Node>) -> bool {
elem.is_htmloptionelement()
diff --git a/components/script/dom/htmldirectoryelement.rs b/components/script/dom/htmldirectoryelement.rs
index 4596f4de8ff..38230b88baa 100644
--- a/components/script/dom/htmldirectoryelement.rs
+++ b/components/script/dom/htmldirectoryelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLDirectoryElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmldivelement.rs b/components/script/dom/htmldivelement.rs
index 0cf2ae2f11c..57ad0ae727a 100644
--- a/components/script/dom/htmldivelement.rs
+++ b/components/script/dom/htmldivelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLDivElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmldlistelement.rs b/components/script/dom/htmldlistelement.rs
index eee513fda49..2425fcf51cb 100644
--- a/components/script/dom/htmldlistelement.rs
+++ b/components/script/dom/htmldlistelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLDListElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index 1ae99e4367e..c8831eab573 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -21,7 +21,7 @@ use servo_util::atom::Atom;
use servo_util::namespace;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLElement {
pub element: Element
diff --git a/components/script/dom/htmlembedelement.rs b/components/script/dom/htmlembedelement.rs
index dad01b745b5..8829f3606d8 100644
--- a/components/script/dom/htmlembedelement.rs
+++ b/components/script/dom/htmlembedelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLEmbedElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index 4f5b1bb7fde..3e08dfee22f 100644
--- a/components/script/dom/htmlfieldsetelement.rs
+++ b/components/script/dom/htmlfieldsetelement.rs
@@ -21,7 +21,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::{DOMString, StaticStringVec};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLFieldSetElement {
pub htmlelement: HTMLElement
@@ -50,7 +50,8 @@ impl HTMLFieldSetElement {
impl<'a> HTMLFieldSetElementMethods for JSRef<'a, HTMLFieldSetElement> {
// http://www.whatwg.org/html/#dom-fieldset-elements
fn Elements(self) -> Temporary<HTMLCollection> {
- struct ElementsFilter;
+ #[jstraceable]
+struct ElementsFilter;
impl CollectionFilter for ElementsFilter {
fn filter(&self, elem: JSRef<Element>, root: JSRef<Node>) -> bool {
static tag_names: StaticStringVec = &["button", "fieldset", "input",
diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs
index 6991dcfa486..da8c028d743 100644
--- a/components/script/dom/htmlfontelement.rs
+++ b/components/script/dom/htmlfontelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLFontElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index e43f8cc4a45..9607a14b79c 100644
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLFormElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlframeelement.rs b/components/script/dom/htmlframeelement.rs
index 536a6f040de..74a3e3e6628 100644
--- a/components/script/dom/htmlframeelement.rs
+++ b/components/script/dom/htmlframeelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLFrameElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlframesetelement.rs b/components/script/dom/htmlframesetelement.rs
index 864d09f48a5..2acc94a7fb0 100644
--- a/components/script/dom/htmlframesetelement.rs
+++ b/components/script/dom/htmlframesetelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLFrameSetElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs
index 01805e324c4..87f9e6b5d90 100644
--- a/components/script/dom/htmlheadelement.rs
+++ b/components/script/dom/htmlheadelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLHeadElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlheadingelement.rs b/components/script/dom/htmlheadingelement.rs
index b83bf2a8eb3..eb15c49e7bf 100644
--- a/components/script/dom/htmlheadingelement.rs
+++ b/components/script/dom/htmlheadingelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
pub enum HeadingLevel {
Heading1,
Heading2,
@@ -23,7 +23,7 @@ pub enum HeadingLevel {
Heading6,
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLHeadingElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs
index 9b33931c1b9..fa1ccaad882 100644
--- a/components/script/dom/htmlhrelement.rs
+++ b/components/script/dom/htmlhrelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLHRElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlhtmlelement.rs b/components/script/dom/htmlhtmlelement.rs
index b4b0348da1a..bfc7a3032f3 100644
--- a/components/script/dom/htmlhtmlelement.rs
+++ b/components/script/dom/htmlhtmlelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLHtmlElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index e6ba1bd73c1..c98db63b58a 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -41,7 +41,7 @@ enum SandboxAllowance {
AllowPopups = 0x20
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLIFrameElement {
pub htmlelement: HTMLElement,
@@ -55,7 +55,7 @@ impl HTMLIFrameElementDerived for EventTarget {
}
}
-#[deriving(Encodable)]
+#[jstraceable]
pub struct IFrameSize {
pub pipeline_id: PipelineId,
pub subpage_id: SubpageId,
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 91fcad5603c..ad8d4f90093 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -25,7 +25,7 @@ use url::{Url, UrlParser};
use std::cell::RefCell;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLImageElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index 256bea5b710..a4ba607211f 100644
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -18,7 +18,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLInputElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs
index 8f05f8f7f6c..bef4bff77e2 100644
--- a/components/script/dom/htmllabelelement.rs
+++ b/components/script/dom/htmllabelelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLLabelElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmllegendelement.rs b/components/script/dom/htmllegendelement.rs
index 94ba1d6459a..2b7b3920796 100644
--- a/components/script/dom/htmllegendelement.rs
+++ b/components/script/dom/htmllegendelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLLegendElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmllielement.rs b/components/script/dom/htmllielement.rs
index 162e8247e95..486a03b0abc 100644
--- a/components/script/dom/htmllielement.rs
+++ b/components/script/dom/htmllielement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLLIElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs
index 46050c8ca82..94a0b7ace0f 100644
--- a/components/script/dom/htmllinkelement.rs
+++ b/components/script/dom/htmllinkelement.rs
@@ -22,7 +22,7 @@ use servo_util::namespace::Null;
use std::ascii::StrAsciiExt;
use url::UrlParser;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLLinkElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlmapelement.rs b/components/script/dom/htmlmapelement.rs
index f10f2cc25bf..2ed56f2c937 100644
--- a/components/script/dom/htmlmapelement.rs
+++ b/components/script/dom/htmlmapelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLMapElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index fb47656db1a..b2f5dedce52 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -12,7 +12,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::ElementNodeTypeId;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLMediaElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs
index 176d4cbba3f..92d4f8dff1e 100644
--- a/components/script/dom/htmlmetaelement.rs
+++ b/components/script/dom/htmlmetaelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLMetaElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlmeterelement.rs b/components/script/dom/htmlmeterelement.rs
index 7cc41da9e18..7ca95646bf2 100644
--- a/components/script/dom/htmlmeterelement.rs
+++ b/components/script/dom/htmlmeterelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLMeterElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlmodelement.rs b/components/script/dom/htmlmodelement.rs
index 9bef1905659..50b3f5bf9a0 100644
--- a/components/script/dom/htmlmodelement.rs
+++ b/components/script/dom/htmlmodelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLModElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs
index 98d5dc25e00..5e5f17c8014 100644
--- a/components/script/dom/htmlobjectelement.rs
+++ b/components/script/dom/htmlobjectelement.rs
@@ -26,7 +26,7 @@ use servo_util::str::DOMString;
use url::Url;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLObjectElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlolistelement.rs b/components/script/dom/htmlolistelement.rs
index c080dc239af..6764cc5a943 100644
--- a/components/script/dom/htmlolistelement.rs
+++ b/components/script/dom/htmlolistelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLOListElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs
index b7bdfe4c93b..84ccb17506b 100644
--- a/components/script/dom/htmloptgroupelement.rs
+++ b/components/script/dom/htmloptgroupelement.rs
@@ -18,7 +18,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLOptGroupElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs
index 31562953cd9..ed85a53d1cd 100644
--- a/components/script/dom/htmloptionelement.rs
+++ b/components/script/dom/htmloptionelement.rs
@@ -23,7 +23,7 @@ use servo_util::atom::Atom;
use servo_util::namespace;
use servo_util::str::{DOMString, split_html_space_chars};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLOptionElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs
index 452ab89d8ed..bb1ddfd7031 100644
--- a/components/script/dom/htmloutputelement.rs
+++ b/components/script/dom/htmloutputelement.rs
@@ -15,7 +15,7 @@ use dom::node::{Node, ElementNodeTypeId, window_from_node};
use dom::validitystate::ValidityState;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLOutputElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlparagraphelement.rs b/components/script/dom/htmlparagraphelement.rs
index 9a82d1af7d6..2750451d779 100644
--- a/components/script/dom/htmlparagraphelement.rs
+++ b/components/script/dom/htmlparagraphelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLParagraphElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlparamelement.rs b/components/script/dom/htmlparamelement.rs
index fe2eb1a1dc0..5405220a552 100644
--- a/components/script/dom/htmlparamelement.rs
+++ b/components/script/dom/htmlparamelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLParamElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlpreelement.rs b/components/script/dom/htmlpreelement.rs
index 6f812897347..65f0c412e84 100644
--- a/components/script/dom/htmlpreelement.rs
+++ b/components/script/dom/htmlpreelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLPreElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlprogresselement.rs b/components/script/dom/htmlprogresselement.rs
index e67dff34610..c2ef291e942 100644
--- a/components/script/dom/htmlprogresselement.rs
+++ b/components/script/dom/htmlprogresselement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLProgressElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlquoteelement.rs b/components/script/dom/htmlquoteelement.rs
index c4d9f5c000a..d664aeaf139 100644
--- a/components/script/dom/htmlquoteelement.rs
+++ b/components/script/dom/htmlquoteelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLQuoteElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index d733cbb45ea..04104198a3e 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -19,7 +19,7 @@ use dom::node::{Node, NodeHelpers, ElementNodeTypeId};
use servo_util::namespace::Null;
use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS, StaticStringVec};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLScriptElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 0a96b1ef82c..6e947e6c9dd 100644
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -21,7 +21,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLSelectElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlsourceelement.rs b/components/script/dom/htmlsourceelement.rs
index 9577279baba..8d4511478bc 100644
--- a/components/script/dom/htmlsourceelement.rs
+++ b/components/script/dom/htmlsourceelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLSourceElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlspanelement.rs b/components/script/dom/htmlspanelement.rs
index 6d02b5b9d48..83285554678 100644
--- a/components/script/dom/htmlspanelement.rs
+++ b/components/script/dom/htmlspanelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLSpanElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index 3dea1745240..c77896fbc1f 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -17,7 +17,7 @@ use layout_interface::{AddStylesheetMsg, LayoutChan};
use servo_util::str::DOMString;
use style::Stylesheet;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLStyleElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltablecaptionelement.rs b/components/script/dom/htmltablecaptionelement.rs
index 2aa7ce1f7db..2e7d7e0f02d 100644
--- a/components/script/dom/htmltablecaptionelement.rs
+++ b/components/script/dom/htmltablecaptionelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableCaptionElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs
index 2271f6659a4..9412e6c77bd 100644
--- a/components/script/dom/htmltablecellelement.rs
+++ b/components/script/dom/htmltablecellelement.rs
@@ -12,7 +12,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::ElementNodeTypeId;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableCellElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltablecolelement.rs b/components/script/dom/htmltablecolelement.rs
index 4429f648807..659e1af65cb 100644
--- a/components/script/dom/htmltablecolelement.rs
+++ b/components/script/dom/htmltablecolelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableColElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltabledatacellelement.rs b/components/script/dom/htmltabledatacellelement.rs
index fd1a7096f3b..0bfd71f1de2 100644
--- a/components/script/dom/htmltabledatacellelement.rs
+++ b/components/script/dom/htmltabledatacellelement.rs
@@ -13,7 +13,7 @@ use dom::htmltablecellelement::HTMLTableCellElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableDataCellElement {
pub htmltablecellelement: HTMLTableCellElement,
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs
index f8b3a043a1f..b92b9b3b14c 100644
--- a/components/script/dom/htmltableelement.rs
+++ b/components/script/dom/htmltableelement.rs
@@ -17,7 +17,7 @@ use dom::htmltablecaptionelement::HTMLTableCaptionElement;
use dom::node::{Node, NodeHelpers, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltableheadercellelement.rs b/components/script/dom/htmltableheadercellelement.rs
index 410ff03e2db..9fea015e0a9 100644
--- a/components/script/dom/htmltableheadercellelement.rs
+++ b/components/script/dom/htmltableheadercellelement.rs
@@ -13,7 +13,7 @@ use dom::htmltablecellelement::HTMLTableCellElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableHeaderCellElement {
pub htmltablecellelement: HTMLTableCellElement,
diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs
index b36b343cff4..9ebfe270696 100644
--- a/components/script/dom/htmltablerowelement.rs
+++ b/components/script/dom/htmltablerowelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableRowElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs
index 78a7070d237..26ebcf784d7 100644
--- a/components/script/dom/htmltablesectionelement.rs
+++ b/components/script/dom/htmltablesectionelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTableSectionElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltemplateelement.rs b/components/script/dom/htmltemplateelement.rs
index 999de1f64af..d5d888251c0 100644
--- a/components/script/dom/htmltemplateelement.rs
+++ b/components/script/dom/htmltemplateelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTemplateElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index 39d28967f5f..e0d0d0df85a 100644
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -18,7 +18,7 @@ use dom::virtualmethods::VirtualMethods;
use servo_util::atom::Atom;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTextAreaElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltimeelement.rs b/components/script/dom/htmltimeelement.rs
index 04d813e6e13..166fc3c59c7 100644
--- a/components/script/dom/htmltimeelement.rs
+++ b/components/script/dom/htmltimeelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTimeElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmltitleelement.rs b/components/script/dom/htmltitleelement.rs
index c10566ff032..e0a877457af 100644
--- a/components/script/dom/htmltitleelement.rs
+++ b/components/script/dom/htmltitleelement.rs
@@ -16,7 +16,7 @@ use dom::node::{Node, NodeHelpers, ElementNodeTypeId};
use dom::text::Text;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTitleElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmltrackelement.rs b/components/script/dom/htmltrackelement.rs
index 53d15d264ac..75b56761186 100644
--- a/components/script/dom/htmltrackelement.rs
+++ b/components/script/dom/htmltrackelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLTrackElement {
pub htmlelement: HTMLElement,
diff --git a/components/script/dom/htmlulistelement.rs b/components/script/dom/htmlulistelement.rs
index 3d1baaae352..65f8c1e0de9 100644
--- a/components/script/dom/htmlulistelement.rs
+++ b/components/script/dom/htmlulistelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLUListElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlunknownelement.rs b/components/script/dom/htmlunknownelement.rs
index d056e7e1f27..bd3226c1854 100644
--- a/components/script/dom/htmlunknownelement.rs
+++ b/components/script/dom/htmlunknownelement.rs
@@ -13,7 +13,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLUnknownElement {
pub htmlelement: HTMLElement
diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs
index ab7dd96ca82..754a00fb8cf 100644
--- a/components/script/dom/htmlvideoelement.rs
+++ b/components/script/dom/htmlvideoelement.rs
@@ -13,7 +13,7 @@ use dom::htmlmediaelement::HTMLMediaElement;
use dom::node::{Node, ElementNodeTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct HTMLVideoElement {
pub htmlmediaelement: HTMLMediaElement
diff --git a/components/script/dom/location.rs b/components/script/dom/location.rs
index 0b13916aaea..114f1e80506 100644
--- a/components/script/dom/location.rs
+++ b/components/script/dom/location.rs
@@ -15,7 +15,7 @@ use servo_util::str::DOMString;
use std::rc::Rc;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Location {
reflector_: Reflector, //XXXjdm cycle: window->Location->window
diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs
index dba18808c65..6e52b4f763f 100644
--- a/components/script/dom/macros.rs
+++ b/components/script/dom/macros.rs
@@ -2,8 +2,6 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-#![macro_escape]
-
#[macro_export]
macro_rules! make_getter(
( $attr:ident ) => (
@@ -48,7 +46,7 @@ macro_rules! make_uint_getter(
/// Use #[jstraceable] on JS managed types
macro_rules! untraceable(
($($ty:ident),+) => (
- $(
+ $(
impl JSTraceable for $ty {
#[inline]
fn trace(&self, _: *mut JSTracer) {
@@ -57,4 +55,12 @@ macro_rules! untraceable(
}
)+
);
+ ($ty:ident<$($gen:ident),+>) => (
+ impl<$($gen),+> JSTraceable for $ty<$($gen),+> {
+ #[inline]
+ fn trace(&self, _: *mut JSTracer) {
+ // Do nothing
+ }
+ }
+ );
) \ No newline at end of file
diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs
index ed716b68f59..5b65a45f9ba 100644
--- a/components/script/dom/messageevent.rs
+++ b/components/script/dom/messageevent.rs
@@ -19,7 +19,7 @@ use servo_util::str::DOMString;
use js::jsapi::JSContext;
use js::jsval::JSVal;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct MessageEvent {
event: Event,
diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs
index da9377a5718..242ba31a97a 100644
--- a/components/script/dom/mouseevent.rs
+++ b/components/script/dom/mouseevent.rs
@@ -18,7 +18,7 @@ use dom::window::Window;
use servo_util::str::DOMString;
use std::cell::Cell;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct MouseEvent {
pub mouseevent: UIEvent,
diff --git a/components/script/dom/namednodemap.rs b/components/script/dom/namednodemap.rs
index bd4ae4f1008..a5e80821aff 100644
--- a/components/script/dom/namednodemap.rs
+++ b/components/script/dom/namednodemap.rs
@@ -11,7 +11,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::element::Element;
use dom::window::Window;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct NamedNodeMap {
reflector_: Reflector,
diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs
index ba01be87ff0..c0e8e7f2315 100644
--- a/components/script/dom/navigator.rs
+++ b/components/script/dom/navigator.rs
@@ -11,7 +11,7 @@ use dom::navigatorinfo::NavigatorInfo;
use dom::window::Window;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[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 40b3aa57085..96f0377880a 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -64,14 +64,14 @@ use style::ComputedValues;
use sync::Arc;
use uuid;
-use serialize::{Encoder, Encodable};
+
//
// The basic Node structure
//
/// An HTML node.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Node {
/// The JavaScript reflector for this node.
@@ -113,12 +113,6 @@ pub struct Node {
unique_id: RefCell<String>,
}
-impl<S: Encoder<E>, E> Encodable<S, E> for LayoutDataRef {
- fn encode(&self, _s: &mut S) -> Result<(), E> {
- Ok(())
- }
-}
-
impl NodeDerived for EventTarget {
fn is_node(&self) -> bool {
match self.type_id {
@@ -130,7 +124,7 @@ impl NodeDerived for EventTarget {
bitflags! {
#[doc = "Flags for node items."]
- #[deriving(Encodable)]
+ #[jstraceable]
flags NodeFlags: u8 {
#[doc = "Specifies whether this node is in a document."]
static IsInDoc = 0x01,
@@ -243,7 +237,8 @@ impl LayoutDataRef {
}
/// The different types of nodes.
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum NodeTypeId {
DoctypeNodeTypeId,
DocumentFragmentNodeTypeId,
diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs
index 5febb54cd5a..cb373650494 100644
--- a/components/script/dom/nodeiterator.rs
+++ b/components/script/dom/nodeiterator.rs
@@ -8,7 +8,7 @@ use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct NodeIterator {
pub reflector_: Reflector
diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs
index 1691a4cbd0f..1470060467a 100644
--- a/components/script/dom/nodelist.rs
+++ b/components/script/dom/nodelist.rs
@@ -10,14 +10,14 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::node::{Node, NodeHelpers};
use dom::window::Window;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub enum NodeListType {
Simple(Vec<JS<Node>>),
Children(JS<Node>)
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct NodeList {
list_type: NodeListType,
diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs
index 1916e86db4c..57ecc6bfb84 100644
--- a/components/script/dom/performance.rs
+++ b/components/script/dom/performance.rs
@@ -13,7 +13,7 @@ use time;
pub type DOMHighResTimeStamp = f64;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Performance {
reflector_: Reflector,
diff --git a/components/script/dom/performancetiming.rs b/components/script/dom/performancetiming.rs
index 25773ac42c9..6aaf89f7cbd 100644
--- a/components/script/dom/performancetiming.rs
+++ b/components/script/dom/performancetiming.rs
@@ -9,7 +9,7 @@ use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct PerformanceTiming {
reflector_: Reflector,
diff --git a/components/script/dom/processinginstruction.rs b/components/script/dom/processinginstruction.rs
index b15bc9c4ef0..7cb1f219c14 100644
--- a/components/script/dom/processinginstruction.rs
+++ b/components/script/dom/processinginstruction.rs
@@ -14,7 +14,7 @@ use dom::node::{Node, ProcessingInstructionNodeTypeId};
use servo_util::str::DOMString;
/// An HTML processing instruction node.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct ProcessingInstruction {
pub characterdata: CharacterData,
diff --git a/components/script/dom/progressevent.rs b/components/script/dom/progressevent.rs
index d9012f99efe..c60fa8073e1 100644
--- a/components/script/dom/progressevent.rs
+++ b/components/script/dom/progressevent.rs
@@ -13,7 +13,7 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::event::{Event, ProgressEventTypeId};
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct ProgressEvent {
event: Event,
diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs
index 98a33f8ca59..de0b62398de 100644
--- a/components/script/dom/range.rs
+++ b/components/script/dom/range.rs
@@ -11,7 +11,7 @@ use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::document::Document;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Range {
reflector_: Reflector
diff --git a/components/script/dom/screen.rs b/components/script/dom/screen.rs
index 019436d77fb..389fd60d683 100644
--- a/components/script/dom/screen.rs
+++ b/components/script/dom/screen.rs
@@ -9,7 +9,7 @@ use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Screen {
reflector_: Reflector,
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index 057897807d2..4937dfbd9a8 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -18,7 +18,7 @@ use servo_util::str::DOMString;
use js::jsapi::JSContext;
use js::jsval::{JSVal, NullValue};
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct TestBinding {
reflector: Reflector,
diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs
index 24403014dd4..e3dcf03a51c 100644
--- a/components/script/dom/text.rs
+++ b/components/script/dom/text.rs
@@ -16,7 +16,7 @@ use dom::node::{Node, TextNodeTypeId};
use servo_util::str::DOMString;
/// An HTML text node.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Text {
pub characterdata: CharacterData,
diff --git a/components/script/dom/treewalker.rs b/components/script/dom/treewalker.rs
index cac3776e0ac..6af92828539 100644
--- a/components/script/dom/treewalker.rs
+++ b/components/script/dom/treewalker.rs
@@ -19,11 +19,11 @@ use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::document::Document;
use dom::node::{Node, NodeHelpers};
-use serialize::{Encoder, Encodable};
+
use std::cell::Cell;
// http://dom.spec.whatwg.org/#interface-treewalker
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct TreeWalker {
pub reflector_: Reflector,
@@ -552,7 +552,7 @@ impl<'a> Iterator<JSRef<'a, Node>> for JSRef<'a, TreeWalker> {
}
}
-#[deriving(Encodable)]
+#[jstraceable]
pub enum Filter {
FilterNone,
FilterNative(Untraceable<fn (node: JSRef<Node>) -> u16>),
diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs
index 6d51347e000..e7e0771a9fd 100644
--- a/components/script/dom/uievent.rs
+++ b/components/script/dom/uievent.rs
@@ -17,7 +17,7 @@ use servo_util::str::DOMString;
use std::cell::Cell;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct UIEvent {
pub event: Event,
diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs
index f675e01d014..a8766959144 100644
--- a/components/script/dom/urlsearchparams.rs
+++ b/components/script/dom/urlsearchparams.rs
@@ -21,7 +21,7 @@ use std::collections::hashmap::HashMap;
use std::fmt::radix;
use std::ascii::OwnedStrAsciiExt;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct URLSearchParams {
data: Traceable<RefCell<HashMap<DOMString, Vec<DOMString>>>>,
diff --git a/components/script/dom/validitystate.rs b/components/script/dom/validitystate.rs
index ac37eadd93e..072c9a9e2de 100644
--- a/components/script/dom/validitystate.rs
+++ b/components/script/dom/validitystate.rs
@@ -8,7 +8,7 @@ use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
use dom::window::Window;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct ValidityState {
reflector_: Reflector,
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 371e33d4588..d0c33ebc1ca 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -51,10 +51,11 @@ use std::rc::Rc;
use std::time::duration::Duration;
use time;
-#[deriving(PartialEq, Encodable, Eq)]
+#[deriving(PartialEq, Eq)]
+#[jstraceable]
pub struct TimerId(i32);
-#[deriving(Encodable)]
+#[jstraceable]
pub struct TimerHandle {
handle: TimerId,
pub data: TimerData,
@@ -74,7 +75,7 @@ impl TimerHandle {
}
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Window {
eventtarget: EventTarget,
@@ -121,7 +122,7 @@ impl Drop for Window {
// Holder for the various JS values associated with setTimeout
// (ie. function value to invoke and all arguments to pass
// to the function when calling it)
-#[deriving(Encodable)]
+#[jstraceable]
pub struct TimerData {
pub is_interval: bool,
pub funval: Traceable<JSVal>,
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index a0d8f4685cd..76e24df58c8 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -29,7 +29,7 @@ use std::ptr;
pub struct TrustedWorkerAddress(pub *const c_void);
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Worker {
eventtarget: EventTarget,
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index f5bb583fddb..a77513f3b21 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -25,12 +25,13 @@ use std::cell::Cell;
use std::rc::Rc;
use url::{Url, UrlParser};
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum WorkerGlobalScopeId {
DedicatedGlobalScope,
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct WorkerGlobalScope {
pub eventtarget: EventTarget,
diff --git a/components/script/dom/workerlocation.rs b/components/script/dom/workerlocation.rs
index 57334953e3d..d31e7c75e59 100644
--- a/components/script/dom/workerlocation.rs
+++ b/components/script/dom/workerlocation.rs
@@ -15,7 +15,7 @@ use servo_util::str::DOMString;
use url::Url;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct WorkerLocation {
reflector_: Reflector,
diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs
index e99e93991b1..fe6f70b1337 100644
--- a/components/script/dom/workernavigator.rs
+++ b/components/script/dom/workernavigator.rs
@@ -11,7 +11,7 @@ use dom::navigatorinfo::NavigatorInfo;
use dom::workerglobalscope::WorkerGlobalScope;
use servo_util::str::DOMString;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct WorkerNavigator {
reflector_: Reflector,
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index d2813f505b0..936c14b6740 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -65,13 +65,15 @@ use dom::bindings::codegen::UnionTypes::StringOrURLSearchParams::{eString, eURLS
pub type SendParam = StringOrURLSearchParams;
-#[deriving(PartialEq,Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
pub enum XMLHttpRequestId {
XMLHttpRequestTypeId,
XMLHttpRequestUploadTypeId
}
-#[deriving(PartialEq, Encodable)]
+#[deriving(PartialEq)]
+#[jstraceable]
enum XMLHttpRequestState {
Unsent = 0,
Opened = 1,
@@ -99,7 +101,7 @@ enum SyncOrAsync<'a> {
}
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct XMLHttpRequest {
eventtarget: XMLHttpRequestEventTarget,
diff --git a/components/script/dom/xmlhttprequesteventtarget.rs b/components/script/dom/xmlhttprequesteventtarget.rs
index 66fdf2d77f0..9345c676a89 100644
--- a/components/script/dom/xmlhttprequesteventtarget.rs
+++ b/components/script/dom/xmlhttprequesteventtarget.rs
@@ -11,7 +11,7 @@ use dom::bindings::utils::{Reflectable, Reflector};
use dom::eventtarget::{EventTarget, EventTargetHelpers, XMLHttpRequestTargetTypeId};
use dom::xmlhttprequest::XMLHttpRequestId;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct XMLHttpRequestEventTarget {
pub eventtarget: EventTarget,
diff --git a/components/script/dom/xmlhttprequestupload.rs b/components/script/dom/xmlhttprequestupload.rs
index 57e98ff62f8..986c29123ca 100644
--- a/components/script/dom/xmlhttprequestupload.rs
+++ b/components/script/dom/xmlhttprequestupload.rs
@@ -11,7 +11,7 @@ use dom::eventtarget::{EventTarget, XMLHttpRequestTargetTypeId};
use dom::xmlhttprequest::{XMLHttpRequestUploadTypeId};
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct XMLHttpRequestUpload {
eventtarget: XMLHttpRequestEventTarget
diff --git a/components/script/layout_interface.rs b/components/script/layout_interface.rs
index 18c98dc50e6..7de7260d8c5 100644
--- a/components/script/layout_interface.rs
+++ b/components/script/layout_interface.rs
@@ -7,10 +7,12 @@
/// from layout.
use dom::bindings::js::JS;
+use dom::bindings::trace::JSTraceable;
use dom::node::{Node, LayoutDataRef};
use geom::point::Point2D;
use geom::rect::Rect;
+use js::jsapi::JSTracer;
use libc::c_void;
use script_traits::{ScriptControlChan, OpaqueScriptLayoutChannel};
use servo_msg::constellation_msg::WindowSizeData;
@@ -22,8 +24,6 @@ use std::owned::BoxAny;
use style::Stylesheet;
use url::Url;
-use serialize::{Encodable, Encoder};
-
/// Asynchronous messages that script can send to layout.
pub enum Msg {
/// Adds the given stylesheet to the document.
@@ -75,12 +75,12 @@ pub trait LayoutRPC {
/// because we do not trust layout.
pub struct TrustedNodeAddress(pub *const c_void);
-impl<S: Encoder<E>, E> Encodable<S, E> for TrustedNodeAddress {
- fn encode(&self, s: &mut S) -> Result<(), E> {
+impl JSTraceable for TrustedNodeAddress {
+ fn trace(&self, s: *mut JSTracer) {
let TrustedNodeAddress(addr) = *self;
let node = addr as *const Node;
unsafe {
- JS::from_raw(node).encode(s)
+ JS::from_raw(node).trace(s)
}
}
}
@@ -95,7 +95,8 @@ pub struct HitTestResponse(pub UntrustedNodeAddress);
pub struct MouseOverResponse(pub Vec<UntrustedNodeAddress>);
/// Determines which part of the
-#[deriving(PartialEq, PartialOrd, Eq, Ord, Encodable)]
+#[deriving(PartialEq, PartialOrd, Eq, Ord)]
+#[jstraceable]
pub enum DocumentDamageLevel {
/// Reflow, but do not perform CSS selector matching.
ReflowDocumentDamage,
@@ -115,7 +116,7 @@ impl DocumentDamageLevel {
/// What parts of the document have changed, as far as the script task can tell.
///
/// Note that this is fairly coarse-grained and is separate from layout's notion of the document
-#[deriving(Encodable)]
+#[jstraceable]
pub struct DocumentDamage {
/// The topmost node in the tree that has changed.
pub root: TrustedNodeAddress,
diff --git a/components/script/lib.rs b/components/script/lib.rs
index ab31bd5858e..695aef3c1b5 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -25,6 +25,7 @@ extern crate encoding;
extern crate http;
extern crate js;
extern crate libc;
+extern crate msg;
extern crate native;
extern crate net;
extern crate rustrt;
diff --git a/components/script/page.rs b/components/script/page.rs
index a9469609576..8ece5145133 100644
--- a/components/script/page.rs
+++ b/components/script/page.rs
@@ -35,10 +35,10 @@ use std::mem::replace;
use std::rc::Rc;
use url::Url;
-use serialize::{Encoder, Encodable};
+
/// Encapsulates a handle to a frame and its associated layout information.
-#[deriving(Encodable)]
+#[jstraceable]
pub struct Page {
/// Pipeline id associated with this page.
pub id: PipelineId,
@@ -453,7 +453,7 @@ impl Page {
}
/// Information for one frame in the browsing context.
-#[deriving(Encodable)]
+#[jstraceable]
#[must_root]
pub struct Frame {
/// The document for this frame.
@@ -463,7 +463,7 @@ pub struct Frame {
}
/// Encapsulation of the javascript information associated with each frame.
-#[deriving(Encodable)]
+#[jstraceable]
pub struct JSPageInfo {
/// Global static data related to the DOM.
pub dom_static: GlobalStaticData,
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 9aed829a633..33f7c8eb793 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -14,6 +14,7 @@ use dom::bindings::conversions::{FromJSValConvertible, Empty};
use dom::bindings::global::Window;
use dom::bindings::js::{JS, JSRef, RootCollection, Temporary, OptionalSettable};
use dom::bindings::js::OptionalRootable;
+use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::Reflectable;
use dom::bindings::utils::{wrap_for_same_compartment, pre_wrap};
use dom::document::{Document, HTMLDocument, DocumentHelpers};
@@ -56,7 +57,7 @@ use servo_util::task::spawn_named_with_send_on_failure;
use geom::point::Point2D;
use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetGCZeal, JS_DEFAULT_ZEAL_FREQ, JS_GC};
-use js::jsapi::{JSContext, JSRuntime};
+use js::jsapi::{JSContext, JSRuntime, JSTracer};
use js::jsapi::{JS_SetGCParameter, JSGC_MAX_BYTES};
use js::rust::{Cx, RtUtils};
use js::rust::with_compartment;
@@ -64,7 +65,6 @@ use js;
use url::Url;
use libc::size_t;
-use serialize::{Encoder, Encodable};
use std::any::{Any, AnyRefExt};
use std::cell::RefCell;
use std::comm::{channel, Sender, Receiver, Select};
@@ -106,11 +106,7 @@ pub enum ScriptMsg {
#[deriving(Clone)]
pub struct ScriptChan(pub Sender<ScriptMsg>);
-impl<S: Encoder<E>, E> Encodable<S, E> for ScriptChan {
- fn encode(&self, _s: &mut S) -> Result<(), E> {
- Ok(())
- }
-}
+untraceable!(ScriptChan)
impl ScriptChan {
/// Creates a new script chan.