From a22136a7322616e768962804075380103d34a09b Mon Sep 17 00:00:00 2001 From: Alex Riesen Date: Tue, 21 Feb 2023 16:44:08 +0100 Subject: [PATCH] py/makeqstrdefs.py: Fix handling GreenHills C/C++ preprocessor output. The GreenHills preprocessor produces #line directives without a file name, which the regular expression used to distiguish between "# file..." (GCC and similar) and "#line file..." (Microsoft C and similar) does not match, aborting processing. Besides, the regular expression was unnecessarily wide, matching lines containing a "#", followed by any number of 'l','i','n', and 'e' characters. Signed-off-by: Alex Riesen --- py/makeqstrdefs.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/py/makeqstrdefs.py b/py/makeqstrdefs.py index c445d6d1f..13a8b54d6 100644 --- a/py/makeqstrdefs.py +++ b/py/makeqstrdefs.py @@ -86,7 +86,8 @@ def write_out(fname, output): def process_file(f): - re_line = re.compile(r"#[line]*\s\d+\s\"([^\"]+)\"") + # match gcc-like output (# n "file") and msvc-like output (#line n "file") + re_line = re.compile(r"^#(?:line)?\s+\d+\s\"([^\"]+)\"") if args.mode == _MODE_QSTR: re_match = re.compile(r"MP_QSTR_[_a-zA-Z0-9]+") elif args.mode == _MODE_COMPRESS: @@ -100,10 +101,8 @@ def process_file(f): for line in f: if line.isspace(): continue - # match gcc-like output (# n "file") and msvc-like output (#line n "file") - if line.startswith(("# ", "#line")): - m = re_line.match(line) - assert m is not None + m = re_line.match(line) + if m: fname = m.group(1) if not is_c_source(fname) and not is_cxx_source(fname): continue