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.

@@ -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