ruby_parser 2.3.1 → 3.0.0.a1
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 +1 -1
- data/History.txt +69 -0
- data/Manifest.txt +5 -1
- data/README.txt +5 -5
- data/Rakefile +65 -1
- data/bin/ruby_parse +9 -1
- data/bin/ruby_parse_extract_error +75 -0
- data/lib/ruby18_parser.rb +5737 -0
- data/lib/{ruby_parser.y → ruby18_parser.y} +172 -110
- data/lib/ruby19_parser.rb +6147 -0
- data/lib/ruby19_parser.y +2014 -0
- data/lib/ruby_lexer.rb +130 -37
- data/lib/ruby_parser.rb +3 -5543
- data/lib/ruby_parser_extras.rb +195 -48
- data/test/test_ruby_lexer.rb +94 -15
- data/test/test_ruby_parser.rb +134 -80
- data/test/test_ruby_parser_extras.rb +3 -0
- metadata +51 -27
- metadata.gz.sig +3 -1
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- racc -*-
|
2
2
|
|
3
|
-
class
|
3
|
+
class Ruby18Parser
|
4
4
|
|
5
5
|
token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
6
6
|
kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
|
@@ -12,10 +12,10 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
|
|
12
12
|
tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
|
13
13
|
tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT
|
14
14
|
tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG
|
15
|
-
tLBRACK tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
|
15
|
+
tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
|
16
16
|
tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET
|
17
17
|
tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
|
18
|
-
tWORDS_BEG
|
18
|
+
tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING
|
19
19
|
tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN
|
20
20
|
|
21
21
|
prechigh
|
@@ -67,7 +67,7 @@ rule
|
|
67
67
|
| stmt
|
68
68
|
| stmts terms stmt
|
69
69
|
{
|
70
|
-
result =
|
70
|
+
result = block_append val[0], val[2]
|
71
71
|
}
|
72
72
|
| error stmt
|
73
73
|
{
|
@@ -117,11 +117,11 @@ rule
|
|
117
117
|
}
|
118
118
|
| stmt kRESCUE_MOD stmt
|
119
119
|
{
|
120
|
-
result = s(:rescue, val[0],
|
120
|
+
result = s(:rescue, val[0], new_resbody(s(:array), val[2]))
|
121
121
|
}
|
122
122
|
| klBEGIN
|
123
123
|
{
|
124
|
-
if (
|
124
|
+
if (in_def || in_single > 0) then
|
125
125
|
yyerror "BEGIN in method"
|
126
126
|
end
|
127
127
|
self.env.extend
|
@@ -133,14 +133,14 @@ rule
|
|
133
133
|
}
|
134
134
|
| klEND tLCURLY compstmt tRCURLY
|
135
135
|
{
|
136
|
-
if (
|
136
|
+
if (in_def || in_single > 0) then
|
137
137
|
yyerror "END in method; use at_exit"
|
138
138
|
end
|
139
139
|
result = new_iter s(:postexe), nil, val[2]
|
140
140
|
}
|
141
141
|
| lhs tEQL command_call
|
142
142
|
{
|
143
|
-
result =
|
143
|
+
result = node_assign val[0], val[2]
|
144
144
|
}
|
145
145
|
| mlhs tEQL command_call
|
146
146
|
{
|
@@ -150,7 +150,7 @@ rule
|
|
150
150
|
{
|
151
151
|
result = new_op_asgn val
|
152
152
|
}
|
153
|
-
| primary_value
|
153
|
+
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call
|
154
154
|
{
|
155
155
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
156
156
|
}
|
@@ -168,11 +168,11 @@ rule
|
|
168
168
|
}
|
169
169
|
| backref tOP_ASGN command_call
|
170
170
|
{
|
171
|
-
|
171
|
+
backref_assign_error val[0]
|
172
172
|
}
|
173
173
|
| lhs tEQL mrhs
|
174
174
|
{
|
175
|
-
result =
|
175
|
+
result = node_assign val[0], s(:svalue, val[2])
|
176
176
|
}
|
177
177
|
| mlhs tEQL arg_value
|
178
178
|
{
|
@@ -352,27 +352,27 @@ rule
|
|
352
352
|
|
353
353
|
mlhs_node: variable
|
354
354
|
{
|
355
|
-
result =
|
355
|
+
result = assignable val[0]
|
356
356
|
}
|
357
|
-
| primary_value
|
357
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
358
358
|
{
|
359
|
-
result =
|
359
|
+
result = aryset val[0], val[2]
|
360
360
|
}
|
361
361
|
| primary_value tDOT tIDENTIFIER
|
362
362
|
{
|
363
|
-
result = s(:attrasgn, val[0], :"#{val[2]}="
|
363
|
+
result = s(:attrasgn, val[0], :"#{val[2]}=")
|
364
364
|
}
|
365
365
|
| primary_value tCOLON2 tIDENTIFIER
|
366
366
|
{
|
367
|
-
result = s(:attrasgn, val[0], :"#{val[2]}="
|
367
|
+
result = s(:attrasgn, val[0], :"#{val[2]}=")
|
368
368
|
}
|
369
369
|
| primary_value tDOT tCONSTANT
|
370
370
|
{
|
371
|
-
result = s(:attrasgn, val[0], :"#{val[2]}="
|
371
|
+
result = s(:attrasgn, val[0], :"#{val[2]}=")
|
372
372
|
}
|
373
373
|
| primary_value tCOLON2 tCONSTANT
|
374
374
|
{
|
375
|
-
if (
|
375
|
+
if (in_def || in_single > 0) then
|
376
376
|
yyerror "dynamic constant assignment"
|
377
377
|
end
|
378
378
|
|
@@ -380,7 +380,7 @@ rule
|
|
380
380
|
}
|
381
381
|
| tCOLON3 tCONSTANT
|
382
382
|
{
|
383
|
-
if (
|
383
|
+
if (in_def || in_single > 0) then
|
384
384
|
yyerror "dynamic constant assignment"
|
385
385
|
end
|
386
386
|
|
@@ -388,16 +388,16 @@ rule
|
|
388
388
|
}
|
389
389
|
| backref
|
390
390
|
{
|
391
|
-
|
391
|
+
backref_assign_error val[0]
|
392
392
|
}
|
393
393
|
|
394
394
|
lhs: variable
|
395
395
|
{
|
396
|
-
result =
|
396
|
+
result = assignable val[0]
|
397
397
|
}
|
398
|
-
| primary_value
|
398
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
399
399
|
{
|
400
|
-
result =
|
400
|
+
result = aryset val[0], val[2]
|
401
401
|
}
|
402
402
|
| primary_value tDOT tIDENTIFIER
|
403
403
|
{
|
@@ -413,7 +413,7 @@ rule
|
|
413
413
|
}
|
414
414
|
| primary_value tCOLON2 tCONSTANT
|
415
415
|
{
|
416
|
-
if (
|
416
|
+
if (in_def || in_single > 0) then
|
417
417
|
yyerror "dynamic constant assignment"
|
418
418
|
end
|
419
419
|
|
@@ -421,7 +421,7 @@ rule
|
|
421
421
|
}
|
422
422
|
| tCOLON3 tCONSTANT
|
423
423
|
{
|
424
|
-
if (
|
424
|
+
if (in_def || in_single > 0) then
|
425
425
|
yyerror "dynamic constant assignment"
|
426
426
|
end
|
427
427
|
|
@@ -429,7 +429,7 @@ rule
|
|
429
429
|
}
|
430
430
|
| backref
|
431
431
|
{
|
432
|
-
|
432
|
+
backref_assign_error val[0]
|
433
433
|
}
|
434
434
|
|
435
435
|
cname: tIDENTIFIER
|
@@ -495,22 +495,22 @@ rule
|
|
495
495
|
| kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT
|
496
496
|
| kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF
|
497
497
|
| kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD
|
498
|
-
|
|
498
|
+
| kIF | kUNLESS | kWHILE | kUNTIL
|
499
499
|
|
500
500
|
arg: lhs tEQL arg
|
501
501
|
{
|
502
|
-
result =
|
502
|
+
result = node_assign val[0], val[2]
|
503
503
|
}
|
504
504
|
| lhs tEQL arg kRESCUE_MOD arg
|
505
505
|
{
|
506
|
-
result =
|
506
|
+
result = node_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4]))
|
507
507
|
# result.line = val[0].line
|
508
508
|
}
|
509
509
|
| var_lhs tOP_ASGN arg
|
510
510
|
{
|
511
511
|
result = new_op_asgn val
|
512
512
|
}
|
513
|
-
| primary_value
|
513
|
+
| primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg
|
514
514
|
{
|
515
515
|
result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5])
|
516
516
|
val[2][0] = :arglist
|
@@ -538,7 +538,7 @@ rule
|
|
538
538
|
}
|
539
539
|
| backref tOP_ASGN arg
|
540
540
|
{
|
541
|
-
|
541
|
+
backref_assign_error val[0]
|
542
542
|
}
|
543
543
|
| arg tDOT2 arg
|
544
544
|
{
|
@@ -560,101 +560,101 @@ rule
|
|
560
560
|
}
|
561
561
|
| arg tPLUS arg
|
562
562
|
{
|
563
|
-
result = new_call val[0], :+,
|
563
|
+
result = new_call val[0], :+, argl(val[2])
|
564
564
|
}
|
565
565
|
| arg tMINUS arg
|
566
566
|
{
|
567
|
-
result = new_call val[0], :-,
|
567
|
+
result = new_call val[0], :-, argl(val[2])
|
568
568
|
}
|
569
569
|
| arg tSTAR2 arg
|
570
570
|
{
|
571
|
-
result = new_call val[0], :*,
|
571
|
+
result = new_call val[0], :*, argl(val[2])
|
572
572
|
}
|
573
573
|
| arg tDIVIDE arg
|
574
574
|
{
|
575
|
-
result = new_call val[0], :"/",
|
575
|
+
result = new_call val[0], :"/", argl(val[2])
|
576
576
|
}
|
577
577
|
| arg tPERCENT arg
|
578
578
|
{
|
579
|
-
result = new_call val[0],
|
579
|
+
result = new_call val[0], :"%", argl(val[2])
|
580
580
|
}
|
581
581
|
| arg tPOW arg
|
582
582
|
{
|
583
|
-
result = new_call val[0], :**,
|
583
|
+
result = new_call val[0], :**, argl(val[2])
|
584
584
|
}
|
585
585
|
| tUMINUS_NUM tINTEGER tPOW arg
|
586
586
|
{
|
587
|
-
result = new_call(new_call(s(:lit, val[1]), :"**",
|
587
|
+
result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@")
|
588
588
|
}
|
589
589
|
| tUMINUS_NUM tFLOAT tPOW arg
|
590
590
|
{
|
591
|
-
result = new_call(new_call(s(:lit, val[1]), :"**",
|
591
|
+
result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@")
|
592
592
|
}
|
593
593
|
| tUPLUS arg
|
594
594
|
{
|
595
595
|
if val[1][0] == :lit then
|
596
596
|
result = val[1]
|
597
597
|
else
|
598
|
-
result = new_call val[1], :"+@"
|
598
|
+
result = new_call val[1], :"+@"
|
599
599
|
end
|
600
600
|
}
|
601
601
|
| tUMINUS arg
|
602
602
|
{
|
603
|
-
result = new_call val[1], :"-@"
|
603
|
+
result = new_call val[1], :"-@"
|
604
604
|
}
|
605
605
|
| arg tPIPE arg
|
606
606
|
{
|
607
|
-
result = new_call val[0], :"|",
|
607
|
+
result = new_call val[0], :"|", argl(val[2])
|
608
608
|
}
|
609
609
|
| arg tCARET arg
|
610
610
|
{
|
611
|
-
result = new_call val[0], :"^",
|
611
|
+
result = new_call val[0], :"^", argl(val[2])
|
612
612
|
}
|
613
613
|
| arg tAMPER2 arg
|
614
614
|
{
|
615
|
-
result = new_call val[0], :"&",
|
615
|
+
result = new_call val[0], :"&", argl(val[2])
|
616
616
|
}
|
617
617
|
| arg tCMP arg
|
618
618
|
{
|
619
|
-
result = new_call val[0], :"<=>",
|
619
|
+
result = new_call val[0], :"<=>", argl(val[2])
|
620
620
|
}
|
621
621
|
| arg tGT arg
|
622
622
|
{
|
623
|
-
result = new_call val[0], :">",
|
623
|
+
result = new_call val[0], :">", argl(val[2])
|
624
624
|
}
|
625
625
|
| arg tGEQ arg
|
626
626
|
{
|
627
|
-
result = new_call val[0], :">=",
|
627
|
+
result = new_call val[0], :">=", argl(val[2])
|
628
628
|
}
|
629
629
|
| arg tLT arg
|
630
630
|
{
|
631
|
-
result = new_call val[0], :"<",
|
631
|
+
result = new_call val[0], :"<", argl(val[2])
|
632
632
|
}
|
633
633
|
| arg tLEQ arg
|
634
634
|
{
|
635
|
-
result = new_call val[0], :"<=",
|
635
|
+
result = new_call val[0], :"<=", argl(val[2])
|
636
636
|
}
|
637
637
|
| arg tEQ arg
|
638
638
|
{
|
639
|
-
result = new_call val[0], :"==",
|
639
|
+
result = new_call val[0], :"==", argl(val[2])
|
640
640
|
}
|
641
641
|
| arg tEQQ arg
|
642
642
|
{
|
643
|
-
result = new_call val[0], :"===",
|
643
|
+
result = new_call val[0], :"===", argl(val[2])
|
644
644
|
}
|
645
645
|
| arg tNEQ arg
|
646
646
|
{
|
647
647
|
val[0] = value_expr val[0] # TODO: port call_op and clean these
|
648
648
|
val[2] = value_expr val[2]
|
649
|
-
result = s(:not, new_call(val[0], :"==",
|
649
|
+
result = s(:not, new_call(val[0], :"==", argl(val[2])))
|
650
650
|
}
|
651
651
|
| arg tMATCH arg
|
652
652
|
{
|
653
|
-
result =
|
653
|
+
result = get_match_node val[0], val[2]
|
654
654
|
}
|
655
655
|
| arg tNMATCH arg
|
656
656
|
{
|
657
|
-
result = s(:not,
|
657
|
+
result = s(:not, get_match_node(val[0], val[2]))
|
658
658
|
}
|
659
659
|
| tBANG arg
|
660
660
|
{
|
@@ -663,19 +663,19 @@ rule
|
|
663
663
|
| tTILDE arg
|
664
664
|
{
|
665
665
|
val[2] = value_expr val[2]
|
666
|
-
result = new_call val[1], :"~"
|
666
|
+
result = new_call val[1], :"~"
|
667
667
|
}
|
668
668
|
| arg tLSHFT arg
|
669
669
|
{
|
670
670
|
val[0] = value_expr val[0]
|
671
671
|
val[2] = value_expr val[2]
|
672
|
-
result = new_call val[0], :"\<\<",
|
672
|
+
result = new_call val[0], :"\<\<", argl(val[2])
|
673
673
|
}
|
674
674
|
| arg tRSHFT arg
|
675
675
|
{
|
676
676
|
val[0] = value_expr val[0]
|
677
677
|
val[2] = value_expr val[2]
|
678
|
-
result = new_call val[0], :">>",
|
678
|
+
result = new_call val[0], :">>", argl(val[2])
|
679
679
|
}
|
680
680
|
| arg tANDOP arg
|
681
681
|
{
|
@@ -691,6 +691,7 @@ rule
|
|
691
691
|
}
|
692
692
|
| arg tEH arg tCOLON arg
|
693
693
|
{
|
694
|
+
lexer.tern.pop
|
694
695
|
result = s(:if, val[0], val[2], val[4])
|
695
696
|
}
|
696
697
|
| primary
|
@@ -712,7 +713,7 @@ rule
|
|
712
713
|
}
|
713
714
|
| args tCOMMA tSTAR arg opt_nl
|
714
715
|
{
|
715
|
-
result =
|
716
|
+
result = arg_concat val[0], val[3]
|
716
717
|
}
|
717
718
|
| assocs trailer
|
718
719
|
{
|
@@ -752,92 +753,92 @@ rule
|
|
752
753
|
}
|
753
754
|
| args opt_block_arg
|
754
755
|
{
|
755
|
-
result =
|
756
|
+
result = arg_blk_pass val[0], val[1]
|
756
757
|
}
|
757
758
|
| args tCOMMA tSTAR arg_value opt_block_arg
|
758
759
|
{
|
759
|
-
result =
|
760
|
-
result =
|
760
|
+
result = arg_concat val[0], val[3]
|
761
|
+
result = arg_blk_pass result, val[4]
|
761
762
|
}
|
762
763
|
| assocs opt_block_arg
|
763
764
|
{
|
764
765
|
result = s(:array, s(:hash, *val[0].values))
|
765
|
-
result =
|
766
|
+
result = arg_blk_pass result, val[1]
|
766
767
|
}
|
767
768
|
| assocs tCOMMA tSTAR arg_value opt_block_arg
|
768
769
|
{
|
769
|
-
result =
|
770
|
-
result =
|
770
|
+
result = arg_concat s(:array, s(:hash, *val[0].values)), val[3]
|
771
|
+
result = arg_blk_pass result, val[4]
|
771
772
|
}
|
772
773
|
| args tCOMMA assocs opt_block_arg
|
773
774
|
{
|
774
775
|
result = val[0] << s(:hash, *val[2].values)
|
775
|
-
result =
|
776
|
+
result = arg_blk_pass result, val[3]
|
776
777
|
}
|
777
778
|
| args tCOMMA assocs tCOMMA tSTAR arg opt_block_arg
|
778
779
|
{
|
779
780
|
val[0] << s(:hash, *val[2].values)
|
780
|
-
result =
|
781
|
-
result =
|
781
|
+
result = arg_concat val[0], val[5]
|
782
|
+
result = arg_blk_pass result, val[6]
|
782
783
|
}
|
783
784
|
| tSTAR arg_value opt_block_arg
|
784
785
|
{
|
785
|
-
result =
|
786
|
+
result = arg_blk_pass s(:splat, val[1]), val[2]
|
786
787
|
}
|
787
788
|
| block_arg
|
788
789
|
|
789
790
|
call_args2: arg_value tCOMMA args opt_block_arg
|
790
791
|
{
|
791
|
-
args =
|
792
|
-
result =
|
792
|
+
args = list_prepend val[0], val[2]
|
793
|
+
result = arg_blk_pass args, val[3]
|
793
794
|
}
|
794
795
|
| arg_value tCOMMA block_arg
|
795
796
|
{
|
796
|
-
result =
|
797
|
+
result = arg_blk_pass val[0], val[2]
|
797
798
|
}
|
798
799
|
| arg_value tCOMMA tSTAR arg_value opt_block_arg
|
799
800
|
{
|
800
|
-
result =
|
801
|
-
result =
|
801
|
+
result = arg_concat s(:array, val[0]), val[3]
|
802
|
+
result = arg_blk_pass result, val[4]
|
802
803
|
}
|
803
804
|
| arg_value tCOMMA args tCOMMA tSTAR arg_value opt_block_arg
|
804
805
|
{
|
805
|
-
result =
|
806
|
-
result =
|
806
|
+
result = arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5]
|
807
|
+
result = arg_blk_pass result, val[6]
|
807
808
|
}
|
808
809
|
| assocs opt_block_arg
|
809
810
|
{
|
810
811
|
result = s(:array, s(:hash, *val[0].values))
|
811
|
-
result =
|
812
|
+
result = arg_blk_pass result, val[1]
|
812
813
|
}
|
813
814
|
| assocs tCOMMA tSTAR arg_value opt_block_arg
|
814
815
|
{
|
815
816
|
result = s(:array, s(:hash, *val[0].values), val[3])
|
816
|
-
result =
|
817
|
+
result = arg_blk_pass result, val[4]
|
817
818
|
}
|
818
819
|
| arg_value tCOMMA assocs opt_block_arg
|
819
820
|
{
|
820
821
|
result = s(:array, val[0], s(:hash, *val[2].values))
|
821
|
-
result =
|
822
|
+
result = arg_blk_pass result, val[3]
|
822
823
|
}
|
823
824
|
| arg_value tCOMMA args tCOMMA assocs opt_block_arg
|
824
825
|
{
|
825
826
|
result = s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values))
|
826
|
-
result =
|
827
|
+
result = arg_blk_pass result, val[5]
|
827
828
|
}
|
828
829
|
| arg_value tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg
|
829
830
|
{
|
830
|
-
result =
|
831
|
-
result =
|
831
|
+
result = arg_concat s(:array, val[0]).add(s(:hash, *val[2].values)), val[5]
|
832
|
+
result = arg_blk_pass result, val[6]
|
832
833
|
}
|
833
834
|
| arg_value tCOMMA args tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg
|
834
835
|
{
|
835
|
-
result =
|
836
|
-
result =
|
836
|
+
result = arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7]
|
837
|
+
result = arg_blk_pass result, val[8]
|
837
838
|
}
|
838
839
|
| tSTAR arg_value opt_block_arg
|
839
840
|
{
|
840
|
-
result =
|
841
|
+
result = arg_blk_pass s(:splat, val[1]), val[2]
|
841
842
|
}
|
842
843
|
| block_arg
|
843
844
|
|
@@ -880,7 +881,7 @@ rule
|
|
880
881
|
{
|
881
882
|
result = val[1]
|
882
883
|
}
|
883
|
-
|
|
884
|
+
| none
|
884
885
|
|
885
886
|
args: arg_value
|
886
887
|
{
|
@@ -888,7 +889,7 @@ rule
|
|
888
889
|
}
|
889
890
|
| args tCOMMA arg_value
|
890
891
|
{
|
891
|
-
result =
|
892
|
+
result = list_append val[0], val[2]
|
892
893
|
}
|
893
894
|
|
894
895
|
mrhs: args tCOMMA arg_value
|
@@ -897,7 +898,7 @@ rule
|
|
897
898
|
}
|
898
899
|
| args tCOMMA tSTAR arg_value
|
899
900
|
{
|
900
|
-
result =
|
901
|
+
result = arg_concat val[0], val[3]
|
901
902
|
}
|
902
903
|
| tSTAR arg_value
|
903
904
|
{
|
@@ -909,7 +910,7 @@ rule
|
|
909
910
|
| xstring
|
910
911
|
| regexp
|
911
912
|
| words
|
912
|
-
|
|
913
|
+
| qwords
|
913
914
|
| var_ref
|
914
915
|
| backref
|
915
916
|
| tFID
|
@@ -952,7 +953,7 @@ rule
|
|
952
953
|
{
|
953
954
|
result = s(:colon3, val[1].to_sym)
|
954
955
|
}
|
955
|
-
| primary_value
|
956
|
+
| primary_value tLBRACK2 aref_args tRBRACK
|
956
957
|
{
|
957
958
|
result = new_aref val
|
958
959
|
}
|
@@ -1043,7 +1044,7 @@ rule
|
|
1043
1044
|
{
|
1044
1045
|
result = new_case nil, val[3]
|
1045
1046
|
}
|
1046
|
-
| kFOR
|
1047
|
+
| kFOR for_var kIN
|
1047
1048
|
{
|
1048
1049
|
lexer.cond.push true
|
1049
1050
|
}
|
@@ -1062,7 +1063,7 @@ rule
|
|
1062
1063
|
cpath superclass
|
1063
1064
|
{
|
1064
1065
|
self.comments.push self.lexer.comments
|
1065
|
-
if (
|
1066
|
+
if (in_def || in_single > 0) then
|
1066
1067
|
yyerror "class definition in method body"
|
1067
1068
|
end
|
1068
1069
|
self.env.extend
|
@@ -1078,12 +1079,12 @@ rule
|
|
1078
1079
|
}
|
1079
1080
|
expr
|
1080
1081
|
{
|
1081
|
-
result =
|
1082
|
+
result = in_def
|
1082
1083
|
self.in_def = false
|
1083
1084
|
}
|
1084
1085
|
term
|
1085
1086
|
{
|
1086
|
-
result =
|
1087
|
+
result = in_single
|
1087
1088
|
self.in_single = 0
|
1088
1089
|
self.env.extend
|
1089
1090
|
}
|
@@ -1100,7 +1101,7 @@ rule
|
|
1100
1101
|
{
|
1101
1102
|
self.comments.push self.lexer.comments
|
1102
1103
|
yyerror "module definition in method body" if
|
1103
|
-
|
1104
|
+
in_def or in_single > 0
|
1104
1105
|
|
1105
1106
|
self.env.extend
|
1106
1107
|
}
|
@@ -1183,12 +1184,71 @@ rule
|
|
1183
1184
|
result = val[1]
|
1184
1185
|
}
|
1185
1186
|
|
1186
|
-
|
1187
|
+
for_var: lhs
|
1187
1188
|
| mlhs
|
1188
1189
|
{
|
1189
1190
|
val[0].delete_at 1 if val[0][1].nil? # HACK
|
1190
1191
|
}
|
1191
1192
|
|
1193
|
+
block_par: mlhs_item
|
1194
|
+
{
|
1195
|
+
result = s(:array, val[0])
|
1196
|
+
}
|
1197
|
+
| block_par tCOMMA mlhs_item
|
1198
|
+
{
|
1199
|
+
result = list_append val[0], val[2]
|
1200
|
+
}
|
1201
|
+
|
1202
|
+
block_var: block_par
|
1203
|
+
{
|
1204
|
+
result = block_var val[0], nil, nil
|
1205
|
+
}
|
1206
|
+
| block_par tCOMMA
|
1207
|
+
{
|
1208
|
+
result = block_var val[0], nil, nil
|
1209
|
+
}
|
1210
|
+
| block_par tCOMMA tAMPER lhs
|
1211
|
+
{
|
1212
|
+
result = block_var val[0], nil, val[3]
|
1213
|
+
}
|
1214
|
+
| block_par tCOMMA tSTAR lhs tCOMMA tAMPER lhs
|
1215
|
+
{
|
1216
|
+
result = block_var val[0], val[3], val[6]
|
1217
|
+
}
|
1218
|
+
| block_par tCOMMA tSTAR tCOMMA tAMPER lhs
|
1219
|
+
{
|
1220
|
+
result = block_var val[0], s(:splat), val[5]
|
1221
|
+
}
|
1222
|
+
| block_par tCOMMA tSTAR lhs
|
1223
|
+
{
|
1224
|
+
result = block_var val[0], val[3], nil
|
1225
|
+
}
|
1226
|
+
| block_par tCOMMA tSTAR
|
1227
|
+
{
|
1228
|
+
result = block_var val[0], s(:splat), nil
|
1229
|
+
}
|
1230
|
+
| tSTAR lhs tCOMMA tAMPER lhs
|
1231
|
+
{
|
1232
|
+
result = block_var nil, val[1], val[4]
|
1233
|
+
}
|
1234
|
+
| tSTAR tCOMMA tAMPER lhs
|
1235
|
+
{
|
1236
|
+
result = block_var nil, s(:splat), val[3]
|
1237
|
+
}
|
1238
|
+
| tSTAR lhs
|
1239
|
+
{
|
1240
|
+
result = block_var nil, val[1], nil
|
1241
|
+
}
|
1242
|
+
| tSTAR
|
1243
|
+
{
|
1244
|
+
result = block_var nil, s(:splat), nil
|
1245
|
+
}
|
1246
|
+
| tAMPER lhs
|
1247
|
+
{
|
1248
|
+
result = block_var nil, nil, val[1]
|
1249
|
+
}
|
1250
|
+
;
|
1251
|
+
|
1192
1252
|
opt_block_var: none
|
1193
1253
|
| tPIPE tPIPE
|
1194
1254
|
{
|
@@ -1313,7 +1373,7 @@ rule
|
|
1313
1373
|
}
|
1314
1374
|
when_args then compstmt cases
|
1315
1375
|
{
|
1316
|
-
result =
|
1376
|
+
result = new_when(val[2], val[4])
|
1317
1377
|
result.line = val[1]
|
1318
1378
|
result << val[5] if val[5]
|
1319
1379
|
}
|
@@ -1321,11 +1381,11 @@ rule
|
|
1321
1381
|
when_args: args
|
1322
1382
|
| args tCOMMA tSTAR arg_value
|
1323
1383
|
{
|
1324
|
-
result =
|
1384
|
+
result = list_append val[0], new_when(val[3], nil)
|
1325
1385
|
}
|
1326
1386
|
| tSTAR arg_value
|
1327
1387
|
{
|
1328
|
-
result = s(:array,
|
1388
|
+
result = s(:array, new_when(val[1], nil))
|
1329
1389
|
}
|
1330
1390
|
|
1331
1391
|
cases: opt_else | case_body
|
@@ -1337,7 +1397,7 @@ rule
|
|
1337
1397
|
klasses ||= s(:array)
|
1338
1398
|
klasses << node_assign(var, s(:gvar, :"$!")) if var
|
1339
1399
|
|
1340
|
-
result =
|
1400
|
+
result = new_resbody(klasses, body)
|
1341
1401
|
result << rest if rest # UGH, rewritten above
|
1342
1402
|
}
|
1343
1403
|
|
|
@@ -1381,7 +1441,7 @@ rule
|
|
1381
1441
|
string: string1
|
1382
1442
|
| string string1
|
1383
1443
|
{
|
1384
|
-
result =
|
1444
|
+
result = literal_concat val[0], val[1]
|
1385
1445
|
}
|
1386
1446
|
|
1387
1447
|
string1: tSTRING_BEG string_contents tSTRING_END
|
@@ -1425,14 +1485,14 @@ rule
|
|
1425
1485
|
word: string_content
|
1426
1486
|
| word string_content
|
1427
1487
|
{
|
1428
|
-
result =
|
1488
|
+
result = literal_concat val[0], val[1]
|
1429
1489
|
}
|
1430
1490
|
|
1431
|
-
|
1491
|
+
qwords: tQWORDS_BEG tSPACE tSTRING_END
|
1432
1492
|
{
|
1433
1493
|
result = s(:array)
|
1434
1494
|
}
|
1435
|
-
|
|
1495
|
+
| tQWORDS_BEG qword_list tSTRING_END
|
1436
1496
|
{
|
1437
1497
|
result = val[1]
|
1438
1498
|
}
|
@@ -1575,7 +1635,7 @@ xstring_contents: none
|
|
1575
1635
|
|
1576
1636
|
var_lhs: variable
|
1577
1637
|
{
|
1578
|
-
result =
|
1638
|
+
result = assignable val[0]
|
1579
1639
|
}
|
1580
1640
|
|
1581
1641
|
backref: tNTH_REF { result = s(:nth_ref, val[0]) }
|
@@ -1649,12 +1709,16 @@ xstring_contents: none
|
|
1649
1709
|
|
1650
1710
|
f_norm_arg: tCONSTANT
|
1651
1711
|
{
|
1652
|
-
yyerror "formal argument cannot be a constant
|
1712
|
+
yyerror "formal argument cannot be a constant"
|
1653
1713
|
}
|
1654
1714
|
| tIVAR
|
1655
1715
|
{
|
1656
1716
|
yyerror "formal argument cannot be an instance variable"
|
1657
1717
|
}
|
1718
|
+
| tGVAR
|
1719
|
+
{
|
1720
|
+
yyerror "formal argument cannot be a global variable"
|
1721
|
+
}
|
1658
1722
|
| tCVAR
|
1659
1723
|
{
|
1660
1724
|
yyerror "formal argument cannot be a class variable"
|
@@ -1680,7 +1744,7 @@ xstring_contents: none
|
|
1680
1744
|
|
1681
1745
|
f_opt: tIDENTIFIER tEQL arg_value
|
1682
1746
|
{
|
1683
|
-
result =
|
1747
|
+
result = assignable val[0], val[2]
|
1684
1748
|
# TODO: detect duplicate names
|
1685
1749
|
}
|
1686
1750
|
|
@@ -1690,7 +1754,7 @@ xstring_contents: none
|
|
1690
1754
|
}
|
1691
1755
|
| f_optarg tCOMMA f_opt
|
1692
1756
|
{
|
1693
|
-
result =
|
1757
|
+
result = block_append val[0], val[2]
|
1694
1758
|
}
|
1695
1759
|
|
1696
1760
|
restarg_mark: tSTAR2 | tSTAR
|
@@ -1699,7 +1763,7 @@ xstring_contents: none
|
|
1699
1763
|
{
|
1700
1764
|
# TODO: differs from parse.y - needs tests
|
1701
1765
|
name = val[1].to_sym
|
1702
|
-
|
1766
|
+
assignable name
|
1703
1767
|
result = :"*#{name}"
|
1704
1768
|
}
|
1705
1769
|
| restarg_mark
|
@@ -1787,8 +1851,6 @@ xstring_contents: none
|
|
1787
1851
|
|
1788
1852
|
none: { result = nil }
|
1789
1853
|
|
1790
|
-
none_block_pass: { result = nil }
|
1791
|
-
|
1792
1854
|
end
|
1793
1855
|
|
1794
1856
|
---- inner
|