diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/compositing/lib.rs | 1 | ||||
-rw-r--r-- | components/constellation/lib.rs | 1 | ||||
-rw-r--r-- | components/net_traits/lib.rs | 3 | ||||
-rw-r--r-- | components/script/body.rs | 2 | ||||
-rw-r--r-- | components/script/fetch.rs | 4 | ||||
-rwxr-xr-x | components/style/binding_tools/regen.py | 8 | ||||
-rw-r--r-- | components/style/gecko/wrapper.rs | 12 | ||||
-rw-r--r-- | components/style/gecko_bindings/bindings.rs | 20 | ||||
-rw-r--r-- | components/style/gecko_bindings/sugar/ownership.rs | 160 | ||||
-rw-r--r-- | components/style/properties/gecko.mako.rs | 3 | ||||
-rw-r--r-- | components/style/properties/properties.mako.rs | 46 |
11 files changed, 84 insertions, 176 deletions
diff --git a/components/compositing/lib.rs b/components/compositing/lib.rs index 3888b03e6d3..8ce9a6370e6 100644 --- a/components/compositing/lib.rs +++ b/components/compositing/lib.rs @@ -5,7 +5,6 @@ #![feature(box_syntax)] #![feature(custom_derive)] #![feature(plugin)] -#![feature(plugin)] #![plugin(plugins)] #![deny(unsafe_code)] diff --git a/components/constellation/lib.rs b/components/constellation/lib.rs index d4df0d47b1a..a7d7fad33ce 100644 --- a/components/constellation/lib.rs +++ b/components/constellation/lib.rs @@ -6,7 +6,6 @@ #![feature(custom_derive)] #![feature(plugin)] #![feature(mpsc_select)] -#![feature(plugin)] #![plugin(plugins)] #![deny(unsafe_code)] diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 7f4a3abd164..bc920ccd2dd 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -463,9 +463,6 @@ pub enum CoreResourceMsg { Exit(IpcSender<()>), } -/// Initialized but unsent request. Encapsulates everything necessary to instruct -/// the resource thread to make a new request. The `load` method *must* be called before -/// destruction or the thread will panic. struct LoadOriginData { pipeline: Option<PipelineId>, referrer_policy: Option<ReferrerPolicy>, diff --git a/components/script/body.rs b/components/script/body.rs index 814a62c30eb..36a18134c98 100644 --- a/components/script/body.rs +++ b/components/script/body.rs @@ -25,7 +25,6 @@ use std::str; use url::form_urlencoded; pub enum BodyType { - ArrayBuffer, Blob, FormData, Json, @@ -92,7 +91,6 @@ fn run_package_data_algorithm<T: BodyOperations + Reflectable>(object: &T, BodyType::Json => run_json_data_algorithm(cx, bytes), BodyType::Blob => run_blob_data_algorithm(object.global().r(), bytes, mime), BodyType::FormData => run_form_data_algorithm(object.global().r(), bytes, mime), - _ => Err(Error::Type("Unable to process body type".to_string())) } } diff --git a/components/script/fetch.rs b/components/script/fetch.rs index 0fc0fef1f89..d60d174daad 100644 --- a/components/script/fetch.rs +++ b/components/script/fetch.rs @@ -153,12 +153,12 @@ impl FetchResponseListener for FetchContext { self.fetch_promise = Some(TrustedPromise::new(promise)); } - fn process_response_chunk(&mut self, mut chunk: Vec<u8>) { + fn process_response_chunk(&mut self, _chunk: Vec<u8>) { // TODO when body is implemented // ... this will append the chunk to Response's body. } - fn process_response_eof(&mut self, response: Result<(), NetworkError>) { + fn process_response_eof(&mut self, _response: Result<(), NetworkError>) { // TODO // ... trailerObject is not supported in Servo yet. } diff --git a/components/style/binding_tools/regen.py b/components/style/binding_tools/regen.py index 18fef011d74..49593e91f74 100755 --- a/components/style/binding_tools/regen.py +++ b/components/style/binding_tools/regen.py @@ -442,7 +442,7 @@ def build(objdir, target_name, debug, debugger, kind_name=None, flags.append("{}BorrowedOrNull".format(ty)) flags.append("--raw-line") flags.append("pub type {0}BorrowedOrNull<'a> = \ -::gecko_bindings::sugar::ownership::Borrowed<'a, {0}>;".format(ty)) +Option<&'a {0}>;".format(ty)) flags.append("--blacklist-type") flags.append("{}Borrowed".format(ty)) flags.append("--raw-line") @@ -459,7 +459,7 @@ def build(objdir, target_name, debug, debugger, kind_name=None, flags.append("{}BorrowedOrNull".format(ty)) flags.append("--raw-line") flags.append("pub type {0}BorrowedOrNull<'a> = \ -::gecko_bindings::sugar::ownership::Borrowed<'a, {0}>;".format(ty)) +Option<&'a {0}>;".format(ty)) # Right now the only immutable borrow types are ones which we import # from the |structs| module. As such, we don't need to create an opaque # type with zero_size_type. If we ever introduce immutable borrow types @@ -489,12 +489,12 @@ def build(objdir, target_name, debug, debugger, kind_name=None, flags.append("--blacklist-type") flags.append("{}BorrowedOrNull".format(ty)) flags.append("--raw-line") - flags.append("pub type {0}BorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, {0}>;" + flags.append("pub type {0}BorrowedOrNull<'a> = Option<&'a {0}>;" .format(ty)) flags.append("--blacklist-type") flags.append("{}BorrowedMutOrNull".format(ty)) flags.append("--raw-line") - flags.append("pub type {0}BorrowedMutOrNull<'a> = ::gecko_bindings::sugar::ownership::BorrowedMut<'a, {0}>;" + flags.append("pub type {0}BorrowedMutOrNull<'a> = Option<&'a mut {0}>;" .format(ty)) flags.append("--blacklist-type") flags.append("{}OwnedOrNull".format(ty)) diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index 9be91c87178..fd35c6c6c83 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -156,7 +156,7 @@ impl TRestyleDamage for GeckoRestyleDamage { fn compute(source: &nsStyleContext, new_style: &Arc<ComputedValues>) -> Self { let context = source as *const nsStyleContext as *mut nsStyleContext; - let hint = unsafe { Gecko_CalcStyleDifference(context, new_style.as_borrowed()) }; + let hint = unsafe { Gecko_CalcStyleDifference(context, new_style.as_borrowed_opt().unwrap()) }; GeckoRestyleDamage(hint) } @@ -330,7 +330,7 @@ impl<'ln> TNode for GeckoNode<'ln> { } fn last_child(&self) -> Option<GeckoNode<'ln>> { - unsafe { Gecko_GetLastChild(self.0).borrow_opt().map(GeckoNode) } + unsafe { Gecko_GetLastChild(self.0).map(GeckoNode) } } fn prev_sibling(&self) -> Option<GeckoNode<'ln>> { @@ -398,7 +398,7 @@ impl<'a> Iterator for GeckoChildrenIterator<'a> { curr }, GeckoChildrenIterator::GeckoIterator(ref it) => unsafe { - Gecko_GetNextStyleChild(&it).borrow_opt().map(GeckoNode) + Gecko_GetNextStyleChild(&it).map(GeckoNode) } } } @@ -417,7 +417,7 @@ impl<'ld> TDocument for GeckoDocument<'ld> { fn root_node(&self) -> Option<GeckoNode<'ld>> { unsafe { - Gecko_GetDocumentElement(self.0).borrow_opt().map(|el| GeckoElement(el).as_node()) + Gecko_GetDocumentElement(self.0).map(|el| GeckoElement(el).as_node()) } } @@ -471,10 +471,10 @@ impl<'le> TElement for GeckoElement<'le> { fn style_attribute(&self) -> Option<&Arc<RwLock<PropertyDeclarationBlock>>> { let declarations = unsafe { Gecko_GetServoDeclarationBlock(self.0) }; - if declarations.is_null() { + if declarations.is_none() { None } else { - let declarations = declarations.as_arc::<GeckoDeclarationBlock>(); + let declarations = GeckoDeclarationBlock::arc_from_borrowed(&declarations).unwrap(); declarations.declarations.as_ref().map(|r| r as *const Arc<_>).map(|ptr| unsafe { &*ptr }) } } diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs index 52dbffd9a2c..97194ec3601 100644 --- a/components/style/gecko_bindings/bindings.rs +++ b/components/style/gecko_bindings/bindings.rs @@ -2,39 +2,39 @@ use heapsize::HeapSizeOf; pub type ServoComputedValuesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoComputedValues>; -pub type ServoComputedValuesBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, ServoComputedValues>; +pub type ServoComputedValuesBorrowedOrNull<'a> = Option<&'a ServoComputedValues>; pub type ServoComputedValuesBorrowed<'a> = &'a ServoComputedValues; enum ServoComputedValuesVoid{ } pub struct ServoComputedValues(ServoComputedValuesVoid); pub type RawServoStyleSheetStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoStyleSheet>; -pub type RawServoStyleSheetBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, RawServoStyleSheet>; +pub type RawServoStyleSheetBorrowedOrNull<'a> = Option<&'a RawServoStyleSheet>; pub type RawServoStyleSheetBorrowed<'a> = &'a RawServoStyleSheet; enum RawServoStyleSheetVoid{ } pub struct RawServoStyleSheet(RawServoStyleSheetVoid); pub type ServoDeclarationBlockStrong = ::gecko_bindings::sugar::ownership::Strong<ServoDeclarationBlock>; -pub type ServoDeclarationBlockBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, ServoDeclarationBlock>; +pub type ServoDeclarationBlockBorrowedOrNull<'a> = Option<&'a ServoDeclarationBlock>; pub type ServoDeclarationBlockBorrowed<'a> = &'a ServoDeclarationBlock; enum ServoDeclarationBlockVoid{ } pub struct ServoDeclarationBlock(ServoDeclarationBlockVoid); pub type RawGeckoNodeBorrowed<'a> = &'a RawGeckoNode; -pub type RawGeckoNodeBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, RawGeckoNode>; +pub type RawGeckoNodeBorrowedOrNull<'a> = Option<&'a RawGeckoNode>; pub type RawGeckoElementBorrowed<'a> = &'a RawGeckoElement; -pub type RawGeckoElementBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, RawGeckoElement>; +pub type RawGeckoElementBorrowedOrNull<'a> = Option<&'a RawGeckoElement>; pub type RawGeckoDocumentBorrowed<'a> = &'a RawGeckoDocument; -pub type RawGeckoDocumentBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, RawGeckoDocument>; +pub type RawGeckoDocumentBorrowedOrNull<'a> = Option<&'a RawGeckoDocument>; pub type RawServoStyleSetBorrowed<'a> = &'a RawServoStyleSet; pub type RawServoStyleSetBorrowedMut<'a> = &'a mut RawServoStyleSet; pub type RawServoStyleSetOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoStyleSet>; -pub type RawServoStyleSetBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, RawServoStyleSet>; -pub type RawServoStyleSetBorrowedMutOrNull<'a> = ::gecko_bindings::sugar::ownership::BorrowedMut<'a, RawServoStyleSet>; +pub type RawServoStyleSetBorrowedOrNull<'a> = Option<&'a RawServoStyleSet>; +pub type RawServoStyleSetBorrowedMutOrNull<'a> = Option<&'a mut RawServoStyleSet>; pub type RawServoStyleSetOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoStyleSet>; enum RawServoStyleSetVoid{ } pub struct RawServoStyleSet(RawServoStyleSetVoid); pub type StyleChildrenIteratorBorrowed<'a> = &'a StyleChildrenIterator; pub type StyleChildrenIteratorBorrowedMut<'a> = &'a mut StyleChildrenIterator; pub type StyleChildrenIteratorOwned = ::gecko_bindings::sugar::ownership::Owned<StyleChildrenIterator>; -pub type StyleChildrenIteratorBorrowedOrNull<'a> = ::gecko_bindings::sugar::ownership::Borrowed<'a, StyleChildrenIterator>; -pub type StyleChildrenIteratorBorrowedMutOrNull<'a> = ::gecko_bindings::sugar::ownership::BorrowedMut<'a, StyleChildrenIterator>; +pub type StyleChildrenIteratorBorrowedOrNull<'a> = Option<&'a StyleChildrenIterator>; +pub type StyleChildrenIteratorBorrowedMutOrNull<'a> = Option<&'a mut StyleChildrenIterator>; pub type StyleChildrenIteratorOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<StyleChildrenIterator>; enum StyleChildrenIteratorVoid{ } pub struct StyleChildrenIterator(StyleChildrenIteratorVoid); diff --git a/components/style/gecko_bindings/sugar/ownership.rs b/components/style/gecko_bindings/sugar/ownership.rs index 39b4cf59f41..b8652b4cecf 100644 --- a/components/style/gecko_bindings/sugar/ownership.rs +++ b/components/style/gecko_bindings/sugar/ownership.rs @@ -72,16 +72,16 @@ pub unsafe trait HasArcFFI : HasFFI { // these methods can't be on Borrowed because it leads to an unspecified // impl parameter /// Artificially increments the refcount of a (possibly null) borrowed Arc over FFI. - unsafe fn addref_opt(ptr: Borrowed<Self::FFIType>) { - forget(ptr.as_arc_opt::<Self>().clone()) + unsafe fn addref_opt(ptr: Option<&Self::FFIType>) { + forget(Self::arc_from_borrowed(&ptr).clone()) } /// Given a (possibly null) borrowed FFI reference, decrements the refcount. /// Unsafe since it doesn't consume the backing Arc. Run it only when you /// know that a strong reference to the backing Arc is disappearing /// (usually on the C++ side) without running the Arc destructor. - unsafe fn release_opt(ptr: Borrowed<Self::FFIType>) { - if let Some(arc) = ptr.as_arc_opt::<Self>() { + unsafe fn release_opt(ptr: Option<&Self::FFIType>) { + if let Some(arc) = Self::arc_from_borrowed(&ptr) { let _: Arc<_> = ptr::read(arc as *const Arc<_>); } } @@ -108,140 +108,17 @@ pub unsafe trait HasArcFFI : HasFFI { transmute::<&&Self::FFIType, &Arc<Self>>(ptr) } } -} - -#[repr(C)] -/// Gecko-FFI-safe borrowed type -/// This can be null. -pub struct Borrowed<'a, T: 'a> { - ptr: *const T, - _marker: PhantomData<&'a T>, -} - -#[repr(C)] -/// Gecko-FFI-safe mutably borrowed type -/// This can be null. -pub struct BorrowedMut<'a, T: 'a> { - ptr: *mut T, - _marker: PhantomData<&'a mut T>, -} - -// manual impls because derive doesn't realize that `T: Clone` isn't necessary -impl<'a, T> Copy for Borrowed<'a, T> {} - -impl<'a, T> Clone for Borrowed<'a, T> { - #[inline] - fn clone(&self) -> Self { *self } -} - -impl<'a, T> Borrowed<'a, T> { - #[inline] - pub fn is_null(self) -> bool { - self.ptr == ptr::null() - } #[inline] - /// Like Deref, but gives an Option - pub fn borrow_opt(self) -> Option<&'a T> { - if self.is_null() { - None - } else { - Some(unsafe { &*self.ptr }) - } - } - - #[inline] - /// Borrowed<GeckoType> -> Option<&Arc<ServoType>> - pub fn as_arc_opt<U>(&self) -> Option<&Arc<U>> where U: HasArcFFI<FFIType = T> { + fn arc_from_borrowed<'a>(ptr: &'a Option<&Self::FFIType>) -> Option<&'a Arc<Self>> { unsafe { - if self.is_null() { - None + if let Some(ref reference) = *ptr { + Some(transmute::<&&Self::FFIType, &Arc<_>>(reference)) } else { - Some(transmute::<&Borrowed<_>, &Arc<_>>(self)) + None } } } - - #[inline] - /// Converts a borrowed FFI reference to a borrowed Arc. - /// Panics on null. - /// - /// &Borrowed<GeckoType> -> &Arc<ServoType> - pub fn as_arc<U>(&self) -> &Arc<U> where U: HasArcFFI<FFIType = T> { - self.as_arc_opt().unwrap() - } - - #[inline] - /// Borrowed<ServoType> -> Borrowed<GeckoType> - pub fn as_ffi(self) -> Borrowed<'a, <Self as HasFFI>::FFIType> where Self: HasSimpleFFI { - unsafe { transmute(self) } - } - - #[inline] - /// Borrowed<GeckoType> -> Borrowed<ServoType> - pub fn from_ffi<U>(self) -> Borrowed<'a, U> where U: HasSimpleFFI<FFIType = T> { - unsafe { transmute(self) } - } - - #[inline] - /// Borrowed<GeckoType> -> &ServoType - pub fn as_servo_ref<U>(self) -> Option<&'a U> where U: HasSimpleFFI<FFIType = T> { - self.borrow_opt().map(HasSimpleFFI::from_ffi) - } - - pub fn null() -> Borrowed<'static, T> { - Borrowed { - ptr: ptr::null_mut(), - _marker: PhantomData - } - } -} - -impl<'a, T> BorrowedMut<'a, T> { - #[inline] - /// Like DerefMut, but gives an Option - pub fn borrow_mut_opt(self) -> Option<&'a mut T> { - // We have two choices for the signature here, it can either be - // Self -> Option<&'a mut T> or - // &'b mut Self -> Option<'b mut T> - // The former consumes the BorrowedMut (which isn't Copy), - // which can be annoying. The latter only temporarily - // borrows it, so the return value can't exit the scope - // even if Self has a longer lifetime ('a) - // - // This is basically the implicit "reborrow" pattern used with &mut - // not cleanly translating to our custom types. - - // I've chosen the former solution -- you can manually convert back - // if you need to reuse the BorrowedMut. - if self.is_null() { - None - } else { - Some(unsafe { &mut *self.ptr }) - } - } - - #[inline] - /// BorrowedMut<GeckoType> -> &mut ServoType - pub fn as_servo_mut_ref<U>(self) -> Option<&'a mut U> where U: HasSimpleFFI<FFIType = T> { - self.borrow_mut_opt().map(HasSimpleFFI::from_ffi_mut) - } - - pub fn null_mut() -> BorrowedMut<'static, T> { - BorrowedMut { - ptr: ptr::null_mut(), - _marker: PhantomData - } - } -} - -// technically not how we're supposed to use -// Deref, but that's a minor style issue -impl<'a, T> Deref for BorrowedMut<'a, T> { - type Target = Borrowed<'a, T>; - fn deref(&self) -> &Self::Target { - unsafe { transmute(self) } - } } #[repr(C)] @@ -299,12 +176,8 @@ pub unsafe trait FFIArcHelpers { fn into_strong(self) -> Strong<<Self::Inner as HasFFI>::FFIType>; /// Produces a (nullable) borrowed FFI reference by borrowing an Arc. /// - /// &Arc<ServoType> -> Borrowed<GeckoType> - fn as_borrowed_opt(&self) -> Borrowed<<Self::Inner as HasFFI>::FFIType>; - /// Produces a borrowed FFI reference by borrowing an Arc. - /// - /// &Arc<ServoType> -> &GeckoType - fn as_borrowed(&self) -> &<Self::Inner as HasFFI>::FFIType; + /// &Arc<ServoType> -> Option<&GeckoType> + fn as_borrowed_opt(&self) -> Option<&<Self::Inner as HasFFI>::FFIType>; } unsafe impl<T: HasArcFFI> FFIArcHelpers for Arc<T> { @@ -314,13 +187,8 @@ unsafe impl<T: HasArcFFI> FFIArcHelpers for Arc<T> { unsafe { transmute(self) } } #[inline] - fn as_borrowed_opt(&self) -> Borrowed<T::FFIType> { - let borrowedptr = self as *const Arc<T> as *const Borrowed<T::FFIType>; - unsafe { ptr::read(borrowedptr) } - } - #[inline] - fn as_borrowed(&self) -> &T::FFIType { - let borrowedptr = self as *const Arc<T> as *const & T::FFIType; + fn as_borrowed_opt(&self) -> Option<&T::FFIType> { + let borrowedptr = self as *const Arc<T> as *const Option<&T::FFIType>; unsafe { ptr::read(borrowedptr) } } } @@ -387,11 +255,11 @@ impl<T> OwnedOrNull<T> { } } - pub fn borrow(&self) -> Borrowed<T> { + pub fn borrow(&self) -> Option<&T> { unsafe { transmute(self) } } - pub fn borrow_mut(&self) -> BorrowedMut<T> { + pub fn borrow_mut(&self) -> Option<&mut T> { unsafe { transmute(self) } } } diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index acc3ee86fa6..3d08c822c6a 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -27,6 +27,7 @@ use gecko_bindings::bindings::{Gecko_FontFamilyList_Clear, Gecko_InitializeImage use gecko_bindings::bindings::ServoComputedValuesBorrowedOrNull; use gecko_bindings::structs; use gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordData, CoordDataMut}; +use gecko_bindings::sugar::ownership::HasArcFFI; use gecko::values::{StyleCoordHelpers, GeckoStyleCoordConvertible, convert_nscolor_to_rgba}; use gecko::values::convert_rgba_to_nscolor; use gecko::values::round_border_to_device_pixels; @@ -1934,7 +1935,7 @@ clip-path #[allow(non_snake_case, unused_variables)] pub extern "C" fn Servo_GetStyle${style_struct.gecko_name}(computed_values: ServoComputedValuesBorrowedOrNull) -> *const ${style_struct.gecko_ffi_name} { - computed_values.as_arc::<ComputedValues>().get_${style_struct.name_lower}().get_gecko() + ComputedValues::arc_from_borrowed(&computed_values).unwrap().get_${style_struct.name_lower}().get_gecko() as *const ${style_struct.gecko_ffi_name} } </%def> diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 2a680464490..46db65c68c6 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -317,6 +317,42 @@ impl PropertyDeclarationBlock { } } +impl PropertyDeclarationBlock { + // Take a declaration block known to contain a single property, + // and serialize it + pub fn to_css_single_value<W>(&self, dest: &mut W, name: &str) + -> fmt::Result where W: fmt::Write { + match self.declarations.len() { + 0 => Err(fmt::Error), + 1 if self.declarations[0].0.name().eq_str_ignore_ascii_case(name) => { + self.declarations[0].0.to_css(dest) + } + _ => { + // we use this function because a closure won't be `Clone` + fn get_declaration(dec: &(PropertyDeclaration, Importance)) + -> &PropertyDeclaration { + &dec.0 + } + let shorthand = try!(Shorthand::from_name(name).ok_or(fmt::Error)); + if !self.declarations.iter().all(|decl| decl.0.shorthands().contains(&shorthand)) { + return Err(fmt::Error) + } + let success = try!(shorthand.serialize_shorthand_to_buffer( + dest, + self.declarations.iter() + .map(get_declaration as fn(_) -> _), + &mut true) + ); + if success { + Ok(()) + } else { + Err(fmt::Error) + } + } + } + } +} + impl ToCss for PropertyDeclarationBlock { // https://drafts.csswg.org/cssom/#serialize-a-css-declaration-block fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { @@ -893,6 +929,16 @@ pub enum PropertyDeclarationName { Internal } +impl PropertyDeclarationName { + pub fn eq_str_ignore_ascii_case(&self, other: &str) -> bool { + match *self { + PropertyDeclarationName::Longhand(s) => s.eq_ignore_ascii_case(other), + PropertyDeclarationName::Custom(ref n) => n.eq_str_ignore_ascii_case(other), + PropertyDeclarationName::Internal => false + } + } +} + impl PartialEq<str> for PropertyDeclarationName { fn eq(&self, other: &str) -> bool { match *self { |