Skip to content

Commit c32f134

Browse files
committedNov 22, 2013
Add new_op_asgn() helper in lexer to cleanup duplicated code
1 parent 7d1f1a7 commit c32f134

File tree

1 file changed

+17
-24
lines changed

1 file changed

+17
-24
lines changed
 

‎lib/opal/parser/lexer.rb

+17-24
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ def new_strterm2(type, start, finish)
129129
term.merge({ :balance => true, :nesting => 0 })
130130
end
131131

132+
def new_op_asgn(value)
133+
self.yylval = value
134+
:tOP_ASGN
135+
end
136+
132137
def process_numeric
133138
@lex_state = :expr_end
134139
scanner = @scanner
@@ -568,15 +573,13 @@ def yylex
568573
elsif check(/\*/)
569574
if scan(/\*\*\=/)
570575
@lex_state = :expr_beg
571-
self.yylval = '**'
572-
return :tOP_ASGN
576+
return new_op_asgn('**')
573577
elsif scan(/\*\*/)
574578
self.set_arg_state
575579
return :tPOW
576580
elsif scan(/\*\=/)
577581
@lex_state = :expr_beg
578-
self.yylval = '*'
579-
return :tOP_ASGN
582+
return new_op_asgn('*')
580583
else
581584
scan(/\*/)
582585

@@ -676,16 +679,14 @@ def yylex
676679
@lex_state = :expr_beg
677680

678681
if scan(/\=/)
679-
self.yylval = '&&'
680-
return :tOP_ASGN
682+
return new_op_asgn('&&')
681683
end
682684

683685
return :tANDOP
684686

685687
elsif scan(/\=/)
686688
@lex_state = :expr_beg
687-
self.yylval = '&'
688-
return :tOP_ASGN
689+
return new_op_asgn('&')
689690
end
690691

691692
if spcarg?
@@ -705,15 +706,13 @@ def yylex
705706
if scan(/\|/)
706707
@lex_state = :expr_beg
707708
if scan(/\=/)
708-
self.yylval = '||'
709-
return :tOP_ASGN
709+
return new_op_asgn('||')
710710
end
711711

712712
return :tOROP
713713

714714
elsif scan(/\=/)
715-
self.yylval = '|'
716-
return :tOP_ASGN
715+
return new_op_asgn('|')
717716
end
718717

719718
self.set_arg_state
@@ -759,8 +758,7 @@ def yylex
759758
return :tREGEXP_BEG
760759
elsif scan(/\=/)
761760
@lex_state = :expr_beg
762-
self.yylval = '/'
763-
return :tOP_ASGN
761+
return new_op_asgn('/')
764762
elsif after_operator?
765763
@lex_state = :expr_arg
766764
elsif arg?
@@ -777,8 +775,7 @@ def yylex
777775
elsif scan(/\%/)
778776
if scan(/\=/)
779777
@lex_state = :expr_beg
780-
self.yylval = '%'
781-
return :tOP_ASGN
778+
return new_op_asgn('%')
782779
elsif check(/[^\s]/)
783780
if @lex_state == :expr_beg or (@lex_state == :expr_arg && @space_seen)
784781
start_word = scan(/./)
@@ -905,8 +902,7 @@ def yylex
905902

906903
elsif scan(/\^\=/)
907904
@lex_state = :expr_beg
908-
self.yylval = '^'
909-
return :tOP_ASGN
905+
return new_op_asgn('^')
910906

911907
elsif scan(/\^/)
912908
self.set_arg_state
@@ -915,8 +911,7 @@ def yylex
915911
elsif check(/\</)
916912
if scan(/\<\<\=/)
917913
@lex_state = :expr_beg
918-
self.yylval = '<<'
919-
return :tOP_ASGN
914+
return new_op_asgn('<<')
920915

921916
elsif scan(/\<\</)
922917
if after_operator?
@@ -955,8 +950,7 @@ def yylex
955950

956951
elsif check(/\>/)
957952
if scan(/\>\>\=/)
958-
self.yylval = '>>'
959-
return :tOP_ASGN
953+
return new_op_asgn('>>')
960954

961955
elsif scan(/\>\>/)
962956
self.set_arg_state
@@ -1002,8 +996,7 @@ def yylex
1002996

1003997
if scan(/\=/)
1004998
@lex_state = :expr_beg
1005-
self.yylval = matched
1006-
return :tOP_ASGN
999+
return new_op_asgn(matched)
10071000
end
10081001

10091002
if spcarg?

0 commit comments

Comments
 (0)
Please sign in to comment.