Skip to content

Commit 2889042

Browse files
RE: Pre-split the list of opcode names (GH-91859)
1. It makes them interned. 2. It allows to add comments to individual opcodes.
1 parent 92c1037 commit 2889042

File tree

1 file changed

+71
-70
lines changed

1 file changed

+71
-70
lines changed

Lib/re/_constants.py

+71-70
Original file line numberDiff line numberDiff line change
@@ -64,88 +64,89 @@ def __repr__(self):
6464

6565
MAXREPEAT = _NamedIntConstant(MAXREPEAT, 'MAXREPEAT')
6666

67-
def _makecodes(names):
68-
names = names.strip().split()
67+
def _makecodes(*names):
6968
items = [_NamedIntConstant(i, name) for i, name in enumerate(names)]
7069
globals().update({item.name: item for item in items})
7170
return items
7271

7372
# operators
74-
# failure=0 success=1 (just because it looks better that way :-)
75-
OPCODES = _makecodes("""
76-
FAILURE SUCCESS
77-
78-
ANY ANY_ALL
79-
ASSERT ASSERT_NOT
80-
AT
81-
BRANCH
82-
CALL
83-
CATEGORY
84-
CHARSET BIGCHARSET
85-
GROUPREF GROUPREF_EXISTS
86-
IN
87-
INFO
88-
JUMP
89-
LITERAL
90-
MARK
91-
MAX_UNTIL
92-
MIN_UNTIL
93-
NOT_LITERAL
94-
NEGATE
95-
RANGE
96-
REPEAT
97-
REPEAT_ONE
98-
SUBPATTERN
99-
MIN_REPEAT_ONE
100-
ATOMIC_GROUP
101-
POSSESSIVE_REPEAT
102-
POSSESSIVE_REPEAT_ONE
103-
104-
GROUPREF_IGNORE
105-
IN_IGNORE
106-
LITERAL_IGNORE
107-
NOT_LITERAL_IGNORE
108-
109-
GROUPREF_LOC_IGNORE
110-
IN_LOC_IGNORE
111-
LITERAL_LOC_IGNORE
112-
NOT_LITERAL_LOC_IGNORE
113-
114-
GROUPREF_UNI_IGNORE
115-
IN_UNI_IGNORE
116-
LITERAL_UNI_IGNORE
117-
NOT_LITERAL_UNI_IGNORE
118-
RANGE_UNI_IGNORE
119-
120-
MIN_REPEAT MAX_REPEAT
121-
""")
73+
OPCODES = _makecodes(
74+
# failure=0 success=1 (just because it looks better that way :-)
75+
'FAILURE', 'SUCCESS',
76+
77+
'ANY', 'ANY_ALL',
78+
'ASSERT', 'ASSERT_NOT',
79+
'AT',
80+
'BRANCH',
81+
'CALL',
82+
'CATEGORY',
83+
'CHARSET', 'BIGCHARSET',
84+
'GROUPREF', 'GROUPREF_EXISTS',
85+
'IN',
86+
'INFO',
87+
'JUMP',
88+
'LITERAL',
89+
'MARK',
90+
'MAX_UNTIL',
91+
'MIN_UNTIL',
92+
'NOT_LITERAL',
93+
'NEGATE',
94+
'RANGE',
95+
'REPEAT',
96+
'REPEAT_ONE',
97+
'SUBPATTERN',
98+
'MIN_REPEAT_ONE',
99+
'ATOMIC_GROUP',
100+
'POSSESSIVE_REPEAT',
101+
'POSSESSIVE_REPEAT_ONE',
102+
103+
'GROUPREF_IGNORE',
104+
'IN_IGNORE',
105+
'LITERAL_IGNORE',
106+
'NOT_LITERAL_IGNORE',
107+
108+
'GROUPREF_LOC_IGNORE',
109+
'IN_LOC_IGNORE',
110+
'LITERAL_LOC_IGNORE',
111+
'NOT_LITERAL_LOC_IGNORE',
112+
113+
'GROUPREF_UNI_IGNORE',
114+
'IN_UNI_IGNORE',
115+
'LITERAL_UNI_IGNORE',
116+
'NOT_LITERAL_UNI_IGNORE',
117+
'RANGE_UNI_IGNORE',
118+
119+
# The following opcodes are only occurred in the parser output,
120+
# but not in the compiled code.
121+
'MIN_REPEAT', 'MAX_REPEAT',
122+
)
122123
del OPCODES[-2:] # remove MIN_REPEAT and MAX_REPEAT
123124

124125
# positions
125-
ATCODES = _makecodes("""
126-
AT_BEGINNING AT_BEGINNING_LINE AT_BEGINNING_STRING
127-
AT_BOUNDARY AT_NON_BOUNDARY
128-
AT_END AT_END_LINE AT_END_STRING
126+
ATCODES = _makecodes(
127+
'AT_BEGINNING', 'AT_BEGINNING_LINE', 'AT_BEGINNING_STRING',
128+
'AT_BOUNDARY', 'AT_NON_BOUNDARY',
129+
'AT_END', 'AT_END_LINE', 'AT_END_STRING',
129130

130-
AT_LOC_BOUNDARY AT_LOC_NON_BOUNDARY
131+
'AT_LOC_BOUNDARY', 'AT_LOC_NON_BOUNDARY',
131132

132-
AT_UNI_BOUNDARY AT_UNI_NON_BOUNDARY
133-
""")
133+
'AT_UNI_BOUNDARY', 'AT_UNI_NON_BOUNDARY',
134+
)
134135

135136
# categories
136-
CHCODES = _makecodes("""
137-
CATEGORY_DIGIT CATEGORY_NOT_DIGIT
138-
CATEGORY_SPACE CATEGORY_NOT_SPACE
139-
CATEGORY_WORD CATEGORY_NOT_WORD
140-
CATEGORY_LINEBREAK CATEGORY_NOT_LINEBREAK
141-
142-
CATEGORY_LOC_WORD CATEGORY_LOC_NOT_WORD
143-
144-
CATEGORY_UNI_DIGIT CATEGORY_UNI_NOT_DIGIT
145-
CATEGORY_UNI_SPACE CATEGORY_UNI_NOT_SPACE
146-
CATEGORY_UNI_WORD CATEGORY_UNI_NOT_WORD
147-
CATEGORY_UNI_LINEBREAK CATEGORY_UNI_NOT_LINEBREAK
148-
""")
137+
CHCODES = _makecodes(
138+
'CATEGORY_DIGIT', 'CATEGORY_NOT_DIGIT',
139+
'CATEGORY_SPACE', 'CATEGORY_NOT_SPACE',
140+
'CATEGORY_WORD', 'CATEGORY_NOT_WORD',
141+
'CATEGORY_LINEBREAK', 'CATEGORY_NOT_LINEBREAK',
142+
143+
'CATEGORY_LOC_WORD', 'CATEGORY_LOC_NOT_WORD',
144+
145+
'CATEGORY_UNI_DIGIT', 'CATEGORY_UNI_NOT_DIGIT',
146+
'CATEGORY_UNI_SPACE', 'CATEGORY_UNI_NOT_SPACE',
147+
'CATEGORY_UNI_WORD', 'CATEGORY_UNI_NOT_WORD',
148+
'CATEGORY_UNI_LINEBREAK', 'CATEGORY_UNI_NOT_LINEBREAK',
149+
)
149150

150151

151152
# replacement operations for "ignore case" mode

0 commit comments

Comments
 (0)