@@ -111,6 +111,14 @@ def new_const(tok)
111
111
s ( :const , [ value ( tok ) . to_sym ] , source ( tok ) )
112
112
end
113
113
114
+ def new_colon2 ( lhs , tok , name )
115
+ s ( :colon2 , [ lhs , value ( name ) . to_sym ] , source ( tok ) )
116
+ end
117
+
118
+ def new_colon3 ( tok , name )
119
+ s ( :colon3 , [ value ( name ) . to_sym ] , source ( name ) )
120
+ end
121
+
114
122
def new_sym ( tok )
115
123
s ( :sym , [ value ( tok ) . to_sym ] , source ( tok ) )
116
124
end
@@ -119,6 +127,14 @@ def new_alias(kw, new, old)
119
127
s ( :alias , [ new , old ] , source ( kw ) )
120
128
end
121
129
130
+ def new_break ( kw , args = [ ] )
131
+ s ( :break , args , source ( kw ) )
132
+ end
133
+
134
+ def new_return ( kw , args = [ ] )
135
+ s ( :return , args , source ( kw ) )
136
+ end
137
+
122
138
def new_block ( stmt = nil )
123
139
s = s ( :block , [ ] , nil )
124
140
s << stmt if stmt
@@ -149,32 +165,29 @@ def new_body(compstmt, res, els, ens)
149
165
ens ? s ( :ensure , s , ens ) : s
150
166
end
151
167
152
- def new_def ( line , recv , name , args , body )
168
+ def new_def ( kw , recv , name , args , body , end_tok )
153
169
body = s ( :block , body ) if body . type != :block
154
170
body << s ( :nil ) if body . size == 1
155
- args . line = line
156
- s = s ( :def , recv , name . to_sym , args , body )
157
- s . line = line
158
- s . end_line = @lexer . line
159
- s
171
+
172
+ s ( :def , [ recv , value ( name ) . to_sym , args , body ] , source ( kw ) )
160
173
end
161
174
162
175
def new_class ( start , path , sup , body , endt )
163
176
s ( :class , [ path , sup , body ] , source ( start ) )
164
177
end
165
178
166
- def new_sclass ( expr , body )
167
- s ( :sclass , expr , body )
179
+ def new_sclass ( kw , expr , body , end_tok )
180
+ s ( :sclass , [ expr , body ] , source ( kw ) )
168
181
end
169
182
170
- def new_module ( path , body )
171
- s ( :module , path , body )
183
+ def new_module ( kw , path , body , end_tok )
184
+ s ( :module , [ path , body ] , source ( kw ) )
172
185
end
173
186
174
187
def new_iter ( args , body )
188
+ args ||= [ nil ]
175
189
s = s ( :iter , args )
176
190
s << body if body
177
- s . end_line = @lexer . line
178
191
s
179
192
end
180
193
@@ -199,8 +212,24 @@ def new_array(start, args, finish)
199
212
s ( :array , args , source ( start ) )
200
213
end
201
214
215
+ def new_hash ( open , assocs , close )
216
+ s ( :hash , [ *assocs ] , source ( open ) )
217
+ end
218
+
219
+ def new_not ( kw , expr )
220
+ s ( :not , [ expr ] , source ( kw ) )
221
+ end
222
+
223
+ def new_paren ( open , expr , close )
224
+ if expr . nil?
225
+ s ( :paren , [ s ( :nil , [ ] , source ( open ) ) ] , source ( open ) )
226
+ else
227
+ s ( :paren , [ expr ] , source ( open ) )
228
+ end
229
+ end
230
+
202
231
def new_args ( norm , opt , rest , block )
203
- res = s ( :args )
232
+ res = s ( :args , [ ] )
204
233
205
234
if norm
206
235
norm . each do |arg |
@@ -232,13 +261,13 @@ def new_args(norm, opt, rest, block)
232
261
end
233
262
234
263
def new_block_args ( norm , opt , rest , block )
235
- res = s ( :array )
264
+ res = [ ]
236
265
237
266
if norm
238
267
norm . each do |arg |
239
268
if arg . is_a? Symbol
240
269
scope . add_local arg
241
- res << s ( :lasgn , arg )
270
+ res << s ( :lasgn , [ arg ] )
242
271
else
243
272
res << arg
244
273
end
@@ -265,26 +294,48 @@ def new_block_args(norm, opt, rest, block)
265
294
266
295
res << opt if opt
267
296
268
- args = res . size == 2 && norm ? res [ 1 ] : s ( :masgn , res )
269
-
270
- if args . type == :array
271
- s ( :masgn , args )
272
- else
273
- args
274
- end
297
+ res . size == 1 && norm ? [ res [ 0 ] ] : [ s ( :masgn , [ s ( :array , res ) ] ) ]
275
298
end
276
299
277
300
def new_call ( recv , meth , args = [ ] )
278
301
s ( :call , [ recv , value ( meth ) . to_sym , s ( :arglist , args ) ] , source ( meth ) )
279
302
end
280
303
304
+ def new_binary_call ( recv , meth , arg )
305
+ new_call ( recv , meth , [ arg ] )
306
+ end
307
+
308
+ def new_unary_call ( op , recv )
309
+ new_call ( recv , op , [ ] )
310
+ end
311
+
312
+ def new_and ( lhs , tok , rhs )
313
+ s ( :and , [ lhs , rhs ] , source ( tok ) )
314
+ end
315
+
316
+ def new_or ( lhs , tok , rhs )
317
+ s ( :or , [ lhs , rhs ] , source ( tok ) )
318
+ end
319
+
320
+ def new_irange ( beg , op , finish )
321
+ s ( :irange , [ beg , finish ] , source ( op ) )
322
+ end
323
+
324
+ def new_erange ( beg , op , finish )
325
+ s ( :erange , [ beg , finish ] , source ( op ) )
326
+ end
327
+
281
328
def add_block_pass ( arglist , block )
282
329
arglist << block if block
283
330
arglist
284
331
end
285
332
333
+ def new_splat ( tok , value )
334
+ s ( :splat , [ value ] , source ( tok ) )
335
+ end
336
+
286
337
def new_op_asgn ( op , lhs , rhs )
287
- case op
338
+ case value ( op ) . to_sym
288
339
when :"||"
289
340
result = s ( :op_asgn_or , new_gettable ( lhs ) )
290
341
result << ( lhs << rhs )
@@ -301,6 +352,10 @@ def new_op_asgn(op, lhs, rhs)
301
352
result
302
353
end
303
354
355
+ def new_op_asgn1 ( lhs , args , op , rhs )
356
+ s ( :op_asgn1 , [ lhs , args , op , rhs ] , source ( op ) )
357
+ end
358
+
304
359
def new_assign ( lhs , tok , rhs )
305
360
case lhs . type
306
361
when :iasgn , :cdecl , :lasgn , :gasgn , :cvdecl , :nth_ref
@@ -345,13 +400,13 @@ def new_assignable(ref)
345
400
def new_gettable ( ref )
346
401
res = case ref . type
347
402
when :lasgn
348
- s ( :lvar , ref [ 1 ] )
403
+ s ( :lvar , [ ref [ 1 ] ] )
349
404
when :iasgn
350
- s ( :ivar , ref [ 1 ] )
405
+ s ( :ivar , [ ref [ 1 ] ] )
351
406
when :gasgn
352
- s ( :gvar , ref [ 1 ] )
407
+ s ( :gvar , [ ref [ 1 ] ] )
353
408
when :cvdecl
354
- s ( :cvar , ref [ 1 ] )
409
+ s ( :cvar , [ ref [ 1 ] ] )
355
410
else
356
411
raise "Bad new_gettable ref: #{ ref . type } "
357
412
end
@@ -385,14 +440,9 @@ def new_var_ref(ref)
385
440
end
386
441
end
387
442
388
- def new_super ( args )
389
- args = ( args || s ( :arglist ) )
390
-
391
- if args . type == :array
392
- args . type = :arglist
393
- end
394
-
395
- s ( :super , args )
443
+ def new_super ( kw , args )
444
+ args ||= [ ]
445
+ s ( :super , args , source ( kw ) )
396
446
end
397
447
398
448
def new_yield ( args )
@@ -424,9 +474,13 @@ def new_dsym(str)
424
474
str
425
475
end
426
476
477
+ def new_evstr ( str )
478
+ s ( :evstr , [ str ] )
479
+ end
480
+
427
481
def new_str ( str )
428
482
# cover empty strings
429
- return s ( :str , "" ) unless str
483
+ return s ( :str , [ "" ] ) unless str
430
484
# catch s(:str, "", other_str)
431
485
if str . size == 3 and str [ 1 ] == "" and str . type == :str
432
486
return str [ 2 ]
@@ -436,7 +490,7 @@ def new_str(str)
436
490
str
437
491
# top level evstr should be a dstr
438
492
elsif str . type == :evstr
439
- s ( :dstr , "" , str )
493
+ s ( :dstr , [ "" , str ] )
440
494
else
441
495
str
442
496
end
@@ -460,14 +514,18 @@ def str_append(str, str2)
460
514
return str unless str2
461
515
462
516
if str . type == :evstr
463
- str = s ( :dstr , "" , str )
517
+ str = s ( :dstr , [ "" , str ] )
464
518
elsif str . type == :str
465
- str = s ( :dstr , str [ 1 ] )
519
+ str = s ( :dstr , [ str [ 1 ] ] )
466
520
else
467
521
#puts str.type
468
522
end
469
523
str << str2
470
524
str
471
525
end
526
+
527
+ def new_str_content ( tok )
528
+ s ( :str , [ value ( tok ) ] , source ( tok ) )
529
+ end
472
530
end
473
531
end
0 commit comments