@@ -414,15 +414,16 @@ def _uniq(items):
414
414
newitems .append (item )
415
415
return newitems
416
416
417
- def _parse_sub (source , state , verbose , nested = True ):
417
+ def _parse_sub (source , state , verbose , nested ):
418
418
# parse an alternation: a|b|c
419
419
420
420
items = []
421
421
itemsappend = items .append
422
422
sourcematch = source .match
423
423
start = source .tell ()
424
424
while True :
425
- itemsappend (_parse (source , state , verbose , not nested and not items ))
425
+ itemsappend (_parse (source , state , verbose , nested + 1 ,
426
+ not nested and not items ))
426
427
if not sourcematch ("|" ):
427
428
break
428
429
@@ -471,7 +472,7 @@ def _parse_sub(source, state, verbose, nested=True):
471
472
subpattern .append ((BRANCH , (None , items )))
472
473
return subpattern
473
474
474
- def _parse (source , state , verbose , first = False ):
475
+ def _parse (source , state , verbose , nested , first = False ):
475
476
# parse a simple pattern
476
477
subpattern = SubPattern (state )
477
478
@@ -708,7 +709,7 @@ def _parse(source, state, verbose, first=False):
708
709
lookbehindgroups = state .lookbehindgroups
709
710
if lookbehindgroups is None :
710
711
state .lookbehindgroups = state .groups
711
- p = _parse_sub (source , state , verbose )
712
+ p = _parse_sub (source , state , verbose , nested + 1 )
712
713
if dir < 0 :
713
714
if lookbehindgroups is None :
714
715
state .lookbehindgroups = None
@@ -744,9 +745,9 @@ def _parse(source, state, verbose, first=False):
744
745
msg = "invalid group reference %d" % condgroup
745
746
raise source .error (msg , len (condname ) + 1 )
746
747
state .checklookbehindgroup (condgroup , source )
747
- item_yes = _parse (source , state , verbose )
748
+ item_yes = _parse (source , state , verbose , nested + 1 )
748
749
if source .match ("|" ):
749
- item_no = _parse (source , state , verbose )
750
+ item_no = _parse (source , state , verbose , nested + 1 )
750
751
if source .next == "|" :
751
752
raise source .error ("conditional backref with more than two branches" )
752
753
else :
@@ -768,7 +769,7 @@ def _parse(source, state, verbose, first=False):
768
769
source .string [:20 ], # truncate long regexes
769
770
' (truncated)' if len (source .string ) > 20 else '' ,
770
771
),
771
- DeprecationWarning , stacklevel = 7
772
+ DeprecationWarning , stacklevel = nested + 6
772
773
)
773
774
if (state .flags & SRE_FLAG_VERBOSE ) and not verbose :
774
775
raise Verbose
@@ -788,7 +789,7 @@ def _parse(source, state, verbose, first=False):
788
789
raise source .error (err .msg , len (name ) + 1 ) from None
789
790
sub_verbose = ((verbose or (add_flags & SRE_FLAG_VERBOSE )) and
790
791
not (del_flags & SRE_FLAG_VERBOSE ))
791
- p = _parse_sub (source , state , sub_verbose )
792
+ p = _parse_sub (source , state , sub_verbose , nested + 1 )
792
793
if not source .match (")" ):
793
794
raise source .error ("missing ), unterminated subpattern" ,
794
795
source .tell () - start )
@@ -886,15 +887,15 @@ def parse(str, flags=0, pattern=None):
886
887
pattern .str = str
887
888
888
889
try :
889
- p = _parse_sub (source , pattern , flags & SRE_FLAG_VERBOSE , False )
890
+ p = _parse_sub (source , pattern , flags & SRE_FLAG_VERBOSE , 0 )
890
891
except Verbose :
891
892
# the VERBOSE flag was switched on inside the pattern. to be
892
893
# on the safe side, we'll parse the whole thing again...
893
894
pattern = Pattern ()
894
895
pattern .flags = flags | SRE_FLAG_VERBOSE
895
896
pattern .str = str
896
897
source .seek (0 )
897
- p = _parse_sub (source , pattern , True , False )
898
+ p = _parse_sub (source , pattern , True , 0 )
898
899
899
900
p .pattern .flags = fix_flags (str , p .pattern .flags )
900
901
0 commit comments