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