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