From 6b8649e012c51b0d6cebec6d5cc4ccf49e8926f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Tue, 18 Jul 2017 14:44:25 +0200 Subject: [PATCH] stylo: Fix PseudoElement::pseudo_type. MozReview-Commit-ID: DH2Pv52ankl --- .../gecko/pseudo_element_definition.mako.rs | 9 ++++++++- components/style/gecko/regen_atoms.py | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/components/style/gecko/pseudo_element_definition.mako.rs b/components/style/gecko/pseudo_element_definition.mako.rs index 3f0c5c0f489..dba079eb952 100644 --- a/components/style/gecko/pseudo_element_definition.mako.rs +++ b/components/style/gecko/pseudo_element_definition.mako.rs @@ -111,13 +111,20 @@ impl PseudoElement { /// Construct a `CSSPseudoElementType` from a pseudo-element #[inline] pub fn pseudo_type(&self) -> CSSPseudoElementType { + use gecko_bindings::structs::CSSPseudoElementType_InheritingAnonBox; + match *self { % for pseudo in PSEUDOS: % if not pseudo.is_anon_box(): PseudoElement::${pseudo.capitalized()} => CSSPseudoElementType::${pseudo.original_ident}, + % elif pseudo.is_tree_pseudo_element(): + PseudoElement::${pseudo.capitalized()}(..) => CSSPseudoElementType_InheritingAnonBox, + % elif pseudo.is_inheriting_anon_box(): + PseudoElement::${pseudo.capitalized()} => CSSPseudoElementType_InheritingAnonBox, + % else: + PseudoElement::${pseudo.capitalized()} => CSSPseudoElementType::NonInheritingAnonBox, % endif % endfor - _ => CSSPseudoElementType::NotPseudo } } diff --git a/components/style/gecko/regen_atoms.py b/components/style/gecko/regen_atoms.py index bdc59748b0c..33cb5e0feee 100755 --- a/components/style/gecko/regen_atoms.py +++ b/components/style/gecko/regen_atoms.py @@ -39,14 +39,14 @@ def msvc32_symbolify(source, ident): class GkAtomSource: - PATTERN = re.compile('^GK_ATOM\((.+),\s*"(.*)"\)') + PATTERN = re.compile('^(GK_ATOM)\((.+),\s*"(.*)"\)') FILE = "include/nsGkAtomList.h" CLASS = "nsGkAtoms" TYPE = "nsIAtom" class CSSPseudoElementsAtomSource: - PATTERN = re.compile('^CSS_PSEUDO_ELEMENT\((.+),\s*"(.*)",') + PATTERN = re.compile('^(CSS_PSEUDO_ELEMENT)\((.+),\s*"(.*)",') FILE = "include/nsCSSPseudoElementList.h" CLASS = "nsCSSPseudoElements" # NB: nsICSSPseudoElement is effectively the same as a nsIAtom, but we need @@ -55,7 +55,7 @@ class CSSPseudoElementsAtomSource: class CSSAnonBoxesAtomSource: - PATTERN = re.compile('^(?:CSS_ANON_BOX|CSS_NON_INHERITING_ANON_BOX)\((.+),\s*"(.*)"\)') + PATTERN = re.compile('^(CSS_ANON_BOX|CSS_NON_INHERITING_ANON_BOX)\((.+),\s*"(.*)"\)') FILE = "include/nsCSSAnonBoxList.h" CLASS = "nsCSSAnonBoxes" TYPE = "nsICSSAnonBoxPseudo" @@ -76,11 +76,14 @@ def map_atom(ident): class Atom: - def __init__(self, source, ident, value): + def __init__(self, source, macro_name, ident, value): self.ident = "{}_{}".format(source.CLASS, ident) self.original_ident = ident self.value = value self.source = source + self.macro = macro_name + if self.is_anon_box(): + assert self.is_inheriting_anon_box() or self.is_non_inheriting_anon_box() def cpp_class(self): return self.source.CLASS @@ -103,6 +106,12 @@ class Atom: def is_anon_box(self): return self.type() == "nsICSSAnonBoxPseudo" + def is_non_inheriting_anon_box(self): + return self.macro == "CSS_NON_INHERITING_ANON_BOX" + + def is_inheriting_anon_box(self): + return self.macro == "CSS_ANON_BOX" + def is_tree_pseudo_element(self): return self.value.startswith(":-moz-tree-") @@ -116,7 +125,7 @@ def collect_atoms(objdir): for line in f.readlines(): result = re.match(source.PATTERN, line) if result: - atoms.append(Atom(source, result.group(1), result.group(2))) + atoms.append(Atom(source, result.group(1), result.group(2), result.group(3))) return atoms