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,2377 +0,0 @@
1
- class Parser::Ruby23
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 tLABEL_END tANDDOT
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 call_op 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 call_op 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 call_op 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 call_op 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 call_op 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 call_op 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 call_op 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 call_op 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 call_op 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 call_op 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
- | arg tEH arg opt_nl tCOLON arg
789
- {
790
- result = @builder.ternary(val[0], val[1],
791
- val[2], val[4], val[5])
792
- }
793
- | primary
794
-
795
- arg_value: arg
796
-
797
- aref_args: none
798
- | args trailer
799
- | args tCOMMA assocs trailer
800
- {
801
- result = val[0] << @builder.associate(nil, val[2], nil)
802
- }
803
- | assocs trailer
804
- {
805
- result = [ @builder.associate(nil, val[0], nil) ]
806
- }
807
-
808
- paren_args: tLPAREN2 opt_call_args rparen
809
- {
810
- result = val
811
- }
812
-
813
- opt_paren_args: # nothing
814
- {
815
- result = [ nil, [], nil ]
816
- }
817
- | paren_args
818
-
819
- opt_call_args: # nothing
820
- {
821
- result = []
822
- }
823
- | call_args
824
- | args tCOMMA
825
- | args tCOMMA assocs tCOMMA
826
- {
827
- result = val[0] << @builder.associate(nil, val[2], nil)
828
- }
829
- | assocs tCOMMA
830
- {
831
- result = [ @builder.associate(nil, val[0], nil) ]
832
- }
833
-
834
- call_args: command
835
- {
836
- result = [ val[0] ]
837
- }
838
- | args opt_block_arg
839
- {
840
- result = val[0].concat(val[1])
841
- }
842
- | assocs opt_block_arg
843
- {
844
- result = [ @builder.associate(nil, val[0], nil) ]
845
- result.concat(val[1])
846
- }
847
- | args tCOMMA assocs opt_block_arg
848
- {
849
- assocs = @builder.associate(nil, val[2], nil)
850
- result = val[0] << assocs
851
- result.concat(val[3])
852
- }
853
- | block_arg
854
- {
855
- result = [ val[0] ]
856
- }
857
-
858
- command_args: {
859
- result = @lexer.cmdarg.dup
860
- @lexer.cmdarg.push(true)
861
- }
862
- call_args
863
- {
864
- @lexer.cmdarg = val[0]
865
-
866
- result = val[1]
867
- }
868
-
869
- block_arg: tAMPER arg_value
870
- {
871
- result = @builder.block_pass(val[0], val[1])
872
- }
873
-
874
- opt_block_arg: tCOMMA block_arg
875
- {
876
- result = [ val[1] ]
877
- }
878
- | # nothing
879
- {
880
- result = []
881
- }
882
-
883
- args: arg_value
884
- {
885
- result = [ val[0] ]
886
- }
887
- | tSTAR arg_value
888
- {
889
- result = [ @builder.splat(val[0], val[1]) ]
890
- }
891
- | args tCOMMA arg_value
892
- {
893
- result = val[0] << val[2]
894
- }
895
- | args tCOMMA tSTAR arg_value
896
- {
897
- result = val[0] << @builder.splat(val[2], val[3])
898
- }
899
-
900
- mrhs_arg: mrhs
901
- {
902
- result = @builder.array(nil, val[0], nil)
903
- }
904
- | arg_value
905
-
906
- mrhs: args tCOMMA arg_value
907
- {
908
- result = val[0] << val[2]
909
- }
910
- | args tCOMMA tSTAR arg_value
911
- {
912
- result = val[0] << @builder.splat(val[2], val[3])
913
- }
914
- | tSTAR arg_value
915
- {
916
- result = [ @builder.splat(val[0], val[1]) ]
917
- }
918
-
919
- primary: literal
920
- | strings
921
- | xstring
922
- | regexp
923
- | words
924
- | qwords
925
- | symbols
926
- | qsymbols
927
- | var_ref
928
- | backref
929
- | tFID
930
- {
931
- result = @builder.call_method(nil, nil, val[0])
932
- }
933
- | kBEGIN
934
- {
935
- result = @lexer.cmdarg.dup
936
- @lexer.cmdarg.clear
937
- }
938
- bodystmt kEND
939
- {
940
- @lexer.cmdarg = val[1]
941
-
942
- result = @builder.begin_keyword(val[0], val[2], val[3])
943
- }
944
- | tLPAREN_ARG
945
- {
946
- result = @lexer.cmdarg.dup
947
- @lexer.cmdarg.clear
948
- }
949
- expr
950
- {
951
- @lexer.state = :expr_endarg
952
- }
953
- opt_nl tRPAREN
954
- {
955
- @lexer.cmdarg = val[1]
956
-
957
- result = @builder.begin(val[0], val[2], val[5])
958
- }
959
- | tLPAREN_ARG
960
- {
961
- @lexer.state = :expr_endarg
962
- }
963
- opt_nl tRPAREN
964
- {
965
- result = @builder.begin(val[0], nil, val[3])
966
- }
967
- | tLPAREN compstmt tRPAREN
968
- {
969
- result = @builder.begin(val[0], val[1], val[2])
970
- }
971
- | primary_value tCOLON2 tCONSTANT
972
- {
973
- result = @builder.const_fetch(val[0], val[1], val[2])
974
- }
975
- | tCOLON3 tCONSTANT
976
- {
977
- result = @builder.const_global(val[0], val[1])
978
- }
979
- | tLBRACK aref_args tRBRACK
980
- {
981
- result = @builder.array(val[0], val[1], val[2])
982
- }
983
- | tLBRACE assoc_list tRCURLY
984
- {
985
- result = @builder.associate(val[0], val[1], val[2])
986
- }
987
- | kRETURN
988
- {
989
- result = @builder.keyword_cmd(:return, val[0])
990
- }
991
- | kYIELD tLPAREN2 call_args rparen
992
- {
993
- result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3])
994
- }
995
- | kYIELD tLPAREN2 rparen
996
- {
997
- result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2])
998
- }
999
- | kYIELD
1000
- {
1001
- result = @builder.keyword_cmd(:yield, val[0])
1002
- }
1003
- | kDEFINED opt_nl tLPAREN2 expr rparen
1004
- {
1005
- result = @builder.keyword_cmd(:defined?, val[0],
1006
- val[2], [ val[3] ], val[4])
1007
- }
1008
- | kNOT tLPAREN2 expr rparen
1009
- {
1010
- result = @builder.not_op(val[0], val[1], val[2], val[3])
1011
- }
1012
- | kNOT tLPAREN2 rparen
1013
- {
1014
- result = @builder.not_op(val[0], val[1], nil, val[2])
1015
- }
1016
- | fcall brace_block
1017
- {
1018
- method_call = @builder.call_method(nil, nil, val[0])
1019
-
1020
- begin_t, args, body, end_t = val[1]
1021
- result = @builder.block(method_call,
1022
- begin_t, args, body, end_t)
1023
- }
1024
- | method_call
1025
- | method_call brace_block
1026
- {
1027
- begin_t, args, body, end_t = val[1]
1028
- result = @builder.block(val[0],
1029
- begin_t, args, body, end_t)
1030
- }
1031
- | tLAMBDA
1032
- {
1033
- @context.push(:lambda)
1034
- }
1035
- lambda
1036
- {
1037
- lambda_call = @builder.call_lambda(val[0])
1038
-
1039
- args, (begin_t, body, end_t) = val[2]
1040
- result = @builder.block(lambda_call,
1041
- begin_t, args, body, end_t)
1042
- }
1043
- | kIF expr_value then compstmt if_tail kEND
1044
- {
1045
- else_t, else_ = val[4]
1046
- result = @builder.condition(val[0], val[1], val[2],
1047
- val[3], else_t,
1048
- else_, val[5])
1049
- }
1050
- | kUNLESS expr_value then compstmt opt_else kEND
1051
- {
1052
- else_t, else_ = val[4]
1053
- result = @builder.condition(val[0], val[1], val[2],
1054
- else_, else_t,
1055
- val[3], val[5])
1056
- }
1057
- | kWHILE
1058
- {
1059
- @lexer.cond.push(true)
1060
- }
1061
- expr_value do
1062
- {
1063
- @lexer.cond.pop
1064
- }
1065
- compstmt kEND
1066
- {
1067
- result = @builder.loop(:while, val[0], val[2], val[3],
1068
- val[5], val[6])
1069
- }
1070
- | kUNTIL
1071
- {
1072
- @lexer.cond.push(true)
1073
- }
1074
- expr_value do
1075
- {
1076
- @lexer.cond.pop
1077
- }
1078
- compstmt kEND
1079
- {
1080
- result = @builder.loop(:until, val[0], val[2], val[3],
1081
- val[5], val[6])
1082
- }
1083
- | kCASE expr_value opt_terms case_body kEND
1084
- {
1085
- *when_bodies, (else_t, else_body) = *val[3]
1086
-
1087
- result = @builder.case(val[0], val[1],
1088
- when_bodies, else_t, else_body,
1089
- val[4])
1090
- }
1091
- | kCASE opt_terms case_body kEND
1092
- {
1093
- *when_bodies, (else_t, else_body) = *val[2]
1094
-
1095
- result = @builder.case(val[0], nil,
1096
- when_bodies, else_t, else_body,
1097
- val[3])
1098
- }
1099
- | kFOR for_var kIN
1100
- {
1101
- @lexer.cond.push(true)
1102
- }
1103
- expr_value do
1104
- {
1105
- @lexer.cond.pop
1106
- }
1107
- compstmt kEND
1108
- {
1109
- result = @builder.for(val[0], val[1],
1110
- val[2], val[4],
1111
- val[5], val[7], val[8])
1112
- }
1113
- | kCLASS cpath superclass
1114
- {
1115
- @static_env.extend_static
1116
- @lexer.push_cmdarg
1117
- @context.push(:class)
1118
- }
1119
- bodystmt kEND
1120
- {
1121
- unless @context.class_definition_allowed?
1122
- diagnostic :error, :class_in_def, nil, val[0]
1123
- end
1124
-
1125
- lt_t, superclass = val[2]
1126
- result = @builder.def_class(val[0], val[1],
1127
- lt_t, superclass,
1128
- val[4], val[5])
1129
-
1130
- @lexer.pop_cmdarg
1131
- @static_env.unextend
1132
- @context.pop
1133
- }
1134
- | kCLASS tLSHFT expr term
1135
- {
1136
- @static_env.extend_static
1137
- @lexer.push_cmdarg
1138
- @context.push(:sclass)
1139
- }
1140
- bodystmt kEND
1141
- {
1142
- result = @builder.def_sclass(val[0], val[1], val[2],
1143
- val[5], val[6])
1144
-
1145
- @lexer.pop_cmdarg
1146
- @static_env.unextend
1147
- @context.pop
1148
- }
1149
- | kMODULE cpath
1150
- {
1151
- @static_env.extend_static
1152
- @lexer.push_cmdarg
1153
- @context.push(:module)
1154
- }
1155
- bodystmt kEND
1156
- {
1157
- unless @context.module_definition_allowed?
1158
- diagnostic :error, :module_in_def, nil, val[0]
1159
- end
1160
-
1161
- result = @builder.def_module(val[0], val[1],
1162
- val[3], val[4])
1163
-
1164
- @lexer.pop_cmdarg
1165
- @static_env.unextend
1166
- @context.pop
1167
- }
1168
- | kDEF fname
1169
- {
1170
- @static_env.extend_static
1171
- @lexer.push_cmdarg
1172
- @context.push(:def)
1173
- }
1174
- f_arglist bodystmt kEND
1175
- {
1176
- result = @builder.def_method(val[0], val[1],
1177
- val[3], val[4], val[5])
1178
-
1179
- @lexer.pop_cmdarg
1180
- @static_env.unextend
1181
- @context.pop
1182
- }
1183
- | kDEF singleton dot_or_colon
1184
- {
1185
- @lexer.state = :expr_fname
1186
- }
1187
- fname
1188
- {
1189
- @static_env.extend_static
1190
- @lexer.push_cmdarg
1191
- @context.push(:defs)
1192
- }
1193
- f_arglist bodystmt kEND
1194
- {
1195
- result = @builder.def_singleton(val[0], val[1], val[2],
1196
- val[4], val[6], val[7], val[8])
1197
-
1198
- @lexer.pop_cmdarg
1199
- @static_env.unextend
1200
- @context.pop
1201
- }
1202
- | kBREAK
1203
- {
1204
- result = @builder.keyword_cmd(:break, val[0])
1205
- }
1206
- | kNEXT
1207
- {
1208
- result = @builder.keyword_cmd(:next, val[0])
1209
- }
1210
- | kREDO
1211
- {
1212
- result = @builder.keyword_cmd(:redo, val[0])
1213
- }
1214
- | kRETRY
1215
- {
1216
- result = @builder.keyword_cmd(:retry, val[0])
1217
- }
1218
-
1219
- primary_value: primary
1220
-
1221
- then: term
1222
- | kTHEN
1223
- | term kTHEN
1224
- {
1225
- result = val[1]
1226
- }
1227
-
1228
- do: term
1229
- | kDO_COND
1230
-
1231
- if_tail: opt_else
1232
- | kELSIF expr_value then compstmt if_tail
1233
- {
1234
- else_t, else_ = val[4]
1235
- result = [ val[0],
1236
- @builder.condition(val[0], val[1], val[2],
1237
- val[3], else_t,
1238
- else_, nil),
1239
- ]
1240
- }
1241
-
1242
- opt_else: none
1243
- | kELSE compstmt
1244
- {
1245
- result = val
1246
- }
1247
-
1248
- for_var: lhs
1249
- | mlhs
1250
-
1251
- f_marg: f_norm_arg
1252
- {
1253
- result = @builder.arg(val[0])
1254
- }
1255
- | tLPAREN f_margs rparen
1256
- {
1257
- result = @builder.multi_lhs(val[0], val[1], val[2])
1258
- }
1259
-
1260
- f_marg_list: f_marg
1261
- {
1262
- result = [ val[0] ]
1263
- }
1264
- | f_marg_list tCOMMA f_marg
1265
- {
1266
- result = val[0] << val[2]
1267
- }
1268
-
1269
- f_margs: f_marg_list
1270
- | f_marg_list tCOMMA tSTAR f_norm_arg
1271
- {
1272
- result = val[0].
1273
- push(@builder.restarg(val[2], val[3]))
1274
- }
1275
- | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
1276
- {
1277
- result = val[0].
1278
- push(@builder.restarg(val[2], val[3])).
1279
- concat(val[5])
1280
- }
1281
- | f_marg_list tCOMMA tSTAR
1282
- {
1283
- result = val[0].
1284
- push(@builder.restarg(val[2]))
1285
- }
1286
- | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
1287
- {
1288
- result = val[0].
1289
- push(@builder.restarg(val[2])).
1290
- concat(val[4])
1291
- }
1292
- | tSTAR f_norm_arg
1293
- {
1294
- result = [ @builder.restarg(val[0], val[1]) ]
1295
- }
1296
- | tSTAR f_norm_arg tCOMMA f_marg_list
1297
- {
1298
- result = [ @builder.restarg(val[0], val[1]),
1299
- *val[3] ]
1300
- }
1301
- | tSTAR
1302
- {
1303
- result = [ @builder.restarg(val[0]) ]
1304
- }
1305
- | tSTAR tCOMMA f_marg_list
1306
- {
1307
- result = [ @builder.restarg(val[0]),
1308
- *val[2] ]
1309
- }
1310
-
1311
- block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
1312
- {
1313
- result = val[0].concat(val[2]).concat(val[3])
1314
- }
1315
- | f_block_kwarg opt_f_block_arg
1316
- {
1317
- result = val[0].concat(val[1])
1318
- }
1319
- | f_kwrest opt_f_block_arg
1320
- {
1321
- result = val[0].concat(val[1])
1322
- }
1323
- | f_block_arg
1324
- {
1325
- result = [ val[0] ]
1326
- }
1327
-
1328
- opt_block_args_tail:
1329
- tCOMMA block_args_tail
1330
- {
1331
- result = val[1]
1332
- }
1333
- | # nothing
1334
- {
1335
- result = []
1336
- }
1337
-
1338
- block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1339
- {
1340
- result = val[0].
1341
- concat(val[2]).
1342
- concat(val[4]).
1343
- concat(val[5])
1344
- }
1345
- | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1346
- {
1347
- result = val[0].
1348
- concat(val[2]).
1349
- concat(val[4]).
1350
- concat(val[6]).
1351
- concat(val[7])
1352
- }
1353
- | f_arg tCOMMA f_block_optarg opt_block_args_tail
1354
- {
1355
- result = val[0].
1356
- concat(val[2]).
1357
- concat(val[3])
1358
- }
1359
- | f_arg tCOMMA f_block_optarg tCOMMA f_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_rest_arg opt_block_args_tail
1367
- {
1368
- result = val[0].
1369
- concat(val[2]).
1370
- concat(val[3])
1371
- }
1372
- | f_arg tCOMMA
1373
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
1374
- {
1375
- result = val[0].
1376
- concat(val[2]).
1377
- concat(val[4]).
1378
- concat(val[5])
1379
- }
1380
- | f_arg opt_block_args_tail
1381
- {
1382
- if val[1].empty? && val[0].size == 1
1383
- result = [@builder.procarg0(val[0][0])]
1384
- else
1385
- result = val[0].concat(val[1])
1386
- end
1387
- }
1388
- | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1389
- {
1390
- result = val[0].
1391
- concat(val[2]).
1392
- concat(val[3])
1393
- }
1394
- | f_block_optarg 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_block_optarg opt_block_args_tail
1402
- {
1403
- result = val[0].
1404
- concat(val[1])
1405
- }
1406
- | f_block_optarg tCOMMA f_arg opt_block_args_tail
1407
- {
1408
- result = val[0].
1409
- concat(val[2]).
1410
- concat(val[3])
1411
- }
1412
- | f_rest_arg opt_block_args_tail
1413
- {
1414
- result = val[0].
1415
- concat(val[1])
1416
- }
1417
- | f_rest_arg tCOMMA f_arg opt_block_args_tail
1418
- {
1419
- result = val[0].
1420
- concat(val[2]).
1421
- concat(val[3])
1422
- }
1423
- | block_args_tail
1424
-
1425
- opt_block_param: # nothing
1426
- {
1427
- result = @builder.args(nil, [], nil)
1428
- }
1429
- | block_param_def
1430
- {
1431
- @lexer.state = :expr_value
1432
- }
1433
-
1434
- block_param_def: tPIPE opt_bv_decl tPIPE
1435
- {
1436
- result = @builder.args(val[0], val[1], val[2])
1437
- }
1438
- | tOROP
1439
- {
1440
- result = @builder.args(val[0], [], val[0])
1441
- }
1442
- | tPIPE block_param opt_bv_decl tPIPE
1443
- {
1444
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1445
- }
1446
-
1447
- opt_bv_decl: opt_nl
1448
- {
1449
- result = []
1450
- }
1451
- | opt_nl tSEMI bv_decls opt_nl
1452
- {
1453
- result = val[2]
1454
- }
1455
-
1456
- bv_decls: bvar
1457
- {
1458
- result = [ val[0] ]
1459
- }
1460
- | bv_decls tCOMMA bvar
1461
- {
1462
- result = val[0] << val[2]
1463
- }
1464
-
1465
- bvar: tIDENTIFIER
1466
- {
1467
- @static_env.declare val[0][0]
1468
- result = @builder.shadowarg(val[0])
1469
- }
1470
- | f_bad_arg
1471
-
1472
- lambda: {
1473
- @static_env.extend_dynamic
1474
- }
1475
- f_larglist
1476
- {
1477
- result = @lexer.cmdarg.dup
1478
- @lexer.cmdarg.clear
1479
- @context.pop
1480
- }
1481
- lambda_body
1482
- {
1483
- @lexer.cmdarg = val[2]
1484
- @lexer.cmdarg.lexpop
1485
-
1486
- result = [ val[1], val[3] ]
1487
-
1488
- @static_env.unextend
1489
- }
1490
-
1491
- f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN
1492
- {
1493
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1494
- }
1495
- | f_args
1496
- {
1497
- result = @builder.args(nil, val[0], nil)
1498
- }
1499
-
1500
- lambda_body: tLAMBEG
1501
- {
1502
- @context.push(:lambda)
1503
- }
1504
- compstmt tRCURLY
1505
- {
1506
- result = [ val[0], val[2], val[3] ]
1507
- @context.pop
1508
- }
1509
- | kDO_LAMBDA
1510
- {
1511
- @context.push(:lambda)
1512
- }
1513
- compstmt kEND
1514
- {
1515
- result = [ val[0], val[2], val[3] ]
1516
- @context.pop
1517
- }
1518
-
1519
- do_block: kDO_BLOCK
1520
- {
1521
- @static_env.extend_dynamic
1522
- @context.push(:block)
1523
- }
1524
- opt_block_param compstmt kEND
1525
- {
1526
- result = [ val[0], val[2], val[3], val[4] ]
1527
-
1528
- @static_env.unextend
1529
- @context.pop
1530
- }
1531
-
1532
- block_call: command do_block
1533
- {
1534
- begin_t, block_args, body, end_t = val[1]
1535
- result = @builder.block(val[0],
1536
- begin_t, block_args, body, end_t)
1537
- }
1538
- | block_call dot_or_colon operation2 opt_paren_args
1539
- {
1540
- lparen_t, args, rparen_t = val[3]
1541
- result = @builder.call_method(val[0], val[1], val[2],
1542
- lparen_t, args, rparen_t)
1543
- }
1544
- | block_call dot_or_colon operation2 opt_paren_args brace_block
1545
- {
1546
- lparen_t, args, rparen_t = val[3]
1547
- method_call = @builder.call_method(val[0], val[1], val[2],
1548
- lparen_t, args, rparen_t)
1549
-
1550
- begin_t, args, body, end_t = val[4]
1551
- result = @builder.block(method_call,
1552
- begin_t, args, body, end_t)
1553
- }
1554
- | block_call dot_or_colon operation2 command_args do_block
1555
- {
1556
- method_call = @builder.call_method(val[0], val[1], val[2],
1557
- nil, val[3], nil)
1558
-
1559
- begin_t, args, body, end_t = val[4]
1560
- result = @builder.block(method_call,
1561
- begin_t, args, body, end_t)
1562
- }
1563
-
1564
- method_call: fcall paren_args
1565
- {
1566
- lparen_t, args, rparen_t = val[1]
1567
- result = @builder.call_method(nil, nil, val[0],
1568
- lparen_t, args, rparen_t)
1569
- }
1570
- | primary_value call_op operation2 opt_paren_args
1571
- {
1572
- lparen_t, args, rparen_t = val[3]
1573
- result = @builder.call_method(val[0], val[1], val[2],
1574
- lparen_t, args, rparen_t)
1575
- }
1576
- | primary_value tCOLON2 operation2 paren_args
1577
- {
1578
- lparen_t, args, rparen_t = val[3]
1579
- result = @builder.call_method(val[0], val[1], val[2],
1580
- lparen_t, args, rparen_t)
1581
- }
1582
- | primary_value tCOLON2 operation3
1583
- {
1584
- result = @builder.call_method(val[0], val[1], val[2])
1585
- }
1586
- | primary_value call_op paren_args
1587
- {
1588
- lparen_t, args, rparen_t = val[2]
1589
- result = @builder.call_method(val[0], val[1], nil,
1590
- lparen_t, args, rparen_t)
1591
- }
1592
- | primary_value tCOLON2 paren_args
1593
- {
1594
- lparen_t, args, rparen_t = val[2]
1595
- result = @builder.call_method(val[0], val[1], nil,
1596
- lparen_t, args, rparen_t)
1597
- }
1598
- | kSUPER paren_args
1599
- {
1600
- lparen_t, args, rparen_t = val[1]
1601
- result = @builder.keyword_cmd(:super, val[0],
1602
- lparen_t, args, rparen_t)
1603
- }
1604
- | kSUPER
1605
- {
1606
- result = @builder.keyword_cmd(:zsuper, val[0])
1607
- }
1608
- | primary_value tLBRACK2 opt_call_args rbracket
1609
- {
1610
- result = @builder.index(val[0], val[1], val[2], val[3])
1611
- }
1612
-
1613
- brace_block: tLCURLY
1614
- {
1615
- @static_env.extend_dynamic
1616
- @context.push(:block)
1617
- }
1618
- opt_block_param compstmt tRCURLY
1619
- {
1620
- result = [ val[0], val[2], val[3], val[4] ]
1621
-
1622
- @static_env.unextend
1623
- @context.pop
1624
- }
1625
- | kDO
1626
- {
1627
- @static_env.extend_dynamic
1628
- @context.push(:block)
1629
- }
1630
- opt_block_param compstmt kEND
1631
- {
1632
- result = [ val[0], val[2], val[3], val[4] ]
1633
-
1634
- @static_env.unextend
1635
- @context.pop
1636
- }
1637
-
1638
- case_body: kWHEN args then compstmt cases
1639
- {
1640
- result = [ @builder.when(val[0], val[1], val[2], val[3]),
1641
- *val[4] ]
1642
- }
1643
-
1644
- cases: opt_else
1645
- {
1646
- result = [ val[0] ]
1647
- }
1648
- | case_body
1649
-
1650
- opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
1651
- {
1652
- assoc_t, exc_var = val[2]
1653
-
1654
- if val[1]
1655
- exc_list = @builder.array(nil, val[1], nil)
1656
- end
1657
-
1658
- result = [ @builder.rescue_body(val[0],
1659
- exc_list, assoc_t, exc_var,
1660
- val[3], val[4]),
1661
- *val[5] ]
1662
- }
1663
- |
1664
- {
1665
- result = []
1666
- }
1667
-
1668
- exc_list: arg_value
1669
- {
1670
- result = [ val[0] ]
1671
- }
1672
- | mrhs
1673
- | none
1674
-
1675
- exc_var: tASSOC lhs
1676
- {
1677
- result = [ val[0], val[1] ]
1678
- }
1679
- | none
1680
-
1681
- opt_ensure: kENSURE compstmt
1682
- {
1683
- result = [ val[0], val[1] ]
1684
- }
1685
- | none
1686
-
1687
- literal: numeric
1688
- | symbol
1689
- | dsym
1690
-
1691
- strings: string
1692
- {
1693
- result = @builder.string_compose(nil, val[0], nil)
1694
- }
1695
-
1696
- string: string1
1697
- {
1698
- result = [ val[0] ]
1699
- }
1700
- | string string1
1701
- {
1702
- result = val[0] << val[1]
1703
- }
1704
-
1705
- string1: tSTRING_BEG string_contents tSTRING_END
1706
- {
1707
- string = @builder.string_compose(val[0], val[1], val[2])
1708
- result = @builder.dedent_string(string, @lexer.dedent_level)
1709
- }
1710
- | tSTRING
1711
- {
1712
- string = @builder.string(val[0])
1713
- result = @builder.dedent_string(string, @lexer.dedent_level)
1714
- }
1715
- | tCHARACTER
1716
- {
1717
- result = @builder.character(val[0])
1718
- }
1719
-
1720
- xstring: tXSTRING_BEG xstring_contents tSTRING_END
1721
- {
1722
- string = @builder.xstring_compose(val[0], val[1], val[2])
1723
- result = @builder.dedent_string(string, @lexer.dedent_level)
1724
- }
1725
-
1726
- regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT
1727
- {
1728
- opts = @builder.regexp_options(val[3])
1729
- result = @builder.regexp_compose(val[0], val[1], val[2], opts)
1730
- }
1731
-
1732
- words: tWORDS_BEG word_list tSTRING_END
1733
- {
1734
- result = @builder.words_compose(val[0], val[1], val[2])
1735
- }
1736
-
1737
- word_list: # nothing
1738
- {
1739
- result = []
1740
- }
1741
- | word_list word tSPACE
1742
- {
1743
- result = val[0] << @builder.word(val[1])
1744
- }
1745
-
1746
- word: string_content
1747
- {
1748
- result = [ val[0] ]
1749
- }
1750
- | word string_content
1751
- {
1752
- result = val[0] << val[1]
1753
- }
1754
-
1755
- symbols: tSYMBOLS_BEG symbol_list tSTRING_END
1756
- {
1757
- result = @builder.symbols_compose(val[0], val[1], val[2])
1758
- }
1759
-
1760
- symbol_list: # nothing
1761
- {
1762
- result = []
1763
- }
1764
- | symbol_list word tSPACE
1765
- {
1766
- result = val[0] << @builder.word(val[1])
1767
- }
1768
-
1769
- qwords: tQWORDS_BEG qword_list tSTRING_END
1770
- {
1771
- result = @builder.words_compose(val[0], val[1], val[2])
1772
- }
1773
-
1774
- qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END
1775
- {
1776
- result = @builder.symbols_compose(val[0], val[1], val[2])
1777
- }
1778
-
1779
- qword_list: # nothing
1780
- {
1781
- result = []
1782
- }
1783
- | qword_list tSTRING_CONTENT tSPACE
1784
- {
1785
- result = val[0] << @builder.string_internal(val[1])
1786
- }
1787
-
1788
- qsym_list: # nothing
1789
- {
1790
- result = []
1791
- }
1792
- | qsym_list tSTRING_CONTENT tSPACE
1793
- {
1794
- result = val[0] << @builder.symbol_internal(val[1])
1795
- }
1796
-
1797
- string_contents: # nothing
1798
- {
1799
- result = []
1800
- }
1801
- | string_contents string_content
1802
- {
1803
- result = val[0] << val[1]
1804
- }
1805
-
1806
- xstring_contents: # nothing
1807
- {
1808
- result = []
1809
- }
1810
- | xstring_contents string_content
1811
- {
1812
- result = val[0] << val[1]
1813
- }
1814
-
1815
- regexp_contents: # nothing
1816
- {
1817
- result = []
1818
- }
1819
- | regexp_contents string_content
1820
- {
1821
- result = val[0] << val[1]
1822
- }
1823
-
1824
- string_content: tSTRING_CONTENT
1825
- {
1826
- result = @builder.string_internal(val[0])
1827
- }
1828
- | tSTRING_DVAR string_dvar
1829
- {
1830
- result = val[1]
1831
- }
1832
- | tSTRING_DBEG
1833
- {
1834
- @lexer.cond.push(false)
1835
- @lexer.cmdarg.push(false)
1836
- }
1837
- compstmt tSTRING_DEND
1838
- {
1839
- @lexer.cond.lexpop
1840
- @lexer.cmdarg.lexpop
1841
-
1842
- result = @builder.begin(val[0], val[2], val[3])
1843
- }
1844
-
1845
- string_dvar: tGVAR
1846
- {
1847
- result = @builder.gvar(val[0])
1848
- }
1849
- | tIVAR
1850
- {
1851
- result = @builder.ivar(val[0])
1852
- }
1853
- | tCVAR
1854
- {
1855
- result = @builder.cvar(val[0])
1856
- }
1857
- | backref
1858
-
1859
-
1860
- symbol: tSYMBOL
1861
- {
1862
- result = @builder.symbol(val[0])
1863
- }
1864
-
1865
- dsym: tSYMBEG xstring_contents tSTRING_END
1866
- {
1867
- result = @builder.symbol_compose(val[0], val[1], val[2])
1868
- }
1869
-
1870
- numeric: simple_numeric
1871
- {
1872
- result = val[0]
1873
- }
1874
- | tUNARY_NUM simple_numeric =tLOWEST
1875
- {
1876
- if @builder.respond_to? :negate
1877
- # AST builder interface compatibility
1878
- result = @builder.negate(val[0], val[1])
1879
- else
1880
- result = @builder.unary_num(val[0], val[1])
1881
- end
1882
- }
1883
-
1884
- simple_numeric: tINTEGER
1885
- {
1886
- result = @builder.integer(val[0])
1887
- }
1888
- | tFLOAT
1889
- {
1890
- result = @builder.float(val[0])
1891
- }
1892
- | tRATIONAL
1893
- {
1894
- result = @builder.rational(val[0])
1895
- }
1896
- | tIMAGINARY
1897
- {
1898
- result = @builder.complex(val[0])
1899
- }
1900
-
1901
- user_variable: tIDENTIFIER
1902
- {
1903
- result = @builder.ident(val[0])
1904
- }
1905
- | tIVAR
1906
- {
1907
- result = @builder.ivar(val[0])
1908
- }
1909
- | tGVAR
1910
- {
1911
- result = @builder.gvar(val[0])
1912
- }
1913
- | tCONSTANT
1914
- {
1915
- result = @builder.const(val[0])
1916
- }
1917
- | tCVAR
1918
- {
1919
- result = @builder.cvar(val[0])
1920
- }
1921
-
1922
- keyword_variable: kNIL
1923
- {
1924
- result = @builder.nil(val[0])
1925
- }
1926
- | kSELF
1927
- {
1928
- result = @builder.self(val[0])
1929
- }
1930
- | kTRUE
1931
- {
1932
- result = @builder.true(val[0])
1933
- }
1934
- | kFALSE
1935
- {
1936
- result = @builder.false(val[0])
1937
- }
1938
- | k__FILE__
1939
- {
1940
- result = @builder.__FILE__(val[0])
1941
- }
1942
- | k__LINE__
1943
- {
1944
- result = @builder.__LINE__(val[0])
1945
- }
1946
- | k__ENCODING__
1947
- {
1948
- result = @builder.__ENCODING__(val[0])
1949
- }
1950
-
1951
- var_ref: user_variable
1952
- {
1953
- result = @builder.accessible(val[0])
1954
- }
1955
- | keyword_variable
1956
- {
1957
- result = @builder.accessible(val[0])
1958
- }
1959
-
1960
- var_lhs: user_variable
1961
- {
1962
- result = @builder.assignable(val[0])
1963
- }
1964
- | keyword_variable
1965
- {
1966
- result = @builder.assignable(val[0])
1967
- }
1968
-
1969
- backref: tNTH_REF
1970
- {
1971
- result = @builder.nth_ref(val[0])
1972
- }
1973
- | tBACK_REF
1974
- {
1975
- result = @builder.back_ref(val[0])
1976
- }
1977
-
1978
- superclass: tLT
1979
- {
1980
- @lexer.state = :expr_value
1981
- }
1982
- expr_value term
1983
- {
1984
- result = [ val[0], val[2] ]
1985
- }
1986
- | # nothing
1987
- {
1988
- result = nil
1989
- }
1990
-
1991
- f_arglist: tLPAREN2 f_args rparen
1992
- {
1993
- result = @builder.args(val[0], val[1], val[2])
1994
-
1995
- @lexer.state = :expr_value
1996
- }
1997
- | {
1998
- result = @lexer.in_kwarg
1999
- @lexer.in_kwarg = true
2000
- }
2001
- f_args term
2002
- {
2003
- @lexer.in_kwarg = val[0]
2004
- result = @builder.args(nil, val[1], nil)
2005
- }
2006
-
2007
- args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg
2008
- {
2009
- result = val[0].concat(val[2]).concat(val[3])
2010
- }
2011
- | f_kwarg opt_f_block_arg
2012
- {
2013
- result = val[0].concat(val[1])
2014
- }
2015
- | f_kwrest opt_f_block_arg
2016
- {
2017
- result = val[0].concat(val[1])
2018
- }
2019
- | f_block_arg
2020
- {
2021
- result = [ val[0] ]
2022
- }
2023
-
2024
- opt_args_tail: tCOMMA args_tail
2025
- {
2026
- result = val[1]
2027
- }
2028
- | # nothing
2029
- {
2030
- result = []
2031
- }
2032
-
2033
- f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail
2034
- {
2035
- result = val[0].
2036
- concat(val[2]).
2037
- concat(val[4]).
2038
- concat(val[5])
2039
- }
2040
- | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2041
- {
2042
- result = val[0].
2043
- concat(val[2]).
2044
- concat(val[4]).
2045
- concat(val[6]).
2046
- concat(val[7])
2047
- }
2048
- | f_arg tCOMMA f_optarg opt_args_tail
2049
- {
2050
- result = val[0].
2051
- concat(val[2]).
2052
- concat(val[3])
2053
- }
2054
- | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail
2055
- {
2056
- result = val[0].
2057
- concat(val[2]).
2058
- concat(val[4]).
2059
- concat(val[5])
2060
- }
2061
- | f_arg tCOMMA f_rest_arg opt_args_tail
2062
- {
2063
- result = val[0].
2064
- concat(val[2]).
2065
- concat(val[3])
2066
- }
2067
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2068
- {
2069
- result = val[0].
2070
- concat(val[2]).
2071
- concat(val[4]).
2072
- concat(val[5])
2073
- }
2074
- | f_arg opt_args_tail
2075
- {
2076
- result = val[0].
2077
- concat(val[1])
2078
- }
2079
- | f_optarg tCOMMA f_rest_arg opt_args_tail
2080
- {
2081
- result = val[0].
2082
- concat(val[2]).
2083
- concat(val[3])
2084
- }
2085
- | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2086
- {
2087
- result = val[0].
2088
- concat(val[2]).
2089
- concat(val[4]).
2090
- concat(val[5])
2091
- }
2092
- | f_optarg opt_args_tail
2093
- {
2094
- result = val[0].
2095
- concat(val[1])
2096
- }
2097
- | f_optarg tCOMMA f_arg opt_args_tail
2098
- {
2099
- result = val[0].
2100
- concat(val[2]).
2101
- concat(val[3])
2102
- }
2103
- | f_rest_arg opt_args_tail
2104
- {
2105
- result = val[0].
2106
- concat(val[1])
2107
- }
2108
- | f_rest_arg tCOMMA f_arg opt_args_tail
2109
- {
2110
- result = val[0].
2111
- concat(val[2]).
2112
- concat(val[3])
2113
- }
2114
- | args_tail
2115
- {
2116
- result = val[0]
2117
- }
2118
- | # nothing
2119
- {
2120
- result = []
2121
- }
2122
-
2123
- f_bad_arg: tCONSTANT
2124
- {
2125
- diagnostic :error, :argument_const, nil, val[0]
2126
- }
2127
- | tIVAR
2128
- {
2129
- diagnostic :error, :argument_ivar, nil, val[0]
2130
- }
2131
- | tGVAR
2132
- {
2133
- diagnostic :error, :argument_gvar, nil, val[0]
2134
- }
2135
- | tCVAR
2136
- {
2137
- diagnostic :error, :argument_cvar, nil, val[0]
2138
- }
2139
-
2140
- f_norm_arg: f_bad_arg
2141
- | tIDENTIFIER
2142
- {
2143
- @static_env.declare val[0][0]
2144
-
2145
- result = val[0]
2146
- }
2147
-
2148
- f_arg_asgn: f_norm_arg
2149
- {
2150
- result = val[0]
2151
- }
2152
-
2153
- f_arg_item: f_arg_asgn
2154
- {
2155
- result = @builder.arg(val[0])
2156
- }
2157
- | tLPAREN f_margs rparen
2158
- {
2159
- result = @builder.multi_lhs(val[0], val[1], val[2])
2160
- }
2161
-
2162
- f_arg: f_arg_item
2163
- {
2164
- result = [ val[0] ]
2165
- }
2166
- | f_arg tCOMMA f_arg_item
2167
- {
2168
- result = val[0] << val[2]
2169
- }
2170
-
2171
- f_label: tLABEL
2172
- {
2173
- check_kwarg_name(val[0])
2174
-
2175
- @static_env.declare val[0][0]
2176
-
2177
- result = val[0]
2178
- }
2179
-
2180
- f_kw: f_label arg_value
2181
- {
2182
- result = @builder.kwoptarg(val[0], val[1])
2183
- }
2184
- | f_label
2185
- {
2186
- result = @builder.kwarg(val[0])
2187
- }
2188
-
2189
- f_block_kw: f_label primary_value
2190
- {
2191
- result = @builder.kwoptarg(val[0], val[1])
2192
- }
2193
- | f_label
2194
- {
2195
- result = @builder.kwarg(val[0])
2196
- }
2197
-
2198
- f_block_kwarg: f_block_kw
2199
- {
2200
- result = [ val[0] ]
2201
- }
2202
- | f_block_kwarg tCOMMA f_block_kw
2203
- {
2204
- result = val[0] << val[2]
2205
- }
2206
-
2207
- f_kwarg: f_kw
2208
- {
2209
- result = [ val[0] ]
2210
- }
2211
- | f_kwarg tCOMMA f_kw
2212
- {
2213
- result = val[0] << val[2]
2214
- }
2215
-
2216
- kwrest_mark: tPOW | tDSTAR
2217
-
2218
- f_kwrest: kwrest_mark tIDENTIFIER
2219
- {
2220
- @static_env.declare val[1][0]
2221
-
2222
- result = [ @builder.kwrestarg(val[0], val[1]) ]
2223
- }
2224
- | kwrest_mark
2225
- {
2226
- result = [ @builder.kwrestarg(val[0]) ]
2227
- }
2228
-
2229
- f_opt: f_arg_asgn tEQL arg_value
2230
- {
2231
- result = @builder.optarg(val[0], val[1], val[2])
2232
- }
2233
-
2234
- f_block_opt: f_arg_asgn tEQL primary_value
2235
- {
2236
- result = @builder.optarg(val[0], val[1], val[2])
2237
- }
2238
-
2239
- f_block_optarg: f_block_opt
2240
- {
2241
- result = [ val[0] ]
2242
- }
2243
- | f_block_optarg tCOMMA f_block_opt
2244
- {
2245
- result = val[0] << val[2]
2246
- }
2247
-
2248
- f_optarg: f_opt
2249
- {
2250
- result = [ val[0] ]
2251
- }
2252
- | f_optarg tCOMMA f_opt
2253
- {
2254
- result = val[0] << val[2]
2255
- }
2256
-
2257
- restarg_mark: tSTAR2 | tSTAR
2258
-
2259
- f_rest_arg: restarg_mark tIDENTIFIER
2260
- {
2261
- @static_env.declare val[1][0]
2262
-
2263
- result = [ @builder.restarg(val[0], val[1]) ]
2264
- }
2265
- | restarg_mark
2266
- {
2267
- result = [ @builder.restarg(val[0]) ]
2268
- }
2269
-
2270
- blkarg_mark: tAMPER2 | tAMPER
2271
-
2272
- f_block_arg: blkarg_mark tIDENTIFIER
2273
- {
2274
- @static_env.declare val[1][0]
2275
-
2276
- result = @builder.blockarg(val[0], val[1])
2277
- }
2278
-
2279
- opt_f_block_arg: tCOMMA f_block_arg
2280
- {
2281
- result = [ val[1] ]
2282
- }
2283
- |
2284
- {
2285
- result = []
2286
- }
2287
-
2288
- singleton: var_ref
2289
- | tLPAREN2 expr rparen
2290
- {
2291
- result = val[1]
2292
- }
2293
-
2294
- assoc_list: # nothing
2295
- {
2296
- result = []
2297
- }
2298
- | assocs trailer
2299
-
2300
- assocs: assoc
2301
- {
2302
- result = [ val[0] ]
2303
- }
2304
- | assocs tCOMMA assoc
2305
- {
2306
- result = val[0] << val[2]
2307
- }
2308
-
2309
- assoc: arg_value tASSOC arg_value
2310
- {
2311
- result = @builder.pair(val[0], val[1], val[2])
2312
- }
2313
- | tLABEL arg_value
2314
- {
2315
- result = @builder.pair_keyword(val[0], val[1])
2316
- }
2317
- | tSTRING_BEG string_contents tLABEL_END arg_value
2318
- {
2319
- result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
2320
- }
2321
- | tDSTAR arg_value
2322
- {
2323
- result = @builder.kwsplat(val[0], val[1])
2324
- }
2325
-
2326
- operation: tIDENTIFIER | tCONSTANT | tFID
2327
- operation2: tIDENTIFIER | tCONSTANT | tFID | op
2328
- operation3: tIDENTIFIER | tFID | op
2329
- dot_or_colon: call_op | tCOLON2
2330
- call_op: tDOT
2331
- {
2332
- result = [:dot, val[0][1]]
2333
- }
2334
- | tANDDOT
2335
- {
2336
- result = [:anddot, val[0][1]]
2337
- }
2338
- opt_terms: | terms
2339
- opt_nl: | tNL
2340
- rparen: opt_nl tRPAREN
2341
- {
2342
- result = val[1]
2343
- }
2344
- rbracket: opt_nl tRBRACK
2345
- {
2346
- result = val[1]
2347
- }
2348
- trailer: | tNL | tCOMMA
2349
-
2350
- term: tSEMI
2351
- {
2352
- yyerrok
2353
- }
2354
- | tNL
2355
-
2356
- terms: term
2357
- | terms tSEMI
2358
-
2359
- none: # nothing
2360
- {
2361
- result = nil
2362
- }
2363
- end
2364
-
2365
- ---- header
2366
-
2367
- require 'parser'
2368
-
2369
- ---- inner
2370
-
2371
- def version
2372
- 23
2373
- end
2374
-
2375
- def default_encoding
2376
- Encoding::UTF_8
2377
- end