summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2022-04-23 09:50:42 (GMT)
committerGitHub <noreply@github.com>2022-04-23 09:50:42 (GMT)
commit130a8c386bc1a8de49eadf784fa178869ce01f37 (patch)
treefdd0fe3ecaba31197efd14a102d53166015ac49d
parent6b45076bd62407103433daea8acf085a99e6cb7e (diff)
downloadcpython-130a8c386bc1a8de49eadf784fa178869ce01f37.zip
cpython-130a8c386bc1a8de49eadf784fa178869ce01f37.tar.gz
cpython-130a8c386bc1a8de49eadf784fa178869ce01f37.tar.bz2
gh-91308: Simplify parsing inline flag "x" (verbose) (GH-91855)
-rw-r--r--Lib/re/_parser.py20
1 files changed, 4 insertions, 16 deletions
diff --git a/Lib/re/_parser.py b/Lib/re/_parser.py
index 60ec3e8..b864bf2 100644
--- a/Lib/re/_parser.py
+++ b/Lib/re/_parser.py
@@ -67,9 +67,6 @@ FLAGS = {
TYPE_FLAGS = SRE_FLAG_ASCII | SRE_FLAG_LOCALE | SRE_FLAG_UNICODE
GLOBAL_FLAGS = SRE_FLAG_DEBUG
-class Verbose(Exception):
- pass
-
class State:
# keeps track of state for parsing
def __init__(self):
@@ -448,6 +445,8 @@ def _parse_sub(source, state, verbose, nested):
not nested and not items))
if not sourcematch("|"):
break
+ if not nested:
+ verbose = state.flags & SRE_FLAG_VERBOSE
if len(items) == 1:
return items[0]
@@ -826,8 +825,7 @@ def _parse(source, state, verbose, nested, first=False):
raise source.error('global flags not at the start '
'of the expression',
source.tell() - start)
- if (state.flags & SRE_FLAG_VERBOSE) and not verbose:
- raise Verbose
+ verbose = state.flags & SRE_FLAG_VERBOSE
continue
add_flags, del_flags = flags
@@ -963,17 +961,7 @@ def parse(str, flags=0, state=None):
state.flags = flags
state.str = str
- try:
- p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
- except Verbose:
- # the VERBOSE flag was switched on inside the pattern. to be
- # on the safe side, we'll parse the whole thing again...
- state = State()
- state.flags = flags | SRE_FLAG_VERBOSE
- state.str = str
- source.seek(0)
- p = _parse_sub(source, state, True, 0)
-
+ p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
p.state.flags = fix_flags(str, p.state.flags)
if source.next is not None: