|
17 | 17 | assert _sre.MAGIC == MAGIC, "SRE module mismatch"
|
18 | 18 |
|
19 | 19 | _LITERAL_CODES = {LITERAL, NOT_LITERAL}
|
20 |
| -_REPEATING_CODES = {MIN_REPEAT, MAX_REPEAT, POSSESSIVE_REPEAT} |
21 | 20 | _SUCCESS_CODES = {SUCCESS, FAILURE}
|
22 | 21 | _ASSERT_CODES = {ASSERT, ASSERT_NOT}
|
23 | 22 | _UNIT_CODES = _LITERAL_CODES | {ANY, IN}
|
24 | 23 |
|
| 24 | +_REPEATING_CODES = { |
| 25 | + MIN_REPEAT: (REPEAT, MIN_UNTIL, MIN_REPEAT_ONE), |
| 26 | + MAX_REPEAT: (REPEAT, MAX_UNTIL, REPEAT_ONE), |
| 27 | + POSSESSIVE_REPEAT: (POSSESSIVE_REPEAT, SUCCESS, POSSESSIVE_REPEAT_ONE), |
| 28 | +} |
| 29 | + |
25 | 30 | # Sets of lowercase characters which have the same uppercase.
|
26 | 31 | _equivalences = (
|
27 | 32 | # LATIN SMALL LETTER I, LATIN SMALL LETTER DOTLESS I
|
@@ -138,34 +143,21 @@ def _compile(code, pattern, flags):
|
138 | 143 | if flags & SRE_FLAG_TEMPLATE:
|
139 | 144 | raise error("internal: unsupported template operator %r" % (op,))
|
140 | 145 | if _simple(av[2]):
|
141 |
| - if op is MAX_REPEAT: |
142 |
| - emit(REPEAT_ONE) |
143 |
| - elif op is POSSESSIVE_REPEAT: |
144 |
| - emit(POSSESSIVE_REPEAT_ONE) |
145 |
| - else: |
146 |
| - emit(MIN_REPEAT_ONE) |
| 146 | + emit(REPEATING_CODES[op][2]) |
147 | 147 | skip = _len(code); emit(0)
|
148 | 148 | emit(av[0])
|
149 | 149 | emit(av[1])
|
150 | 150 | _compile(code, av[2], flags)
|
151 | 151 | emit(SUCCESS)
|
152 | 152 | code[skip] = _len(code) - skip
|
153 | 153 | else:
|
154 |
| - if op is POSSESSIVE_REPEAT: |
155 |
| - emit(POSSESSIVE_REPEAT) |
156 |
| - else: |
157 |
| - emit(REPEAT) |
| 154 | + emit(REPEATING_CODES[op][0]) |
158 | 155 | skip = _len(code); emit(0)
|
159 | 156 | emit(av[0])
|
160 | 157 | emit(av[1])
|
161 | 158 | _compile(code, av[2], flags)
|
162 | 159 | code[skip] = _len(code) - skip
|
163 |
| - if op is POSSESSIVE_REPEAT: |
164 |
| - emit(SUCCESS) |
165 |
| - elif op is MAX_REPEAT: |
166 |
| - emit(MAX_UNTIL) |
167 |
| - else: |
168 |
| - emit(MIN_UNTIL) |
| 160 | + emit(REPEATING_CODES[op][1]) |
169 | 161 | elif op is SUBPATTERN:
|
170 | 162 | group, add_flags, del_flags, p = av
|
171 | 163 | if group:
|
|
0 commit comments