Skip to content

Commit eddc8e7

Browse files
committedNov 21, 2013
Rewrite hardcoded lex_state checks in lexer to use helpers
1 parent 1b9f55f commit eddc8e7

File tree

1 file changed

+28
-58
lines changed

1 file changed

+28
-58
lines changed
 

‎lib/opal/parser/lexer.rb

+28-58
Original file line numberDiff line numberDiff line change
@@ -531,11 +531,7 @@ def yylex
531531
return :tOP_ASGN, '**'
532532
end
533533

534-
if @lex_state == :expr_fname or @lex_state == :expr_dot
535-
@lex_state = :expr_arg
536-
else
537-
@lex_state = :expr_beg
538-
end
534+
@lex_state = after_operator? ? :expr_arg : :expr_beg
539535

540536
return :tPOW, '**'
541537

@@ -552,11 +548,7 @@ def yylex
552548
end
553549

554550
if scan(/\*/)
555-
if after_operator?
556-
@lex_state = :expr_arg
557-
else
558-
@lex_state = :expr_beg
559-
end
551+
@lex_state = after_operator? ? :expr_arg : :expr_beg
560552

561553
return :tPOW, '**'
562554
end
@@ -566,7 +558,8 @@ def yylex
566558
return :tOP_ASGN, '*'
567559
else
568560
result = '*'
569-
if @lex_state == :expr_fname or @lex_state == :expr_dot
561+
562+
if after_operator?
570563
@lex_state = :expr_arg
571564
return :tSTAR2, result
572565
elsif @space_seen && check(/\S/)
@@ -627,11 +620,7 @@ def yylex
627620
end
628621
end
629622

630-
@lex_state = if after_operator?
631-
:expr_arg
632-
else
633-
:expr_beg
634-
end
623+
@lex_state = after_operator? ? :expr_arg : :expr_beg
635624

636625
if scan(/\=/)
637626
if scan(/\=/)
@@ -702,7 +691,7 @@ def yylex
702691
return :tOP_ASGN, '|'
703692
end
704693

705-
@lex_state = after_operator?() ? :expr_arg : :expr_beg
694+
@lex_state = after_operator? ? :expr_arg : :expr_beg
706695
return :tPIPE, '|'
707696

708697
elsif scan(/\%[QqWwixr]/)
@@ -740,15 +729,15 @@ def yylex
740729
end
741730

742731
elsif scan(/\//)
743-
if [:expr_beg, :expr_mid].include? @lex_state
732+
if beg?
744733
self.strterm = new_strterm(:regexp, '/', '/')
745734
return :tREGEXP_BEG, scanner.matched
746735
elsif scan(/\=/)
747736
@lex_state = :expr_beg
748737
return :tOP_ASGN, '/'
749-
elsif @lex_state == :expr_fname or @lex_state == :expr_dot
738+
elsif after_operator?
750739
@lex_state = :expr_arg
751-
elsif @lex_state == :expr_cmdarg || @lex_state == :expr_arg
740+
elsif arg?
752741
if !check(/\s/) && @space_seen
753742
self.strterm = new_strterm(:regexp, '/', '/')
754743
return :tREGEXP_BEG, scanner.matched
@@ -786,9 +775,9 @@ def yylex
786775

787776
elsif scan(/\(/)
788777
result = scanner.matched
789-
if [:expr_beg, :expr_mid].include? @lex_state
778+
if beg?
790779
result = :tLPAREN
791-
elsif @space_seen && [:expr_arg, :expr_cmdarg].include?(@lex_state)
780+
elsif @space_seen && arg?
792781
result = :tLPAREN_ARG
793782
else
794783
result = :tLPAREN2
@@ -809,7 +798,7 @@ def yylex
809798
elsif scan(/\[/)
810799
result = scanner.matched
811800

812-
if [:expr_fname, :expr_dot].include? @lex_state
801+
if after_operator?
813802
@lex_state = :expr_arg
814803
if scan(/\]=/)
815804
return :tASET, '[]='
@@ -818,7 +807,7 @@ def yylex
818807
else
819808
raise "Unexpected '[' token"
820809
end
821-
elsif [:expr_beg, :expr_mid].include?(@lex_state) || @space_seen
810+
elsif beg? || @space_seen
822811
@lex_state = :expr_beg
823812
cond_push 0
824813
cmdarg_push 0
@@ -856,7 +845,7 @@ def yylex
856845
return :tDOT, scanner.matched
857846

858847
elsif scan(/\:\:/)
859-
if [:expr_beg, :expr_mid, :expr_class].include? @lex_state
848+
if beg?
860849
@lex_state = :expr_beg
861850
return :tCOLON3, scanner.matched
862851
elsif @space_seen && @lex_state == :expr_arg
@@ -891,7 +880,7 @@ def yylex
891880
@lex_state = :expr_beg
892881
return :tOP_ASGN, '^'
893882
elsif scan(/\^/)
894-
if @lex_state == :expr_fname or @lex_state == :expr_dot
883+
if after_operator?
895884
@lex_state = :expr_arg
896885
return :tCARET, scanner.matched
897886
end
@@ -904,10 +893,10 @@ def yylex
904893
@lex_state = :expr_beg
905894
return :tOP_ASGN, '<<'
906895
elsif scan(/\<\</)
907-
if @lex_state == :expr_fname or @lex_state == :expr_dot
896+
if after_operator?
908897
@lex_state = :expr_arg
909898
return :tLSHFT, '<<'
910-
elsif ![:expr_dot, :expr_class].include?(@lex_state) && !end? && (!arg? || @space_seen)
899+
elsif !after_operator? && !end? && (!arg? || @space_seen)
911900
if token = heredoc_identifier
912901
return token
913902
end
@@ -930,44 +919,27 @@ def yylex
930919

931920
return :tCMP, '<=>'
932921
elsif scan(/\<\=/)
933-
if @lex_state == :expr_fname or @lex_state == :expr_dot
934-
@lex_state = :expr_arg
935-
else
936-
@lex_state = :expr_beg
937-
end
922+
@lex_state = after_operator? ? :expr_arg : :expr_beg
938923
return :tLEQ, '<='
924+
939925
elsif scan(/\</)
940-
if @lex_state == :expr_fname or @lex_state == :expr_dot
941-
@lex_state = :expr_arg
942-
else
943-
@lex_state = :expr_beg
944-
end
926+
@lex_state = after_operator? ? :expr_arg : :expr_beg
945927
return :tLT, '<'
946928
end
947929

948930
elsif check(/\>/)
949931
if scan(/\>\>\=/)
950932
return :tOP_ASGN, '>>'
951933
elsif scan(/\>\>/)
952-
if @lex_state == :expr_fname or @lex_state == :expr_dot
953-
@lex_state = :expr_arg
954-
else
955-
@lex_state = :expr_beg
956-
end
934+
@lex_state = after_operator? ? :expr_arg : :expr_beg
957935
return :tRSHFT, '>>'
936+
958937
elsif scan(/\>\=/)
959-
if @lex_state == :expr_fname or @lex_state == :expr_dot
960-
@lex_state = :expr_end
961-
else
962-
@lex_state = :expr_beg
963-
end
938+
@lex_state = after_operator? ? :expr_end : :expr_beg
964939
return :tGEQ, scanner.matched
940+
965941
elsif scan(/\>/)
966-
if @lex_state == :expr_fname or @lex_state == :expr_dot
967-
@lex_state = :expr_arg
968-
else
969-
@lex_state = :expr_beg
970-
end
942+
@lex_state = after_operator? ? :expr_arg : :expr_beg
971943
return :tGT, '>'
972944
end
973945

@@ -999,11 +971,9 @@ def yylex
999971
return [:tOP_ASGN, matched]
1000972
end
1001973

1002-
if arg?
1003-
if !space? && @space_seen
1004-
@lex_state = :expr_mid
1005-
return [utype, matched]
1006-
end
974+
if spcarg?
975+
@lex_state = :expr_mid
976+
return [utype, matched]
1007977
end
1008978

1009979
@lex_state = :expr_beg

0 commit comments

Comments
 (0)
Please sign in to comment.