@@ -50,7 +50,7 @@ def on_nl(tok, data)
5050 @continue = false
5151 @lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
5252 end
53- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
53+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
5454 end
5555
5656 def on_ignored_nl ( tok , data )
@@ -61,7 +61,7 @@ def on_ignored_nl(tok, data)
6161 @continue = false
6262 @lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
6363 end
64- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
64+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
6565 end
6666
6767 def on_op ( tok , data )
@@ -103,7 +103,7 @@ def on_op(tok, data)
103103 @lex_state = EXPR_BEG
104104 end
105105 end
106- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
106+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
107107 end
108108
109109 def on_kw ( tok , data )
@@ -132,54 +132,54 @@ def on_kw(tok, data)
132132 @lex_state = EXPR_END
133133 end
134134 end
135- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
135+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
136136 end
137137
138138 def on_tstring_beg ( tok , data )
139139 @lex_state = EXPR_BEG
140- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
140+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
141141 end
142142
143143 def on_tstring_end ( tok , data )
144144 @lex_state = EXPR_END | EXPR_ENDARG
145- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
145+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
146146 end
147147
148148 def on_CHAR ( tok , data )
149149 @lex_state = EXPR_END
150- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
150+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
151151 end
152152
153153 def on_period ( tok , data )
154154 @lex_state = EXPR_DOT
155- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
155+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
156156 end
157157
158158 def on_int ( tok , data )
159159 @lex_state = EXPR_END | EXPR_ENDARG
160- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
160+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
161161 end
162162
163163 def on_float ( tok , data )
164164 @lex_state = EXPR_END | EXPR_ENDARG
165- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
165+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
166166 end
167167
168168 def on_rational ( tok , data )
169169 @lex_state = EXPR_END | EXPR_ENDARG
170- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
170+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
171171 end
172172
173173 def on_imaginary ( tok , data )
174174 @lex_state = EXPR_END | EXPR_ENDARG
175- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
175+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
176176 end
177177
178178 def on_symbeg ( tok , data )
179179 @lex_state = EXPR_FNAME
180180 @continue = true
181181 @in_fname = true
182- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
182+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
183183 end
184184
185185 private def on_variables ( event , tok , data )
@@ -198,7 +198,7 @@ def on_symbeg(tok, data)
198198 else
199199 @lex_state = EXPR_CMDARG
200200 end
201- @callback . call ( Token . new ( lineno , column , event , tok , @lex_state ) )
201+ data << Token . new ( lineno , column , event , tok , @lex_state )
202202 end
203203
204204 def on_ident ( tok , data )
@@ -227,32 +227,32 @@ def on_backref(tok, data)
227227
228228 def on_lparen ( tok , data )
229229 @lex_state = EXPR_LABEL | EXPR_BEG
230- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
230+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
231231 end
232232
233233 def on_rparen ( tok , data )
234234 @lex_state = EXPR_ENDFN
235- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
235+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
236236 end
237237
238238 def on_lbrace ( tok , data )
239239 @lex_state = EXPR_LABEL | EXPR_BEG
240- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
240+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
241241 end
242242
243243 def on_rbrace ( tok , data )
244244 @lex_state = EXPR_ENDARG
245- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
245+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
246246 end
247247
248248 def on_lbracket ( tok , data )
249249 @lex_state = EXPR_LABEL | EXPR_BEG
250- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
250+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
251251 end
252252
253253 def on_rbracket ( tok , data )
254254 @lex_state = EXPR_ENDARG
255- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
255+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
256256 end
257257
258258 def on_const ( tok , data )
@@ -264,41 +264,43 @@ def on_const(tok, data)
264264 else
265265 @lex_state = EXPR_CMDARG
266266 end
267- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
267+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
268268 end
269269
270270 def on_sp ( tok , data )
271- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
271+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
272272 end
273273
274274 def on_comma ( tok , data )
275275 @lex_state = EXPR_BEG | EXPR_LABEL if ( EXPR_ARG_ANY & @lex_state ) != 0
276- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
276+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
277277 end
278278
279279 def on_comment ( tok , data )
280280 @lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
281- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
281+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
282282 end
283283
284284 def on_ignored_sp ( tok , data )
285285 @lex_state = EXPR_BEG unless ( EXPR_LABEL & @lex_state ) != 0
286- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
286+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
287+ end
288+
289+ def on_heredoc_beg ( tok , data )
290+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
291+ @lex_state = EXPR_END
292+ data
287293 end
288294
289295 def on_heredoc_end ( tok , data )
290- @callback . call ( Token . new ( lineno , column , __method__ , tok , @lex_state ) )
296+ data << Token . new ( lineno , column , __method__ , tok , @lex_state )
291297 @lex_state = EXPR_BEG
298+ data
292299 end
293300
294301 def on_default ( event , tok , data )
295302 reset
296- @callback . call ( Token . new ( lineno , column , event , tok , @lex_state ) )
297- end
298-
299- def each ( &block )
300- @callback = block
301- parse
303+ data << Token . new ( lineno , column , event , tok , @lex_state )
302304 end
303305 end unless RIPPER_HAS_LEX_STATE
304306
@@ -308,21 +310,17 @@ def initialize(code)
308310 end
309311
310312 def on_default ( event , tok , data )
311- @callback . call ( Token . new ( lineno , column , event , tok , state ) )
312- end
313-
314- def each ( &block )
315- @callback = block
316- parse
313+ data << Token . new ( lineno , column , event , tok , state )
317314 end
318315 end if RIPPER_HAS_LEX_STATE
319316
320317 def get_squashed_tk
321318 if @buf . empty?
322- tk = @inner_lex_enumerator . next
319+ tk = @tokens . shift
323320 else
324321 tk = @buf . shift
325322 end
323+ return nil if tk . nil?
326324 case tk [ :kind ]
327325 when :on_symbeg then
328326 tk = get_symbol_tk ( tk )
@@ -472,7 +470,7 @@ def get_squashed_tk
472470 string = ''
473471 start_tk = nil
474472 prev_tk = nil
475- until heredoc_end? ( heredoc_name , indent , tk = @inner_lex_enumerator . next ) do
473+ until heredoc_end? ( heredoc_name , indent , tk = @tokens . shift ) do
476474 start_tk = tk unless start_tk
477475 if ( prev_tk . nil? or "\n " == prev_tk [ :text ] [ -1 ] ) and 0 != tk [ :char_no ]
478476 string = string + ( ' ' * tk [ :char_no ] )
@@ -570,11 +568,7 @@ def initialize(code)
570568 @buf = [ ]
571569 @heredoc_queue = [ ]
572570 @inner_lex = InnerStateLex . new ( code )
573- @inner_lex_enumerator = Enumerator . new do |y |
574- @inner_lex . each do |tk |
575- y << tk
576- end
577- end
571+ @tokens = @inner_lex . parse ( [ ] )
578572 end
579573
580574 def self . parse ( code )
0 commit comments