summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/sre_parse.py5
-rwxr-xr-xLib/test/re_tests.py6
2 files changed, 9 insertions, 2 deletions
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index f4741c9..fcf5bcc 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -593,6 +593,11 @@ def parse(str, flags=0, pattern=None):
# p.dump()
+ if not (flags & SRE_FLAG_VERBOSE) and p.pattern.flags & SRE_FLAG_VERBOSE:
+ # the VERBOSE flag was switched on inside the pattern. to be
+ # on the safe side, we'll parse the whole thing again...
+ return parse(str, p.pattern.flags)
+
return p
def parse_template(source, pattern):
diff --git a/Lib/test/re_tests.py b/Lib/test/re_tests.py
index bb72f3d..8675224 100755
--- a/Lib/test/re_tests.py
+++ b/Lib/test/re_tests.py
@@ -612,9 +612,11 @@ xyzabc
(r'(([a-z]+):)?([a-z]+)$', 'smil', SUCCEED, 'g1+"-"+g2+"-"+g3', 'None-None-smil'),
# bug 111869 (PRE/PCRE fails on this one, SRE doesn't)
(r'.*d', 'abc\nabd', SUCCEED, 'found', 'abd'),
- # bug 112468
+ # bug 112468: various expected syntax errors
('(', '', SYNTAX_ERROR),
('[\\41]', '!', SUCCEED, 'found', '!'),
- # bug 115618
+ # bug 115040: rescan if flags are modified inside pattern
+ (r' (?x)foo ', 'foo', SUCCEED, 'found', 'foo'),
+ # bug 115618: negative lookahead
(r'(?<!abc)(d.f)', 'abcdefdof', SUCCEED, 'found', 'dof'),
]