@@ -97,6 +97,15 @@ def strterm_expand?(strterm)
97
97
[ :dquote , :dsym , :dword , :heredoc , :xquote , :regexp ] . include? type
98
98
end
99
99
100
+ def new_strterm ( type , start , finish )
101
+ { :type => type , :beg => start , :end => finish }
102
+ end
103
+
104
+ def new_strterm2 ( type , start , finish )
105
+ term = new_strterm ( type , start , finish )
106
+ term . merge ( { :balance => true , :nesting => 0 } )
107
+ end
108
+
100
109
def process_numeric
101
110
@lex_state = :expr_end
102
111
scanner = @scanner
@@ -375,7 +384,7 @@ def add_string_content(str_buffer, str_parse)
375
384
def heredoc_identifier
376
385
if @scanner . scan ( /(-?)['"]?(\w +)['"]?/ )
377
386
heredoc = @scanner [ 2 ]
378
- self . strterm = { :type => : heredoc, :beg => heredoc , :end => heredoc }
387
+ self . strterm = new_strterm ( : heredoc, heredoc , heredoc )
379
388
380
389
# if ruby code at end of line after heredoc, we have to store it to
381
390
# parse after heredoc is finished parsing
@@ -641,15 +650,15 @@ def yylex
641
650
return :tEQL , '='
642
651
643
652
elsif scan ( /\" / )
644
- self . strterm = { :type => : dquote, :beg => '"' , :end => '"' }
653
+ self . strterm = new_strterm ( : dquote, '"' , '"' )
645
654
return :tSTRING_BEG , scanner . matched
646
655
647
656
elsif scan ( /\' / )
648
- self . strterm = { :type => : squote, :beg => "'" , :end => "'" }
657
+ self . strterm = new_strterm ( : squote, "'" , "'" )
649
658
return :tSTRING_BEG , scanner . matched
650
659
651
660
elsif scan ( /\` / )
652
- self . strterm = { :type => : xquote, :beg => "`" , :end => "`" }
661
+ self . strterm = new_strterm ( : xquote, '`' , '`' )
653
662
return :tXSTRING_BEG , scanner . matched
654
663
655
664
elsif scan ( /\& / )
@@ -709,30 +718,30 @@ def yylex
709
718
710
719
case str_type
711
720
when 'Q'
712
- self . strterm = { :type => : dquote, :beg => paren , :end => term , :balance => true , :nesting => 0 }
721
+ self . strterm = new_strterm2 ( : dquote, paren , term )
713
722
return :tSTRING_BEG , scanner . matched
714
723
when 'q'
715
- self . strterm = { :type => : squote, :beg => paren , :end => term , :balance => true , :nesting => 0 }
724
+ self . strterm = new_strterm2 ( : squote, paren , term )
716
725
return :tSTRING_BEG , scanner . matched
717
726
when 'W'
718
- self . strterm = { :type => : dword, :beg => 'W' , :end => term }
727
+ self . strterm = new_strterm ( : dword, 'W' , term )
719
728
scan ( /\s */ )
720
729
return :tWORDS_BEG , scanner . matched
721
730
when 'w' , 'i'
722
- self . strterm = { :type => : sword, :beg => 'W' , :end => term }
731
+ self . strterm = new_strterm ( : sword, 'W' , term )
723
732
scan ( /\s */ )
724
733
return :tAWORDS_BEG , scanner . matched
725
734
when 'x'
726
- self . strterm = { :type => : xquote, :beg => paren , :end => term , :balance => true , :nesting => 0 }
735
+ self . strterm = new_strterm2 ( : xquote, paren , term )
727
736
return :tXSTRING_BEG , scanner . matched
728
737
when 'r'
729
- self . strterm = { :type => : regexp, :beg => paren , :end => term , :balance => true , :nesting => 0 }
738
+ self . strterm = new_strterm2 ( : regexp, paren , term )
730
739
return :tREGEXP_BEG , scanner . matched
731
740
end
732
741
733
742
elsif scan ( /\/ / )
734
743
if [ :expr_beg , :expr_mid ] . include? @lex_state
735
- self . strterm = { :type => : regexp, :beg => '/' , :end => '/' }
744
+ self . strterm = new_strterm ( : regexp, '/' , '/' )
736
745
return :tREGEXP_BEG , scanner . matched
737
746
elsif scan ( /\= / )
738
747
@lex_state = :expr_beg
@@ -741,7 +750,7 @@ def yylex
741
750
@lex_state = :expr_arg
742
751
elsif @lex_state == :expr_cmdarg || @lex_state == :expr_arg
743
752
if !check ( /\s / ) && @space_seen
744
- self . strterm = { :type => : regexp, :beg => '/' , :end => '/' }
753
+ self . strterm = new_strterm ( : regexp, '/' , '/' )
745
754
return :tREGEXP_BEG , scanner . matched
746
755
end
747
756
else
@@ -758,7 +767,7 @@ def yylex
758
767
if @lex_state == :expr_beg or ( @lex_state == :expr_arg && @space_seen )
759
768
start_word = scan ( /./ )
760
769
end_word = { '(' => ')' , '[' => ']' , '{' => '}' } [ start_word ] || start_word
761
- self . strterm = { :type => : dquote, :beg => start_word , :end => end_word , :balance => true , :nesting => 0 }
770
+ self . strterm = new_strterm2 ( : dquote, start_word , end_word )
762
771
return :tSTRING_BEG , scanner . matched
763
772
end
764
773
end
@@ -870,9 +879,9 @@ def yylex
870
879
end
871
880
872
881
if scan ( /\' / )
873
- self . strterm = { :type => : ssym, :beg => "'" , :end => "'" }
882
+ self . strterm = new_strterm ( : ssym, "'" , "'" )
874
883
elsif scan ( /\" / )
875
- self . strterm = { :type => : dsym, :beg => '"' , :end => '"' }
884
+ self . strterm = new_strterm ( : dsym, '"' , '"' )
876
885
end
877
886
878
887
@lex_state = :expr_fname
0 commit comments