parser 2.7.1.1 → 3.0.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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/lib/parser.rb +1 -0
  3. data/lib/parser/all.rb +2 -0
  4. data/lib/parser/ast/processor.rb +5 -0
  5. data/lib/parser/base.rb +7 -5
  6. data/lib/parser/builders/default.rb +263 -23
  7. data/lib/parser/context.rb +5 -0
  8. data/lib/parser/current.rb +24 -6
  9. data/lib/parser/current_arg_stack.rb +5 -2
  10. data/lib/parser/diagnostic.rb +1 -1
  11. data/lib/parser/diagnostic/engine.rb +1 -2
  12. data/lib/parser/lexer.rb +887 -803
  13. data/lib/parser/macruby.rb +2214 -2189
  14. data/lib/parser/max_numparam_stack.rb +13 -5
  15. data/lib/parser/messages.rb +18 -0
  16. data/lib/parser/meta.rb +6 -5
  17. data/lib/parser/ruby18.rb +9 -3
  18. data/lib/parser/ruby19.rb +2297 -2289
  19. data/lib/parser/ruby20.rb +2413 -2397
  20. data/lib/parser/ruby21.rb +2419 -2411
  21. data/lib/parser/ruby22.rb +2468 -2460
  22. data/lib/parser/ruby23.rb +2452 -2452
  23. data/lib/parser/ruby24.rb +2435 -2430
  24. data/lib/parser/ruby25.rb +2220 -2214
  25. data/lib/parser/ruby26.rb +2220 -2214
  26. data/lib/parser/ruby27.rb +3715 -3615
  27. data/lib/parser/ruby28.rb +8047 -0
  28. data/lib/parser/ruby30.rb +8060 -0
  29. data/lib/parser/ruby31.rb +8226 -0
  30. data/lib/parser/rubymotion.rb +2190 -2182
  31. data/lib/parser/runner.rb +31 -2
  32. data/lib/parser/runner/ruby_rewrite.rb +2 -2
  33. data/lib/parser/source/buffer.rb +53 -28
  34. data/lib/parser/source/comment.rb +14 -1
  35. data/lib/parser/source/comment/associator.rb +31 -8
  36. data/lib/parser/source/map/method_definition.rb +25 -0
  37. data/lib/parser/source/range.rb +10 -3
  38. data/lib/parser/source/tree_rewriter.rb +100 -10
  39. data/lib/parser/source/tree_rewriter/action.rb +114 -21
  40. data/lib/parser/static_environment.rb +4 -0
  41. data/lib/parser/tree_rewriter.rb +1 -2
  42. data/lib/parser/variables_stack.rb +4 -0
  43. data/lib/parser/version.rb +1 -1
  44. data/parser.gemspec +3 -18
  45. metadata +17 -98
  46. data/.gitignore +0 -33
  47. data/.travis.yml +0 -42
  48. data/.yardopts +0 -21
  49. data/CHANGELOG.md +0 -1075
  50. data/CONTRIBUTING.md +0 -17
  51. data/Gemfile +0 -10
  52. data/README.md +0 -309
  53. data/Rakefile +0 -166
  54. data/ci/run_rubocop_specs +0 -14
  55. data/doc/AST_FORMAT.md +0 -2180
  56. data/doc/CUSTOMIZATION.md +0 -37
  57. data/doc/INTERNALS.md +0 -21
  58. data/doc/css/.gitkeep +0 -0
  59. data/doc/css/common.css +0 -68
  60. data/lib/parser/lexer.rl +0 -2536
  61. data/lib/parser/macruby.y +0 -2198
  62. data/lib/parser/ruby18.y +0 -1934
  63. data/lib/parser/ruby19.y +0 -2175
  64. data/lib/parser/ruby20.y +0 -2353
  65. data/lib/parser/ruby21.y +0 -2357
  66. data/lib/parser/ruby22.y +0 -2364
  67. data/lib/parser/ruby23.y +0 -2370
  68. data/lib/parser/ruby24.y +0 -2408
  69. data/lib/parser/ruby25.y +0 -2405
  70. data/lib/parser/ruby26.y +0 -2413
  71. data/lib/parser/ruby27.y +0 -2941
  72. data/lib/parser/rubymotion.y +0 -2182
  73. data/test/bug_163/fixtures/input.rb +0 -5
  74. data/test/bug_163/fixtures/output.rb +0 -5
  75. data/test/bug_163/rewriter.rb +0 -20
  76. data/test/helper.rb +0 -60
  77. data/test/parse_helper.rb +0 -319
  78. data/test/racc_coverage_helper.rb +0 -133
  79. data/test/test_base.rb +0 -31
  80. data/test/test_current.rb +0 -29
  81. data/test/test_diagnostic.rb +0 -96
  82. data/test/test_diagnostic_engine.rb +0 -62
  83. data/test/test_encoding.rb +0 -99
  84. data/test/test_lexer.rb +0 -3608
  85. data/test/test_lexer_stack_state.rb +0 -78
  86. data/test/test_parse_helper.rb +0 -80
  87. data/test/test_parser.rb +0 -9430
  88. data/test/test_runner_parse.rb +0 -35
  89. data/test/test_runner_rewrite.rb +0 -47
  90. data/test/test_source_buffer.rb +0 -162
  91. data/test/test_source_comment.rb +0 -36
  92. data/test/test_source_comment_associator.rb +0 -367
  93. data/test/test_source_map.rb +0 -15
  94. data/test/test_source_range.rb +0 -187
  95. data/test/test_source_rewriter.rb +0 -541
  96. data/test/test_source_rewriter_action.rb +0 -46
  97. data/test/test_source_tree_rewriter.rb +0 -253
  98. data/test/test_static_environment.rb +0 -45
  99. data/test/using_tree_rewriter/fixtures/input.rb +0 -3
  100. data/test/using_tree_rewriter/fixtures/output.rb +0 -3
  101. data/test/using_tree_rewriter/using_tree_rewriter.rb +0 -9
@@ -1,2182 +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(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 lambda
1022
- {
1023
- lambda_call = @builder.call_lambda(val[0])
1024
-
1025
- args, (begin_t, body, end_t) = val[1]
1026
- result = @builder.block(lambda_call,
1027
- begin_t, args, body, end_t)
1028
- }
1029
- | kIF expr_value then compstmt if_tail kEND
1030
- {
1031
- else_t, else_ = val[4]
1032
- result = @builder.condition(val[0], val[1], val[2],
1033
- val[3], else_t,
1034
- else_, val[5])
1035
- }
1036
- | kUNLESS expr_value then compstmt opt_else kEND
1037
- {
1038
- else_t, else_ = val[4]
1039
- result = @builder.condition(val[0], val[1], val[2],
1040
- else_, else_t,
1041
- val[3], val[5])
1042
- }
1043
- | kWHILE
1044
- {
1045
- @lexer.cond.push(true)
1046
- }
1047
- expr_value do
1048
- {
1049
- @lexer.cond.pop
1050
- }
1051
- compstmt kEND
1052
- {
1053
- result = @builder.loop(:while, val[0], val[2], val[3],
1054
- val[5], val[6])
1055
- }
1056
- | kUNTIL
1057
- {
1058
- @lexer.cond.push(true)
1059
- }
1060
- expr_value do
1061
- {
1062
- @lexer.cond.pop
1063
- }
1064
- compstmt kEND
1065
- {
1066
- result = @builder.loop(:until, val[0], val[2], val[3],
1067
- val[5], val[6])
1068
- }
1069
- | kCASE expr_value opt_terms case_body kEND
1070
- {
1071
- *when_bodies, (else_t, else_body) = *val[3]
1072
-
1073
- result = @builder.case(val[0], val[1],
1074
- when_bodies, else_t, else_body,
1075
- val[4])
1076
- }
1077
- | kCASE opt_terms case_body kEND
1078
- {
1079
- *when_bodies, (else_t, else_body) = *val[2]
1080
-
1081
- result = @builder.case(val[0], nil,
1082
- when_bodies, else_t, else_body,
1083
- val[3])
1084
- }
1085
- | kFOR for_var kIN
1086
- {
1087
- @lexer.cond.push(true)
1088
- }
1089
- expr_value do
1090
- {
1091
- @lexer.cond.pop
1092
- }
1093
- compstmt kEND
1094
- {
1095
- result = @builder.for(val[0], val[1],
1096
- val[2], val[4],
1097
- val[5], val[7], val[8])
1098
- }
1099
- | kCLASS cpath superclass
1100
- {
1101
- @static_env.extend_static
1102
- @lexer.push_cmdarg
1103
- @context.push(:class)
1104
- }
1105
- bodystmt kEND
1106
- {
1107
- unless @context.class_definition_allowed?
1108
- diagnostic :error, :class_in_def, nil, val[0]
1109
- end
1110
-
1111
- lt_t, superclass = val[2]
1112
- result = @builder.def_class(val[0], val[1],
1113
- lt_t, superclass,
1114
- val[4], val[5])
1115
-
1116
- @lexer.pop_cmdarg
1117
- @static_env.unextend
1118
- @context.pop
1119
- }
1120
- | kCLASS tLSHFT expr term
1121
- {
1122
- @static_env.extend_static
1123
- @lexer.push_cmdarg
1124
- @context.push(:sclass)
1125
- }
1126
- bodystmt kEND
1127
- {
1128
- result = @builder.def_sclass(val[0], val[1], val[2],
1129
- val[5], val[6])
1130
-
1131
- @lexer.pop_cmdarg
1132
- @static_env.unextend
1133
- @context.pop
1134
- }
1135
- | kMODULE cpath
1136
- {
1137
- @static_env.extend_static
1138
- @lexer.push_cmdarg
1139
- }
1140
- bodystmt kEND
1141
- {
1142
- unless @context.module_definition_allowed?
1143
- diagnostic :error, :module_in_def, nil, val[0]
1144
- end
1145
-
1146
- result = @builder.def_module(val[0], val[1],
1147
- val[3], val[4])
1148
-
1149
- @lexer.pop_cmdarg
1150
- @static_env.unextend
1151
- }
1152
- | kDEF fname
1153
- {
1154
- @static_env.extend_static
1155
- @lexer.push_cmdarg
1156
- @context.push(:def)
1157
- }
1158
- f_arglist bodystmt kEND
1159
- {
1160
- result = @builder.def_method(val[0], val[1],
1161
- val[3], val[4], val[5])
1162
-
1163
- @lexer.pop_cmdarg
1164
- @static_env.unextend
1165
- @context.pop
1166
- }
1167
- | kDEF singleton dot_or_colon
1168
- {
1169
- @lexer.state = :expr_fname
1170
- }
1171
- fname
1172
- {
1173
- @static_env.extend_static
1174
- @lexer.push_cmdarg
1175
- @context.push(:defs)
1176
- }
1177
- f_arglist bodystmt kEND
1178
- {
1179
- result = @builder.def_singleton(val[0], val[1], val[2],
1180
- val[4], val[6], val[7], val[8])
1181
-
1182
- @lexer.pop_cmdarg
1183
- @static_env.unextend
1184
- @context.pop
1185
- }
1186
- | kBREAK
1187
- {
1188
- result = @builder.keyword_cmd(:break, val[0])
1189
- }
1190
- | kNEXT
1191
- {
1192
- result = @builder.keyword_cmd(:next, val[0])
1193
- }
1194
- | kREDO
1195
- {
1196
- result = @builder.keyword_cmd(:redo, val[0])
1197
- }
1198
- | kRETRY
1199
- {
1200
- result = @builder.keyword_cmd(:retry, val[0])
1201
- }
1202
-
1203
- primary_value: primary
1204
-
1205
- then: term
1206
- | kTHEN
1207
- | term kTHEN
1208
- {
1209
- result = val[1]
1210
- }
1211
-
1212
- do: term
1213
- | kDO_COND
1214
-
1215
- if_tail: opt_else
1216
- | kELSIF expr_value then compstmt if_tail
1217
- {
1218
- else_t, else_ = val[4]
1219
- result = [ val[0],
1220
- @builder.condition(val[0], val[1], val[2],
1221
- val[3], else_t,
1222
- else_, nil),
1223
- ]
1224
- }
1225
-
1226
- opt_else: none
1227
- | kELSE compstmt
1228
- {
1229
- result = val
1230
- }
1231
-
1232
- for_var: lhs
1233
- | mlhs
1234
-
1235
- f_marg: f_norm_arg
1236
- | tLPAREN f_margs rparen
1237
- {
1238
- result = @builder.multi_lhs(val[0], val[1], val[2])
1239
- }
1240
-
1241
- f_marg_list: f_marg
1242
- {
1243
- result = [ val[0] ]
1244
- }
1245
- | f_marg_list tCOMMA f_marg
1246
- {
1247
- result = val[0] << val[2]
1248
- }
1249
-
1250
- f_margs: f_marg_list
1251
- | f_marg_list tCOMMA tSTAR f_norm_arg
1252
- {
1253
- result = val[0].
1254
- push(@builder.objc_restarg(val[2], val[3]))
1255
- }
1256
- | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
1257
- {
1258
- result = val[0].
1259
- push(@builder.objc_restarg(val[2], val[3])).
1260
- concat(val[5])
1261
- }
1262
- | f_marg_list tCOMMA tSTAR
1263
- {
1264
- result = val[0].
1265
- push(@builder.objc_restarg(val[2]))
1266
- }
1267
- | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
1268
- {
1269
- result = val[0].
1270
- push(@builder.objc_restarg(val[2])).
1271
- concat(val[4])
1272
- }
1273
- | tSTAR f_norm_arg
1274
- {
1275
- result = [ @builder.objc_restarg(val[0], val[1]) ]
1276
- }
1277
- | tSTAR f_norm_arg tCOMMA f_marg_list
1278
- {
1279
- result = [ @builder.objc_restarg(val[0], val[1]),
1280
- *val[3] ]
1281
- }
1282
- | tSTAR
1283
- {
1284
- result = [ @builder.objc_restarg(val[0]) ]
1285
- }
1286
- | tSTAR tCOMMA f_marg_list
1287
- {
1288
- result = [ @builder.objc_restarg(val[0]),
1289
- *val[2] ]
1290
- }
1291
-
1292
- block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
1293
- {
1294
- result = val[0].
1295
- concat(val[2]).
1296
- concat(val[4]).
1297
- concat(val[5])
1298
- }
1299
- | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
1300
- {
1301
- result = val[0].
1302
- concat(val[2]).
1303
- concat(val[4]).
1304
- concat(val[6]).
1305
- concat(val[7])
1306
- }
1307
- | f_arg tCOMMA f_block_optarg opt_f_block_arg
1308
- {
1309
- result = val[0].
1310
- concat(val[2]).
1311
- concat(val[3])
1312
- }
1313
- | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg
1314
- {
1315
- result = val[0].
1316
- concat(val[2]).
1317
- concat(val[4]).
1318
- concat(val[5])
1319
- }
1320
- | f_arg tCOMMA f_rest_arg opt_f_block_arg
1321
- {
1322
- result = val[0].
1323
- concat(val[2]).
1324
- concat(val[3])
1325
- }
1326
- | f_arg tCOMMA
1327
- | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
1328
- {
1329
- result = val[0].
1330
- concat(val[2]).
1331
- concat(val[4]).
1332
- concat(val[5])
1333
- }
1334
- | f_arg opt_f_block_arg
1335
- {
1336
- if val[1].empty? && val[0].size == 1
1337
- result = [@builder.procarg0(val[0][0])]
1338
- else
1339
- result = val[0].concat(val[1])
1340
- end
1341
- }
1342
- | f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
1343
- {
1344
- result = val[0].
1345
- concat(val[2]).
1346
- concat(val[3])
1347
- }
1348
- | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
1349
- {
1350
- result = val[0].
1351
- concat(val[2]).
1352
- concat(val[4]).
1353
- concat(val[5])
1354
- }
1355
- | f_block_optarg opt_f_block_arg
1356
- {
1357
- result = val[0].
1358
- concat(val[1])
1359
- }
1360
- | f_block_optarg tCOMMA f_arg opt_f_block_arg
1361
- {
1362
- result = val[0].
1363
- concat(val[2]).
1364
- concat(val[3])
1365
- }
1366
- | f_rest_arg opt_f_block_arg
1367
- {
1368
- result = val[0].
1369
- concat(val[1])
1370
- }
1371
- | f_rest_arg tCOMMA f_arg opt_f_block_arg
1372
- {
1373
- result = val[0].
1374
- concat(val[2]).
1375
- concat(val[3])
1376
- }
1377
- | f_block_arg
1378
- {
1379
- result = [ val[0] ]
1380
- }
1381
-
1382
- opt_block_param: # nothing
1383
- {
1384
- result = @builder.args(nil, [], nil)
1385
- }
1386
- | block_param_def
1387
- {
1388
- @lexer.state = :expr_value
1389
- }
1390
-
1391
- block_param_def: tPIPE opt_bv_decl tPIPE
1392
- {
1393
- result = @builder.args(val[0], val[1], val[2])
1394
- }
1395
- | tOROP
1396
- {
1397
- result = @builder.args(val[0], [], val[0])
1398
- }
1399
- | tPIPE block_param opt_bv_decl tPIPE
1400
- {
1401
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1402
- }
1403
-
1404
- opt_bv_decl: # nothing
1405
- {
1406
- result = []
1407
- }
1408
- | tSEMI bv_decls
1409
- {
1410
- result = val[1]
1411
- }
1412
-
1413
- bv_decls: bvar
1414
- {
1415
- result = [ val[0] ]
1416
- }
1417
- | bv_decls tCOMMA bvar
1418
- {
1419
- result = val[0] << val[2]
1420
- }
1421
-
1422
- bvar: tIDENTIFIER
1423
- {
1424
- @static_env.declare val[0][0]
1425
- result = @builder.shadowarg(val[0])
1426
- }
1427
- | f_bad_arg
1428
-
1429
- lambda: {
1430
- @static_env.extend_dynamic
1431
- }
1432
- f_larglist lambda_body
1433
- {
1434
- result = [ val[1], val[2] ]
1435
-
1436
- @static_env.unextend
1437
- }
1438
-
1439
- f_larglist: tLPAREN2 f_args opt_bv_decl rparen
1440
- {
1441
- result = @builder.args(val[0], val[1].concat(val[2]), val[3])
1442
- }
1443
- | f_args opt_bv_decl
1444
- {
1445
- result = @builder.args(nil, val[0].concat(val[1]), nil)
1446
- }
1447
-
1448
- lambda_body: tLAMBEG
1449
- {
1450
- @context.push(:lambda)
1451
- }
1452
- compstmt tRCURLY
1453
- {
1454
- result = [ val[0], val[2], val[3] ]
1455
- @context.pop
1456
- }
1457
- | kDO_LAMBDA
1458
- {
1459
- @context.push(:lambda)
1460
- }
1461
- compstmt kEND
1462
- {
1463
- result = [ val[0], val[2], val[3] ]
1464
- @context.pop
1465
- }
1466
-
1467
- do_block: kDO_BLOCK
1468
- {
1469
- @static_env.extend_dynamic
1470
- @context.push(:block)
1471
- }
1472
- opt_block_param compstmt kEND
1473
- {
1474
- result = [ val[0], val[2], val[3], val[4] ]
1475
-
1476
- @static_env.unextend
1477
- @context.pop
1478
- }
1479
-
1480
- block_call: command do_block
1481
- {
1482
- begin_t, block_args, body, end_t = val[1]
1483
- result = @builder.block(val[0],
1484
- begin_t, block_args, body, end_t)
1485
- }
1486
- | block_call call_op operation2 opt_paren_args
1487
- {
1488
- lparen_t, args, rparen_t = val[3]
1489
- result = @builder.call_method(val[0], val[1], val[2],
1490
- lparen_t, args, rparen_t)
1491
- }
1492
- | block_call tCOLON2 operation2 opt_paren_args
1493
- {
1494
- lparen_t, args, rparen_t = val[3]
1495
- result = @builder.call_method(val[0], val[1], val[2],
1496
- lparen_t, args, rparen_t)
1497
- }
1498
-
1499
- method_call: operation paren_args
1500
- {
1501
- lparen_t, args, rparen_t = val[1]
1502
- result = @builder.call_method(nil, nil, val[0],
1503
- lparen_t, args, rparen_t)
1504
- }
1505
- | primary_value call_op operation2 opt_paren_args
1506
- {
1507
- lparen_t, args, rparen_t = val[3]
1508
- result = @builder.call_method(val[0], val[1], val[2],
1509
- lparen_t, args, rparen_t)
1510
- }
1511
- | primary_value tCOLON2 operation2 paren_args
1512
- {
1513
- lparen_t, args, rparen_t = val[3]
1514
- result = @builder.call_method(val[0], val[1], val[2],
1515
- lparen_t, args, rparen_t)
1516
- }
1517
- | primary_value tCOLON2 operation3
1518
- {
1519
- result = @builder.call_method(val[0], val[1], val[2])
1520
- }
1521
- | primary_value call_op paren_args
1522
- {
1523
- lparen_t, args, rparen_t = val[2]
1524
- result = @builder.call_method(val[0], val[1], nil,
1525
- lparen_t, args, rparen_t)
1526
- }
1527
- | primary_value tCOLON2 paren_args
1528
- {
1529
- lparen_t, args, rparen_t = val[2]
1530
- result = @builder.call_method(val[0], val[1], nil,
1531
- lparen_t, args, rparen_t)
1532
- }
1533
- | kSUPER paren_args
1534
- {
1535
- lparen_t, args, rparen_t = val[1]
1536
- result = @builder.keyword_cmd(:super, val[0],
1537
- lparen_t, args, rparen_t)
1538
- }
1539
- | kSUPER
1540
- {
1541
- result = @builder.keyword_cmd(:zsuper, val[0])
1542
- }
1543
- | primary_value tLBRACK2 opt_call_args rbracket
1544
- {
1545
- result = @builder.index(val[0], val[1], val[2], val[3])
1546
- }
1547
-
1548
- brace_block: tLCURLY
1549
- {
1550
- @static_env.extend_dynamic
1551
- @context.push(:block)
1552
- }
1553
- opt_block_param compstmt tRCURLY
1554
- {
1555
- result = [ val[0], val[2], val[3], val[4] ]
1556
-
1557
- @static_env.unextend
1558
- @context.pop
1559
- }
1560
- | kDO
1561
- {
1562
- @static_env.extend_dynamic
1563
- @context.push(:block)
1564
- }
1565
- opt_block_param compstmt kEND
1566
- {
1567
- result = [ val[0], val[2], val[3], val[4] ]
1568
-
1569
- @static_env.unextend
1570
- @context.pop
1571
- }
1572
-
1573
- case_body: kWHEN args then compstmt cases
1574
- {
1575
- result = [ @builder.when(val[0], val[1], val[2], val[3]),
1576
- *val[4] ]
1577
- }
1578
-
1579
- cases: opt_else
1580
- {
1581
- result = [ val[0] ]
1582
- }
1583
- | case_body
1584
-
1585
- opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
1586
- {
1587
- assoc_t, exc_var = val[2]
1588
-
1589
- if val[1]
1590
- exc_list = @builder.array(nil, val[1], nil)
1591
- end
1592
-
1593
- result = [ @builder.rescue_body(val[0],
1594
- exc_list, assoc_t, exc_var,
1595
- val[3], val[4]),
1596
- *val[5] ]
1597
- }
1598
- |
1599
- {
1600
- result = []
1601
- }
1602
-
1603
- exc_list: arg_value
1604
- {
1605
- result = [ val[0] ]
1606
- }
1607
- | mrhs
1608
- | none
1609
-
1610
- exc_var: tASSOC lhs
1611
- {
1612
- result = [ val[0], val[1] ]
1613
- }
1614
- | none
1615
-
1616
- opt_ensure: kENSURE compstmt
1617
- {
1618
- result = [ val[0], val[1] ]
1619
- }
1620
- | none
1621
-
1622
- literal: numeric
1623
- | symbol
1624
- | dsym
1625
-
1626
- strings: string
1627
- {
1628
- result = @builder.string_compose(nil, val[0], nil)
1629
- }
1630
-
1631
- string: string1
1632
- {
1633
- result = [ val[0] ]
1634
- }
1635
- | string string1
1636
- {
1637
- result = val[0] << val[1]
1638
- }
1639
-
1640
- string1: tSTRING_BEG string_contents tSTRING_END
1641
- {
1642
- result = @builder.string_compose(val[0], val[1], val[2])
1643
- }
1644
- | tSTRING
1645
- {
1646
- result = @builder.string(val[0])
1647
- }
1648
- | tCHARACTER
1649
- {
1650
- result = @builder.character(val[0])
1651
- }
1652
-
1653
- xstring: tXSTRING_BEG xstring_contents tSTRING_END
1654
- {
1655
- result = @builder.xstring_compose(val[0], val[1], val[2])
1656
- }
1657
-
1658
- regexp: tREGEXP_BEG regexp_contents tSTRING_END tREGEXP_OPT
1659
- {
1660
- opts = @builder.regexp_options(val[3])
1661
- result = @builder.regexp_compose(val[0], val[1], val[2], opts)
1662
- }
1663
-
1664
- words: tWORDS_BEG word_list tSTRING_END
1665
- {
1666
- result = @builder.words_compose(val[0], val[1], val[2])
1667
- }
1668
-
1669
- word_list: # nothing
1670
- {
1671
- result = []
1672
- }
1673
- | word_list word tSPACE
1674
- {
1675
- result = val[0] << @builder.word(val[1])
1676
- }
1677
-
1678
- word: string_content
1679
- {
1680
- result = [ val[0] ]
1681
- }
1682
- | word string_content
1683
- {
1684
- result = val[0] << val[1]
1685
- }
1686
-
1687
- qwords: tQWORDS_BEG qword_list tSTRING_END
1688
- {
1689
- result = @builder.words_compose(val[0], val[1], val[2])
1690
- }
1691
-
1692
- qword_list: # nothing
1693
- {
1694
- result = []
1695
- }
1696
- | qword_list tSTRING_CONTENT tSPACE
1697
- {
1698
- result = val[0] << @builder.string_internal(val[1])
1699
- }
1700
-
1701
- string_contents: # nothing
1702
- {
1703
- result = []
1704
- }
1705
- | string_contents string_content
1706
- {
1707
- result = val[0] << val[1]
1708
- }
1709
-
1710
- xstring_contents: # nothing
1711
- {
1712
- result = []
1713
- }
1714
- | xstring_contents string_content
1715
- {
1716
- result = val[0] << val[1]
1717
- }
1718
-
1719
- regexp_contents: # nothing
1720
- {
1721
- result = []
1722
- }
1723
- | regexp_contents string_content
1724
- {
1725
- result = val[0] << val[1]
1726
- }
1727
-
1728
- string_content: tSTRING_CONTENT
1729
- {
1730
- result = @builder.string_internal(val[0])
1731
- }
1732
- | tSTRING_DVAR string_dvar
1733
- {
1734
- result = val[1]
1735
- }
1736
- | tSTRING_DBEG
1737
- {
1738
- @lexer.cond.push(false)
1739
- @lexer.cmdarg.push(false)
1740
- }
1741
- compstmt tRCURLY
1742
- {
1743
- @lexer.cond.lexpop
1744
- @lexer.cmdarg.lexpop
1745
-
1746
- result = @builder.begin(val[0], val[2], val[3])
1747
- }
1748
-
1749
- string_dvar: tGVAR
1750
- {
1751
- result = @builder.gvar(val[0])
1752
- }
1753
- | tIVAR
1754
- {
1755
- result = @builder.ivar(val[0])
1756
- }
1757
- | tCVAR
1758
- {
1759
- result = @builder.cvar(val[0])
1760
- }
1761
- | backref
1762
-
1763
-
1764
- symbol: tSYMBOL
1765
- {
1766
- result = @builder.symbol(val[0])
1767
- }
1768
-
1769
- dsym: tSYMBEG xstring_contents tSTRING_END
1770
- {
1771
- result = @builder.symbol_compose(val[0], val[1], val[2])
1772
- }
1773
-
1774
- numeric: tINTEGER
1775
- {
1776
- result = @builder.integer(val[0])
1777
- }
1778
- | tFLOAT
1779
- {
1780
- result = @builder.float(val[0])
1781
- }
1782
- | tUNARY_NUM tINTEGER =tLOWEST
1783
- {
1784
- num = @builder.integer(val[1])
1785
- if @builder.respond_to? :negate
1786
- # AST builder interface compatibility
1787
- result = @builder.negate(val[0], num)
1788
- else
1789
- result = @builder.unary_num(val[0], num)
1790
- end
1791
- }
1792
- | tUNARY_NUM tFLOAT =tLOWEST
1793
- {
1794
- num = @builder.float(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
-
1803
- variable: tIDENTIFIER
1804
- {
1805
- result = @builder.ident(val[0])
1806
- }
1807
- | tIVAR
1808
- {
1809
- result = @builder.ivar(val[0])
1810
- }
1811
- | tGVAR
1812
- {
1813
- result = @builder.gvar(val[0])
1814
- }
1815
- | tCONSTANT
1816
- {
1817
- result = @builder.const(val[0])
1818
- }
1819
- | tCVAR
1820
- {
1821
- result = @builder.cvar(val[0])
1822
- }
1823
- | kNIL
1824
- {
1825
- result = @builder.nil(val[0])
1826
- }
1827
- | kSELF
1828
- {
1829
- result = @builder.self(val[0])
1830
- }
1831
- | kTRUE
1832
- {
1833
- result = @builder.true(val[0])
1834
- }
1835
- | kFALSE
1836
- {
1837
- result = @builder.false(val[0])
1838
- }
1839
- | k__FILE__
1840
- {
1841
- result = @builder.__FILE__(val[0])
1842
- }
1843
- | k__LINE__
1844
- {
1845
- result = @builder.__LINE__(val[0])
1846
- }
1847
- | k__ENCODING__
1848
- {
1849
- result = @builder.__ENCODING__(val[0])
1850
- }
1851
-
1852
- var_ref: variable
1853
- {
1854
- result = @builder.accessible(val[0])
1855
- }
1856
-
1857
- var_lhs: variable
1858
- {
1859
- result = @builder.assignable(val[0])
1860
- }
1861
-
1862
- backref: tNTH_REF
1863
- {
1864
- result = @builder.nth_ref(val[0])
1865
- }
1866
- | tBACK_REF
1867
- {
1868
- result = @builder.back_ref(val[0])
1869
- }
1870
-
1871
- superclass: term
1872
- {
1873
- result = nil
1874
- }
1875
- | tLT expr_value term
1876
- {
1877
- result = [ val[0], val[1] ]
1878
- }
1879
- | error term
1880
- {
1881
- yyerrok
1882
- result = nil
1883
- }
1884
-
1885
- f_arglist: tLPAREN2 f_args rparen
1886
- {
1887
- result = @builder.args(val[0], val[1], val[2])
1888
-
1889
- @lexer.state = :expr_value
1890
- }
1891
- | f_args term
1892
- {
1893
- result = @builder.args(nil, val[0], nil)
1894
- }
1895
-
1896
- f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg
1897
- {
1898
- result = val[0].
1899
- concat(val[2]).
1900
- concat(val[4]).
1901
- concat(val[5])
1902
- }
1903
- | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
1904
- {
1905
- result = val[0].
1906
- concat(val[2]).
1907
- concat(val[4]).
1908
- concat(val[6]).
1909
- concat(val[7])
1910
- }
1911
- | f_arg tCOMMA f_optarg opt_f_block_arg
1912
- {
1913
- result = val[0].
1914
- concat(val[2]).
1915
- concat(val[3])
1916
- }
1917
- | f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg
1918
- {
1919
- result = val[0].
1920
- concat(val[2]).
1921
- concat(val[4]).
1922
- concat(val[5])
1923
- }
1924
- | f_arg tCOMMA f_rest_arg opt_f_block_arg
1925
- {
1926
- result = val[0].
1927
- concat(val[2]).
1928
- concat(val[3])
1929
- }
1930
- | f_arg tCOMMA f_rest_arg tCOMMA f_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 opt_f_block_arg
1938
- {
1939
- result = val[0].
1940
- concat(val[1])
1941
- }
1942
- | f_optarg tCOMMA f_rest_arg opt_f_block_arg
1943
- {
1944
- result = val[0].
1945
- concat(val[2]).
1946
- concat(val[3])
1947
- }
1948
- | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
1949
- {
1950
- result = val[0].
1951
- concat(val[2]).
1952
- concat(val[4]).
1953
- concat(val[5])
1954
- }
1955
- | f_optarg opt_f_block_arg
1956
- {
1957
- result = val[0].
1958
- concat(val[1])
1959
- }
1960
- | f_optarg tCOMMA f_arg opt_f_block_arg
1961
- {
1962
- result = val[0].
1963
- concat(val[2]).
1964
- concat(val[3])
1965
- }
1966
- | f_rest_arg opt_f_block_arg
1967
- {
1968
- result = val[0].
1969
- concat(val[1])
1970
- }
1971
- | f_rest_arg tCOMMA f_arg opt_f_block_arg
1972
- {
1973
- result = val[0].
1974
- concat(val[2]).
1975
- concat(val[3])
1976
- }
1977
- | f_block_arg
1978
- {
1979
- result = [ val[0] ]
1980
- }
1981
- | # nothing
1982
- {
1983
- result = []
1984
- }
1985
-
1986
- f_bad_arg: tCONSTANT
1987
- {
1988
- diagnostic :error, :argument_const, nil, val[0]
1989
- }
1990
- | tIVAR
1991
- {
1992
- diagnostic :error, :argument_ivar, nil, val[0]
1993
- }
1994
- | tGVAR
1995
- {
1996
- diagnostic :error, :argument_gvar, nil, val[0]
1997
- }
1998
- | tCVAR
1999
- {
2000
- diagnostic :error, :argument_cvar, nil, val[0]
2001
- }
2002
-
2003
- f_norm_arg: f_bad_arg
2004
- | tIDENTIFIER
2005
- {
2006
- @static_env.declare val[0][0]
2007
-
2008
- result = @builder.arg(val[0])
2009
- }
2010
- | tIDENTIFIER tASSOC tIDENTIFIER
2011
- {
2012
- @static_env.declare val[2][0]
2013
-
2014
- result = @builder.objc_kwarg(val[0], val[1], val[2])
2015
- }
2016
- | tLABEL tIDENTIFIER
2017
- {
2018
- @static_env.declare val[1][0]
2019
-
2020
- result = @builder.objc_kwarg(val[0], nil, val[1])
2021
- }
2022
-
2023
- f_arg_item: f_norm_arg
2024
- | tLPAREN f_margs rparen
2025
- {
2026
- result = @builder.multi_lhs(val[0], val[1], val[2])
2027
- }
2028
-
2029
- f_arg: f_arg_item
2030
- {
2031
- result = [ val[0] ]
2032
- }
2033
- | f_arg tCOMMA f_arg_item
2034
- {
2035
- result = val[0] << val[2]
2036
- }
2037
-
2038
- f_opt: tIDENTIFIER tEQL arg_value
2039
- {
2040
- @static_env.declare val[0][0]
2041
-
2042
- result = @builder.optarg(val[0], val[1], val[2])
2043
- }
2044
-
2045
- f_block_opt: tIDENTIFIER tEQL primary_value
2046
- {
2047
- @static_env.declare val[0][0]
2048
-
2049
- result = @builder.optarg(val[0], val[1], val[2])
2050
- }
2051
-
2052
- f_block_optarg: f_block_opt
2053
- {
2054
- result = [ val[0] ]
2055
- }
2056
- | f_block_optarg tCOMMA f_block_opt
2057
- {
2058
- result = val[0] << val[2]
2059
- }
2060
-
2061
- f_optarg: f_opt
2062
- {
2063
- result = [ val[0] ]
2064
- }
2065
- | f_optarg tCOMMA f_opt
2066
- {
2067
- result = val[0] << val[2]
2068
- }
2069
-
2070
- restarg_mark: tSTAR2 | tSTAR
2071
-
2072
- f_rest_arg: restarg_mark tIDENTIFIER
2073
- {
2074
- @static_env.declare val[1][0]
2075
-
2076
- result = [ @builder.restarg(val[0], val[1]) ]
2077
- }
2078
- | restarg_mark
2079
- {
2080
- result = [ @builder.restarg(val[0]) ]
2081
- }
2082
-
2083
- blkarg_mark: tAMPER2 | tAMPER
2084
-
2085
- f_block_arg: blkarg_mark tIDENTIFIER
2086
- {
2087
- @static_env.declare val[1][0]
2088
-
2089
- result = @builder.blockarg(val[0], val[1])
2090
- }
2091
-
2092
- opt_f_block_arg: tCOMMA f_block_arg
2093
- {
2094
- result = [ val[1] ]
2095
- }
2096
- | # nothing
2097
- {
2098
- result = []
2099
- }
2100
-
2101
- singleton: var_ref
2102
- | tLPAREN2 expr rparen
2103
- {
2104
- result = val[1]
2105
- }
2106
-
2107
- assoc_list: # nothing
2108
- {
2109
- result = []
2110
- }
2111
- | assocs trailer
2112
-
2113
- assocs: assoc
2114
- {
2115
- result = [ val[0] ]
2116
- }
2117
- | assocs tCOMMA assoc
2118
- {
2119
- result = val[0] << val[2]
2120
- }
2121
-
2122
- assoc: arg_value tASSOC arg_value
2123
- {
2124
- result = @builder.pair(val[0], val[1], val[2])
2125
- }
2126
- | tLABEL arg_value
2127
- {
2128
- result = @builder.pair_keyword(val[0], val[1])
2129
- }
2130
-
2131
- operation: tIDENTIFIER | tCONSTANT | tFID
2132
- operation2: tIDENTIFIER | tCONSTANT | tFID | op
2133
- operation3: tIDENTIFIER | tFID | op
2134
- dot_or_colon: call_op | tCOLON2
2135
- call_op: tDOT
2136
- {
2137
- result = [:dot, val[0][1]]
2138
- }
2139
- | tANDDOT
2140
- {
2141
- result = [:anddot, val[0][1]]
2142
- }
2143
- opt_terms: | terms
2144
- opt_nl: | tNL
2145
- rparen: opt_nl tRPAREN
2146
- {
2147
- result = val[1]
2148
- }
2149
- rbracket: opt_nl tRBRACK
2150
- {
2151
- result = val[1]
2152
- }
2153
- trailer: | tNL | tCOMMA
2154
-
2155
- term: tSEMI
2156
- {
2157
- yyerrok
2158
- }
2159
- | tNL
2160
-
2161
- terms: term
2162
- | terms tSEMI
2163
-
2164
- none: # nothing
2165
- {
2166
- result = nil
2167
- }
2168
- end
2169
-
2170
- ---- header
2171
-
2172
- require 'parser'
2173
-
2174
- ---- inner
2175
-
2176
- def version
2177
- 19 # closest released match: v1_9_0_2
2178
- end
2179
-
2180
- def default_encoding
2181
- Encoding::BINARY
2182
- end