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