mirror of https://github.com/python/cpython
Issue #22423: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
module.
This commit is contained in:
parent
1a5426dbaf
commit
44dae8bde3
|
@ -94,33 +94,45 @@ class SubPattern:
|
||||||
self.data = data
|
self.data = data
|
||||||
self.width = None
|
self.width = None
|
||||||
def dump(self, level=0):
|
def dump(self, level=0):
|
||||||
nl = 1
|
nl = True
|
||||||
seqtypes = (tuple, list)
|
seqtypes = (tuple, list)
|
||||||
for op, av in self.data:
|
for op, av in self.data:
|
||||||
print(level*" " + op, end=' '); nl = 0
|
print(level*" " + op, end='')
|
||||||
if op == "in":
|
if op == IN:
|
||||||
# member sublanguage
|
# member sublanguage
|
||||||
print(); nl = 1
|
print()
|
||||||
for op, a in av:
|
for op, a in av:
|
||||||
print((level+1)*" " + op, a)
|
print((level+1)*" " + op, a)
|
||||||
elif op == "branch":
|
elif op == BRANCH:
|
||||||
print(); nl = 1
|
print()
|
||||||
i = 0
|
for i, a in enumerate(av[1]):
|
||||||
for a in av[1]:
|
if i:
|
||||||
if i > 0:
|
|
||||||
print(level*" " + "or")
|
print(level*" " + "or")
|
||||||
a.dump(level+1); nl = 1
|
a.dump(level+1)
|
||||||
i = i + 1
|
elif op == GROUPREF_EXISTS:
|
||||||
|
condgroup, item_yes, item_no = av
|
||||||
|
print('', condgroup)
|
||||||
|
item_yes.dump(level+1)
|
||||||
|
if item_no:
|
||||||
|
print(level*" " + "else")
|
||||||
|
item_no.dump(level+1)
|
||||||
elif isinstance(av, seqtypes):
|
elif isinstance(av, seqtypes):
|
||||||
|
nl = False
|
||||||
for a in av:
|
for a in av:
|
||||||
if isinstance(a, SubPattern):
|
if isinstance(a, SubPattern):
|
||||||
if not nl: print()
|
if not nl:
|
||||||
a.dump(level+1); nl = 1
|
print()
|
||||||
|
a.dump(level+1)
|
||||||
|
nl = True
|
||||||
else:
|
else:
|
||||||
print(a, end=' ') ; nl = 0
|
if not nl:
|
||||||
|
print(' ', end='')
|
||||||
|
print(a, end='')
|
||||||
|
nl = False
|
||||||
|
if not nl:
|
||||||
|
print()
|
||||||
else:
|
else:
|
||||||
print(av, end=' ') ; nl = 0
|
print('', av)
|
||||||
if not nl: print()
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return repr(self.data)
|
return repr(self.data)
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
|
|
|
@ -1203,16 +1203,33 @@ class ReTests(unittest.TestCase):
|
||||||
self.assertEqual(m.group(2), "y")
|
self.assertEqual(m.group(2), "y")
|
||||||
|
|
||||||
def test_debug_flag(self):
|
def test_debug_flag(self):
|
||||||
|
pat = r'(\.)(?:[ch]|py)(?(1)$|: )'
|
||||||
with captured_stdout() as out:
|
with captured_stdout() as out:
|
||||||
re.compile('foo', re.DEBUG)
|
re.compile(pat, re.DEBUG)
|
||||||
self.assertEqual(out.getvalue().splitlines(),
|
dump = '''\
|
||||||
['literal 102 ', 'literal 111 ', 'literal 111 '])
|
subpattern 1
|
||||||
|
literal 46
|
||||||
|
subpattern None
|
||||||
|
branch
|
||||||
|
in
|
||||||
|
literal 99
|
||||||
|
literal 104
|
||||||
|
or
|
||||||
|
literal 112
|
||||||
|
literal 121
|
||||||
|
subpattern None
|
||||||
|
groupref_exists 1
|
||||||
|
at at_end
|
||||||
|
else
|
||||||
|
literal 58
|
||||||
|
literal 32
|
||||||
|
'''
|
||||||
|
self.assertEqual(out.getvalue(), dump)
|
||||||
# Debug output is output again even a second time (bypassing
|
# Debug output is output again even a second time (bypassing
|
||||||
# the cache -- issue #20426).
|
# the cache -- issue #20426).
|
||||||
with captured_stdout() as out:
|
with captured_stdout() as out:
|
||||||
re.compile('foo', re.DEBUG)
|
re.compile(pat, re.DEBUG)
|
||||||
self.assertEqual(out.getvalue().splitlines(),
|
self.assertEqual(out.getvalue(), dump)
|
||||||
['literal 102 ', 'literal 111 ', 'literal 111 '])
|
|
||||||
|
|
||||||
def test_keyword_parameters(self):
|
def test_keyword_parameters(self):
|
||||||
# Issue #20283: Accepting the string keyword parameter.
|
# Issue #20283: Accepting the string keyword parameter.
|
||||||
|
|
|
@ -32,6 +32,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #22423: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
|
||||||
|
module.
|
||||||
|
|
||||||
- Issue #22423: Unhandled exception in thread no longer causes unhandled
|
- Issue #22423: Unhandled exception in thread no longer causes unhandled
|
||||||
AttributeError when sys.stderr is None.
|
AttributeError when sys.stderr is None.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue