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