ruby_parser 2.3.1 → 3.0.0.a1
Sign up to get free protection for your applications and to get access to all the features.
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
|