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,2371 +0,0 @@
1
- class Parser::Ruby22
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
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
- | 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 tDOT 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 tDOT 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
- result = @builder.string_compose(val[0], val[1], val[2])
1708
- }
1709
- | tSTRING
1710
- {
1711
- result = @builder.string(val[0])
1712
- }
1713
- | tCHARACTER
1714
- {
1715
- result = @builder.character(val[0])
1716
- }
1717
-
1718
- xstring: tXSTRING_BEG xstring_contents tSTRING_END
1719
- {
1720
- result = @builder.xstring_compose(val[0], val[1], val[2])
1721
- }
1722
-
1723
- regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT
1724
- {
1725
- opts = @builder.regexp_options(val[3])
1726
- result = @builder.regexp_compose(val[0], val[1], val[2], opts)
1727
- }
1728
-
1729
- words: tWORDS_BEG word_list tSTRING_END
1730
- {
1731
- result = @builder.words_compose(val[0], val[1], val[2])
1732
- }
1733
-
1734
- word_list: # nothing
1735
- {
1736
- result = []
1737
- }
1738
- | word_list word tSPACE
1739
- {
1740
- result = val[0] << @builder.word(val[1])
1741
- }
1742
-
1743
- word: string_content
1744
- {
1745
- result = [ val[0] ]
1746
- }
1747
- | word string_content
1748
- {
1749
- result = val[0] << val[1]
1750
- }
1751
-
1752
- symbols: tSYMBOLS_BEG symbol_list tSTRING_END
1753
- {
1754
- result = @builder.symbols_compose(val[0], val[1], val[2])
1755
- }
1756
-
1757
- symbol_list: # nothing
1758
- {
1759
- result = []
1760
- }
1761
- | symbol_list word tSPACE
1762
- {
1763
- result = val[0] << @builder.word(val[1])
1764
- }
1765
-
1766
- qwords: tQWORDS_BEG qword_list tSTRING_END
1767
- {
1768
- result = @builder.words_compose(val[0], val[1], val[2])
1769
- }
1770
-
1771
- qsymbols: tQSYMBOLS_BEG qsym_list tSTRING_END
1772
- {
1773
- result = @builder.symbols_compose(val[0], val[1], val[2])
1774
- }
1775
-
1776
- qword_list: # nothing
1777
- {
1778
- result = []
1779
- }
1780
- | qword_list tSTRING_CONTENT tSPACE
1781
- {
1782
- result = val[0] << @builder.string_internal(val[1])
1783
- }
1784
-
1785
- qsym_list: # nothing
1786
- {
1787
- result = []
1788
- }
1789
- | qsym_list tSTRING_CONTENT tSPACE
1790
- {
1791
- result = val[0] << @builder.symbol_internal(val[1])
1792
- }
1793
-
1794
- string_contents: # nothing
1795
- {
1796
- result = []
1797
- }
1798
- | string_contents string_content
1799
- {
1800
- result = val[0] << val[1]
1801
- }
1802
-
1803
- xstring_contents: # nothing
1804
- {
1805
- result = []
1806
- }
1807
- | xstring_contents string_content
1808
- {
1809
- result = val[0] << val[1]
1810
- }
1811
-
1812
- regexp_contents: # nothing
1813
- {
1814
- result = []
1815
- }
1816
- | regexp_contents string_content
1817
- {
1818
- result = val[0] << val[1]
1819
- }
1820
-
1821
- string_content: tSTRING_CONTENT
1822
- {
1823
- result = @builder.string_internal(val[0])
1824
- }
1825
- | tSTRING_DVAR string_dvar
1826
- {
1827
- result = val[1]
1828
- }
1829
- | tSTRING_DBEG
1830
- {
1831
- @lexer.cond.push(false)
1832
- @lexer.cmdarg.push(false)
1833
- }
1834
- compstmt tSTRING_DEND
1835
- {
1836
- @lexer.cond.lexpop
1837
- @lexer.cmdarg.lexpop
1838
-
1839
- result = @builder.begin(val[0], val[2], val[3])
1840
- }
1841
-
1842
- string_dvar: tGVAR
1843
- {
1844
- result = @builder.gvar(val[0])
1845
- }
1846
- | tIVAR
1847
- {
1848
- result = @builder.ivar(val[0])
1849
- }
1850
- | tCVAR
1851
- {
1852
- result = @builder.cvar(val[0])
1853
- }
1854
- | backref
1855
-
1856
-
1857
- symbol: tSYMBOL
1858
- {
1859
- result = @builder.symbol(val[0])
1860
- }
1861
-
1862
- dsym: tSYMBEG xstring_contents tSTRING_END
1863
- {
1864
- result = @builder.symbol_compose(val[0], val[1], val[2])
1865
- }
1866
-
1867
- numeric: simple_numeric
1868
- {
1869
- result = val[0]
1870
- }
1871
- | tUNARY_NUM simple_numeric =tLOWEST
1872
- {
1873
- if @builder.respond_to? :negate
1874
- # AST builder interface compatibility
1875
- result = @builder.negate(val[0], val[1])
1876
- else
1877
- result = @builder.unary_num(val[0], val[1])
1878
- end
1879
- }
1880
-
1881
- simple_numeric: tINTEGER
1882
- {
1883
- result = @builder.integer(val[0])
1884
- }
1885
- | tFLOAT
1886
- {
1887
- result = @builder.float(val[0])
1888
- }
1889
- | tRATIONAL
1890
- {
1891
- result = @builder.rational(val[0])
1892
- }
1893
- | tIMAGINARY
1894
- {
1895
- result = @builder.complex(val[0])
1896
- }
1897
-
1898
- user_variable: tIDENTIFIER
1899
- {
1900
- result = @builder.ident(val[0])
1901
- }
1902
- | tIVAR
1903
- {
1904
- result = @builder.ivar(val[0])
1905
- }
1906
- | tGVAR
1907
- {
1908
- result = @builder.gvar(val[0])
1909
- }
1910
- | tCONSTANT
1911
- {
1912
- result = @builder.const(val[0])
1913
- }
1914
- | tCVAR
1915
- {
1916
- result = @builder.cvar(val[0])
1917
- }
1918
-
1919
- keyword_variable: kNIL
1920
- {
1921
- result = @builder.nil(val[0])
1922
- }
1923
- | kSELF
1924
- {
1925
- result = @builder.self(val[0])
1926
- }
1927
- | kTRUE
1928
- {
1929
- result = @builder.true(val[0])
1930
- }
1931
- | kFALSE
1932
- {
1933
- result = @builder.false(val[0])
1934
- }
1935
- | k__FILE__
1936
- {
1937
- result = @builder.__FILE__(val[0])
1938
- }
1939
- | k__LINE__
1940
- {
1941
- result = @builder.__LINE__(val[0])
1942
- }
1943
- | k__ENCODING__
1944
- {
1945
- result = @builder.__ENCODING__(val[0])
1946
- }
1947
-
1948
- var_ref: user_variable
1949
- {
1950
- result = @builder.accessible(val[0])
1951
- }
1952
- | keyword_variable
1953
- {
1954
- result = @builder.accessible(val[0])
1955
- }
1956
-
1957
- var_lhs: user_variable
1958
- {
1959
- result = @builder.assignable(val[0])
1960
- }
1961
- | keyword_variable
1962
- {
1963
- result = @builder.assignable(val[0])
1964
- }
1965
-
1966
- backref: tNTH_REF
1967
- {
1968
- result = @builder.nth_ref(val[0])
1969
- }
1970
- | tBACK_REF
1971
- {
1972
- result = @builder.back_ref(val[0])
1973
- }
1974
-
1975
- superclass: term
1976
- {
1977
- result = nil
1978
- }
1979
- | tLT
1980
- {
1981
- @lexer.state = :expr_value
1982
- }
1983
- expr_value term
1984
- {
1985
- result = [ val[0], val[2] ]
1986
- }
1987
- | error term
1988
- {
1989
- yyerrok
1990
- result = nil
1991
- }
1992
-
1993
- f_arglist: tLPAREN2 f_args rparen
1994
- {
1995
- result = @builder.args(val[0], val[1], val[2])
1996
-
1997
- @lexer.state = :expr_value
1998
- }
1999
- | {
2000
- result = @lexer.in_kwarg
2001
- @lexer.in_kwarg = true
2002
- }
2003
- f_args term
2004
- {
2005
- @lexer.in_kwarg = val[0]
2006
- result = @builder.args(nil, val[1], nil)
2007
- }
2008
-
2009
- args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg
2010
- {
2011
- result = val[0].concat(val[2]).concat(val[3])
2012
- }
2013
- | f_kwarg opt_f_block_arg
2014
- {
2015
- result = val[0].concat(val[1])
2016
- }
2017
- | f_kwrest opt_f_block_arg
2018
- {
2019
- result = val[0].concat(val[1])
2020
- }
2021
- | f_block_arg
2022
- {
2023
- result = [ val[0] ]
2024
- }
2025
-
2026
- opt_args_tail: tCOMMA args_tail
2027
- {
2028
- result = val[1]
2029
- }
2030
- | # nothing
2031
- {
2032
- result = []
2033
- }
2034
-
2035
- f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail
2036
- {
2037
- result = val[0].
2038
- concat(val[2]).
2039
- concat(val[4]).
2040
- concat(val[5])
2041
- }
2042
- | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2043
- {
2044
- result = val[0].
2045
- concat(val[2]).
2046
- concat(val[4]).
2047
- concat(val[6]).
2048
- concat(val[7])
2049
- }
2050
- | f_arg tCOMMA f_optarg opt_args_tail
2051
- {
2052
- result = val[0].
2053
- concat(val[2]).
2054
- concat(val[3])
2055
- }
2056
- | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail
2057
- {
2058
- result = val[0].
2059
- concat(val[2]).
2060
- concat(val[4]).
2061
- concat(val[5])
2062
- }
2063
- | f_arg tCOMMA f_rest_arg opt_args_tail
2064
- {
2065
- result = val[0].
2066
- concat(val[2]).
2067
- concat(val[3])
2068
- }
2069
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2070
- {
2071
- result = val[0].
2072
- concat(val[2]).
2073
- concat(val[4]).
2074
- concat(val[5])
2075
- }
2076
- | f_arg opt_args_tail
2077
- {
2078
- result = val[0].
2079
- concat(val[1])
2080
- }
2081
- | f_optarg tCOMMA f_rest_arg opt_args_tail
2082
- {
2083
- result = val[0].
2084
- concat(val[2]).
2085
- concat(val[3])
2086
- }
2087
- | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail
2088
- {
2089
- result = val[0].
2090
- concat(val[2]).
2091
- concat(val[4]).
2092
- concat(val[5])
2093
- }
2094
- | f_optarg opt_args_tail
2095
- {
2096
- result = val[0].
2097
- concat(val[1])
2098
- }
2099
- | f_optarg tCOMMA f_arg opt_args_tail
2100
- {
2101
- result = val[0].
2102
- concat(val[2]).
2103
- concat(val[3])
2104
- }
2105
- | f_rest_arg opt_args_tail
2106
- {
2107
- result = val[0].
2108
- concat(val[1])
2109
- }
2110
- | f_rest_arg tCOMMA f_arg opt_args_tail
2111
- {
2112
- result = val[0].
2113
- concat(val[2]).
2114
- concat(val[3])
2115
- }
2116
- | args_tail
2117
- {
2118
- result = val[0]
2119
- }
2120
- | # nothing
2121
- {
2122
- result = []
2123
- }
2124
-
2125
- f_bad_arg: tCONSTANT
2126
- {
2127
- diagnostic :error, :argument_const, nil, val[0]
2128
- }
2129
- | tIVAR
2130
- {
2131
- diagnostic :error, :argument_ivar, nil, val[0]
2132
- }
2133
- | tGVAR
2134
- {
2135
- diagnostic :error, :argument_gvar, nil, val[0]
2136
- }
2137
- | tCVAR
2138
- {
2139
- diagnostic :error, :argument_cvar, nil, val[0]
2140
- }
2141
-
2142
- f_norm_arg: f_bad_arg
2143
- | tIDENTIFIER
2144
- {
2145
- @static_env.declare val[0][0]
2146
-
2147
- result = val[0]
2148
- }
2149
-
2150
- f_arg_asgn: f_norm_arg
2151
- {
2152
- result = val[0]
2153
- }
2154
-
2155
- f_arg_item: f_arg_asgn
2156
- {
2157
- result = @builder.arg(val[0])
2158
- }
2159
- | tLPAREN f_margs rparen
2160
- {
2161
- result = @builder.multi_lhs(val[0], val[1], val[2])
2162
- }
2163
-
2164
- f_arg: f_arg_item
2165
- {
2166
- result = [ val[0] ]
2167
- }
2168
- | f_arg tCOMMA f_arg_item
2169
- {
2170
- result = val[0] << val[2]
2171
- }
2172
-
2173
- f_label: tLABEL
2174
- {
2175
- check_kwarg_name(val[0])
2176
-
2177
- @static_env.declare val[0][0]
2178
-
2179
- result = val[0]
2180
- }
2181
-
2182
- f_kw: f_label arg_value
2183
- {
2184
- result = @builder.kwoptarg(val[0], val[1])
2185
- }
2186
- | f_label
2187
- {
2188
- result = @builder.kwarg(val[0])
2189
- }
2190
-
2191
- f_block_kw: f_label primary_value
2192
- {
2193
- result = @builder.kwoptarg(val[0], val[1])
2194
- }
2195
- | f_label
2196
- {
2197
- result = @builder.kwarg(val[0])
2198
- }
2199
-
2200
- f_block_kwarg: f_block_kw
2201
- {
2202
- result = [ val[0] ]
2203
- }
2204
- | f_block_kwarg tCOMMA f_block_kw
2205
- {
2206
- result = val[0] << val[2]
2207
- }
2208
-
2209
- f_kwarg: f_kw
2210
- {
2211
- result = [ val[0] ]
2212
- }
2213
- | f_kwarg tCOMMA f_kw
2214
- {
2215
- result = val[0] << val[2]
2216
- }
2217
-
2218
- kwrest_mark: tPOW | tDSTAR
2219
-
2220
- f_kwrest: kwrest_mark tIDENTIFIER
2221
- {
2222
- @static_env.declare val[1][0]
2223
-
2224
- result = [ @builder.kwrestarg(val[0], val[1]) ]
2225
- }
2226
- | kwrest_mark
2227
- {
2228
- result = [ @builder.kwrestarg(val[0]) ]
2229
- }
2230
-
2231
- f_opt: f_arg_asgn tEQL arg_value
2232
- {
2233
- result = @builder.optarg(val[0], val[1], val[2])
2234
- }
2235
-
2236
- f_block_opt: f_arg_asgn tEQL primary_value
2237
- {
2238
- result = @builder.optarg(val[0], val[1], val[2])
2239
- }
2240
-
2241
- f_block_optarg: f_block_opt
2242
- {
2243
- result = [ val[0] ]
2244
- }
2245
- | f_block_optarg tCOMMA f_block_opt
2246
- {
2247
- result = val[0] << val[2]
2248
- }
2249
-
2250
- f_optarg: f_opt
2251
- {
2252
- result = [ val[0] ]
2253
- }
2254
- | f_optarg tCOMMA f_opt
2255
- {
2256
- result = val[0] << val[2]
2257
- }
2258
-
2259
- restarg_mark: tSTAR2 | tSTAR
2260
-
2261
- f_rest_arg: restarg_mark tIDENTIFIER
2262
- {
2263
- @static_env.declare val[1][0]
2264
-
2265
- result = [ @builder.restarg(val[0], val[1]) ]
2266
- }
2267
- | restarg_mark
2268
- {
2269
- result = [ @builder.restarg(val[0]) ]
2270
- }
2271
-
2272
- blkarg_mark: tAMPER2 | tAMPER
2273
-
2274
- f_block_arg: blkarg_mark tIDENTIFIER
2275
- {
2276
- @static_env.declare val[1][0]
2277
-
2278
- result = @builder.blockarg(val[0], val[1])
2279
- }
2280
-
2281
- opt_f_block_arg: tCOMMA f_block_arg
2282
- {
2283
- result = [ val[1] ]
2284
- }
2285
- |
2286
- {
2287
- result = []
2288
- }
2289
-
2290
- singleton: var_ref
2291
- | tLPAREN2 expr rparen
2292
- {
2293
- result = val[1]
2294
- }
2295
-
2296
- assoc_list: # nothing
2297
- {
2298
- result = []
2299
- }
2300
- | assocs trailer
2301
-
2302
- assocs: assoc
2303
- {
2304
- result = [ val[0] ]
2305
- }
2306
- | assocs tCOMMA assoc
2307
- {
2308
- result = val[0] << val[2]
2309
- }
2310
-
2311
- assoc: arg_value tASSOC arg_value
2312
- {
2313
- result = @builder.pair(val[0], val[1], val[2])
2314
- }
2315
- | tLABEL arg_value
2316
- {
2317
- result = @builder.pair_keyword(val[0], val[1])
2318
- }
2319
- | tSTRING_BEG string_contents tLABEL_END arg_value
2320
- {
2321
- result = @builder.pair_quoted(val[0], val[1], val[2], val[3])
2322
- }
2323
- | tDSTAR arg_value
2324
- {
2325
- result = @builder.kwsplat(val[0], val[1])
2326
- }
2327
-
2328
- operation: tIDENTIFIER | tCONSTANT | tFID
2329
- operation2: tIDENTIFIER | tCONSTANT | tFID | op
2330
- operation3: tIDENTIFIER | tFID | op
2331
- dot_or_colon: tDOT | tCOLON2
2332
- opt_terms: | terms
2333
- opt_nl: | tNL
2334
- rparen: opt_nl tRPAREN
2335
- {
2336
- result = val[1]
2337
- }
2338
- rbracket: opt_nl tRBRACK
2339
- {
2340
- result = val[1]
2341
- }
2342
- trailer: | tNL | tCOMMA
2343
-
2344
- term: tSEMI
2345
- {
2346
- yyerrok
2347
- }
2348
- | tNL
2349
-
2350
- terms: term
2351
- | terms tSEMI
2352
-
2353
- none: # nothing
2354
- {
2355
- result = nil
2356
- }
2357
- end
2358
-
2359
- ---- header
2360
-
2361
- require 'parser'
2362
-
2363
- ---- inner
2364
-
2365
- def version
2366
- 22
2367
- end
2368
-
2369
- def default_encoding
2370
- Encoding::UTF_8
2371
- end