Skip to content

Commit 54a2239

Browse files
committedNov 17, 2013
Use new_strterm helper for all inline string_beg tokens
1 parent e7467a0 commit 54a2239

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed
 

‎lib/opal/parser/lexer.rb

+24-15
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,15 @@ def strterm_expand?(strterm)
9797
[:dquote, :dsym, :dword, :heredoc, :xquote, :regexp].include? type
9898
end
9999

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+
100109
def process_numeric
101110
@lex_state = :expr_end
102111
scanner = @scanner
@@ -375,7 +384,7 @@ def add_string_content(str_buffer, str_parse)
375384
def heredoc_identifier
376385
if @scanner.scan(/(-?)['"]?(\w+)['"]?/)
377386
heredoc = @scanner[2]
378-
self.strterm = { :type => :heredoc, :beg => heredoc, :end => heredoc }
387+
self.strterm = new_strterm(:heredoc, heredoc, heredoc)
379388

380389
# if ruby code at end of line after heredoc, we have to store it to
381390
# parse after heredoc is finished parsing
@@ -641,15 +650,15 @@ def yylex
641650
return :tEQL, '='
642651

643652
elsif scan(/\"/)
644-
self.strterm = { :type => :dquote, :beg => '"', :end => '"' }
653+
self.strterm = new_strterm(:dquote, '"', '"')
645654
return :tSTRING_BEG, scanner.matched
646655

647656
elsif scan(/\'/)
648-
self.strterm = { :type => :squote, :beg => "'", :end => "'" }
657+
self.strterm = new_strterm(:squote, "'", "'")
649658
return :tSTRING_BEG, scanner.matched
650659

651660
elsif scan(/\`/)
652-
self.strterm = { :type => :xquote, :beg => "`", :end => "`" }
661+
self.strterm = new_strterm(:xquote, '`', '`')
653662
return :tXSTRING_BEG, scanner.matched
654663

655664
elsif scan(/\&/)
@@ -709,30 +718,30 @@ def yylex
709718

710719
case str_type
711720
when 'Q'
712-
self.strterm = { :type => :dquote, :beg => paren, :end => term, :balance => true, :nesting => 0 }
721+
self.strterm = new_strterm2(:dquote, paren, term)
713722
return :tSTRING_BEG, scanner.matched
714723
when 'q'
715-
self.strterm = { :type => :squote, :beg => paren, :end => term, :balance => true, :nesting => 0 }
724+
self.strterm = new_strterm2(:squote, paren, term)
716725
return :tSTRING_BEG, scanner.matched
717726
when 'W'
718-
self.strterm = { :type => :dword, :beg => 'W', :end => term }
727+
self.strterm = new_strterm(:dword, 'W', term)
719728
scan(/\s*/)
720729
return :tWORDS_BEG, scanner.matched
721730
when 'w', 'i'
722-
self.strterm = { :type => :sword, :beg => 'W', :end => term }
731+
self.strterm = new_strterm(:sword, 'W', term)
723732
scan(/\s*/)
724733
return :tAWORDS_BEG, scanner.matched
725734
when 'x'
726-
self.strterm = { :type => :xquote, :beg => paren, :end => term, :balance => true, :nesting => 0 }
735+
self.strterm = new_strterm2(:xquote, paren, term)
727736
return :tXSTRING_BEG, scanner.matched
728737
when 'r'
729-
self.strterm = { :type => :regexp, :beg => paren, :end => term, :balance => true, :nesting => 0 }
738+
self.strterm = new_strterm2(:regexp, paren, term)
730739
return :tREGEXP_BEG, scanner.matched
731740
end
732741

733742
elsif scan(/\//)
734743
if [:expr_beg, :expr_mid].include? @lex_state
735-
self.strterm = { :type => :regexp, :beg => '/', :end => '/' }
744+
self.strterm = new_strterm(:regexp, '/', '/')
736745
return :tREGEXP_BEG, scanner.matched
737746
elsif scan(/\=/)
738747
@lex_state = :expr_beg
@@ -741,7 +750,7 @@ def yylex
741750
@lex_state = :expr_arg
742751
elsif @lex_state == :expr_cmdarg || @lex_state == :expr_arg
743752
if !check(/\s/) && @space_seen
744-
self.strterm = { :type => :regexp, :beg => '/', :end => '/' }
753+
self.strterm = new_strterm(:regexp, '/', '/')
745754
return :tREGEXP_BEG, scanner.matched
746755
end
747756
else
@@ -758,7 +767,7 @@ def yylex
758767
if @lex_state == :expr_beg or (@lex_state == :expr_arg && @space_seen)
759768
start_word = scan(/./)
760769
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)
762771
return :tSTRING_BEG, scanner.matched
763772
end
764773
end
@@ -870,9 +879,9 @@ def yylex
870879
end
871880

872881
if scan(/\'/)
873-
self.strterm = { :type => :ssym, :beg => "'", :end => "'" }
882+
self.strterm = new_strterm(:ssym, "'", "'")
874883
elsif scan(/\"/)
875-
self.strterm = { :type => :dsym, :beg => '"', :end => '"' }
884+
self.strterm = new_strterm(:dsym, '"', '"')
876885
end
877886

878887
@lex_state = :expr_fname

0 commit comments

Comments
 (0)
Please sign in to comment.