diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2014-09-24 03:01:03 +0530 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2014-09-24 05:44:49 +0530 |
commit | cc44a3b0641d94908b2b2e01bec440f64f89f8be (patch) | |
tree | a4b70f846ee51abd5b413c6875ef1bc24449c8b9 /components/script/dom | |
parent | 85f79290a67afb25369a9a48ee9a389ee32fd20e (diff) | |
download | servo-cc44a3b0641d94908b2b2e01bec440f64f89f8be.tar.gz servo-cc44a3b0641d94908b2b2e01bec440f64f89f8be.zip |
Use JSTraceable everywhere
Diffstat (limited to 'components/script/dom')
127 files changed, 306 insertions, 242 deletions
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 |