Skip to content

Commit

Permalink
Rewrite hardcoded lex_state checks in lexer to use helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
adambeynon committed Nov 21, 2013
1 parent 1b9f55f commit eddc8e7
Showing 1 changed file with 28 additions and 58 deletions.
86 changes: 28 additions & 58 deletions lib/opal/parser/lexer.rb
Expand Up @@ -531,11 +531,7 @@ def yylex
return :tOP_ASGN, '**'
end

if @lex_state == :expr_fname or @lex_state == :expr_dot
@lex_state = :expr_arg
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg

return :tPOW, '**'

Expand All @@ -552,11 +548,7 @@ def yylex
end

if scan(/\*/)
if after_operator?
@lex_state = :expr_arg
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg

return :tPOW, '**'
end
Expand All @@ -566,7 +558,8 @@ def yylex
return :tOP_ASGN, '*'
else
result = '*'
if @lex_state == :expr_fname or @lex_state == :expr_dot

if after_operator?
@lex_state = :expr_arg
return :tSTAR2, result
elsif @space_seen && check(/\S/)
Expand Down Expand Up @@ -627,11 +620,7 @@ def yylex
end
end

@lex_state = if after_operator?
:expr_arg
else
:expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg

if scan(/\=/)
if scan(/\=/)
Expand Down Expand Up @@ -702,7 +691,7 @@ def yylex
return :tOP_ASGN, '|'
end

@lex_state = after_operator?() ? :expr_arg : :expr_beg
@lex_state = after_operator? ? :expr_arg : :expr_beg
return :tPIPE, '|'

elsif scan(/\%[QqWwixr]/)
Expand Down Expand Up @@ -740,15 +729,15 @@ def yylex
end

elsif scan(/\//)
if [:expr_beg, :expr_mid].include? @lex_state
if beg?
self.strterm = new_strterm(:regexp, '/', '/')
return :tREGEXP_BEG, scanner.matched
elsif scan(/\=/)
@lex_state = :expr_beg
return :tOP_ASGN, '/'
elsif @lex_state == :expr_fname or @lex_state == :expr_dot
elsif after_operator?
@lex_state = :expr_arg
elsif @lex_state == :expr_cmdarg || @lex_state == :expr_arg
elsif arg?
if !check(/\s/) && @space_seen
self.strterm = new_strterm(:regexp, '/', '/')
return :tREGEXP_BEG, scanner.matched
Expand Down Expand Up @@ -786,9 +775,9 @@ def yylex

elsif scan(/\(/)
result = scanner.matched
if [:expr_beg, :expr_mid].include? @lex_state
if beg?
result = :tLPAREN
elsif @space_seen && [:expr_arg, :expr_cmdarg].include?(@lex_state)
elsif @space_seen && arg?
result = :tLPAREN_ARG
else
result = :tLPAREN2
Expand All @@ -809,7 +798,7 @@ def yylex
elsif scan(/\[/)
result = scanner.matched

if [:expr_fname, :expr_dot].include? @lex_state
if after_operator?
@lex_state = :expr_arg
if scan(/\]=/)
return :tASET, '[]='
Expand All @@ -818,7 +807,7 @@ def yylex
else
raise "Unexpected '[' token"
end
elsif [:expr_beg, :expr_mid].include?(@lex_state) || @space_seen
elsif beg? || @space_seen
@lex_state = :expr_beg
cond_push 0
cmdarg_push 0
Expand Down Expand Up @@ -856,7 +845,7 @@ def yylex
return :tDOT, scanner.matched

elsif scan(/\:\:/)
if [:expr_beg, :expr_mid, :expr_class].include? @lex_state
if beg?
@lex_state = :expr_beg
return :tCOLON3, scanner.matched
elsif @space_seen && @lex_state == :expr_arg
Expand Down Expand Up @@ -891,7 +880,7 @@ def yylex
@lex_state = :expr_beg
return :tOP_ASGN, '^'
elsif scan(/\^/)
if @lex_state == :expr_fname or @lex_state == :expr_dot
if after_operator?
@lex_state = :expr_arg
return :tCARET, scanner.matched
end
Expand All @@ -904,10 +893,10 @@ def yylex
@lex_state = :expr_beg
return :tOP_ASGN, '<<'
elsif scan(/\<\</)
if @lex_state == :expr_fname or @lex_state == :expr_dot
if after_operator?
@lex_state = :expr_arg
return :tLSHFT, '<<'
elsif ![:expr_dot, :expr_class].include?(@lex_state) && !end? && (!arg? || @space_seen)
elsif !after_operator? && !end? && (!arg? || @space_seen)
if token = heredoc_identifier
return token
end
Expand All @@ -930,44 +919,27 @@ def yylex

return :tCMP, '<=>'
elsif scan(/\<\=/)
if @lex_state == :expr_fname or @lex_state == :expr_dot
@lex_state = :expr_arg
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg
return :tLEQ, '<='

elsif scan(/\</)
if @lex_state == :expr_fname or @lex_state == :expr_dot
@lex_state = :expr_arg
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg
return :tLT, '<'
end

elsif check(/\>/)
if scan(/\>\>\=/)
return :tOP_ASGN, '>>'
elsif scan(/\>\>/)
if @lex_state == :expr_fname or @lex_state == :expr_dot
@lex_state = :expr_arg
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg
return :tRSHFT, '>>'

elsif scan(/\>\=/)
if @lex_state == :expr_fname or @lex_state == :expr_dot
@lex_state = :expr_end
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_end : :expr_beg
return :tGEQ, scanner.matched

elsif scan(/\>/)
if @lex_state == :expr_fname or @lex_state == :expr_dot
@lex_state = :expr_arg
else
@lex_state = :expr_beg
end
@lex_state = after_operator? ? :expr_arg : :expr_beg
return :tGT, '>'
end

Expand Down Expand Up @@ -999,11 +971,9 @@ def yylex
return [:tOP_ASGN, matched]
end

if arg?
if !space? && @space_seen
@lex_state = :expr_mid
return [utype, matched]
end
if spcarg?
@lex_state = :expr_mid
return [utype, matched]
end

@lex_state = :expr_beg
Expand Down

0 comments on commit eddc8e7

Please sign in to comment.