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.

@@ -1,6 +1,6 @@
1
1
  # -*- racc -*-
2
2
 
3
- class RubyParser
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 tAWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING
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 = self.block_append val[0], val[2]
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], s(:resbody, s(:array), val[2]))
120
+ result = s(:rescue, val[0], new_resbody(s(:array), val[2]))
121
121
  }
122
122
  | klBEGIN
123
123
  {
124
- if (self.in_def || self.in_single > 0) then
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 (self.in_def || self.in_single > 0) then
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 = self.node_assign val[0], val[2]
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 "[" aref_args tRBRACK tOP_ASGN command_call
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
- self.backref_assign_error val[0]
171
+ backref_assign_error val[0]
172
172
  }
173
173
  | lhs tEQL mrhs
174
174
  {
175
- result = self.node_assign val[0], s(:svalue, val[2])
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 = self.assignable val[0]
355
+ result = assignable val[0]
356
356
  }
357
- | primary_value "[" aref_args tRBRACK
357
+ | primary_value tLBRACK2 aref_args tRBRACK
358
358
  {
359
- result = self.aryset val[0], val[2]
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]}=", s(:arglist))
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]}=", s(:arglist))
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]}=", s(:arglist))
371
+ result = s(:attrasgn, val[0], :"#{val[2]}=")
372
372
  }
373
373
  | primary_value tCOLON2 tCONSTANT
374
374
  {
375
- if (self.in_def || self.in_single > 0) then
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 (self.in_def || self.in_single > 0) then
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
- self.backref_assign_error val[0]
391
+ backref_assign_error val[0]
392
392
  }
393
393
 
394
394
  lhs: variable
395
395
  {
396
- result = self.assignable val[0]
396
+ result = assignable val[0]
397
397
  }
398
- | primary_value "[" aref_args tRBRACK
398
+ | primary_value tLBRACK2 aref_args tRBRACK
399
399
  {
400
- result = self.aryset val[0], val[2]
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 (self.in_def || self.in_single > 0) then
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 (self.in_def || self.in_single > 0) then
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
- self.backref_assign_error val[0]
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
- | kIF_MOD | kUNLESS_MOD | kWHILE_MOD | kUNTIL_MOD | kRESCUE_MOD
498
+ | kIF | kUNLESS | kWHILE | kUNTIL
499
499
 
500
500
  arg: lhs tEQL arg
501
501
  {
502
- result = self.node_assign val[0], val[2]
502
+ result = node_assign val[0], val[2]
503
503
  }
504
504
  | lhs tEQL arg kRESCUE_MOD arg
505
505
  {
506
- result = self.node_assign val[0], s(:rescue, val[2], s(:resbody, s(:array), val[4]))
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 "[" aref_args tRBRACK tOP_ASGN arg
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
- self.backref_assign_error val[0]
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], :+, s(:arglist, val[2])
563
+ result = new_call val[0], :+, argl(val[2])
564
564
  }
565
565
  | arg tMINUS arg
566
566
  {
567
- result = new_call val[0], :-, s(:arglist, val[2])
567
+ result = new_call val[0], :-, argl(val[2])
568
568
  }
569
569
  | arg tSTAR2 arg
570
570
  {
571
- result = new_call val[0], :*, s(:arglist, val[2])
571
+ result = new_call val[0], :*, argl(val[2])
572
572
  }
573
573
  | arg tDIVIDE arg
574
574
  {
575
- result = new_call val[0], :"/", s(:arglist, val[2])
575
+ result = new_call val[0], :"/", argl(val[2])
576
576
  }
577
577
  | arg tPERCENT arg
578
578
  {
579
- result = new_call val[0], :%, s(:arglist, val[2])
579
+ result = new_call val[0], :"%", argl(val[2])
580
580
  }
581
581
  | arg tPOW arg
582
582
  {
583
- result = new_call val[0], :**, s(:arglist, val[2])
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]), :"**", s(:arglist, val[3])), :"-@", s(:arglist))
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]), :"**", s(:arglist, val[3])), :"-@", s(:arglist))
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], :"+@", s(:arglist)
598
+ result = new_call val[1], :"+@"
599
599
  end
600
600
  }
601
601
  | tUMINUS arg
602
602
  {
603
- result = new_call val[1], :"-@", s(:arglist)
603
+ result = new_call val[1], :"-@"
604
604
  }
605
605
  | arg tPIPE arg
606
606
  {
607
- result = new_call val[0], :"|", s(:arglist, val[2])
607
+ result = new_call val[0], :"|", argl(val[2])
608
608
  }
609
609
  | arg tCARET arg
610
610
  {
611
- result = new_call val[0], :"^", s(:arglist, val[2])
611
+ result = new_call val[0], :"^", argl(val[2])
612
612
  }
613
613
  | arg tAMPER2 arg
614
614
  {
615
- result = new_call val[0], :"&", s(:arglist, val[2])
615
+ result = new_call val[0], :"&", argl(val[2])
616
616
  }
617
617
  | arg tCMP arg
618
618
  {
619
- result = new_call val[0], :"<=>", s(:arglist, val[2])
619
+ result = new_call val[0], :"<=>", argl(val[2])
620
620
  }
621
621
  | arg tGT arg
622
622
  {
623
- result = new_call val[0], :">", s(:arglist, val[2])
623
+ result = new_call val[0], :">", argl(val[2])
624
624
  }
625
625
  | arg tGEQ arg
626
626
  {
627
- result = new_call val[0], :">=", s(:arglist, val[2])
627
+ result = new_call val[0], :">=", argl(val[2])
628
628
  }
629
629
  | arg tLT arg
630
630
  {
631
- result = new_call val[0], :"<", s(:arglist, val[2])
631
+ result = new_call val[0], :"<", argl(val[2])
632
632
  }
633
633
  | arg tLEQ arg
634
634
  {
635
- result = new_call val[0], :"<=", s(:arglist, val[2])
635
+ result = new_call val[0], :"<=", argl(val[2])
636
636
  }
637
637
  | arg tEQ arg
638
638
  {
639
- result = new_call val[0], :"==", s(:arglist, val[2])
639
+ result = new_call val[0], :"==", argl(val[2])
640
640
  }
641
641
  | arg tEQQ arg
642
642
  {
643
- result = new_call val[0], :"===", s(:arglist, val[2])
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], :"==", s(:arglist, val[2])))
649
+ result = s(:not, new_call(val[0], :"==", argl(val[2])))
650
650
  }
651
651
  | arg tMATCH arg
652
652
  {
653
- result = self.get_match_node val[0], val[2]
653
+ result = get_match_node val[0], val[2]
654
654
  }
655
655
  | arg tNMATCH arg
656
656
  {
657
- result = s(:not, self.get_match_node(val[0], val[2]))
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], :"~", s(:arglist)
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], :"\<\<", s(:arglist, val[2])
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], :">>", s(:arglist, val[2])
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 = self.arg_concat val[0], val[3]
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 = self.arg_blk_pass val[0], val[1]
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 = self.arg_concat val[0], val[3]
760
- result = self.arg_blk_pass result, val[4]
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 = self.arg_blk_pass result, val[1]
766
+ result = arg_blk_pass result, val[1]
766
767
  }
767
768
  | assocs tCOMMA tSTAR arg_value opt_block_arg
768
769
  {
769
- result = self.arg_concat s(:array, s(:hash, *val[0].values)), val[3]
770
- result = self.arg_blk_pass result, val[4]
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 = self.arg_blk_pass result, val[3]
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 = self.arg_concat val[0], val[5]
781
- result = self.arg_blk_pass result, val[6]
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 = self.arg_blk_pass s(:splat, val[1]), val[2]
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 = self.list_prepend val[0], val[2]
792
- result = self.arg_blk_pass args, val[3]
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 = self.arg_blk_pass val[0], val[2]
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 = self.arg_concat s(:array, val[0]), val[3]
801
- result = self.arg_blk_pass result, val[4]
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 = self.arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5]
806
- result = self.arg_blk_pass result, val[6]
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 = self.arg_blk_pass result, val[1]
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 = self.arg_blk_pass result, val[4]
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 = self.arg_blk_pass result, val[3]
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 = self.arg_blk_pass result, val[5]
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 = self.arg_concat s(:array, val[0]).add(s(:hash, *val[2].values)), val[5]
831
- result = self.arg_blk_pass result, val[6]
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 = self.arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7]
836
- result = self.arg_blk_pass result, val[8]
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 = self.arg_blk_pass s(:splat, val[1]), val[2]
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
- | none_block_pass
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 = self.list_append val[0], val[2]
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 = self.arg_concat val[0], val[3]
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
- | awords
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 "[" aref_args tRBRACK
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 block_var kIN
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 (self.in_def || self.in_single > 0) then
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 = self.in_def
1082
+ result = in_def
1082
1083
  self.in_def = false
1083
1084
  }
1084
1085
  term
1085
1086
  {
1086
- result = self.in_single
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
- self.in_def or self.in_single > 0
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
- block_var: lhs
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 = s(:when, val[2], val[4])
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 = self.list_append val[0], s(:when, val[3], nil)
1384
+ result = list_append val[0], new_when(val[3], nil)
1325
1385
  }
1326
1386
  | tSTAR arg_value
1327
1387
  {
1328
- result = s(:array, s(:when, val[1], nil))
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 = s(:resbody, klasses, body)
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 = self.literal_concat val[0], val[1]
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 = self.literal_concat val[0], val[1]
1488
+ result = literal_concat val[0], val[1]
1429
1489
  }
1430
1490
 
1431
- awords: tAWORDS_BEG tSPACE tSTRING_END
1491
+ qwords: tQWORDS_BEG tSPACE tSTRING_END
1432
1492
  {
1433
1493
  result = s(:array)
1434
1494
  }
1435
- | tAWORDS_BEG qword_list tSTRING_END
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 = self.assignable val[0]
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: #{val[0]}"
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 = self.assignable val[0], val[2]
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 = self.block_append val[0], val[2]
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
- self.assignable name
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