style: Define types for pseudo-class string argument storage. draft
authorCameron McCormack <cam@mcc.id.au>
Wed, 07 Jun 2017 12:19:07 +0800
changeset 590052 399587140a87400c8ef6b3660bbc8909ca9ceaad
parent 590051 120df9c5f73e8a0210fc06428a160ea917209c87
child 590053 5cf1fcdac4b48f3353556e2db78d4f7ca5b7961f
push id62581
push userbmo:cam@mcc.id.au
push dateWed, 07 Jun 2017 05:05:00 +0000
milestone55.0a1
style: Define types for pseudo-class string argument storage. MozReview-Commit-ID: GH1vHGbR7Bz
servo/components/style/gecko/selector_parser.rs
servo/components/style/servo/selector_parser.rs
--- a/servo/components/style/gecko/selector_parser.rs
+++ b/servo/components/style/gecko/selector_parser.rs
@@ -19,30 +19,33 @@ pub use gecko::snapshot::SnapshotMap;
 
 bitflags! {
     flags NonTSPseudoClassFlag: u8 {
         // See NonTSPseudoClass::is_internal()
         const PSEUDO_CLASS_INTERNAL = 0x01,
     }
 }
 
+/// The type used for storing pseudo-class string arguments.
+pub type PseudoClassStringArg = Box<[u16]>;
+
 macro_rules! pseudo_class_name {
     (bare: [$(($css:expr, $name:ident, $gecko_type:tt, $state:tt, $flags:tt),)*],
      string: [$(($s_css:expr, $s_name:ident, $s_gecko_type:tt, $s_state:tt, $s_flags:tt),)*],
      keyword: [$(($k_css:expr, $k_name:ident, $k_gecko_type:tt, $k_state:tt, $k_flags:tt),)*]) => {
         #[doc = "Our representation of a non tree-structural pseudo-class."]
         #[derive(Clone, Debug, PartialEq, Eq)]
         pub enum NonTSPseudoClass {
             $(
                 #[doc = $css]
                 $name,
             )*
             $(
                 #[doc = $s_css]
-                $s_name(Box<[u16]>),
+                $s_name(PseudoClassStringArg),
             )*
             $(
                 #[doc = $k_css]
                 $k_name(Box<[u16]>),
             )*
             /// The non-standard `:-moz-any` pseudo-class.
             ///
             /// TODO(emilio): We disallow combinators and pseudos here, so we
--- a/servo/components/style/servo/selector_parser.rs
+++ b/servo/components/style/servo/selector_parser.rs
@@ -155,32 +155,35 @@ impl PseudoElement {
 
     /// Covert non-canonical pseudo-element to canonical one, and keep a
     /// canonical one as it is.
     pub fn canonical(&self) -> PseudoElement {
         self.clone()
     }
 }
 
+/// The type used for storing pseudo-class string arguments.
+pub type PseudoClassStringArg = Box<str>;
+
 /// A non tree-structural pseudo-class.
 /// See https://drafts.csswg.org/selectors-4/#structural-pseudos
 #[derive(Clone, Debug, PartialEq, Eq, Hash)]
 #[cfg_attr(feature = "servo", derive(HeapSizeOf))]
 #[allow(missing_docs)]
 pub enum NonTSPseudoClass {
     Active,
     AnyLink,
     Checked,
     Disabled,
     Enabled,
     Focus,
     Fullscreen,
     Hover,
     Indeterminate,
-    Lang(Box<str>),
+    Lang(PseudoClassStringArg),
     Link,
     PlaceholderShown,
     ReadWrite,
     ReadOnly,
     ServoNonZeroBorder,
     ServoCaseSensitiveTypeAttr(Atom),
     Target,
     Visited,