Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
560c578d
Commit
560c578d
authored
Sep 21, 2014
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #22423: Fixed debugging output of the GROUPREF_EXISTS opcode in the re
module.
parents
68df7c23
44dae8bd
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
54 additions
and
22 deletions
+54
-22
Lib/sre_parse.py
Lib/sre_parse.py
+28
-16
Lib/test/test_re.py
Lib/test/test_re.py
+23
-6
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/sre_parse.py
View file @
560c578d
...
...
@@ -94,33 +94,45 @@ class SubPattern:
self.data = data
self.width = None
def dump(self, level=0):
nl =
1
nl =
True
seqtypes = (tuple, list)
for op, av in self.data:
print(level*"
" + op, end='
'); nl = 0
if op ==
"
in
"
:
print(level*"
" + op, end='
')
if op ==
IN
:
# member sublanguage
print()
; nl = 1
print()
for op, a in av:
print((level+1)*"
" + op, a)
elif op == "
branch
":
print(); nl = 1
i = 0
for a in av[1]:
if i > 0:
elif op == BRANCH:
print()
for i, a in enumerate(av[1]):
if i:
print(level*"
" + "
or
")
a.dump(level+1); nl = 1
i = i + 1
a.dump(level+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):
nl = False
for a in av:
if isinstance(a, SubPattern):
if not nl: print()
a.dump(level+1); nl = 1
if not nl:
print()
a.dump(level+1)
nl = True
else:
print(a, end=' ') ; nl = 0
if not nl:
print(' ', end='')
print(a, end='')
nl = False
if not nl:
print()
else:
print(av, end=' ') ; nl = 0
if not nl: print()
print('', av)
def __repr__(self):
return repr(self.data)
def __len__(self):
...
...
Lib/test/test_re.py
View file @
560c578d
...
...
@@ -1203,16 +1203,33 @@ class ReTests(unittest.TestCase):
self.assertEqual(m.group(2), "
y
")
def test_debug_flag(self):
pat = r'(
\
.)(?:[ch]|py)(?(
1
)$|: )'
with captured_stdout() as out:
re.compile('foo', re.DEBUG)
self.assertEqual(out.getvalue().splitlines(),
['literal 102 ', 'literal 111 ', 'literal 111 '])
re.compile(pat, re.DEBUG)
dump = '''
\
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
# the cache -- issue #20426).
with captured_stdout() as out:
re.compile('foo', re.DEBUG)
self.assertEqual(out.getvalue().splitlines(),
['literal 102 ', 'literal 111 ', 'literal 111 '])
re.compile(pat, re.DEBUG)
self.assertEqual(out.getvalue(), dump)
def test_keyword_parameters(self):
# Issue #20283: Accepting the string keyword parameter.
...
...
Misc/NEWS
View file @
560c578d
...
...
@@ -137,6 +137,9 @@ Core and Builtins
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
AttributeError
when
sys
.
stderr
is
None
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment