From 9afeae1b042ae6eb0398a9a7743cbff9f5560a25 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Fri, 27 Oct 2017 15:59:12 +0200 Subject: [PATCH] Support multi lines declarations in the parsing of the Fx header files For example, in dom/base/nsGkAtomList.h, we currently have: GK_ATOM(mouseWheel, "mouseWheel") // For discrete wheel events (e.g. not OSX magic mouse) but if we change to GK_ATOM(mouseWheel, "mouseWheel") // For discrete wheel events (e.g. not OSX magic mouse) The parser didn't handle the declaration --- components/style/gecko/regen_atoms.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/components/style/gecko/regen_atoms.py b/components/style/gecko/regen_atoms.py index 778c694f4e4bb..8b2bf26b16ecf 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)\(([^,]*),[^"]*"([^"]*)"\)', re.MULTILINE) FILE = "include/nsGkAtomList.h" CLASS = "nsGkAtoms" TYPE = "nsStaticAtom" class CSSPseudoElementsAtomSource: - PATTERN = re.compile('^(CSS_PSEUDO_ELEMENT)\((.+),\s*"(.*)",') + PATTERN = re.compile('^(CSS_PSEUDO_ELEMENT)\(([^,]*),[^"]*"([^"]*)",', re.MULTILINE) FILE = "include/nsCSSPseudoElementList.h" CLASS = "nsCSSPseudoElements" # NB: nsICSSPseudoElement is effectively the same as a nsStaticAtom, but we need @@ -55,7 +55,7 @@ class CSSPseudoElementsAtomSource: class CSSAnonBoxesAtomSource: - PATTERN = re.compile('^(CSS_ANON_BOX|CSS_NON_INHERITING_ANON_BOX|CSS_WRAPPER_ANON_BOX)\((.+),\s*"(.*)"\)') + PATTERN = re.compile('^(CSS_ANON_BOX|CSS_NON_INHERITING_ANON_BOX|CSS_WRAPPER_ANON_BOX)\(([^,]*),[^"]*"([^"]*)"\)', re.MULTILINE) FILE = "include/nsCSSAnonBoxList.h" CLASS = "nsCSSAnonBoxes" TYPE = "nsICSSAnonBoxPseudo" @@ -123,10 +123,9 @@ def collect_atoms(objdir): path = os.path.abspath(os.path.join(objdir, source.FILE)) print("cargo:rerun-if-changed={}".format(path)) with open(path) as f: - for line in f.readlines(): - result = re.match(source.PATTERN, line) - if result: - atoms.append(Atom(source, result.group(1), result.group(2), result.group(3))) + content = f.read() + for result in source.PATTERN.finditer(content): + atoms.append(Atom(source, result.group(1), result.group(2), result.group(3))) return atoms