ruby_parser 3.0.0.a2 → 3.0.0.a3
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.
Potentially problematic release.
This version of ruby_parser might be problematic. Click here for more details.
- data.tar.gz.sig +0 -0
- data/.autotest +2 -2
- data/History.txt +33 -0
- data/Rakefile +1 -1
- data/bin/ruby_parse_extract_error +2 -2
- data/lib/ruby18_parser.rb +2 -2
- data/lib/ruby18_parser.y +2 -2
- data/lib/ruby19_parser.rb +3436 -3514
- data/lib/ruby19_parser.y +298 -277
- data/lib/ruby_lexer.rb +45 -19
- data/lib/ruby_parser_extras.rb +89 -13
- data/test/test_ruby_parser.rb +281 -46
- data/test/test_ruby_parser_extras.rb +2 -2
- metadata +4 -4
- metadata.gz.sig +0 -0
data/lib/ruby19_parser.y
CHANGED
@@ -7,16 +7,18 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
7
7
|
kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER
|
8
8
|
kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD
|
9
9
|
kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
|
10
|
-
k__FILE__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
|
11
|
-
tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
|
12
|
-
tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ
|
13
|
-
tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF
|
14
|
-
tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN
|
15
|
-
tLBRACK tLBRACK2 tRBRACK tLBRACE
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
|
11
|
+
tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
|
12
|
+
tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ
|
13
|
+
tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF
|
14
|
+
tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN
|
15
|
+
tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE
|
16
|
+
tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE
|
17
|
+
tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY
|
18
|
+
tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
|
19
|
+
tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END
|
20
|
+
tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN
|
21
|
+
tLAMBDA tLAMBEG
|
20
22
|
|
21
23
|
prechigh
|
22
24
|
right tBANG tTILDE tUPLUS
|
@@ -48,9 +50,36 @@ rule
|
|
48
50
|
program: {
|
49
51
|
self.lexer.lex_state = :expr_beg
|
50
52
|
}
|
51
|
-
|
53
|
+
top_compstmt
|
52
54
|
{
|
53
|
-
result = val
|
55
|
+
result = new_compstmt val
|
56
|
+
}
|
57
|
+
|
58
|
+
top_compstmt: top_stmts opt_terms
|
59
|
+
{
|
60
|
+
result = val[0]
|
61
|
+
}
|
62
|
+
|
63
|
+
top_stmts: none
|
64
|
+
| top_stmt
|
65
|
+
| top_stmts terms top_stmt
|
66
|
+
{
|
67
|
+
result = self.block_append val[0], val[2]
|
68
|
+
}
|
69
|
+
| error top_stmt
|
70
|
+
|
71
|
+
top_stmt: stmt
|
72
|
+
| klBEGIN
|
73
|
+
{
|
74
|
+
if (self.in_def || self.in_single > 0) then
|
75
|
+
yyerror "BEGIN in method"
|
76
|
+
end
|
77
|
+
self.env.extend
|
78
|
+
}
|
79
|
+
tLCURLY top_compstmt tRCURLY
|
80
|
+
{
|
81
|
+
result = new_iter s(:preexe), nil, val[3] # TODO: add test?
|
82
|
+
result = nil # TODO: since it isn't supposed to go in the AST
|
54
83
|
}
|
55
84
|
|
56
85
|
bodystmt: compstmt opt_rescue opt_else opt_ensure
|
@@ -119,18 +148,6 @@ rule
|
|
119
148
|
{
|
120
149
|
result = s(:rescue, val[0], new_resbody(s(:array), val[2]))
|
121
150
|
}
|
122
|
-
| klBEGIN
|
123
|
-
{
|
124
|
-
if (self.in_def || self.in_single > 0) then
|
125
|
-
yyerror "BEGIN in method"
|
126
|
-
end
|
127
|
-
self.env.extend
|
128
|
-
}
|
129
|
-
tLCURLY compstmt tRCURLY
|
130
|
-
{
|
131
|
-
result = new_iter s(:preexe), nil, val[3] # TODO: add test?
|
132
|
-
result = nil # TODO: since it isn't supposed to go in the AST
|
133
|
-
}
|
134
151
|
| klEND tLCURLY compstmt tRCURLY
|
135
152
|
{
|
136
153
|
if (self.in_def || self.in_single > 0) then
|
@@ -138,10 +155,7 @@ rule
|
|
138
155
|
end
|
139
156
|
result = new_iter s(:postexe), nil, val[2]
|
140
157
|
}
|
141
|
-
|
|
142
|
-
{
|
143
|
-
result = self.node_assign val[0], val[2]
|
144
|
-
}
|
158
|
+
| command_asgn
|
145
159
|
| mlhs tEQL command_call
|
146
160
|
{
|
147
161
|
result = new_masgn val[0], val[2], :wrap
|
@@ -150,7 +164,7 @@ rule
|
|
150
164
|
{
|
151
165
|
result = new_op_asgn val
|
152
166
|
}
|
153
|
-
| primary_value tLBRACK2
|
167
|
+
| primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call
|
154
168
|
{
|
155
169
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
156
170
|
}
|
@@ -162,6 +176,10 @@ rule
|
|
162
176
|
{
|
163
177
|
result = s(:op_asgn, val[0], val[4], val[2], val[3])
|
164
178
|
}
|
179
|
+
| primary_value tCOLON2 tCONSTANT tOP_ASGN command_call
|
180
|
+
{
|
181
|
+
result = s(:op_asgn, val[0], val[4], val[2], val[3])
|
182
|
+
}
|
165
183
|
| primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
|
166
184
|
{
|
167
185
|
result = s(:op_asgn, val[0], val[4], val[2], val[3])
|
@@ -184,6 +202,15 @@ rule
|
|
184
202
|
}
|
185
203
|
| expr
|
186
204
|
|
205
|
+
command_asgn: lhs tEQL command_call
|
206
|
+
{
|
207
|
+
result = self.node_assign val[0], val[2]
|
208
|
+
}
|
209
|
+
| lhs tEQL command_asgn
|
210
|
+
{
|
211
|
+
result = self.node_assign val[0], val[2]
|
212
|
+
}
|
213
|
+
|
187
214
|
expr: command_call
|
188
215
|
| expr kAND expr
|
189
216
|
{
|
@@ -193,13 +220,13 @@ rule
|
|
193
220
|
{
|
194
221
|
result = logop(:or, val[0], val[2])
|
195
222
|
}
|
196
|
-
| kNOT expr
|
223
|
+
| kNOT opt_nl expr
|
197
224
|
{
|
198
|
-
result = s(:
|
225
|
+
result = s(:call, val[2], :"!")
|
199
226
|
}
|
200
227
|
| tBANG command_call
|
201
228
|
{
|
202
|
-
result = s(:
|
229
|
+
result = s(:call, val[1], :"!")
|
203
230
|
}
|
204
231
|
| arg
|
205
232
|
|
@@ -210,21 +237,6 @@ rule
|
|
210
237
|
|
211
238
|
command_call: command
|
212
239
|
| block_command
|
213
|
-
| kRETURN call_args
|
214
|
-
{
|
215
|
-
line = val[0].last
|
216
|
-
result = s(:return, ret_args(val[1])).line(line)
|
217
|
-
}
|
218
|
-
| kBREAK call_args
|
219
|
-
{
|
220
|
-
line = val[0].last
|
221
|
-
result = s(:break, ret_args(val[1])).line(line)
|
222
|
-
}
|
223
|
-
| kNEXT call_args
|
224
|
-
{
|
225
|
-
line = val[0].last
|
226
|
-
result = s(:next, ret_args(val[1])).line(line)
|
227
|
-
}
|
228
240
|
|
229
241
|
block_command: block_call
|
230
242
|
| block_call tDOT operation2 command_args
|
@@ -241,7 +253,7 @@ rule
|
|
241
253
|
self.env.extend(:dynamic)
|
242
254
|
result = self.lexer.lineno
|
243
255
|
}
|
244
|
-
|
256
|
+
opt_block_param
|
245
257
|
{
|
246
258
|
result = self.env.dynamic.keys
|
247
259
|
}
|
@@ -297,15 +309,30 @@ rule
|
|
297
309
|
{
|
298
310
|
result = new_yield val[1]
|
299
311
|
}
|
312
|
+
| kRETURN call_args
|
313
|
+
{
|
314
|
+
line = val[0].last
|
315
|
+
result = s(:return, ret_args(val[1])).line(line)
|
316
|
+
}
|
317
|
+
| kBREAK call_args
|
318
|
+
{
|
319
|
+
line = val[0].last
|
320
|
+
result = s(:break, ret_args(val[1])).line(line)
|
321
|
+
}
|
322
|
+
| kNEXT call_args
|
323
|
+
{
|
324
|
+
line = val[0].last
|
325
|
+
result = s(:next, ret_args(val[1])).line(line)
|
326
|
+
}
|
300
327
|
|
301
328
|
mlhs: mlhs_basic
|
302
|
-
| tLPAREN
|
329
|
+
| tLPAREN mlhs_inner rparen
|
303
330
|
{
|
304
331
|
result = val[1]
|
305
332
|
}
|
306
333
|
|
307
|
-
|
308
|
-
| tLPAREN
|
334
|
+
mlhs_inner: mlhs_basic
|
335
|
+
| tLPAREN mlhs_inner rparen
|
309
336
|
{
|
310
337
|
result = s(:masgn, s(:array, val[1]))
|
311
338
|
}
|
@@ -322,21 +349,45 @@ rule
|
|
322
349
|
{
|
323
350
|
result = s(:masgn, val[0] << s(:splat, val[2]))
|
324
351
|
}
|
352
|
+
| mlhs_head tSTAR mlhs_node tCOMMA mlhs_post
|
353
|
+
{
|
354
|
+
ary = list_append val[0], s(:splat, val[2])
|
355
|
+
ary.concat val[4][1..-1]
|
356
|
+
result = s(:masgn, ary)
|
357
|
+
}
|
325
358
|
| mlhs_head tSTAR
|
326
359
|
{
|
327
360
|
result = s(:masgn, val[0] << s(:splat))
|
328
361
|
}
|
362
|
+
| mlhs_head tSTAR tCOMMA mlhs_post
|
363
|
+
{
|
364
|
+
ary = list_append val[0], s(:splat)
|
365
|
+
ary.concat val[3][1..-1]
|
366
|
+
result = s(:masgn, ary)
|
367
|
+
}
|
329
368
|
| tSTAR mlhs_node
|
330
369
|
{
|
331
370
|
result = s(:masgn, s(:array, s(:splat, val[1])))
|
332
371
|
}
|
372
|
+
| tSTAR mlhs_node tCOMMA mlhs_post
|
373
|
+
{
|
374
|
+
ary = s(:array, s(:splat, val[1]))
|
375
|
+
ary.concat val[3][1..-1]
|
376
|
+
result = s(:masgn, ary)
|
377
|
+
}
|
333
378
|
| tSTAR
|
334
379
|
{
|
335
380
|
result = s(:masgn, s(:array, s(:splat)))
|
336
381
|
}
|
382
|
+
| tSTAR tCOMMA mlhs_post
|
383
|
+
{
|
384
|
+
ary = s(:array, s(:splat))
|
385
|
+
ary.concat val[2][1..-1]
|
386
|
+
result = s(:masgn, ary)
|
387
|
+
}
|
337
388
|
|
338
389
|
mlhs_item: mlhs_node
|
339
|
-
| tLPAREN
|
390
|
+
| tLPAREN mlhs_inner rparen
|
340
391
|
{
|
341
392
|
result = val[1]
|
342
393
|
}
|
@@ -350,6 +401,15 @@ rule
|
|
350
401
|
result = val[0] << val[1].compact
|
351
402
|
}
|
352
403
|
|
404
|
+
mlhs_post: mlhs_item
|
405
|
+
{
|
406
|
+
result = s(:array, val[0])
|
407
|
+
}
|
408
|
+
| mlhs_post tCOMMA mlhs_item
|
409
|
+
{
|
410
|
+
result = list_append val[0], val[2]
|
411
|
+
}
|
412
|
+
|
353
413
|
mlhs_node: user_variable
|
354
414
|
{
|
355
415
|
result = self.assignable val[0]
|
@@ -358,7 +418,7 @@ rule
|
|
358
418
|
{
|
359
419
|
result = self.assignable val[0]
|
360
420
|
}
|
361
|
-
| primary_value tLBRACK2
|
421
|
+
| primary_value tLBRACK2 opt_call_args rbracket
|
362
422
|
{
|
363
423
|
result = self.aryset val[0], val[2]
|
364
424
|
}
|
@@ -403,7 +463,7 @@ rule
|
|
403
463
|
{
|
404
464
|
result = self.assignable val[0]
|
405
465
|
}
|
406
|
-
| primary_value tLBRACK2
|
466
|
+
| primary_value tLBRACK2 opt_call_args rbracket
|
407
467
|
{
|
408
468
|
result = self.aryset val[0], val[2]
|
409
469
|
}
|
@@ -491,19 +551,21 @@ rule
|
|
491
551
|
result = new_undef val[0], val[3]
|
492
552
|
}
|
493
553
|
|
494
|
-
|
495
|
-
|
|
496
|
-
| tRSHFT | tPLUS
|
497
|
-
| tPERCENT | tPOW
|
498
|
-
|
|
499
|
-
|
500
|
-
reswords: k__LINE__ | k__FILE__
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
554
|
+
op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ
|
555
|
+
| tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ
|
556
|
+
| tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
|
557
|
+
| tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE
|
558
|
+
| tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2
|
559
|
+
|
560
|
+
reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND
|
561
|
+
| kALIAS | kAND | kBEGIN | kBREAK | kCASE
|
562
|
+
| kCLASS | kDEF | kDEFINED | kDO | kELSE
|
563
|
+
| kELSIF | kEND | kENSURE | kFALSE | kFOR
|
564
|
+
| kIN | kMODULE | kNEXT | kNIL | kNOT
|
565
|
+
| kOR | kREDO | kRESCUE | kRETRY | kRETURN
|
566
|
+
| kSELF | kSUPER | kTHEN | kTRUE | kUNDEF
|
567
|
+
| kWHEN | kYIELD | kIF | kUNLESS | kWHILE
|
568
|
+
| kUNTIL
|
507
569
|
|
508
570
|
arg: lhs tEQL arg
|
509
571
|
{
|
@@ -512,13 +574,17 @@ rule
|
|
512
574
|
| lhs tEQL arg kRESCUE_MOD arg
|
513
575
|
{
|
514
576
|
result = self.node_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4]))
|
515
|
-
# result.line = val[0].line
|
516
577
|
}
|
517
578
|
| var_lhs tOP_ASGN arg
|
518
579
|
{
|
519
580
|
result = new_op_asgn val
|
520
581
|
}
|
521
|
-
|
|
582
|
+
| var_lhs tOP_ASGN arg kRESCUE_MOD arg
|
583
|
+
{
|
584
|
+
result = new_op_asgn val
|
585
|
+
result = self.node_assign s(:rescue, result, new_resbody(s(:array), val[4]))
|
586
|
+
}
|
587
|
+
| primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg
|
522
588
|
{
|
523
589
|
val[2][0] = :arglist
|
524
590
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
@@ -664,7 +730,7 @@ rule
|
|
664
730
|
}
|
665
731
|
| tBANG arg
|
666
732
|
{
|
667
|
-
result = new_call val[1], :"
|
733
|
+
result = new_call val[1], :"!"
|
668
734
|
}
|
669
735
|
| tTILDE arg
|
670
736
|
{
|
@@ -695,10 +761,10 @@ rule
|
|
695
761
|
{
|
696
762
|
result = s(:defined, val[2])
|
697
763
|
}
|
698
|
-
| arg tEH arg tCOLON arg
|
764
|
+
| arg tEH arg opt_nl tCOLON arg
|
699
765
|
{
|
700
766
|
lexer.tern.pop
|
701
|
-
result = s(:if, val[0], val[2], val[
|
767
|
+
result = s(:if, val[0], val[2], val[5])
|
702
768
|
}
|
703
769
|
| primary
|
704
770
|
|
@@ -708,30 +774,17 @@ rule
|
|
708
774
|
}
|
709
775
|
|
710
776
|
aref_args: none
|
711
|
-
| command opt_nl
|
712
|
-
{
|
713
|
-
warning 'parenthesize argument(s) for future version'
|
714
|
-
result = s(:array, val[0])
|
715
|
-
}
|
716
777
|
| args trailer
|
717
778
|
{
|
718
779
|
result = val[0]
|
719
780
|
}
|
720
|
-
| args tCOMMA tSTAR arg opt_nl
|
721
|
-
{
|
722
|
-
result = self.arg_concat val[0], val[3]
|
723
|
-
}
|
724
|
-
| assocs trailer
|
725
|
-
{
|
726
|
-
result = s(:array, s(:hash, *val[0].values))
|
727
|
-
}
|
728
781
|
| args tCOMMA assocs trailer
|
729
782
|
{
|
730
783
|
result = val[0] << s(:hash, *val[2].values)
|
731
784
|
}
|
732
|
-
|
|
785
|
+
| assocs trailer
|
733
786
|
{
|
734
|
-
result = s(:array, s(:
|
787
|
+
result = s(:array, s(:hash, *val[0].values))
|
735
788
|
}
|
736
789
|
|
737
790
|
paren_args: tLPAREN2 opt_call_args rparen
|
@@ -739,6 +792,9 @@ rule
|
|
739
792
|
result = val[1]
|
740
793
|
}
|
741
794
|
|
795
|
+
opt_paren_args: none
|
796
|
+
| paren_args
|
797
|
+
|
742
798
|
opt_call_args: none
|
743
799
|
{
|
744
800
|
result = val[0]
|
@@ -751,20 +807,16 @@ rule
|
|
751
807
|
{
|
752
808
|
result = val[0]
|
753
809
|
}
|
754
|
-
|
|
810
|
+
| args tCOMMA assocs tCOMMA
|
755
811
|
{
|
756
812
|
warning "parenthesize argument(s) for future version"
|
757
|
-
result =
|
813
|
+
result = val[0].add val[2]
|
758
814
|
}
|
759
|
-
|
|
815
|
+
| assocs tCOMMA
|
760
816
|
{
|
761
|
-
|
762
|
-
result = val[0].add val[2]
|
817
|
+
result = val[0]
|
763
818
|
}
|
764
819
|
|
765
|
-
opt_paren_args: none
|
766
|
-
| paren_args
|
767
|
-
|
768
820
|
call_args: command
|
769
821
|
{
|
770
822
|
warning "parenthesize argument(s) for future version"
|
@@ -774,129 +826,28 @@ rule
|
|
774
826
|
{
|
775
827
|
result = self.arg_blk_pass val[0], val[1]
|
776
828
|
}
|
777
|
-
| args tCOMMA tSTAR arg_value opt_block_arg
|
778
|
-
{
|
779
|
-
result = self.arg_concat val[0], val[3]
|
780
|
-
result = self.arg_blk_pass result, val[4]
|
781
|
-
}
|
782
|
-
| args tCOMMA tSTAR arg_value tCOMMA args opt_block_arg
|
783
|
-
{
|
784
|
-
result = self.arg_concat val[0], val[3]
|
785
|
-
val[5][1..-1].each {|a| result << a }
|
786
|
-
result = self.arg_blk_pass result, val[6]
|
787
|
-
}
|
788
829
|
| assocs opt_block_arg
|
789
830
|
{
|
790
831
|
result = s(:array, s(:hash, *val[0].values))
|
791
832
|
result = self.arg_blk_pass result, val[1]
|
792
833
|
}
|
793
|
-
| assocs tCOMMA tSTAR arg_value opt_block_arg
|
794
|
-
{
|
795
|
-
result = self.arg_concat s(:array, s(:hash, *val[0].values)), val[3]
|
796
|
-
result = self.arg_blk_pass result, val[4]
|
797
|
-
}
|
798
834
|
| args tCOMMA assocs opt_block_arg
|
799
835
|
{
|
800
836
|
result = val[0] << s(:hash, *val[2].values)
|
801
837
|
result = self.arg_blk_pass result, val[3]
|
802
838
|
}
|
803
|
-
| args tCOMMA assocs tCOMMA tSTAR arg opt_block_arg
|
804
|
-
{
|
805
|
-
val[0] << s(:hash, *val[2].values)
|
806
|
-
result = self.arg_concat val[0], val[5]
|
807
|
-
result = self.arg_blk_pass result, val[6]
|
808
|
-
}
|
809
|
-
| tSTAR arg_value opt_block_arg
|
810
|
-
{
|
811
|
-
result = self.arg_blk_pass s(:splat, val[1]), val[2]
|
812
|
-
}
|
813
|
-
| block_arg
|
814
|
-
|
815
|
-
call_args2: arg_value tCOMMA args opt_block_arg
|
816
|
-
{
|
817
|
-
args = self.list_prepend val[0], val[2]
|
818
|
-
result = self.arg_blk_pass args, val[3]
|
819
|
-
}
|
820
|
-
| arg_value tCOMMA block_arg
|
821
|
-
{
|
822
|
-
result = self.arg_blk_pass val[0], val[2]
|
823
|
-
}
|
824
|
-
| arg_value tCOMMA tSTAR arg_value opt_block_arg
|
825
|
-
{
|
826
|
-
result = self.arg_concat s(:array, val[0]), val[3]
|
827
|
-
result = self.arg_blk_pass result, val[4]
|
828
|
-
}
|
829
|
-
| arg_value tCOMMA args tCOMMA tSTAR arg_value opt_block_arg
|
830
|
-
{
|
831
|
-
result = self.arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5]
|
832
|
-
result = self.arg_blk_pass result, val[6]
|
833
|
-
}
|
834
|
-
| assocs opt_block_arg
|
835
|
-
{
|
836
|
-
result = s(:array, s(:hash, *val[0].values))
|
837
|
-
result = self.arg_blk_pass result, val[1]
|
838
|
-
}
|
839
|
-
| assocs tCOMMA tSTAR arg_value opt_block_arg
|
840
|
-
{
|
841
|
-
result = s(:array, s(:hash, *val[0].values), val[3])
|
842
|
-
result = self.arg_blk_pass result, val[4]
|
843
|
-
}
|
844
|
-
| arg_value tCOMMA assocs opt_block_arg
|
845
|
-
{
|
846
|
-
result = s(:array, val[0], s(:hash, *val[2].values))
|
847
|
-
result = self.arg_blk_pass result, val[3]
|
848
|
-
}
|
849
|
-
| arg_value tCOMMA args tCOMMA assocs opt_block_arg
|
850
|
-
{
|
851
|
-
result = s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values))
|
852
|
-
result = self.arg_blk_pass result, val[5]
|
853
|
-
}
|
854
|
-
| arg_value tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg
|
855
|
-
{
|
856
|
-
result = self.arg_concat s(:array, val[0]).add(s(:hash, *val[2].values)), val[5]
|
857
|
-
result = self.arg_blk_pass result, val[6]
|
858
|
-
}
|
859
|
-
| arg_value tCOMMA args tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg
|
860
|
-
{
|
861
|
-
result = self.arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7]
|
862
|
-
result = self.arg_blk_pass result, val[8]
|
863
|
-
}
|
864
|
-
| tSTAR arg_value opt_block_arg
|
865
|
-
{
|
866
|
-
result = self.arg_blk_pass s(:splat, val[1]), val[2]
|
867
|
-
}
|
868
839
|
| block_arg
|
869
840
|
|
870
841
|
command_args: {
|
871
842
|
result = lexer.cmdarg.stack.dup
|
872
843
|
lexer.cmdarg.push true
|
873
844
|
}
|
874
|
-
|
845
|
+
call_args
|
875
846
|
{
|
876
847
|
lexer.cmdarg.stack.replace val[0]
|
877
848
|
result = val[1]
|
878
849
|
}
|
879
850
|
|
880
|
-
open_args: call_args
|
881
|
-
| tLPAREN_ARG
|
882
|
-
{
|
883
|
-
lexer.lex_state = :expr_endarg
|
884
|
-
}
|
885
|
-
tRPAREN
|
886
|
-
{
|
887
|
-
warning "don't put space before argument parentheses"
|
888
|
-
result = nil
|
889
|
-
}
|
890
|
-
| tLPAREN_ARG call_args2
|
891
|
-
{
|
892
|
-
lexer.lex_state = :expr_endarg
|
893
|
-
}
|
894
|
-
tRPAREN
|
895
|
-
{
|
896
|
-
warning "don't put space before argument parentheses"
|
897
|
-
result = val[1]
|
898
|
-
}
|
899
|
-
|
900
851
|
block_arg: tAMPER arg_value
|
901
852
|
{
|
902
853
|
result = s(:block_pass, val[1])
|
@@ -912,10 +863,18 @@ rule
|
|
912
863
|
{
|
913
864
|
result = s(:array, val[0])
|
914
865
|
}
|
866
|
+
| tSTAR arg_value
|
867
|
+
{
|
868
|
+
result = s(:array, s(:splat, val[1]))
|
869
|
+
}
|
915
870
|
| args tCOMMA arg_value
|
916
871
|
{
|
917
872
|
result = self.list_append val[0], val[2]
|
918
873
|
}
|
874
|
+
| args tCOMMA tSTAR arg_value
|
875
|
+
{
|
876
|
+
result = self.list_append val[0], s(:splat, val[3])
|
877
|
+
}
|
919
878
|
|
920
879
|
mrhs: args tCOMMA arg_value
|
921
880
|
{
|
@@ -978,10 +937,6 @@ rule
|
|
978
937
|
{
|
979
938
|
result = s(:colon3, val[1].to_sym)
|
980
939
|
}
|
981
|
-
| primary_value tLBRACK2 aref_args tRBRACK
|
982
|
-
{
|
983
|
-
result = new_aref val
|
984
|
-
}
|
985
940
|
| tLBRACK aref_args tRBRACK
|
986
941
|
{
|
987
942
|
result = val[1] || s(:array)
|
@@ -1010,6 +965,14 @@ rule
|
|
1010
965
|
{
|
1011
966
|
result = s(:defined, val[3])
|
1012
967
|
}
|
968
|
+
| kNOT tLPAREN2 expr rparen
|
969
|
+
{
|
970
|
+
raise "no2: #{val.inspect}"
|
971
|
+
}
|
972
|
+
| kNOT tLPAREN2 rparen
|
973
|
+
{
|
974
|
+
raise "no3: #{val.inspect}"
|
975
|
+
}
|
1013
976
|
| operation brace_block
|
1014
977
|
{
|
1015
978
|
oper, iter = val[0], val[1]
|
@@ -1069,10 +1032,6 @@ rule
|
|
1069
1032
|
{
|
1070
1033
|
result = new_case nil, val[2]
|
1071
1034
|
}
|
1072
|
-
| kCASE opt_terms kELSE compstmt kEND # TODO: need a test
|
1073
|
-
{
|
1074
|
-
result = new_case nil, val[3]
|
1075
|
-
}
|
1076
1035
|
| kFOR for_var kIN
|
1077
1036
|
{
|
1078
1037
|
lexer.cond.push true
|
@@ -1206,12 +1165,10 @@ rule
|
|
1206
1165
|
k_end: kEND
|
1207
1166
|
|
1208
1167
|
then: term
|
1209
|
-
| tCOLON
|
1210
1168
|
| kTHEN
|
1211
1169
|
| term kTHEN
|
1212
1170
|
|
1213
1171
|
do: term
|
1214
|
-
| tCOLON
|
1215
1172
|
| kDO_COND
|
1216
1173
|
|
1217
1174
|
if_tail: opt_else
|
@@ -1232,85 +1189,138 @@ rule
|
|
1232
1189
|
val[0].delete_at 1 if val[0][1].nil? # HACK
|
1233
1190
|
}
|
1234
1191
|
|
1235
|
-
|
1192
|
+
f_marg: f_norm_arg
|
1236
1193
|
{
|
1237
|
-
|
1194
|
+
raise "no4: #{val.inspect}"
|
1238
1195
|
}
|
1239
|
-
|
|
1196
|
+
| tLPAREN f_margs rparen
|
1240
1197
|
{
|
1241
|
-
|
1198
|
+
raise "no5: #{val.inspect}"
|
1242
1199
|
}
|
1243
1200
|
|
1244
|
-
|
1201
|
+
f_marg_list: f_marg
|
1245
1202
|
{
|
1246
|
-
|
1203
|
+
raise "no6: #{val.inspect}"
|
1247
1204
|
}
|
1248
|
-
|
|
1205
|
+
| f_marg_list tCOMMA f_marg
|
1249
1206
|
{
|
1250
|
-
|
1207
|
+
raise "no7: #{val.inspect}"
|
1251
1208
|
}
|
1252
|
-
|
1209
|
+
|
1210
|
+
f_margs: f_marg_list
|
1253
1211
|
{
|
1254
|
-
|
1212
|
+
raise "no8: #{val.inspect}"
|
1255
1213
|
}
|
1256
|
-
|
|
1214
|
+
| f_marg_list tCOMMA tSTAR f_norm_arg
|
1257
1215
|
{
|
1258
|
-
|
1216
|
+
raise "no9: #{val.inspect}"
|
1259
1217
|
}
|
1260
|
-
|
|
1218
|
+
| f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
|
1261
1219
|
{
|
1262
|
-
|
1220
|
+
raise "no10: #{val.inspect}"
|
1263
1221
|
}
|
1264
|
-
|
|
1222
|
+
| f_marg_list tCOMMA tSTAR
|
1265
1223
|
{
|
1266
|
-
|
1224
|
+
raise "no11: #{val.inspect}"
|
1267
1225
|
}
|
1268
|
-
|
|
1226
|
+
| f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
|
1269
1227
|
{
|
1270
|
-
|
1228
|
+
raise "no12: #{val.inspect}"
|
1271
1229
|
}
|
1272
|
-
| tSTAR
|
1230
|
+
| tSTAR f_norm_arg
|
1273
1231
|
{
|
1274
|
-
|
1232
|
+
raise "no13: #{val.inspect}"
|
1275
1233
|
}
|
1276
|
-
| tSTAR tCOMMA
|
1234
|
+
| tSTAR f_norm_arg tCOMMA f_marg_list
|
1277
1235
|
{
|
1278
|
-
|
1236
|
+
raise "no14: #{val.inspect}"
|
1279
1237
|
}
|
1280
|
-
| tSTAR
|
1238
|
+
| tSTAR
|
1281
1239
|
{
|
1282
|
-
|
1240
|
+
raise "no15: #{val.inspect}"
|
1283
1241
|
}
|
1284
|
-
| tSTAR
|
1242
|
+
| tSTAR tCOMMA f_marg_list
|
1243
|
+
{
|
1244
|
+
raise "no16: #{val.inspect}"
|
1245
|
+
}
|
1246
|
+
|
1247
|
+
block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1248
|
+
{
|
1249
|
+
result = block_args19 val, "1"
|
1250
|
+
}
|
1251
|
+
| f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1285
1252
|
{
|
1286
|
-
result =
|
1253
|
+
result = block_args19 val, "2"
|
1287
1254
|
}
|
1288
|
-
|
|
1255
|
+
| f_arg tCOMMA f_block_optarg opt_f_block_arg
|
1289
1256
|
{
|
1290
|
-
result =
|
1257
|
+
result = block_args19 val, "3"
|
1258
|
+
}
|
1259
|
+
| f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg
|
1260
|
+
{
|
1261
|
+
result = block_args19 val, "4"
|
1262
|
+
}
|
1263
|
+
| f_arg tCOMMA f_rest_arg opt_f_block_arg
|
1264
|
+
{
|
1265
|
+
result = block_args19 val, "5"
|
1266
|
+
}
|
1267
|
+
| f_arg tCOMMA
|
1268
|
+
{
|
1269
|
+
result = block_args19 val, "6"
|
1270
|
+
}
|
1271
|
+
| f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1272
|
+
{
|
1273
|
+
result = block_args19 val, "7"
|
1274
|
+
}
|
1275
|
+
| f_arg opt_f_block_arg
|
1276
|
+
{
|
1277
|
+
result = block_args19 val, "8"
|
1278
|
+
}
|
1279
|
+
| f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1280
|
+
{
|
1281
|
+
result = block_args19 val, "9"
|
1282
|
+
}
|
1283
|
+
| f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1284
|
+
{
|
1285
|
+
result = block_args19 val, "10"
|
1286
|
+
}
|
1287
|
+
| f_block_optarg opt_f_block_arg
|
1288
|
+
{
|
1289
|
+
result = block_args19 val, "11"
|
1290
|
+
}
|
1291
|
+
| f_block_optarg tCOMMA f_arg opt_f_block_arg
|
1292
|
+
{
|
1293
|
+
result = block_args19 val, "12"
|
1294
|
+
}
|
1295
|
+
| f_rest_arg opt_f_block_arg
|
1296
|
+
{
|
1297
|
+
result = block_args19 val, "13"
|
1298
|
+
}
|
1299
|
+
| f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1300
|
+
{
|
1301
|
+
result = block_args19 val, "14"
|
1302
|
+
}
|
1303
|
+
| f_block_arg
|
1304
|
+
{
|
1305
|
+
result = block_args19 val, "15"
|
1291
1306
|
}
|
1292
|
-
;
|
1293
1307
|
|
1294
|
-
|
1295
|
-
|
|
1308
|
+
opt_block_param: none
|
1309
|
+
| block_param_def
|
1310
|
+
|
1311
|
+
block_param_def: tPIPE opt_bv_decl tPIPE
|
1296
1312
|
{
|
1297
|
-
|
1298
|
-
self.lexer.command_start = true
|
1313
|
+
raise "no17: #{val.inspect}"
|
1299
1314
|
}
|
1300
1315
|
| tOROP
|
1301
1316
|
{
|
1302
1317
|
result = 0
|
1303
1318
|
self.lexer.command_start = true
|
1304
1319
|
}
|
1305
|
-
| tPIPE
|
1320
|
+
| tPIPE block_param opt_bv_decl tPIPE
|
1306
1321
|
{
|
1307
1322
|
result = val[1]
|
1308
|
-
|
1309
|
-
}
|
1310
|
-
| tPIPE tAMPER block_var tPIPE
|
1311
|
-
{
|
1312
|
-
result = s(:lasgn, :"&block")
|
1313
|
-
self.lexer.command_start = true
|
1323
|
+
result.concat val[2] if val[2]
|
1314
1324
|
}
|
1315
1325
|
|
1316
1326
|
opt_bv_decl: none
|
@@ -1323,17 +1333,13 @@ rule
|
|
1323
1333
|
| bv_decls tCOMMA bvar
|
1324
1334
|
{
|
1325
1335
|
result = val[0] << val[2]
|
1336
|
+
raise "no18: #{val.inspect}"
|
1326
1337
|
}
|
1327
1338
|
|
1328
1339
|
bvar: tIDENTIFIER
|
1329
1340
|
| f_bad_arg
|
1330
1341
|
|
1331
|
-
lambda: lambda_body
|
1332
|
-
{
|
1333
|
-
call = new_call nil, :lambda
|
1334
|
-
result = s(:iter, call, 0, val[0])
|
1335
|
-
}
|
1336
|
-
| f_larglist lambda_body
|
1342
|
+
lambda: f_larglist lambda_body
|
1337
1343
|
{
|
1338
1344
|
case val[0].size
|
1339
1345
|
when 1
|
@@ -1372,7 +1378,7 @@ rule
|
|
1372
1378
|
self.env.extend :dynamic
|
1373
1379
|
result = self.lexer.lineno
|
1374
1380
|
}
|
1375
|
-
|
1381
|
+
opt_block_param
|
1376
1382
|
{
|
1377
1383
|
result = self.env.dynamic.keys
|
1378
1384
|
}
|
@@ -1423,6 +1429,14 @@ rule
|
|
1423
1429
|
{
|
1424
1430
|
result = new_call val[0], val[2].to_sym
|
1425
1431
|
}
|
1432
|
+
| primary_value tDOT paren_args
|
1433
|
+
{
|
1434
|
+
result = new_call val[0], :call
|
1435
|
+
}
|
1436
|
+
| primary_value tCOLON2 paren_args
|
1437
|
+
{
|
1438
|
+
result = new_call val[0], :call
|
1439
|
+
}
|
1426
1440
|
| kSUPER paren_args
|
1427
1441
|
{
|
1428
1442
|
result = new_super val[1]
|
@@ -1431,13 +1445,17 @@ rule
|
|
1431
1445
|
{
|
1432
1446
|
result = s(:zsuper)
|
1433
1447
|
}
|
1448
|
+
| primary_value tLBRACK2 opt_call_args rbracket
|
1449
|
+
{
|
1450
|
+
result = new_aref val
|
1451
|
+
}
|
1434
1452
|
|
1435
1453
|
brace_block: tLCURLY
|
1436
1454
|
{
|
1437
1455
|
self.env.extend :dynamic
|
1438
1456
|
result = self.lexer.lineno
|
1439
1457
|
}
|
1440
|
-
|
1458
|
+
opt_block_param
|
1441
1459
|
{
|
1442
1460
|
result = self.env.dynamic.keys
|
1443
1461
|
}
|
@@ -1455,7 +1473,7 @@ rule
|
|
1455
1473
|
self.env.extend :dynamic
|
1456
1474
|
result = self.lexer.lineno
|
1457
1475
|
}
|
1458
|
-
|
1476
|
+
opt_block_param
|
1459
1477
|
{
|
1460
1478
|
result = self.env.dynamic.keys
|
1461
1479
|
}
|
@@ -1472,23 +1490,13 @@ rule
|
|
1472
1490
|
{
|
1473
1491
|
result = self.lexer.lineno
|
1474
1492
|
}
|
1475
|
-
|
1493
|
+
args then compstmt cases
|
1476
1494
|
{
|
1477
1495
|
result = new_when(val[2], val[4])
|
1478
1496
|
result.line = val[1]
|
1479
1497
|
result << val[5] if val[5]
|
1480
1498
|
}
|
1481
1499
|
|
1482
|
-
when_args: args
|
1483
|
-
| args tCOMMA tSTAR arg_value
|
1484
|
-
{
|
1485
|
-
result = self.list_append val[0], new_when(val[3], nil)
|
1486
|
-
}
|
1487
|
-
| tSTAR arg_value
|
1488
|
-
{
|
1489
|
-
result = s(:array, new_when(val[1], nil))
|
1490
|
-
}
|
1491
|
-
|
1492
1500
|
cases: opt_else | case_body
|
1493
1501
|
|
1494
1502
|
opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
|
@@ -1737,6 +1745,7 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1737
1745
|
| kFALSE { result = s(:false) }
|
1738
1746
|
| k__FILE__ { result = s(:str, self.file) }
|
1739
1747
|
| k__LINE__ { result = s(:lit, lexer.src.current_line) }
|
1748
|
+
| k__ENCODING__ { result = s(:str, "Unsupported!") }
|
1740
1749
|
|
1741
1750
|
var_ref: user_variable
|
1742
1751
|
{
|
@@ -1877,12 +1886,18 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1877
1886
|
result = val[0]
|
1878
1887
|
}
|
1879
1888
|
|
1880
|
-
|
1889
|
+
f_arg_item: f_norm_arg
|
1890
|
+
| tLPAREN f_margs rparen
|
1891
|
+
{
|
1892
|
+
raise "no19: #{val.inspect}"
|
1893
|
+
}
|
1894
|
+
|
1895
|
+
f_arg: f_arg_item
|
1881
1896
|
{
|
1882
1897
|
result = s(:args)
|
1883
1898
|
result << val[0].to_sym
|
1884
1899
|
}
|
1885
|
-
| f_arg tCOMMA
|
1900
|
+
| f_arg tCOMMA f_arg_item
|
1886
1901
|
{
|
1887
1902
|
val[0] << val[2].to_sym
|
1888
1903
|
result = val[0]
|
@@ -1894,6 +1909,20 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1894
1909
|
# TODO: detect duplicate names
|
1895
1910
|
}
|
1896
1911
|
|
1912
|
+
f_block_opt: tIDENTIFIER tEQL primary_value
|
1913
|
+
{
|
1914
|
+
raise "no20: #{val.inspect}"
|
1915
|
+
}
|
1916
|
+
|
1917
|
+
f_block_optarg: f_block_opt
|
1918
|
+
{
|
1919
|
+
raise "no21: #{val.inspect}"
|
1920
|
+
}
|
1921
|
+
| f_block_optarg tCOMMA f_block_opt
|
1922
|
+
{
|
1923
|
+
raise "no22: #{val.inspect}"
|
1924
|
+
}
|
1925
|
+
|
1897
1926
|
f_optarg: f_opt
|
1898
1927
|
{
|
1899
1928
|
result = s(:block, val[0])
|
@@ -1958,14 +1987,6 @@ keyword_variable: kNIL { result = s(:nil) }
|
|
1958
1987
|
{
|
1959
1988
|
result = val[0]
|
1960
1989
|
}
|
1961
|
-
| args trailer
|
1962
|
-
{
|
1963
|
-
size = val[0].size
|
1964
|
-
if (size % 2 != 1) then # != 1 because of leading :array
|
1965
|
-
yyerror "Odd number (#{size}) list for Hash. #{val[0].inspect}"
|
1966
|
-
end
|
1967
|
-
result = val[0]
|
1968
|
-
}
|
1969
1990
|
|
1970
1991
|
assocs: assoc
|
1971
1992
|
| assocs tCOMMA assoc
|