Use JSTraceable everywhere

This commit is contained in:
Manish Goregaokar 2014-09-24 03:01:03 +05:30
parent 85f79290a6
commit cc44a3b064
133 changed files with 325 additions and 278 deletions

View file

@ -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);

View file

@ -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))
}

View file

@ -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,

View file

@ -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>,

View file

@ -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)

View file

@ -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>),

View file

@ -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 {

View file

@ -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<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<T: JSTraceable> JSTraceable for Rc<T> {
fn trace(&self, trc: *mut JSTracer) {
self.trace(trc)
}
}
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<T: JSTraceable> JSTraceable for Box<T> {
fn trace(&self, trc: *mut JSTracer) {
self.trace(trc)
}
}
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(())
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 JSTraceable for Traceable<*mut JSObject> {
fn trace(&self, trc: *mut JSTracer) {
trace_object(trc, "object", **self);
}
}
impl JSTraceable for Traceable<JSVal> {
fn trace(&self, trc: *mut JSTracer) {
trace_jsval(trc, "val", **self);
}
}
// 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
}
}

View file

@ -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>,
}

View file

@ -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,

View file

@ -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>,

View file

@ -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,

View file

@ -17,7 +17,7 @@ use servo_util::str::DOMString;
use std::cell::RefCell;
#[deriving(Encodable)]
#[jstraceable]
#[must_root]
pub struct CharacterData {
pub node: Node,

View file

@ -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,

View file

@ -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

View file

@ -18,7 +18,7 @@ use servo_util::str::DOMString;
use std::cell::Cell;
#[deriving(Encodable)]
#[jstraceable]
#[must_root]
pub struct CustomEvent {
event: Event,

View file

@ -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,

View file

@ -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 {

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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>,

View file

@ -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?

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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>>>>,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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))

View file

@ -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

View file

@ -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()

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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",

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -25,7 +25,7 @@ use url::{Url, UrlParser};
use std::cell::RefCell;
#[deriving(Encodable)]
#[jstraceable]
#[must_root]
pub struct HTMLImageElement {
pub htmlelement: HTMLElement,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -26,7 +26,7 @@ use servo_util::str::DOMString;
use url::Url;
#[deriving(Encodable)]
#[jstraceable]
#[must_root]
pub struct HTMLObjectElement {
pub htmlelement: HTMLElement,

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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

View file

@ -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

View file

@ -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

Some files were not shown because too many files have changed in this diff Show more