Skip to content

Commit

Permalink
Add new_op_asgn() helper in lexer to cleanup duplicated code
Browse files Browse the repository at this point in the history
  • Loading branch information
adambeynon committed Nov 22, 2013
1 parent 7d1f1a7 commit c32f134
Showing 1 changed file with 17 additions and 24 deletions.
41 changes: 17 additions & 24 deletions lib/opal/parser/lexer.rb
Expand Up @@ -129,6 +129,11 @@ def new_strterm2(type, start, finish)
term.merge({ :balance => true, :nesting => 0 })
end

def new_op_asgn(value)
self.yylval = value
:tOP_ASGN
end

def process_numeric
@lex_state = :expr_end
scanner = @scanner
Expand Down Expand Up @@ -568,15 +573,13 @@ def yylex
elsif check(/\*/)
if scan(/\*\*\=/)
@lex_state = :expr_beg
self.yylval = '**'
return :tOP_ASGN
return new_op_asgn('**')
elsif scan(/\*\*/)
self.set_arg_state
return :tPOW
elsif scan(/\*\=/)
@lex_state = :expr_beg
self.yylval = '*'
return :tOP_ASGN
return new_op_asgn('*')
else
scan(/\*/)

Expand Down Expand Up @@ -676,16 +679,14 @@ def yylex
@lex_state = :expr_beg

if scan(/\=/)
self.yylval = '&&'
return :tOP_ASGN
return new_op_asgn('&&')
end

return :tANDOP

elsif scan(/\=/)
@lex_state = :expr_beg
self.yylval = '&'
return :tOP_ASGN
return new_op_asgn('&')
end

if spcarg?
Expand All @@ -705,15 +706,13 @@ def yylex
if scan(/\|/)
@lex_state = :expr_beg
if scan(/\=/)
self.yylval = '||'
return :tOP_ASGN
return new_op_asgn('||')
end

return :tOROP

elsif scan(/\=/)
self.yylval = '|'
return :tOP_ASGN
return new_op_asgn('|')
end

self.set_arg_state
Expand Down Expand Up @@ -759,8 +758,7 @@ def yylex
return :tREGEXP_BEG
elsif scan(/\=/)
@lex_state = :expr_beg
self.yylval = '/'
return :tOP_ASGN
return new_op_asgn('/')
elsif after_operator?
@lex_state = :expr_arg
elsif arg?
Expand All @@ -777,8 +775,7 @@ def yylex
elsif scan(/\%/)
if scan(/\=/)
@lex_state = :expr_beg
self.yylval = '%'
return :tOP_ASGN
return new_op_asgn('%')
elsif check(/[^\s]/)
if @lex_state == :expr_beg or (@lex_state == :expr_arg && @space_seen)
start_word = scan(/./)
Expand Down Expand Up @@ -905,8 +902,7 @@ def yylex

elsif scan(/\^\=/)
@lex_state = :expr_beg
self.yylval = '^'
return :tOP_ASGN
return new_op_asgn('^')

elsif scan(/\^/)
self.set_arg_state
Expand All @@ -915,8 +911,7 @@ def yylex
elsif check(/\</)
if scan(/\<\<\=/)
@lex_state = :expr_beg
self.yylval = '<<'
return :tOP_ASGN
return new_op_asgn('<<')

elsif scan(/\<\</)
if after_operator?
Expand Down Expand Up @@ -955,8 +950,7 @@ def yylex

elsif check(/\>/)
if scan(/\>\>\=/)
self.yylval = '>>'
return :tOP_ASGN
return new_op_asgn('>>')

elsif scan(/\>\>/)
self.set_arg_state
Expand Down Expand Up @@ -1002,8 +996,7 @@ def yylex

if scan(/\=/)
@lex_state = :expr_beg
self.yylval = matched
return :tOP_ASGN
return new_op_asgn(matched)
end

if spcarg?
Expand Down

0 comments on commit c32f134

Please sign in to comment.