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