diff options
Diffstat (limited to 'components/script/dom/bindings')
-rw-r--r-- | components/script/dom/bindings/codegen/CodegenRust.py | 19 | ||||
-rw-r--r-- | components/script/dom/bindings/num.rs | 7 | ||||
-rw-r--r-- | components/script/dom/bindings/str.rs | 5 | ||||
-rw-r--r-- | components/script/dom/bindings/trace.rs | 6 |
4 files changed, 31 insertions, 6 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py index 5b2b987c233..aa58afe1913 100644 --- a/components/script/dom/bindings/codegen/CodegenRust.py +++ b/components/script/dom/bindings/codegen/CodegenRust.py @@ -4028,12 +4028,18 @@ impl super::%s { } } +impl Default for super::%s { + fn default() -> super::%s { + pairs[0].1 + } +} + impl ToJSValConvertible for super::%s { unsafe fn to_jsval(&self, cx: *mut JSContext, rval: MutableHandleValue) { pairs[*self as usize].0.to_jsval(cx, rval); } } - """ % (ident, pairs, ident, ident) + """ % (ident, pairs, ident, ident, ident, ident) self.cgRoot = CGList([ CGGeneric(decl), CGNamespace.build([ident + "Values"], @@ -6038,17 +6044,22 @@ class CGDictionary(CGThing): (self.makeMemberName(m[0].identifier.name), self.getMemberType(m)) for m in self.memberInfo] - mustRoot = "#[must_root]\n" if self.membersNeedTracing() else "" + derive = ["JSTraceable"] + mustRoot = "" + if self.membersNeedTracing(): + mustRoot = "#[must_root]\n" + derive += ["Default"] return (string.Template( - "#[derive(JSTraceable)]\n" + "#[derive(${derive})]\n" "${mustRoot}" + "pub struct ${selfName} {\n" + "${inheritance}" + "\n".join(memberDecls) + "\n" + "}").substitute({"selfName": self.makeClassName(d), "inheritance": inheritance, - "mustRoot": mustRoot})) + "mustRoot": mustRoot, + "derive": ', '.join(derive)})) def impl(self): d = self.dictionary diff --git a/components/script/dom/bindings/num.rs b/components/script/dom/bindings/num.rs index c7d24f4fb83..f7604cfab20 100644 --- a/components/script/dom/bindings/num.rs +++ b/components/script/dom/bindings/num.rs @@ -6,6 +6,7 @@ use heapsize::HeapSizeOf; use num_traits::Float; +use std::default::Default; use std::ops::Deref; /// Encapsulates the IDL restricted float type. @@ -45,3 +46,9 @@ impl<T: Float + HeapSizeOf> HeapSizeOf for Finite<T> { (**self).heap_size_of_children() } } + +impl<T: Float + Default> Default for Finite<T> { + fn default() -> Finite<T> { + Finite::wrap(T::default()) + } +} diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs index ea0b4f529b0..b665b64da8a 100644 --- a/components/script/dom/bindings/str.rs +++ b/components/script/dom/bindings/str.rs @@ -9,6 +9,7 @@ use html5ever::{LocalName, Namespace}; use servo_atoms::Atom; use std::ascii::AsciiExt; use std::borrow::{Borrow, Cow, ToOwned}; +use std::default::Default; use std::fmt; use std::hash::{Hash, Hasher}; use std::marker::PhantomData; @@ -18,7 +19,7 @@ use std::str; use std::str::{Bytes, FromStr}; /// Encapsulates the IDL `ByteString` type. -#[derive(Clone, Debug, Eq, HeapSizeOf, JSTraceable, PartialEq)] +#[derive(Clone, Debug, Default, Eq, HeapSizeOf, JSTraceable, PartialEq)] pub struct ByteString(Vec<u8>); impl ByteString { @@ -77,7 +78,7 @@ impl ops::Deref for ByteString { /// A string that is constructed from a UCS-2 buffer by replacing invalid code /// points with the replacement character. -#[derive(Clone, HeapSizeOf)] +#[derive(Clone, Default, HeapSizeOf)] pub struct USVString(pub String); diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 797ee356bd8..cdb2fd425ac 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -769,6 +769,12 @@ impl<T: JSTraceable + 'static> RootedTraceableBox<T> { } } +impl<T: JSTraceable + Default> Default for RootedTraceableBox<T> { + fn default() -> RootedTraceableBox<T> { + RootedTraceableBox::new(T::default()) + } +} + impl<T: JSTraceable> Deref for RootedTraceableBox<T> { type Target = T; fn deref(&self) -> &T { |