@@ -234,7 +234,7 @@ def isname(name):
234
234
return False
235
235
return True
236
236
237
- def _class_escape (source , escape ):
237
+ def _class_escape (source , escape , nested ):
238
238
# handle escape code inside character class
239
239
code = ESCAPES .get (escape )
240
240
if code :
@@ -266,16 +266,16 @@ def _class_escape(source, escape):
266
266
if c in 'Uu' :
267
267
warnings .warn ('bad escape %s; Unicode escapes are '
268
268
'supported only since Python 3.3' % escape ,
269
- FutureWarning , stacklevel = 8 )
269
+ FutureWarning , stacklevel = nested + 6 )
270
270
else :
271
271
warnings .warnpy3k ('bad escape %s' % escape ,
272
- DeprecationWarning , stacklevel = 8 )
272
+ DeprecationWarning , stacklevel = nested + 6 )
273
273
return LITERAL , ord (escape [1 ])
274
274
except ValueError :
275
275
pass
276
276
raise error , "bogus escape: %s" % repr (escape )
277
277
278
- def _escape (source , escape , state ):
278
+ def _escape (source , escape , state , nested ):
279
279
# handle escape code in expression
280
280
code = CATEGORIES .get (escape )
281
281
if code :
@@ -315,7 +315,7 @@ def _escape(source, escape, state):
315
315
import warnings
316
316
warnings .warn ('group references in lookbehind '
317
317
'assertions are not supported' ,
318
- RuntimeWarning )
318
+ RuntimeWarning , stacklevel = nested + 6 )
319
319
return GROUPREF , group
320
320
raise ValueError
321
321
if len (escape ) == 2 :
@@ -324,23 +324,23 @@ def _escape(source, escape, state):
324
324
if c in 'Uu' :
325
325
warnings .warn ('bad escape %s; Unicode escapes are '
326
326
'supported only since Python 3.3' % escape ,
327
- FutureWarning , stacklevel = 8 )
327
+ FutureWarning , stacklevel = nested + 6 )
328
328
else :
329
329
warnings .warnpy3k ('bad escape %s' % escape ,
330
- DeprecationWarning , stacklevel = 8 )
330
+ DeprecationWarning , stacklevel = nested + 6 )
331
331
return LITERAL , ord (escape [1 ])
332
332
except ValueError :
333
333
pass
334
334
raise error , "bogus escape: %s" % repr (escape )
335
335
336
- def _parse_sub (source , state , nested = 1 ):
336
+ def _parse_sub (source , state , nested ):
337
337
# parse an alternation: a|b|c
338
338
339
339
items = []
340
340
itemsappend = items .append
341
341
sourcematch = source .match
342
342
while 1 :
343
- itemsappend (_parse (source , state ))
343
+ itemsappend (_parse (source , state , nested + 1 ))
344
344
if sourcematch ("|" ):
345
345
continue
346
346
if not nested :
@@ -392,10 +392,10 @@ def _parse_sub(source, state, nested=1):
392
392
subpattern .append ((BRANCH , (None , items )))
393
393
return subpattern
394
394
395
- def _parse_sub_cond (source , state , condgroup ):
396
- item_yes = _parse (source , state )
395
+ def _parse_sub_cond (source , state , condgroup , nested ):
396
+ item_yes = _parse (source , state , nested + 1 )
397
397
if source .match ("|" ):
398
- item_no = _parse (source , state )
398
+ item_no = _parse (source , state , nested + 1 )
399
399
if source .match ("|" ):
400
400
raise error , "conditional backref with more than two branches"
401
401
else :
@@ -411,7 +411,7 @@ def _parse_sub_cond(source, state, condgroup):
411
411
_LOOKBEHINDASSERTCHARS = set ("=!" )
412
412
_REPEATCODES = set ([MIN_REPEAT , MAX_REPEAT ])
413
413
414
- def _parse (source , state ):
414
+ def _parse (source , state , nested ):
415
415
# parse a simple pattern
416
416
subpattern = SubPattern (state )
417
417
@@ -462,7 +462,7 @@ def _parse(source, state):
462
462
if this == "]" and set != start :
463
463
break
464
464
elif this and this [0 ] == "\\ " :
465
- code1 = _class_escape (source , this )
465
+ code1 = _class_escape (source , this , nested + 1 )
466
466
elif this :
467
467
code1 = LITERAL , ord (this )
468
468
else :
@@ -478,7 +478,7 @@ def _parse(source, state):
478
478
break
479
479
elif this :
480
480
if this [0 ] == "\\ " :
481
- code2 = _class_escape (source , this )
481
+ code2 = _class_escape (source , this , nested + 1 )
482
482
else :
483
483
code2 = LITERAL , ord (this )
484
484
if code1 [0 ] != LITERAL or code2 [0 ] != LITERAL :
@@ -608,7 +608,7 @@ def _parse(source, state):
608
608
import warnings
609
609
warnings .warn ('group references in lookbehind '
610
610
'assertions are not supported' ,
611
- RuntimeWarning )
611
+ RuntimeWarning , stacklevel = nested + 6 )
612
612
subpatternappend ((GROUPREF , gid ))
613
613
continue
614
614
else :
@@ -638,7 +638,7 @@ def _parse(source, state):
638
638
dir = - 1 # lookbehind
639
639
char = sourceget ()
640
640
state .lookbehind += 1
641
- p = _parse_sub (source , state )
641
+ p = _parse_sub (source , state , nested + 1 )
642
642
if dir < 0 :
643
643
state .lookbehind -= 1
644
644
if not sourcematch (")" ):
@@ -675,7 +675,7 @@ def _parse(source, state):
675
675
import warnings
676
676
warnings .warn ('group references in lookbehind '
677
677
'assertions are not supported' ,
678
- RuntimeWarning )
678
+ RuntimeWarning , stacklevel = nested + 6 )
679
679
else :
680
680
# flags
681
681
if not source .next in FLAGS :
@@ -690,9 +690,9 @@ def _parse(source, state):
690
690
else :
691
691
group = state .opengroup (name )
692
692
if condgroup :
693
- p = _parse_sub_cond (source , state , condgroup )
693
+ p = _parse_sub_cond (source , state , condgroup , nested + 1 )
694
694
else :
695
- p = _parse_sub (source , state )
695
+ p = _parse_sub (source , state , nested + 1 )
696
696
if not sourcematch (")" ):
697
697
raise error , "unbalanced parenthesis"
698
698
if group is not None :
@@ -714,7 +714,7 @@ def _parse(source, state):
714
714
subpattern .append ((AT , AT_END ))
715
715
716
716
elif this and this [0 ] == "\\ " :
717
- code = _escape (source , this , state )
717
+ code = _escape (source , this , state , nested + 1 )
718
718
subpatternappend (code )
719
719
720
720
else :
0 commit comments