@@ -309,7 +309,7 @@ def isname(name):
309
309
return False
310
310
return True
311
311
312
- def _class_escape (source , escape ):
312
+ def _class_escape (source , escape , nested ):
313
313
# handle escape code inside character class
314
314
code = ESCAPES .get (escape )
315
315
if code :
@@ -353,13 +353,13 @@ def _class_escape(source, escape):
353
353
if c in ASCIILETTERS :
354
354
import warnings
355
355
warnings .warn ('bad escape %s' % escape ,
356
- DeprecationWarning , stacklevel = 8 )
356
+ DeprecationWarning , stacklevel = nested + 6 )
357
357
return LITERAL , ord (escape [1 ])
358
358
except ValueError :
359
359
pass
360
360
raise source .error ("bad escape %s" % escape , len (escape ))
361
361
362
- def _escape (source , escape , state ):
362
+ def _escape (source , escape , state , nested ):
363
363
# handle escape code in expression
364
364
code = CATEGORIES .get (escape )
365
365
if code :
@@ -420,21 +420,21 @@ def _escape(source, escape, state):
420
420
if c in ASCIILETTERS :
421
421
import warnings
422
422
warnings .warn ('bad escape %s' % escape ,
423
- DeprecationWarning , stacklevel = 8 )
423
+ DeprecationWarning , stacklevel = nested + 6 )
424
424
return LITERAL , ord (escape [1 ])
425
425
except ValueError :
426
426
pass
427
427
raise source .error ("bad escape %s" % escape , len (escape ))
428
428
429
- def _parse_sub (source , state , nested = True ):
429
+ def _parse_sub (source , state , nested ):
430
430
# parse an alternation: a|b|c
431
431
432
432
items = []
433
433
itemsappend = items .append
434
434
sourcematch = source .match
435
435
start = source .tell ()
436
436
while True :
437
- itemsappend (_parse (source , state ))
437
+ itemsappend (_parse (source , state , nested + 1 ))
438
438
if not sourcematch ("|" ):
439
439
break
440
440
@@ -476,10 +476,10 @@ def _parse_sub(source, state, nested=True):
476
476
subpattern .append ((BRANCH , (None , items )))
477
477
return subpattern
478
478
479
- def _parse_sub_cond (source , state , condgroup ):
480
- item_yes = _parse (source , state )
479
+ def _parse_sub_cond (source , state , condgroup , nested ):
480
+ item_yes = _parse (source , state , nested + 1 )
481
481
if source .match ("|" ):
482
- item_no = _parse (source , state )
482
+ item_no = _parse (source , state , nested + 1 )
483
483
if source .next == "|" :
484
484
raise source .error ("conditional backref with more than two branches" )
485
485
else :
@@ -488,7 +488,7 @@ def _parse_sub_cond(source, state, condgroup):
488
488
subpattern .append ((GROUPREF_EXISTS , (condgroup , item_yes , item_no )))
489
489
return subpattern
490
490
491
- def _parse (source , state ):
491
+ def _parse (source , state , nested ):
492
492
# parse a simple pattern
493
493
subpattern = SubPattern (state )
494
494
@@ -521,7 +521,7 @@ def _parse(source, state):
521
521
continue
522
522
523
523
if this [0 ] == "\\ " :
524
- code = _escape (source , this , state )
524
+ code = _escape (source , this , state , nested + 1 )
525
525
subpatternappend (code )
526
526
527
527
elif this not in SPECIAL_CHARS :
@@ -546,7 +546,7 @@ def _parse(source, state):
546
546
if this == "]" and set != start :
547
547
break
548
548
elif this [0 ] == "\\ " :
549
- code1 = _class_escape (source , this )
549
+ code1 = _class_escape (source , this , nested + 1 )
550
550
else :
551
551
code1 = LITERAL , _ord (this )
552
552
if sourcematch ("-" ):
@@ -562,7 +562,7 @@ def _parse(source, state):
562
562
setappend ((LITERAL , _ord ("-" )))
563
563
break
564
564
if that [0 ] == "\\ " :
565
- code2 = _class_escape (source , that )
565
+ code2 = _class_escape (source , that , nested + 1 )
566
566
else :
567
567
code2 = LITERAL , _ord (that )
568
568
if code1 [0 ] != LITERAL or code2 [0 ] != LITERAL :
@@ -713,7 +713,7 @@ def _parse(source, state):
713
713
lookbehindgroups = state .lookbehindgroups
714
714
if lookbehindgroups is None :
715
715
state .lookbehindgroups = state .groups
716
- p = _parse_sub (source , state )
716
+ p = _parse_sub (source , state , nested + 1 )
717
717
if dir < 0 :
718
718
if lookbehindgroups is None :
719
719
state .lookbehindgroups = None
@@ -773,9 +773,9 @@ def _parse(source, state):
773
773
except error as err :
774
774
raise source .error (err .msg , len (name ) + 1 ) from None
775
775
if condgroup :
776
- p = _parse_sub_cond (source , state , condgroup )
776
+ p = _parse_sub_cond (source , state , condgroup , nested + 1 )
777
777
else :
778
- p = _parse_sub (source , state )
778
+ p = _parse_sub (source , state , nested + 1 )
779
779
if not source .match (")" ):
780
780
raise source .error ("missing ), unterminated subpattern" ,
781
781
source .tell () - start )
0 commit comments