28
28
POSSESSIVE_REPEAT : (POSSESSIVE_REPEAT , SUCCESS , POSSESSIVE_REPEAT_ONE ),
29
29
}
30
30
31
- class _CompileData :
32
- __slots__ = ('code' , 'repeat_count' )
33
- def __init__ (self ):
34
- self .code = []
35
- self .repeat_count = 0
36
-
37
31
def _combine_flags (flags , add_flags , del_flags ,
38
32
TYPE_FLAGS = _parser .TYPE_FLAGS ):
39
33
if add_flags & TYPE_FLAGS :
40
34
flags &= ~ TYPE_FLAGS
41
35
return (flags | add_flags ) & ~ del_flags
42
36
43
- def _compile (data , pattern , flags ):
37
+ def _compile (code , pattern , flags ):
44
38
# internal: compile a (sub)pattern
45
- code = data .code
46
39
emit = code .append
47
40
_len = len
48
41
LITERAL_CODES = _LITERAL_CODES
@@ -115,19 +108,15 @@ def _compile(data, pattern, flags):
115
108
skip = _len (code ); emit (0 )
116
109
emit (av [0 ])
117
110
emit (av [1 ])
118
- _compile (data , av [2 ], flags )
111
+ _compile (code , av [2 ], flags )
119
112
emit (SUCCESS )
120
113
code [skip ] = _len (code ) - skip
121
114
else :
122
115
emit (REPEATING_CODES [op ][0 ])
123
116
skip = _len (code ); emit (0 )
124
117
emit (av [0 ])
125
118
emit (av [1 ])
126
- # now op is in (MIN_REPEAT, MAX_REPEAT, POSSESSIVE_REPEAT)
127
- if op != POSSESSIVE_REPEAT :
128
- emit (data .repeat_count )
129
- data .repeat_count += 1
130
- _compile (data , av [2 ], flags )
119
+ _compile (code , av [2 ], flags )
131
120
code [skip ] = _len (code ) - skip
132
121
emit (REPEATING_CODES [op ][1 ])
133
122
elif op is SUBPATTERN :
@@ -136,7 +125,7 @@ def _compile(data, pattern, flags):
136
125
emit (MARK )
137
126
emit ((group - 1 )* 2 )
138
127
# _compile_info(code, p, _combine_flags(flags, add_flags, del_flags))
139
- _compile (data , p , _combine_flags (flags , add_flags , del_flags ))
128
+ _compile (code , p , _combine_flags (flags , add_flags , del_flags ))
140
129
if group :
141
130
emit (MARK )
142
131
emit ((group - 1 )* 2 + 1 )
@@ -148,7 +137,7 @@ def _compile(data, pattern, flags):
148
137
# pop their stack if they reach it
149
138
emit (ATOMIC_GROUP )
150
139
skip = _len (code ); emit (0 )
151
- _compile (data , av , flags )
140
+ _compile (code , av , flags )
152
141
emit (SUCCESS )
153
142
code [skip ] = _len (code ) - skip
154
143
elif op in SUCCESS_CODES :
@@ -163,7 +152,7 @@ def _compile(data, pattern, flags):
163
152
if lo != hi :
164
153
raise error ("look-behind requires fixed-width pattern" )
165
154
emit (lo ) # look behind
166
- _compile (data , av [1 ], flags )
155
+ _compile (code , av [1 ], flags )
167
156
emit (SUCCESS )
168
157
code [skip ] = _len (code ) - skip
169
158
elif op is AT :
@@ -182,7 +171,7 @@ def _compile(data, pattern, flags):
182
171
for av in av [1 ]:
183
172
skip = _len (code ); emit (0 )
184
173
# _compile_info(code, av, flags)
185
- _compile (data , av , flags )
174
+ _compile (code , av , flags )
186
175
emit (JUMP )
187
176
tailappend (_len (code )); emit (0 )
188
177
code [skip ] = _len (code ) - skip
@@ -210,12 +199,12 @@ def _compile(data, pattern, flags):
210
199
emit (op )
211
200
emit (av [0 ]- 1 )
212
201
skipyes = _len (code ); emit (0 )
213
- _compile (data , av [1 ], flags )
202
+ _compile (code , av [1 ], flags )
214
203
if av [2 ]:
215
204
emit (JUMP )
216
205
skipno = _len (code ); emit (0 )
217
206
code [skipyes ] = _len (code ) - skipyes + 1
218
- _compile (data , av [2 ], flags )
207
+ _compile (code , av [2 ], flags )
219
208
code [skipno ] = _len (code ) - skipno
220
209
else :
221
210
code [skipyes ] = _len (code ) - skipyes + 1
@@ -582,17 +571,17 @@ def isstring(obj):
582
571
def _code (p , flags ):
583
572
584
573
flags = p .state .flags | flags
585
- data = _CompileData ()
574
+ code = []
586
575
587
576
# compile info block
588
- _compile_info (data . code , p , flags )
577
+ _compile_info (code , p , flags )
589
578
590
579
# compile the pattern
591
- _compile (data , p .data , flags )
580
+ _compile (code , p .data , flags )
592
581
593
- data . code .append (SUCCESS )
582
+ code .append (SUCCESS )
594
583
595
- return data
584
+ return code
596
585
597
586
def _hex_code (code ):
598
587
return '[%s]' % ', ' .join ('%#0*x' % (_sre .CODESIZE * 2 + 2 , x ) for x in code )
@@ -693,21 +682,14 @@ def print_2(*args):
693
682
else :
694
683
print_ (FAILURE )
695
684
i += 1
696
- elif op in (REPEAT_ONE , MIN_REPEAT_ONE ,
685
+ elif op in (REPEAT , REPEAT_ONE , MIN_REPEAT_ONE ,
697
686
POSSESSIVE_REPEAT , POSSESSIVE_REPEAT_ONE ):
698
687
skip , min , max = code [i : i + 3 ]
699
688
if max == MAXREPEAT :
700
689
max = 'MAXREPEAT'
701
690
print_ (op , skip , min , max , to = i + skip )
702
691
dis_ (i + 3 , i + skip )
703
692
i += skip
704
- elif op is REPEAT :
705
- skip , min , max , repeat_index = code [i : i + 4 ]
706
- if max == MAXREPEAT :
707
- max = 'MAXREPEAT'
708
- print_ (op , skip , min , max , repeat_index , to = i + skip )
709
- dis_ (i + 4 , i + skip )
710
- i += skip
711
693
elif op is GROUPREF_EXISTS :
712
694
arg , skip = code [i : i + 2 ]
713
695
print_ (op , arg , skip , to = i + skip )
@@ -762,11 +744,11 @@ def compile(p, flags=0):
762
744
else :
763
745
pattern = None
764
746
765
- data = _code (p , flags )
747
+ code = _code (p , flags )
766
748
767
749
if flags & SRE_FLAG_DEBUG :
768
750
print ()
769
- dis (data . code )
751
+ dis (code )
770
752
771
753
# map in either direction
772
754
groupindex = p .state .groupdict
@@ -775,6 +757,7 @@ def compile(p, flags=0):
775
757
indexgroup [i ] = k
776
758
777
759
return _sre .compile (
778
- pattern , flags | p .state .flags , data .code ,
779
- p .state .groups - 1 , groupindex , tuple (indexgroup ),
780
- data .repeat_count )
760
+ pattern , flags | p .state .flags , code ,
761
+ p .state .groups - 1 ,
762
+ groupindex , tuple (indexgroup )
763
+ )
0 commit comments