parser 2.7.1.5 → 2.7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/lib/parser/current.rb +1 -1
  3. data/lib/parser/meta.rb +2 -2
  4. data/lib/parser/ruby28.rb +8047 -0
  5. data/lib/parser/version.rb +1 -1
  6. data/parser.gemspec +1 -20
  7. metadata +7 -96
  8. data/.travis.yml +0 -41
  9. data/.yardopts +0 -21
  10. data/CHANGELOG.md +0 -1137
  11. data/CONTRIBUTING.md +0 -17
  12. data/Gemfile +0 -10
  13. data/LICENSE.txt +0 -25
  14. data/README.md +0 -309
  15. data/Rakefile +0 -167
  16. data/ci/run_rubocop_specs +0 -14
  17. data/doc/AST_FORMAT.md +0 -2284
  18. data/doc/CUSTOMIZATION.md +0 -37
  19. data/doc/INTERNALS.md +0 -21
  20. data/doc/css/.gitkeep +0 -0
  21. data/doc/css/common.css +0 -68
  22. data/lib/parser/lexer.rl +0 -2550
  23. data/lib/parser/macruby.y +0 -2208
  24. data/lib/parser/ruby18.y +0 -1936
  25. data/lib/parser/ruby19.y +0 -2185
  26. data/lib/parser/ruby20.y +0 -2363
  27. data/lib/parser/ruby21.y +0 -2364
  28. data/lib/parser/ruby22.y +0 -2371
  29. data/lib/parser/ruby23.y +0 -2377
  30. data/lib/parser/ruby24.y +0 -2415
  31. data/lib/parser/ruby25.y +0 -2412
  32. data/lib/parser/ruby26.y +0 -2420
  33. data/lib/parser/ruby27.y +0 -2949
  34. data/lib/parser/ruby30.y +0 -3048
  35. data/lib/parser/rubymotion.y +0 -2192
  36. data/test/bug_163/fixtures/input.rb +0 -5
  37. data/test/bug_163/fixtures/output.rb +0 -5
  38. data/test/bug_163/rewriter.rb +0 -20
  39. data/test/helper.rb +0 -103
  40. data/test/parse_helper.rb +0 -328
  41. data/test/racc_coverage_helper.rb +0 -133
  42. data/test/test_ast_processor.rb +0 -32
  43. data/test/test_base.rb +0 -31
  44. data/test/test_current.rb +0 -31
  45. data/test/test_diagnostic.rb +0 -95
  46. data/test/test_diagnostic_engine.rb +0 -59
  47. data/test/test_encoding.rb +0 -99
  48. data/test/test_lexer.rb +0 -3617
  49. data/test/test_lexer_stack_state.rb +0 -78
  50. data/test/test_meta.rb +0 -12
  51. data/test/test_parse_helper.rb +0 -83
  52. data/test/test_parser.rb +0 -9986
  53. data/test/test_runner_parse.rb +0 -56
  54. data/test/test_runner_rewrite.rb +0 -47
  55. data/test/test_source_buffer.rb +0 -165
  56. data/test/test_source_comment.rb +0 -36
  57. data/test/test_source_comment_associator.rb +0 -399
  58. data/test/test_source_map.rb +0 -14
  59. data/test/test_source_range.rb +0 -192
  60. data/test/test_source_rewriter.rb +0 -541
  61. data/test/test_source_rewriter_action.rb +0 -46
  62. data/test/test_source_tree_rewriter.rb +0 -361
  63. data/test/test_static_environment.rb +0 -45
  64. data/test/using_tree_rewriter/fixtures/input.rb +0 -3
  65. data/test/using_tree_rewriter/fixtures/output.rb +0 -3
  66. data/test/using_tree_rewriter/using_tree_rewriter.rb +0 -9
@@ -1,2363 +0,0 @@
1
- class Parser::Ruby20
2
-
3
- token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
4
- kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
5
- kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER
6
- kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD
7
- kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
8
- k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
9
- tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
10
- tUPLUS tUMINUS tUNARY_NUM tPOW tCMP tEQ tEQQ tNEQ
11
- tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF
12
- tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN
13
- tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE
14
- tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE
15
- tDSTAR tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY
16
- tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tREGEXP_OPT
17
- tWORDS_BEG tQWORDS_BEG tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DBEG
18
- tSTRING_DVAR tSTRING_END tSTRING_DEND tSTRING tSYMBOL
19
- tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tCHARACTER
20
-
21
- prechigh
22
- right tBANG tTILDE tUPLUS
23
- right tPOW
24
- right tUNARY_NUM tUMINUS
25
- left tSTAR2 tDIVIDE tPERCENT
26
- left tPLUS tMINUS
27
- left tLSHFT tRSHFT
28
- left tAMPER2
29
- left tPIPE tCARET
30
- left tGT tGEQ tLT tLEQ
31
- nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
32
- left tANDOP
33
- left tOROP
34
- nonassoc tDOT2 tDOT3
35
- right tEH tCOLON
36
- left kRESCUE_MOD
37
- right tEQL tOP_ASGN
38
- nonassoc kDEFINED
39
- right kNOT
40
- left kOR kAND
41
- nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD
42
- nonassoc tLBRACE_ARG
43
- nonassoc tLOWEST
44
- preclow
45
-
46
- rule
47
-
48
- program: top_compstmt
49
-
50
- top_compstmt: top_stmts opt_terms
51
- {
52
- result = @builder.compstmt(val[0])
53
- }
54
-
55
- top_stmts: # nothing
56
- {
57
- result = []
58
- }
59
- | top_stmt
60
- {
61
- result = [ val[0] ]
62
- }
63
- | top_stmts terms top_stmt
64
- {
65
- result = val[0] << val[2]
66
- }
67
- | error top_stmt
68
- {
69
- result = [ val[1] ]
70
- }
71
-
72
- top_stmt: stmt
73
- | klBEGIN tLCURLY top_compstmt tRCURLY
74
- {
75
- result = @builder.preexe(val[0], val[1], val[2], val[3])
76
- }
77
-
78
- bodystmt: compstmt opt_rescue opt_else opt_ensure
79
- {
80
- rescue_bodies = val[1]
81
- else_t, else_ = val[2]
82
- ensure_t, ensure_ = val[3]
83
-
84
- if rescue_bodies.empty? && !else_t.nil?
85
- diagnostic :warning, :useless_else, nil, else_t
86
- end
87
-
88
- result = @builder.begin_body(val[0],
89
- rescue_bodies,
90
- else_t, else_,
91
- ensure_t, ensure_)
92
- }
93
-
94
- compstmt: stmts opt_terms
95
- {
96
- result = @builder.compstmt(val[0])
97
- }
98
-
99
- stmts: # nothing
100
- {
101
- result = []
102
- }
103
- | stmt_or_begin
104
- {
105
- result = [ val[0] ]
106
- }
107
- | stmts terms stmt_or_begin
108
- {
109
- result = val[0] << val[2]
110
- }
111
- | error stmt
112
- {
113
- result = [ val[1] ]
114
- }
115
-
116
- stmt_or_begin: stmt
117
- | klBEGIN tLCURLY top_compstmt tRCURLY
118
- {
119
- if @context.indirectly_in_def?
120
- diagnostic :error, :begin_in_method, nil, val[0]
121
- end
122
-
123
- result = @builder.preexe(val[0], val[1], val[2], val[3])
124
- }
125
-
126
- stmt: kALIAS fitem
127
- {
128
- @lexer.state = :expr_fname
129
- }
130
- fitem
131
- {
132
- result = @builder.alias(val[0], val[1], val[3])
133
- }
134
- | kALIAS tGVAR tGVAR
135
- {
136
- result = @builder.alias(val[0],
137
- @builder.gvar(val[1]),
138
- @builder.gvar(val[2]))
139
- }
140
- | kALIAS tGVAR tBACK_REF
141
- {
142
- result = @builder.alias(val[0],
143
- @builder.gvar(val[1]),
144
- @builder.back_ref(val[2]))
145
- }
146
- | kALIAS tGVAR tNTH_REF
147
- {
148
- diagnostic :error, :nth_ref_alias, nil, val[2]
149
- }
150
- | kUNDEF undef_list
151
- {
152
- result = @builder.undef_method(val[0], val[1])
153
- }
154
- | stmt kIF_MOD expr_value
155
- {
156
- result = @builder.condition_mod(val[0], nil,
157
- val[1], val[2])
158
- }
159
- | stmt kUNLESS_MOD expr_value
160
- {
161
- result = @builder.condition_mod(nil, val[0],
162
- val[1], val[2])
163
- }
164
- | stmt kWHILE_MOD expr_value
165
- {
166
- result = @builder.loop_mod(:while, val[0], val[1], val[2])
167
- }
168
- | stmt kUNTIL_MOD expr_value
169
- {
170
- result = @builder.loop_mod(:until, val[0], val[1], val[2])
171
- }
172
- | stmt kRESCUE_MOD stmt
173
- {
174
- rescue_body = @builder.rescue_body(val[1],
175
- nil, nil, nil,
176
- nil, val[2])
177
-
178
- result = @builder.begin_body(val[0], [ rescue_body ])
179
- }
180
- | klEND tLCURLY compstmt tRCURLY
181
- {
182
- result = @builder.postexe(val[0], val[1], val[2], val[3])
183
- }
184
- | command_asgn
185
- | mlhs tEQL command_call
186
- {
187
- result = @builder.multi_assign(val[0], val[1], val[2])
188
- }
189
- | var_lhs tOP_ASGN command_call
190
- {
191
- result = @builder.op_assign(val[0], val[1], val[2])
192
- }
193
- | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call
194
- {
195
- result = @builder.op_assign(
196
- @builder.index(
197
- val[0], val[1], val[2], val[3]),
198
- val[4], val[5])
199
- }
200
- | primary_value tDOT tIDENTIFIER tOP_ASGN command_call
201
- {
202
- result = @builder.op_assign(
203
- @builder.call_method(
204
- val[0], val[1], val[2]),
205
- val[3], val[4])
206
- }
207
- | primary_value tDOT tCONSTANT tOP_ASGN command_call
208
- {
209
- result = @builder.op_assign(
210
- @builder.call_method(
211
- val[0], val[1], val[2]),
212
- val[3], val[4])
213
- }
214
- | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call
215
- {
216
- const = @builder.const_op_assignable(
217
- @builder.const_fetch(val[0], val[1], val[2]))
218
- result = @builder.op_assign(const, val[3], val[4])
219
- }
220
- | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
221
- {
222
- result = @builder.op_assign(
223
- @builder.call_method(
224
- val[0], val[1], val[2]),
225
- val[3], val[4])
226
- }
227
- | backref tOP_ASGN command_call
228
- {
229
- @builder.op_assign(val[0], val[1], val[2])
230
- }
231
- | lhs tEQL mrhs
232
- {
233
- result = @builder.assign(val[0], val[1],
234
- @builder.array(nil, val[2], nil))
235
- }
236
- | mlhs tEQL arg_value
237
- {
238
- result = @builder.multi_assign(val[0], val[1], val[2])
239
- }
240
- | mlhs tEQL mrhs
241
- {
242
- result = @builder.multi_assign(val[0], val[1],
243
- @builder.array(nil, val[2], nil))
244
- }
245
- | expr
246
-
247
- command_asgn: lhs tEQL command_call
248
- {
249
- result = @builder.assign(val[0], val[1], val[2])
250
- }
251
- | lhs tEQL command_asgn
252
- {
253
- result = @builder.assign(val[0], val[1], val[2])
254
- }
255
-
256
- expr: command_call
257
- | expr kAND expr
258
- {
259
- result = @builder.logical_op(:and, val[0], val[1], val[2])
260
- }
261
- | expr kOR expr
262
- {
263
- result = @builder.logical_op(:or, val[0], val[1], val[2])
264
- }
265
- | kNOT opt_nl expr
266
- {
267
- result = @builder.not_op(val[0], nil, val[2], nil)
268
- }
269
- | tBANG command_call
270
- {
271
- result = @builder.not_op(val[0], nil, val[1], nil)
272
- }
273
- | arg
274
-
275
- expr_value: expr
276
-
277
- command_call: command
278
- | block_command
279
-
280
- block_command: block_call
281
- | block_call dot_or_colon operation2 command_args
282
- {
283
- result = @builder.call_method(val[0], val[1], val[2],
284
- nil, val[3], nil)
285
- }
286
-
287
- cmd_brace_block: tLBRACE_ARG
288
- {
289
- @static_env.extend_dynamic
290
- @context.push(:block)
291
- }
292
- opt_block_param compstmt tRCURLY
293
- {
294
- result = [ val[0], val[2], val[3], val[4] ]
295
-
296
- @static_env.unextend
297
- @context.pop
298
- }
299
-
300
- fcall: operation
301
-
302
- command: fcall command_args =tLOWEST
303
- {
304
- result = @builder.call_method(nil, nil, val[0],
305
- nil, val[1], nil)
306
- }
307
- | fcall command_args cmd_brace_block
308
- {
309
- method_call = @builder.call_method(nil, nil, val[0],
310
- nil, val[1], nil)
311
-
312
- begin_t, args, body, end_t = val[2]
313
- result = @builder.block(method_call,
314
- begin_t, args, body, end_t)
315
- }
316
- | primary_value tDOT operation2 command_args =tLOWEST
317
- {
318
- result = @builder.call_method(val[0], val[1], val[2],
319
- nil, val[3], nil)
320
- }
321
- | primary_value tDOT operation2 command_args cmd_brace_block
322
- {
323
- method_call = @builder.call_method(val[0], val[1], val[2],
324
- nil, val[3], nil)
325
-
326
- begin_t, args, body, end_t = val[4]
327
- result = @builder.block(method_call,
328
- begin_t, args, body, end_t)
329
- }
330
- | primary_value tCOLON2 operation2 command_args =tLOWEST
331
- {
332
- result = @builder.call_method(val[0], val[1], val[2],
333
- nil, val[3], nil)
334
- }
335
- | primary_value tCOLON2 operation2 command_args cmd_brace_block
336
- {
337
- method_call = @builder.call_method(val[0], val[1], val[2],
338
- nil, val[3], nil)
339
-
340
- begin_t, args, body, end_t = val[4]
341
- result = @builder.block(method_call,
342
- begin_t, args, body, end_t)
343
- }
344
- | kSUPER command_args
345
- {
346
- result = @builder.keyword_cmd(:super, val[0],
347
- nil, val[1], nil)
348
- }
349
- | kYIELD command_args
350
- {
351
- result = @builder.keyword_cmd(:yield, val[0],
352
- nil, val[1], nil)
353
- }
354
- | kRETURN call_args
355
- {
356
- result = @builder.keyword_cmd(:return, val[0],
357
- nil, val[1], nil)
358
- }
359
- | kBREAK call_args
360
- {
361
- result = @builder.keyword_cmd(:break, val[0],
362
- nil, val[1], nil)
363
- }
364
- | kNEXT call_args
365
- {
366
- result = @builder.keyword_cmd(:next, val[0],
367
- nil, val[1], nil)
368
- }
369
-
370
- mlhs: mlhs_basic
371
- {
372
- result = @builder.multi_lhs(nil, val[0], nil)
373
- }
374
- | tLPAREN mlhs_inner rparen
375
- {
376
- result = @builder.begin(val[0], val[1], val[2])
377
- }
378
-
379
- mlhs_inner: mlhs_basic
380
- {
381
- result = @builder.multi_lhs(nil, val[0], nil)
382
- }
383
- | tLPAREN mlhs_inner rparen
384
- {
385
- result = @builder.multi_lhs(val[0], val[1], val[2])
386
- }
387
-
388
- mlhs_basic: mlhs_head
389
- | mlhs_head mlhs_item
390
- {
391
- result = val[0].
392
- push(val[1])
393
- }
394
- | mlhs_head tSTAR mlhs_node
395
- {
396
- result = val[0].
397
- push(@builder.splat(val[1], val[2]))
398
- }
399
- | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post
400
- {
401
- result = val[0].
402
- push(@builder.splat(val[1], val[2])).
403
- concat(val[4])
404
- }
405
- | mlhs_head tSTAR
406
- {
407
- result = val[0].
408
- push(@builder.splat(val[1]))
409
- }
410
- | mlhs_head tSTAR tCOMMA mlhs_post
411
- {
412
- result = val[0].
413
- push(@builder.splat(val[1])).
414
- concat(val[3])
415
- }
416
- | tSTAR mlhs_node
417
- {
418
- result = [ @builder.splat(val[0], val[1]) ]
419
- }
420
- | tSTAR mlhs_node tCOMMA mlhs_post
421
- {
422
- result = [ @builder.splat(val[0], val[1]),
423
- *val[3] ]
424
- }
425
- | tSTAR
426
- {
427
- result = [ @builder.splat(val[0]) ]
428
- }
429
- | tSTAR tCOMMA mlhs_post
430
- {
431
- result = [ @builder.splat(val[0]),
432
- *val[2] ]
433
- }
434
-
435
- mlhs_item: mlhs_node
436
- | tLPAREN mlhs_inner rparen
437
- {
438
- result = @builder.begin(val[0], val[1], val[2])
439
- }
440
-
441
- mlhs_head: mlhs_item tCOMMA
442
- {
443
- result = [ val[0] ]
444
- }
445
- | mlhs_head mlhs_item tCOMMA
446
- {
447
- result = val[0] << val[1]
448
- }
449
-
450
- mlhs_post: mlhs_item
451
- {
452
- result = [ val[0] ]
453
- }
454
- | mlhs_post tCOMMA mlhs_item
455
- {
456
- result = val[0] << val[2]
457
- }
458
-
459
- mlhs_node: user_variable
460
- {
461
- result = @builder.assignable(val[0])
462
- }
463
- | keyword_variable
464
- {
465
- result = @builder.assignable(val[0])
466
- }
467
- | primary_value tLBRACK2 opt_call_args rbracket
468
- {
469
- result = @builder.index_asgn(val[0], val[1], val[2], val[3])
470
- }
471
- | primary_value tDOT tIDENTIFIER
472
- {
473
- result = @builder.attr_asgn(val[0], val[1], val[2])
474
- }
475
- | primary_value tCOLON2 tIDENTIFIER
476
- {
477
- result = @builder.attr_asgn(val[0], val[1], val[2])
478
- }
479
- | primary_value tDOT tCONSTANT
480
- {
481
- result = @builder.attr_asgn(val[0], val[1], val[2])
482
- }
483
- | primary_value tCOLON2 tCONSTANT
484
- {
485
- result = @builder.assignable(
486
- @builder.const_fetch(val[0], val[1], val[2]))
487
- }
488
- | tCOLON3 tCONSTANT
489
- {
490
- result = @builder.assignable(
491
- @builder.const_global(val[0], val[1]))
492
- }
493
- | backref
494
- {
495
- result = @builder.assignable(val[0])
496
- }
497
-
498
- lhs: user_variable
499
- {
500
- result = @builder.assignable(val[0])
501
- }
502
- | keyword_variable
503
- {
504
- result = @builder.assignable(val[0])
505
- }
506
- | primary_value tLBRACK2 opt_call_args rbracket
507
- {
508
- result = @builder.index_asgn(val[0], val[1], val[2], val[3])
509
- }
510
- | primary_value tDOT tIDENTIFIER
511
- {
512
- result = @builder.attr_asgn(val[0], val[1], val[2])
513
- }
514
- | primary_value tCOLON2 tIDENTIFIER
515
- {
516
- result = @builder.attr_asgn(val[0], val[1], val[2])
517
- }
518
- | primary_value tDOT tCONSTANT
519
- {
520
- result = @builder.attr_asgn(val[0], val[1], val[2])
521
- }
522
- | primary_value tCOLON2 tCONSTANT
523
- {
524
- result = @builder.assignable(
525
- @builder.const_fetch(val[0], val[1], val[2]))
526
- }
527
- | tCOLON3 tCONSTANT
528
- {
529
- result = @builder.assignable(
530
- @builder.const_global(val[0], val[1]))
531
- }
532
- | backref
533
- {
534
- result = @builder.assignable(val[0])
535
- }
536
-
537
- cname: tIDENTIFIER
538
- {
539
- diagnostic :error, :module_name_const, nil, val[0]
540
- }
541
- | tCONSTANT
542
-
543
- cpath: tCOLON3 cname
544
- {
545
- result = @builder.const_global(val[0], val[1])
546
- }
547
- | cname
548
- {
549
- result = @builder.const(val[0])
550
- }
551
- | primary_value tCOLON2 cname
552
- {
553
- result = @builder.const_fetch(val[0], val[1], val[2])
554
- }
555
-
556
- fname: tIDENTIFIER | tCONSTANT | tFID
557
- | op
558
- | reswords
559
-
560
- fsym: fname
561
- {
562
- result = @builder.symbol_internal(val[0])
563
- }
564
- | symbol
565
-
566
- fitem: fsym
567
- | dsym
568
-
569
- undef_list: fitem
570
- {
571
- result = [ val[0] ]
572
- }
573
- | undef_list tCOMMA
574
- {
575
- @lexer.state = :expr_fname
576
- }
577
- fitem
578
- {
579
- result = val[0] << val[3]
580
- }
581
-
582
- op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ
583
- | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ
584
- | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
585
- | tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE
586
- | tUPLUS | tUMINUS | tAREF | tASET | tDSTAR | tBACK_REF2
587
-
588
- reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND
589
- | kALIAS | kAND | kBEGIN | kBREAK | kCASE
590
- | kCLASS | kDEF | kDEFINED | kDO | kELSE
591
- | kELSIF | kEND | kENSURE | kFALSE | kFOR
592
- | kIN | kMODULE | kNEXT | kNIL | kNOT
593
- | kOR | kREDO | kRESCUE | kRETRY | kRETURN
594
- | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF
595
- | kWHEN | kYIELD | kIF | kUNLESS | kWHILE
596
- | kUNTIL
597
-
598
- arg: lhs tEQL arg
599
- {
600
- result = @builder.assign(val[0], val[1], val[2])
601
- }
602
- | lhs tEQL arg kRESCUE_MOD arg
603
- {
604
- rescue_body = @builder.rescue_body(val[3],
605
- nil, nil, nil,
606
- nil, val[4])
607
-
608
- rescue_ = @builder.begin_body(val[2], [ rescue_body ])
609
-
610
- result = @builder.assign(val[0], val[1], rescue_)
611
- }
612
- | var_lhs tOP_ASGN arg
613
- {
614
- result = @builder.op_assign(val[0], val[1], val[2])
615
- }
616
- | var_lhs tOP_ASGN arg kRESCUE_MOD arg
617
- {
618
- rescue_body = @builder.rescue_body(val[3],
619
- nil, nil, nil,
620
- nil, val[4])
621
-
622
- rescue_ = @builder.begin_body(val[2], [ rescue_body ])
623
-
624
- result = @builder.op_assign(val[0], val[1], rescue_)
625
- }
626
- | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg
627
- {
628
- result = @builder.op_assign(
629
- @builder.index(
630
- val[0], val[1], val[2], val[3]),
631
- val[4], val[5])
632
- }
633
- | primary_value tDOT tIDENTIFIER tOP_ASGN arg
634
- {
635
- result = @builder.op_assign(
636
- @builder.call_method(
637
- val[0], val[1], val[2]),
638
- val[3], val[4])
639
- }
640
- | primary_value tDOT tCONSTANT tOP_ASGN arg
641
- {
642
- result = @builder.op_assign(
643
- @builder.call_method(
644
- val[0], val[1], val[2]),
645
- val[3], val[4])
646
- }
647
- | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg
648
- {
649
- result = @builder.op_assign(
650
- @builder.call_method(
651
- val[0], val[1], val[2]),
652
- val[3], val[4])
653
- }
654
- | primary_value tCOLON2 tCONSTANT tOP_ASGN arg
655
- {
656
- const = @builder.const_op_assignable(
657
- @builder.const_fetch(val[0], val[1], val[2]))
658
- result = @builder.op_assign(const, val[3], val[4])
659
- }
660
- | tCOLON3 tCONSTANT tOP_ASGN arg
661
- {
662
- const = @builder.const_op_assignable(
663
- @builder.const_global(val[0], val[1]))
664
- result = @builder.op_assign(const, val[2], val[3])
665
- }
666
- | backref tOP_ASGN arg
667
- {
668
- result = @builder.op_assign(val[0], val[1], val[2])
669
- }
670
- | arg tDOT2 arg
671
- {
672
- result = @builder.range_inclusive(val[0], val[1], val[2])
673
- }
674
- | arg tDOT3 arg
675
- {
676
- result = @builder.range_exclusive(val[0], val[1], val[2])
677
- }
678
- | arg tPLUS arg
679
- {
680
- result = @builder.binary_op(val[0], val[1], val[2])
681
- }
682
- | arg tMINUS arg
683
- {
684
- result = @builder.binary_op(val[0], val[1], val[2])
685
- }
686
- | arg tSTAR2 arg
687
- {
688
- result = @builder.binary_op(val[0], val[1], val[2])
689
- }
690
- | arg tDIVIDE arg
691
- {
692
- result = @builder.binary_op(val[0], val[1], val[2])
693
- }
694
- | arg tPERCENT arg
695
- {
696
- result = @builder.binary_op(val[0], val[1], val[2])
697
- }
698
- | arg tPOW arg
699
- {
700
- result = @builder.binary_op(val[0], val[1], val[2])
701
- }
702
- | tUNARY_NUM tINTEGER tPOW arg
703
- {
704
- result = @builder.unary_op(val[0],
705
- @builder.binary_op(
706
- @builder.integer(val[1]),
707
- val[2], val[3]))
708
- }
709
- | tUNARY_NUM tFLOAT tPOW arg
710
- {
711
- result = @builder.unary_op(val[0],
712
- @builder.binary_op(
713
- @builder.float(val[1]),
714
- val[2], val[3]))
715
- }
716
- | tUPLUS arg
717
- {
718
- result = @builder.unary_op(val[0], val[1])
719
- }
720
- | tUMINUS arg
721
- {
722
- result = @builder.unary_op(val[0], val[1])
723
- }
724
- | arg tPIPE arg
725
- {
726
- result = @builder.binary_op(val[0], val[1], val[2])
727
- }
728
- | arg tCARET arg
729
- {
730
- result = @builder.binary_op(val[0], val[1], val[2])
731
- }
732
- | arg tAMPER2 arg
733
- {
734
- result = @builder.binary_op(val[0], val[1], val[2])
735
- }
736
- | arg tCMP arg
737
- {
738
- result = @builder.binary_op(val[0], val[1], val[2])
739
- }
740
- | arg tGT arg
741
- {
742
- result = @builder.binary_op(val[0], val[1], val[2])
743
- }
744
- | arg tGEQ arg
745
- {
746
- result = @builder.binary_op(val[0], val[1], val[2])
747
- }
748
- | arg tLT arg
749
- {
750
- result = @builder.binary_op(val[0], val[1], val[2])
751
- }
752
- | arg tLEQ arg
753
- {
754
- result = @builder.binary_op(val[0], val[1], val[2])
755
- }
756
- | arg tEQ arg
757
- {
758
- result = @builder.binary_op(val[0], val[1], val[2])
759
- }
760
- | arg tEQQ arg
761
- {
762
- result = @builder.binary_op(val[0], val[1], val[2])
763
- }
764
- | arg tNEQ arg
765
- {
766
- result = @builder.binary_op(val[0], val[1], val[2])
767
- }
768
- | arg tMATCH arg
769
- {
770
- result = @builder.match_op(val[0], val[1], val[2])
771
- }
772
- | arg tNMATCH arg
773
- {
774
- result = @builder.binary_op(val[0], val[1], val[2])
775
- }
776
- | tBANG arg
777
- {
778
- result = @builder.not_op(val[0], nil, val[1], nil)
779
- }
780
- | tTILDE arg
781
- {
782
- result = @builder.unary_op(val[0], val[1])
783
- }
784
- | arg tLSHFT arg
785
- {
786
- result = @builder.binary_op(val[0], val[1], val[2])
787
- }
788
- | arg tRSHFT arg
789
- {
790
- result = @builder.binary_op(val[0], val[1], val[2])
791
- }
792
- | arg tANDOP arg
793
- {
794
- result = @builder.logical_op(:and, val[0], val[1], val[2])
795
- }
796
- | arg tOROP arg
797
- {
798
- result = @builder.logical_op(:or, val[0], val[1], val[2])
799
- }
800
- | kDEFINED opt_nl arg
801
- {
802
- result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil)
803
- }
804
-
805
- | arg tEH arg opt_nl tCOLON arg
806
- {
807
- result = @builder.ternary(val[0], val[1],
808
- val[2], val[4], val[5])
809
- }
810
- | primary
811
-
812
- arg_value: arg
813
-
814
- aref_args: none
815
- | args trailer
816
- | args tCOMMA assocs trailer
817
- {
818
- result = val[0] << @builder.associate(nil, val[2], nil)
819
- }
820
- | assocs trailer
821
- {
822
- result = [ @builder.associate(nil, val[0], nil) ]
823
- }
824
-
825
- paren_args: tLPAREN2 opt_call_args rparen
826
- {
827
- result = val
828
- }
829
-
830
- opt_paren_args: # nothing
831
- {
832
- result = [ nil, [], nil ]
833
- }
834
- | paren_args
835
-
836
- opt_call_args: # nothing
837
- {
838
- result = []
839
- }
840
- | call_args
841
- | args tCOMMA
842
- | args tCOMMA assocs tCOMMA
843
- {
844
- result = val[0] << @builder.associate(nil, val[2], nil)
845
- }
846
- | assocs tCOMMA
847
- {
848
- result = [ @builder.associate(nil, val[0], nil) ]
849
- }
850
-
851
- call_args: command
852
- {
853
- result = [ val[0] ]
854
- }
855
- | args opt_block_arg
856
- {
857
- result = val[0].concat(val[1])
858
- }
859
- | assocs opt_block_arg
860
- {
861
- result = [ @builder.associate(nil, val[0], nil) ]
862
- result.concat(val[1])
863
- }
864
- | args tCOMMA assocs opt_block_arg
865
- {
866
- assocs = @builder.associate(nil, val[2], nil)
867
- result = val[0] << assocs
868
- result.concat(val[3])
869
- }
870
- | block_arg
871
- {
872
- result = [ val[0] ]
873
- }
874
-
875
- command_args: {
876
- result = @lexer.cmdarg.dup
877
- @lexer.cmdarg.push(true)
878
- }
879
- call_args
880
- {
881
- @lexer.cmdarg = val[0]
882
-
883
- result = val[1]
884
- }
885
-
886
- block_arg: tAMPER arg_value
887
- {
888
- result = @builder.block_pass(val[0], val[1])
889
- }
890
-
891
- opt_block_arg: tCOMMA block_arg
892
- {
893
- result = [ val[1] ]
894
- }
895
- | # nothing
896
- {
897
- result = []
898
- }
899
-
900
- args: arg_value
901
- {
902
- result = [ val[0] ]
903
- }
904
- | tSTAR arg_value
905
- {
906
- result = [ @builder.splat(val[0], val[1]) ]
907
- }
908
- | args tCOMMA arg_value
909
- {
910
- result = val[0] << val[2]
911
- }
912
- | args tCOMMA tSTAR arg_value
913
- {
914
- result = val[0] << @builder.splat(val[2], val[3])
915
- }
916
-
917
- mrhs: args tCOMMA arg_value
918
- {
919
- result = val[0] << val[2]
920
- }
921
- | args tCOMMA tSTAR arg_value
922
- {
923
- result = val[0] << @builder.splat(val[2], val[3])
924
- }
925
- | tSTAR arg_value
926
- {
927
- result = [ @builder.splat(val[0], val[1]) ]
928
- }
929
-
930
- primary: literal
931
- | strings
932
- | xstring
933
- | regexp
934
- | words
935
- | qwords
936
- | symbols
937
- | qsymbols
938
- | var_ref
939
- | backref
940
- | tFID
941
- {
942
- result = @builder.call_method(nil, nil, val[0])
943
- }
944
- | kBEGIN
945
- {
946
- result = @lexer.cmdarg.dup
947
- @lexer.cmdarg.clear
948
- }
949
- bodystmt kEND
950
- {
951
- @lexer.cmdarg = val[1]
952
-
953
- result = @builder.begin_keyword(val[0], val[2], val[3])
954
- }
955
- | tLPAREN_ARG
956
- {
957
- result = @lexer.cmdarg.dup
958
- @lexer.cmdarg.clear
959
- }
960
- expr
961
- {
962
- @lexer.state = :expr_endarg
963
- }
964
- opt_nl tRPAREN
965
- {
966
- @lexer.cmdarg = val[1]
967
-
968
- result = @builder.begin(val[0], val[2], val[5])
969
- }
970
- | tLPAREN_ARG
971
- {
972
- @lexer.state = :expr_endarg
973
- }
974
- opt_nl tRPAREN
975
- {
976
- result = @builder.begin(val[0], nil, val[3])
977
- }
978
- | tLPAREN compstmt tRPAREN
979
- {
980
- result = @builder.begin(val[0], val[1], val[2])
981
- }
982
- | primary_value tCOLON2 tCONSTANT
983
- {
984
- result = @builder.const_fetch(val[0], val[1], val[2])
985
- }
986
- | tCOLON3 tCONSTANT
987
- {
988
- result = @builder.const_global(val[0], val[1])
989
- }
990
- | tLBRACK aref_args tRBRACK
991
- {
992
- result = @builder.array(val[0], val[1], val[2])
993
- }
994
- | tLBRACE assoc_list tRCURLY
995
- {
996
- result = @builder.associate(val[0], val[1], val[2])
997
- }
998
- | kRETURN
999
- {
1000
- result = @builder.keyword_cmd(:return, val[0])
1001
- }
1002
- | kYIELD tLPAREN2 call_args rparen
1003
- {
1004
- result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
1005
- }
1006
- | kYIELD tLPAREN2 rparen
1007
- {
1008
- result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
1009
- }
1010
- | kYIELD
1011
- {
1012
- result = @builder.keyword_cmd(:yield, val[0])
1013
- }
1014
- | kDEFINED opt_nl tLPAREN2 expr rparen
1015
- {
1016
- result = @builder.keyword_cmd(:defined?, val[0],
1017
- val[2], [ val[3] ], val[4])
1018
- }
1019
- | kNOT tLPAREN2 expr rparen
1020
- {
1021
- result = @builder.not_op(val[0], val[1], val[2], val[3])
1022
- }
1023
- | kNOT tLPAREN2 rparen
1024
- {
1025
- result = @builder.not_op(val[0], val[1], nil, val[2])
1026
- }
1027
- | fcall brace_block
1028
- {
1029
- method_call = @builder.call_method(nil, nil, val[0])
1030
-
1031
- begin_t, args, body, end_t = val[1]
1032
- result = @builder.block(method_call,
1033
- begin_t, args, body, end_t)
1034
- }
1035
- | method_call
1036
- | method_call brace_block
1037
- {
1038
- begin_t, args, body, end_t = val[1]
1039
- result = @builder.block(val[0],
1040
- begin_t, args, body, end_t)
1041
- }
1042
- | tLAMBDA
1043
- {
1044
- @context.push(:lambda)
1045
- }
1046
- lambda
1047
- {
1048
- lambda_call = @builder.call_lambda(val[0])
1049
-
1050
- args, (begin_t, body, end_t) = val[2]
1051
- result = @builder.block(lambda_call,
1052
- begin_t, args, body, end_t)
1053
- }
1054
- | kIF expr_value then compstmt if_tail kEND
1055
- {
1056
- else_t, else_ = val[4]
1057
- result = @builder.condition(val[0], val[1], val[2],
1058
- val[3], else_t,
1059
- else_, val[5])
1060
- }
1061
- | kUNLESS expr_value then compstmt opt_else kEND
1062
- {
1063
- else_t, else_ = val[4]
1064
- result = @builder.condition(val[0], val[1], val[2],
1065
- else_, else_t,
1066
- val[3], val[5])
1067
- }
1068
- | kWHILE
1069
- {
1070
- @lexer.cond.push(true)
1071
- }
1072
- expr_value do
1073
- {
1074
- @lexer.cond.pop
1075
- }
1076
- compstmt kEND
1077
- {
1078
- result = @builder.loop(:while, val[0], val[2], val[3],
1079
- val[5], val[6])
1080
- }
1081
- | kUNTIL
1082
- {
1083
- @lexer.cond.push(true)
1084
- }
1085
- expr_value do
1086
- {
1087
- @lexer.cond.pop
1088
- }
1089
- compstmt kEND
1090
- {
1091
- result = @builder.loop(:until, val[0], val[2], val[3],
1092
- val[5], val[6])
1093
- }
1094
- | kCASE expr_value opt_terms case_body kEND
1095
- {
1096
- *when_bodies, (else_t, else_body) = *val[3]
1097
-
1098
- result = @builder.case(val[0], val[1],
1099
- when_bodies, else_t, else_body,
1100
- val[4])
1101
- }
1102
- | kCASE opt_terms case_body kEND
1103
- {
1104
- *when_bodies, (else_t, else_body) = *val[2]
1105
-
1106
- result = @builder.case(val[0], nil,
1107
- when_bodies, else_t, else_body,
1108
- val[3])
1109
- }
1110
- | kFOR for_var kIN
1111
- {
1112
- @lexer.cond.push(true)
1113
- }
1114
- expr_value do
1115
- {
1116
- @lexer.cond.pop
1117
- }
1118
- compstmt kEND
1119
- {
1120
- result = @builder.for(val[0], val[1],
1121
- val[2], val[4],
1122
- val[5], val[7], val[8])
1123
- }
1124
- | kCLASS cpath superclass
1125
- {
1126
- @static_env.extend_static
1127
- @lexer.push_cmdarg
1128
- @context.push(:class)
1129
- }
1130
- bodystmt kEND
1131
- {
1132
- unless @context.class_definition_allowed?
1133
- diagnostic :error, :class_in_def, nil, val[0]
1134
- end
1135
-
1136
- lt_t, superclass = val[2]
1137
- result = @builder.def_class(val[0], val[1],
1138
- lt_t, superclass,
1139
- val[4], val[5])
1140
-
1141
- @lexer.pop_cmdarg
1142
- @static_env.unextend
1143
- @context.pop
1144
- }
1145
- | kCLASS tLSHFT expr term
1146
- {
1147
- @static_env.extend_static
1148
- @lexer.push_cmdarg
1149
- @context.push(:sclass)
1150
- }
1151
- bodystmt kEND
1152
- {
1153
- result = @builder.def_sclass(val[0], val[1], val[2],
1154
- val[5], val[6])
1155
-
1156
- @lexer.pop_cmdarg
1157
- @static_env.unextend
1158
- @context.pop
1159
- }
1160
- | kMODULE cpath
1161
- {
1162
- @static_env.extend_static
1163
- @lexer.push_cmdarg
1164
- @context.push(:module)
1165
- }
1166
- bodystmt kEND
1167
- {
1168
- unless @context.module_definition_allowed?
1169
- diagnostic :error, :module_in_def, nil, val[0]
1170
- end
1171
-
1172
- result = @builder.def_module(val[0], val[1],
1173
- val[3], val[4])
1174
-
1175
- @lexer.pop_cmdarg
1176
- @static_env.unextend
1177
- @context.pop
1178
- }
1179
- | kDEF fname
1180
- {
1181
- @static_env.extend_static
1182
- @lexer.push_cmdarg
1183
- @context.push(:def)
1184
- }
1185
- f_arglist bodystmt kEND
1186
- {
1187
- result = @builder.def_method(val[0], val[1],
1188
- val[3], val[4], val[5])
1189
-
1190
- @lexer.pop_cmdarg
1191
- @static_env.unextend
1192
- @context.pop
1193
- }
1194
- | kDEF singleton dot_or_colon
1195
- {
1196
- @lexer.state = :expr_fname
1197
- }
1198
- fname
1199
- {
1200
- @static_env.extend_static
1201
- @lexer.push_cmdarg
1202
- @context.push(:defs)
1203
- }
1204
- f_arglist bodystmt kEND
1205
- {
1206
- result = @builder.def_singleton(val[0], val[1], val[2],
1207
- val[4], val[6], val[7], val[8])
1208
-
1209
- @lexer.pop_cmdarg
1210
- @static_env.unextend
1211
- @context.pop
1212
- }
1213
- | kBREAK
1214
- {
1215
- result = @builder.keyword_cmd(:break, val[0])
1216
- }
1217
- | kNEXT
1218
- {
1219
- result = @builder.keyword_cmd(:next, val[0])
1220
- }
1221
- | kREDO
1222
- {
1223
- result = @builder.keyword_cmd(:redo, val[0])
1224
- }
1225
- | kRETRY
1226
- {
1227
- result = @builder.keyword_cmd(:retry, val[0])
1228
- }
1229
-
1230
- primary_value: primary
1231
-
1232
- then: term
1233
- | kTHEN
1234
- | term kTHEN
1235
- {
1236
- result = val[1]
1237
- }
1238
-
1239
- do: term
1240
- | kDO_COND
1241
-
1242
- if_tail: opt_else
1243
- | kELSIF expr_value then compstmt if_tail
1244
- {
1245
- else_t, else_ = val[4]
1246
- result = [ val[0],
1247
- @builder.condition(val[0], val[1], val[2],
1248
- val[3], else_t,
1249
- else_, nil),
1250
- ]
1251
- }
1252
-
1253
- opt_else: none
1254
- | kELSE compstmt
1255
- {
1256
- result = val
1257
- }
1258
-
1259
- for_var: lhs
1260
- | mlhs
1261
-
1262
- f_marg: f_norm_arg
1263
- {
1264
- @static_env.declare val[0][0]
1265
-
1266
- result = @builder.arg(val[0])
1267
- }
1268
- | tLPAREN f_margs rparen
1269
- {
1270
- result = @builder.multi_lhs(val[0], val[1], val[2])
1271
- }
1272
-
1273
- f_marg_list: f_marg
1274
- {
1275
- result = [ val[0] ]
1276
- }
1277
- | f_marg_list tCOMMA f_marg
1278
- {
1279
- result = val[0] << val[2]
1280
- }
1281
-
1282
- f_margs: f_marg_list
1283
- | f_marg_list tCOMMA tSTAR f_norm_arg
1284
- {
1285
- @static_env.declare val[3][0]
1286
-
1287
- result = val[0].
1288
- push(@builder.restarg(val[2], val[3]))
1289
- }
1290
- | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
1291
- {
1292
- @static_env.declare val[3][0]
1293
-
1294
- result = val[0].
1295
- push(@builder.restarg(val[2], val[3])).
1296
- concat(val[5])
1297
- }
1298
- | f_marg_list tCOMMA tSTAR
1299
- {
1300
- result = val[0].
1301
- push(@builder.restarg(val[2]))
1302
- }
1303
- | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
1304
- {
1305
- result = val[0].
1306
- push(@builder.restarg(val[2])).
1307
- concat(val[4])
1308
- }
1309
- | tSTAR f_norm_arg
1310
- {
1311
- @static_env.declare val[1][0]
1312
-
1313
- result = [ @builder.restarg(val[0], val[1]) ]
1314
- }
1315
- | tSTAR f_norm_arg tCOMMA f_marg_list
1316
- {
1317
- @static_env.declare val[1][0]
1318
-
1319
- result = [ @builder.restarg(val[0], val[1]),
1320
- *val[3] ]
1321
- }
1322
- | tSTAR
1323
- {
1324
- result = [ @builder.restarg(val[0]) ]
1325
- }
1326
- | tSTAR tCOMMA f_marg_list
1327
- {
1328
- result = [ @builder.restarg(val[0]),
1329
- *val[2] ]
1330
- }
1331
-
1332
- block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
1333
- {
1334
- result = val[0].concat(val[2]).concat(val[3])
1335
- }
1336
- | f_block_kwarg opt_f_block_arg
1337
- {
1338
- result = val[0].concat(val[1])
1339
- }
1340
- | f_kwrest opt_f_block_arg
1341
- {
1342
- result = val[0].concat(val[1])
1343
- }
1344
- | f_block_arg
1345
- {
1346
- result = [ val[0] ]
1347
- }
1348
-
1349
- opt_block_args_tail:
1350
- tCOMMA block_args_tail
1351
- {
1352
- result = val[1]
1353
- }
1354
- | # nothing
1355
- {
1356
- result = []
1357
- }
1358
-
1359
- block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1360
- {
1361
- result = val[0].
1362
- concat(val[2]).
1363
- concat(val[4]).
1364
- concat(val[5])
1365
- }
1366
- | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1367
- {
1368
- result = val[0].
1369
- concat(val[2]).
1370
- concat(val[4]).
1371
- concat(val[6]).
1372
- concat(val[7])
1373
- }
1374
- | f_arg tCOMMA f_block_optarg opt_block_args_tail
1375
- {
1376
- result = val[0].
1377
- concat(val[2]).
1378
- concat(val[3])
1379
- }
1380
- | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail
1381
- {
1382
- result = val[0].
1383
- concat(val[2]).
1384
- concat(val[4]).
1385
- concat(val[5])
1386
- }
1387
- | f_arg tCOMMA f_rest_arg opt_block_args_tail
1388
- {
1389
- result = val[0].
1390
- concat(val[2]).
1391
- concat(val[3])
1392
- }
1393
- | f_arg tCOMMA
1394
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1395
- {
1396
- result = val[0].
1397
- concat(val[2]).
1398
- concat(val[4]).
1399
- concat(val[5])
1400
- }
1401
- | f_arg opt_block_args_tail
1402
- {
1403
- if val[1].empty? && val[0].size == 1
1404
- result = [@builder.procarg0(val[0][0])]
1405
- else
1406
- result = val[0].concat(val[1])
1407
- end
1408
- }
1409
- | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1410
- {
1411
- result = val[0].
1412
- concat(val[2]).
1413
- concat(val[3])
1414
- }
1415
- | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1416
- {
1417
- result = val[0].
1418
- concat(val[2]).
1419
- concat(val[4]).
1420
- concat(val[5])
1421
- }
1422
- | f_block_optarg opt_block_args_tail
1423
- {
1424
- result = val[0].
1425
- concat(val[1])
1426
- }
1427
- | f_block_optarg tCOMMA f_arg opt_block_args_tail
1428
- {
1429
- result = val[0].
1430
- concat(val[2]).
1431
- concat(val[3])
1432
- }
1433
- | f_rest_arg opt_block_args_tail
1434
- {
1435
- result = val[0].
1436
- concat(val[1])
1437
- }
1438
- | f_rest_arg tCOMMA f_arg opt_block_args_tail
1439
- {
1440
- result = val[0].
1441
- concat(val[2]).
1442
- concat(val[3])
1443
- }
1444
- | block_args_tail
1445
-
1446
- opt_block_param: # nothing
1447
- {
1448
- result = @builder.args(nil, [], nil)
1449
- }
1450
- | block_param_def
1451
- {
1452
- @lexer.state = :expr_value
1453
- }
1454
-
1455
- block_param_def: tPIPE opt_bv_decl tPIPE
1456
- {
1457
- result = @builder.args(val[0], val[1], val[2])
1458
- }
1459
- | tOROP
1460
- {
1461
- result = @builder.args(val[0], [], val[0])
1462
- }
1463
- | tPIPE block_param opt_bv_decl tPIPE
1464
- {
1465
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1466
- }
1467
-
1468
- opt_bv_decl: opt_nl
1469
- {
1470
- result = []
1471
- }
1472
- | opt_nl tSEMI bv_decls opt_nl
1473
- {
1474
- result = val[2]
1475
- }
1476
-
1477
- bv_decls: bvar
1478
- {
1479
- result = [ val[0] ]
1480
- }
1481
- | bv_decls tCOMMA bvar
1482
- {
1483
- result = val[0] << val[2]
1484
- }
1485
-
1486
- bvar: tIDENTIFIER
1487
- {
1488
- @static_env.declare val[0][0]
1489
- result = @builder.shadowarg(val[0])
1490
- }
1491
- | f_bad_arg
1492
-
1493
- lambda: {
1494
- @static_env.extend_dynamic
1495
- }
1496
- f_larglist
1497
- {
1498
- @context.pop
1499
- }
1500
- lambda_body
1501
- {
1502
- result = [ val[1], val[3] ]
1503
-
1504
- @static_env.unextend
1505
- }
1506
-
1507
- f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN
1508
- {
1509
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1510
- }
1511
- | f_args
1512
- {
1513
- result = @builder.args(nil, val[0], nil)
1514
- }
1515
-
1516
- lambda_body: tLAMBEG
1517
- {
1518
- @context.push(:lambda)
1519
- }
1520
- compstmt tRCURLY
1521
- {
1522
- result = [ val[0], val[2], val[3] ]
1523
- @context.pop
1524
- }
1525
- | kDO_LAMBDA
1526
- {
1527
- @context.push(:lambda)
1528
- }
1529
- compstmt kEND
1530
- {
1531
- result = [ val[0], val[2], val[3] ]
1532
- @context.pop
1533
- }
1534
-
1535
- do_block: kDO_BLOCK
1536
- {
1537
- @static_env.extend_dynamic
1538
- @context.push(:block)
1539
- }
1540
- opt_block_param compstmt kEND
1541
- {
1542
- result = [ val[0], val[2], val[3], val[4] ]
1543
-
1544
- @static_env.unextend
1545
- @context.pop
1546
- }
1547
-
1548
- block_call: command do_block
1549
- {
1550
- begin_t, block_args, body, end_t = val[1]
1551
- result = @builder.block(val[0],
1552
- begin_t, block_args, body, end_t)
1553
- }
1554
- | block_call dot_or_colon operation2 opt_paren_args
1555
- {
1556
- lparen_t, args, rparen_t = val[3]
1557
- result = @builder.call_method(val[0], val[1], val[2],
1558
- lparen_t, args, rparen_t)
1559
- }
1560
- | block_call dot_or_colon operation2 opt_paren_args brace_block
1561
- {
1562
- lparen_t, args, rparen_t = val[3]
1563
- method_call = @builder.call_method(val[0], val[1], val[2],
1564
- lparen_t, args, rparen_t)
1565
-
1566
- begin_t, args, body, end_t = val[4]
1567
- result = @builder.block(method_call,
1568
- begin_t, args, body, end_t)
1569
- }
1570
- | block_call dot_or_colon operation2 command_args do_block
1571
- {
1572
- method_call = @builder.call_method(val[0], val[1], val[2],
1573
- nil, val[3], nil)
1574
-
1575
- begin_t, args, body, end_t = val[4]
1576
- result = @builder.block(method_call,
1577
- begin_t, args, body, end_t)
1578
- }
1579
-
1580
- method_call: fcall paren_args
1581
- {
1582
- lparen_t, args, rparen_t = val[1]
1583
- result = @builder.call_method(nil, nil, val[0],
1584
- lparen_t, args, rparen_t)
1585
- }
1586
- | primary_value tDOT operation2 opt_paren_args
1587
- {
1588
- lparen_t, args, rparen_t = val[3]
1589
- result = @builder.call_method(val[0], val[1], val[2],
1590
- lparen_t, args, rparen_t)
1591
- }
1592
- | primary_value tCOLON2 operation2 paren_args
1593
- {
1594
- lparen_t, args, rparen_t = val[3]
1595
- result = @builder.call_method(val[0], val[1], val[2],
1596
- lparen_t, args, rparen_t)
1597
- }
1598
- | primary_value tCOLON2 operation3
1599
- {
1600
- result = @builder.call_method(val[0], val[1], val[2])
1601
- }
1602
- | primary_value tDOT paren_args
1603
- {
1604
- lparen_t, args, rparen_t = val[2]
1605
- result = @builder.call_method(val[0], val[1], nil,
1606
- lparen_t, args, rparen_t)
1607
- }
1608
- | primary_value tCOLON2 paren_args
1609
- {
1610
- lparen_t, args, rparen_t = val[2]
1611
- result = @builder.call_method(val[0], val[1], nil,
1612
- lparen_t, args, rparen_t)
1613
- }
1614
- | kSUPER paren_args
1615
- {
1616
- lparen_t, args, rparen_t = val[1]
1617
- result = @builder.keyword_cmd(:super, val[0],
1618
- lparen_t, args, rparen_t)
1619
- }
1620
- | kSUPER
1621
- {
1622
- result = @builder.keyword_cmd(:zsuper, val[0])
1623
- }
1624
- | primary_value tLBRACK2 opt_call_args rbracket
1625
- {
1626
- result = @builder.index(val[0], val[1], val[2], val[3])
1627
- }
1628
-
1629
- brace_block: tLCURLY
1630
- {
1631
- @static_env.extend_dynamic
1632
- @context.push(:block)
1633
- }
1634
- opt_block_param compstmt tRCURLY
1635
- {
1636
- result = [ val[0], val[2], val[3], val[4] ]
1637
-
1638
- @static_env.unextend
1639
- @context.pop
1640
- }
1641
- | kDO
1642
- {
1643
- @static_env.extend_dynamic
1644
- @context.push(:block)
1645
- }
1646
- opt_block_param compstmt kEND
1647
- {
1648
- result = [ val[0], val[2], val[3], val[4] ]
1649
-
1650
- @static_env.unextend
1651
- @context.pop
1652
- }
1653
-
1654
- case_body: kWHEN args then compstmt cases
1655
- {
1656
- result = [ @builder.when(val[0], val[1], val[2], val[3]),
1657
- *val[4] ]
1658
- }
1659
-
1660
- cases: opt_else
1661
- {
1662
- result = [ val[0] ]
1663
- }
1664
- | case_body
1665
-
1666
- opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
1667
- {
1668
- assoc_t, exc_var = val[2]
1669
-
1670
- if val[1]
1671
- exc_list = @builder.array(nil, val[1], nil)
1672
- end
1673
-
1674
- result = [ @builder.rescue_body(val[0],
1675
- exc_list, assoc_t, exc_var,
1676
- val[3], val[4]),
1677
- *val[5] ]
1678
- }
1679
- |
1680
- {
1681
- result = []
1682
- }
1683
-
1684
- exc_list: arg_value
1685
- {
1686
- result = [ val[0] ]
1687
- }
1688
- | mrhs
1689
- | none
1690
-
1691
- exc_var: tASSOC lhs
1692
- {
1693
- result = [ val[0], val[1] ]
1694
- }
1695
- | none
1696
-
1697
- opt_ensure: kENSURE compstmt
1698
- {
1699
- result = [ val[0], val[1] ]
1700
- }
1701
- | none
1702
-
1703
- literal: numeric
1704
- | symbol
1705
- | dsym
1706
-
1707
- strings: string
1708
- {
1709
- result = @builder.string_compose(nil, val[0], nil)
1710
- }
1711
-
1712
- string: string1
1713
- {
1714
- result = [ val[0] ]
1715
- }
1716
- | string string1
1717
- {
1718
- result = val[0] << val[1]
1719
- }
1720
-
1721
- string1: tSTRING_BEG string_contents tSTRING_END
1722
- {
1723
- result = @builder.string_compose(val[0], val[1], val[2])
1724
- }
1725
- | tSTRING
1726
- {
1727
- result = @builder.string(val[0])
1728
- }
1729
- | tCHARACTER
1730
- {
1731
- result = @builder.character(val[0])
1732
- }
1733
-
1734
- xstring: tXSTRING_BEG xstring_contents tSTRING_END
1735
- {
1736
- result = @builder.xstring_compose(val[0], val[1], val[2])
1737
- }
1738
-
1739
- regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT
1740
- {
1741
- opts = @builder.regexp_options(val[3])
1742
- result = @builder.regexp_compose(val[0], val[1], val[2], opts)
1743
- }
1744
-
1745
- words: tWORDS_BEG word_list tSTRING_END
1746
- {
1747
- result = @builder.words_compose(val[0], val[1], val[2])
1748
- }
1749
-
1750
- word_list: # nothing
1751
- {
1752
- result = []
1753
- }
1754
- | word_list word tSPACE
1755
- {
1756
- result = val[0] << @builder.word(val[1])
1757
- }
1758
-
1759
- word: string_content
1760
- {
1761
- result = [ val[0] ]
1762
- }
1763
- | word string_content
1764
- {
1765
- result = val[0] << val[1]
1766
- }
1767
-
1768
- symbols: tSYMBOLS_BEG symbol_list tSTRING_END
1769
- {
1770
- result = @builder.symbols_compose(val[0], val[1], val[2])
1771
- }
1772
-
1773
- symbol_list: # nothing
1774
- {
1775
- result = []
1776
- }
1777
- | symbol_list word tSPACE
1778
- {
1779
- result = val[0] << @builder.word(val[1])
1780
- }
1781
-
1782
- qwords: tQWORDS_BEG qword_list tSTRING_END
1783
- {
1784
- result = @builder.words_compose(val[0], val[1], val[2])
1785
- }
1786
-
1787
- qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END
1788
- {
1789
- result = @builder.symbols_compose(val[0], val[1], val[2])
1790
- }
1791
-
1792
- qword_list: # nothing
1793
- {
1794
- result = []
1795
- }
1796
- | qword_list tSTRING_CONTENT tSPACE
1797
- {
1798
- result = val[0] << @builder.string_internal(val[1])
1799
- }
1800
-
1801
- qsym_list: # nothing
1802
- {
1803
- result = []
1804
- }
1805
- | qsym_list tSTRING_CONTENT tSPACE
1806
- {
1807
- result = val[0] << @builder.symbol_internal(val[1])
1808
- }
1809
-
1810
- string_contents: # nothing
1811
- {
1812
- result = []
1813
- }
1814
- | string_contents string_content
1815
- {
1816
- result = val[0] << val[1]
1817
- }
1818
-
1819
- xstring_contents: # nothing
1820
- {
1821
- result = []
1822
- }
1823
- | xstring_contents string_content
1824
- {
1825
- result = val[0] << val[1]
1826
- }
1827
-
1828
- regexp_contents: # nothing
1829
- {
1830
- result = []
1831
- }
1832
- | regexp_contents string_content
1833
- {
1834
- result = val[0] << val[1]
1835
- }
1836
-
1837
- string_content: tSTRING_CONTENT
1838
- {
1839
- result = @builder.string_internal(val[0])
1840
- }
1841
- | tSTRING_DVAR string_dvar
1842
- {
1843
- result = val[1]
1844
- }
1845
- | tSTRING_DBEG
1846
- {
1847
- @lexer.cond.push(false)
1848
- @lexer.cmdarg.push(false)
1849
- }
1850
- compstmt tSTRING_DEND
1851
- {
1852
- @lexer.cond.lexpop
1853
- @lexer.cmdarg.lexpop
1854
-
1855
- result = @builder.begin(val[0], val[2], val[3])
1856
- }
1857
-
1858
- string_dvar: tGVAR
1859
- {
1860
- result = @builder.gvar(val[0])
1861
- }
1862
- | tIVAR
1863
- {
1864
- result = @builder.ivar(val[0])
1865
- }
1866
- | tCVAR
1867
- {
1868
- result = @builder.cvar(val[0])
1869
- }
1870
- | backref
1871
-
1872
-
1873
- symbol: tSYMBOL
1874
- {
1875
- result = @builder.symbol(val[0])
1876
- }
1877
-
1878
- dsym: tSYMBEG xstring_contents tSTRING_END
1879
- {
1880
- result = @builder.symbol_compose(val[0], val[1], val[2])
1881
- }
1882
-
1883
- numeric: tINTEGER
1884
- {
1885
- result = @builder.integer(val[0])
1886
- }
1887
- | tFLOAT
1888
- {
1889
- result = @builder.float(val[0])
1890
- }
1891
- | tUNARY_NUM tINTEGER =tLOWEST
1892
- {
1893
- num = @builder.integer(val[1])
1894
- if @builder.respond_to? :negate
1895
- # AST builder interface compatibility
1896
- result = @builder.negate(val[0], num)
1897
- else
1898
- result = @builder.unary_num(val[0], num)
1899
- end
1900
- }
1901
- | tUNARY_NUM tFLOAT =tLOWEST
1902
- {
1903
- num = @builder.float(val[1])
1904
- if @builder.respond_to? :negate
1905
- # AST builder interface compatibility
1906
- result = @builder.negate(val[0], num)
1907
- else
1908
- result = @builder.unary_num(val[0], num)
1909
- end
1910
- }
1911
-
1912
- user_variable: tIDENTIFIER
1913
- {
1914
- result = @builder.ident(val[0])
1915
- }
1916
- | tIVAR
1917
- {
1918
- result = @builder.ivar(val[0])
1919
- }
1920
- | tGVAR
1921
- {
1922
- result = @builder.gvar(val[0])
1923
- }
1924
- | tCONSTANT
1925
- {
1926
- result = @builder.const(val[0])
1927
- }
1928
- | tCVAR
1929
- {
1930
- result = @builder.cvar(val[0])
1931
- }
1932
-
1933
- keyword_variable: kNIL
1934
- {
1935
- result = @builder.nil(val[0])
1936
- }
1937
- | kSELF
1938
- {
1939
- result = @builder.self(val[0])
1940
- }
1941
- | kTRUE
1942
- {
1943
- result = @builder.true(val[0])
1944
- }
1945
- | kFALSE
1946
- {
1947
- result = @builder.false(val[0])
1948
- }
1949
- | k__FILE__
1950
- {
1951
- result = @builder.__FILE__(val[0])
1952
- }
1953
- | k__LINE__
1954
- {
1955
- result = @builder.__LINE__(val[0])
1956
- }
1957
- | k__ENCODING__
1958
- {
1959
- result = @builder.__ENCODING__(val[0])
1960
- }
1961
-
1962
- var_ref: user_variable
1963
- {
1964
- result = @builder.accessible(val[0])
1965
- }
1966
- | keyword_variable
1967
- {
1968
- result = @builder.accessible(val[0])
1969
- }
1970
-
1971
- var_lhs: user_variable
1972
- {
1973
- result = @builder.assignable(val[0])
1974
- }
1975
- | keyword_variable
1976
- {
1977
- result = @builder.assignable(val[0])
1978
- }
1979
-
1980
- backref: tNTH_REF
1981
- {
1982
- result = @builder.nth_ref(val[0])
1983
- }
1984
- | tBACK_REF
1985
- {
1986
- result = @builder.back_ref(val[0])
1987
- }
1988
-
1989
- superclass: term
1990
- {
1991
- result = nil
1992
- }
1993
- | tLT
1994
- {
1995
- @lexer.state = :expr_value
1996
- }
1997
- expr_value term
1998
- {
1999
- result = [ val[0], val[2] ]
2000
- }
2001
- | error term
2002
- {
2003
- yyerrok
2004
- result = nil
2005
- }
2006
-
2007
- f_arglist: tLPAREN2 f_args rparen
2008
- {
2009
- result = @builder.args(val[0], val[1], val[2])
2010
-
2011
- @lexer.state = :expr_value
2012
- }
2013
- | f_args term
2014
- {
2015
- result = @builder.args(nil, val[0], nil)
2016
- }
2017
-
2018
- args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg
2019
- {
2020
- result = val[0].concat(val[2]).concat(val[3])
2021
- }
2022
- | f_kwarg opt_f_block_arg
2023
- {
2024
- result = val[0].concat(val[1])
2025
- }
2026
- | f_kwrest opt_f_block_arg
2027
- {
2028
- result = val[0].concat(val[1])
2029
- }
2030
- | f_block_arg
2031
- {
2032
- result = [ val[0] ]
2033
- }
2034
-
2035
- opt_args_tail: tCOMMA args_tail
2036
- {
2037
- result = val[1]
2038
- }
2039
- | # nothing
2040
- {
2041
- result = []
2042
- }
2043
-
2044
- f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail
2045
- {
2046
- result = val[0].
2047
- concat(val[2]).
2048
- concat(val[4]).
2049
- concat(val[5])
2050
- }
2051
- | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2052
- {
2053
- result = val[0].
2054
- concat(val[2]).
2055
- concat(val[4]).
2056
- concat(val[6]).
2057
- concat(val[7])
2058
- }
2059
- | f_arg tCOMMA f_optarg opt_args_tail
2060
- {
2061
- result = val[0].
2062
- concat(val[2]).
2063
- concat(val[3])
2064
- }
2065
- | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail
2066
- {
2067
- result = val[0].
2068
- concat(val[2]).
2069
- concat(val[4]).
2070
- concat(val[5])
2071
- }
2072
- | f_arg tCOMMA f_rest_arg opt_args_tail
2073
- {
2074
- result = val[0].
2075
- concat(val[2]).
2076
- concat(val[3])
2077
- }
2078
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2079
- {
2080
- result = val[0].
2081
- concat(val[2]).
2082
- concat(val[4]).
2083
- concat(val[5])
2084
- }
2085
- | f_arg opt_args_tail
2086
- {
2087
- result = val[0].
2088
- concat(val[1])
2089
- }
2090
- | f_optarg tCOMMA f_rest_arg opt_args_tail
2091
- {
2092
- result = val[0].
2093
- concat(val[2]).
2094
- concat(val[3])
2095
- }
2096
- | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2097
- {
2098
- result = val[0].
2099
- concat(val[2]).
2100
- concat(val[4]).
2101
- concat(val[5])
2102
- }
2103
- | f_optarg opt_args_tail
2104
- {
2105
- result = val[0].
2106
- concat(val[1])
2107
- }
2108
- | f_optarg tCOMMA f_arg opt_args_tail
2109
- {
2110
- result = val[0].
2111
- concat(val[2]).
2112
- concat(val[3])
2113
- }
2114
- | f_rest_arg opt_args_tail
2115
- {
2116
- result = val[0].
2117
- concat(val[1])
2118
- }
2119
- | f_rest_arg tCOMMA f_arg opt_args_tail
2120
- {
2121
- result = val[0].
2122
- concat(val[2]).
2123
- concat(val[3])
2124
- }
2125
- | args_tail
2126
- {
2127
- result = val[0]
2128
- }
2129
- | # nothing
2130
- {
2131
- result = []
2132
- }
2133
-
2134
- f_bad_arg: tCONSTANT
2135
- {
2136
- diagnostic :error, :argument_const, nil, val[0]
2137
- }
2138
- | tIVAR
2139
- {
2140
- diagnostic :error, :argument_ivar, nil, val[0]
2141
- }
2142
- | tGVAR
2143
- {
2144
- diagnostic :error, :argument_gvar, nil, val[0]
2145
- }
2146
- | tCVAR
2147
- {
2148
- diagnostic :error, :argument_cvar, nil, val[0]
2149
- }
2150
-
2151
- f_norm_arg: f_bad_arg
2152
- | tIDENTIFIER
2153
-
2154
- f_arg_item: f_norm_arg
2155
- {
2156
- @static_env.declare val[0][0]
2157
-
2158
- result = @builder.arg(val[0])
2159
- }
2160
- | tLPAREN f_margs rparen
2161
- {
2162
- result = @builder.multi_lhs(val[0], val[1], val[2])
2163
- }
2164
-
2165
- f_arg: f_arg_item
2166
- {
2167
- result = [ val[0] ]
2168
- }
2169
- | f_arg tCOMMA f_arg_item
2170
- {
2171
- result = val[0] << val[2]
2172
- }
2173
-
2174
- f_kw: tLABEL arg_value
2175
- {
2176
- check_kwarg_name(val[0])
2177
-
2178
- @static_env.declare val[0][0]
2179
-
2180
- result = @builder.kwoptarg(val[0], val[1])
2181
- }
2182
-
2183
- f_block_kw: tLABEL primary_value
2184
- {
2185
- check_kwarg_name(val[0])
2186
-
2187
- @static_env.declare val[0][0]
2188
-
2189
- result = @builder.kwoptarg(val[0], val[1])
2190
- }
2191
-
2192
- f_block_kwarg: f_block_kw
2193
- {
2194
- result = [ val[0] ]
2195
- }
2196
- | f_block_kwarg tCOMMA f_block_kw
2197
- {
2198
- result = val[0] << val[2]
2199
- }
2200
-
2201
- f_kwarg: f_kw
2202
- {
2203
- result = [ val[0] ]
2204
- }
2205
- | f_kwarg tCOMMA f_kw
2206
- {
2207
- result = val[0] << val[2]
2208
- }
2209
-
2210
- kwrest_mark: tPOW | tDSTAR
2211
-
2212
- f_kwrest: kwrest_mark tIDENTIFIER
2213
- {
2214
- @static_env.declare val[1][0]
2215
-
2216
- result = [ @builder.kwrestarg(val[0], val[1]) ]
2217
- }
2218
- | kwrest_mark
2219
- {
2220
- result = [ @builder.kwrestarg(val[0]) ]
2221
- }
2222
-
2223
- f_opt: tIDENTIFIER tEQL arg_value
2224
- {
2225
- @static_env.declare val[0][0]
2226
-
2227
- result = @builder.optarg(val[0], val[1], val[2])
2228
- }
2229
-
2230
- f_block_opt: tIDENTIFIER tEQL primary_value
2231
- {
2232
- @static_env.declare val[0][0]
2233
-
2234
- result = @builder.optarg(val[0], val[1], val[2])
2235
- }
2236
-
2237
- f_block_optarg: f_block_opt
2238
- {
2239
- result = [ val[0] ]
2240
- }
2241
- | f_block_optarg tCOMMA f_block_opt
2242
- {
2243
- result = val[0] << val[2]
2244
- }
2245
-
2246
- f_optarg: f_opt
2247
- {
2248
- result = [ val[0] ]
2249
- }
2250
- | f_optarg tCOMMA f_opt
2251
- {
2252
- result = val[0] << val[2]
2253
- }
2254
-
2255
- restarg_mark: tSTAR2 | tSTAR
2256
-
2257
- f_rest_arg: restarg_mark tIDENTIFIER
2258
- {
2259
- @static_env.declare val[1][0]
2260
-
2261
- result = [ @builder.restarg(val[0], val[1]) ]
2262
- }
2263
- | restarg_mark
2264
- {
2265
- result = [ @builder.restarg(val[0]) ]
2266
- }
2267
-
2268
- blkarg_mark: tAMPER2 | tAMPER
2269
-
2270
- f_block_arg: blkarg_mark tIDENTIFIER
2271
- {
2272
- @static_env.declare val[1][0]
2273
-
2274
- result = @builder.blockarg(val[0], val[1])
2275
- }
2276
-
2277
- opt_f_block_arg: tCOMMA f_block_arg
2278
- {
2279
- result = [ val[1] ]
2280
- }
2281
- |
2282
- {
2283
- result = []
2284
- }
2285
-
2286
- singleton: var_ref
2287
- | tLPAREN2 expr rparen
2288
- {
2289
- result = val[1]
2290
- }
2291
-
2292
- assoc_list: # nothing
2293
- {
2294
- result = []
2295
- }
2296
- | assocs trailer
2297
-
2298
- assocs: assoc
2299
- {
2300
- result = [ val[0] ]
2301
- }
2302
- | assocs tCOMMA assoc
2303
- {
2304
- result = val[0] << val[2]
2305
- }
2306
-
2307
- assoc: arg_value tASSOC arg_value
2308
- {
2309
- result = @builder.pair(val[0], val[1], val[2])
2310
- }
2311
- | tLABEL arg_value
2312
- {
2313
- result = @builder.pair_keyword(val[0], val[1])
2314
- }
2315
- | tDSTAR arg_value
2316
- {
2317
- result = @builder.kwsplat(val[0], val[1])
2318
- }
2319
-
2320
- operation: tIDENTIFIER | tCONSTANT | tFID
2321
- operation2: tIDENTIFIER | tCONSTANT | tFID | op
2322
- operation3: tIDENTIFIER | tFID | op
2323
- dot_or_colon: tDOT | tCOLON2
2324
- opt_terms: | terms
2325
- opt_nl: | tNL
2326
- rparen: opt_nl tRPAREN
2327
- {
2328
- result = val[1]
2329
- }
2330
- rbracket: opt_nl tRBRACK
2331
- {
2332
- result = val[1]
2333
- }
2334
- trailer: | tNL | tCOMMA
2335
-
2336
- term: tSEMI
2337
- {
2338
- yyerrok
2339
- }
2340
- | tNL
2341
-
2342
- terms: term
2343
- | terms tSEMI
2344
-
2345
- none: # nothing
2346
- {
2347
- result = nil
2348
- }
2349
- end
2350
-
2351
- ---- header
2352
-
2353
- require 'parser'
2354
-
2355
- ---- inner
2356
-
2357
- def version
2358
- 20
2359
- end
2360
-
2361
- def default_encoding
2362
- Encoding::UTF_8
2363
- end