Skip to content

Commit d19a7ec

Browse files
committedJul 30, 2013
Fix bug for parsing operators before \n in command calls (#334)
1 parent 8cb8dac commit d19a7ec

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed
 

Diff for: ‎lib/opal/lexer.rb

+17-1
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,11 @@ def next_token
469469
return :OP_ASGN, '**'
470470

471471
elsif scanner.scan(/\*\*/)
472+
if @lex_state == :expr_fname or @lex_state == :expr_dot
473+
@lex_state = :expr_arg
474+
else
475+
@lex_state = :expr_beg
476+
end
472477
return '**', '**'
473478

474479
elsif scanner.scan(/\*\=/)
@@ -570,9 +575,15 @@ def next_token
570575
return '&@', '&'
571576
elsif [:expr_beg, :expr_mid].include? @lex_state
572577
return '&@', '&'
578+
end
579+
580+
if @lex_state == :expr_fname or @lex_state == :expr_dot
581+
@lex_state = :expr_arg
573582
else
574-
return '&', '&'
583+
@lex_state = :expr_beg
575584
end
585+
586+
return '&', '&'
576587
end
577588

578589
elsif scanner.check(/\</)
@@ -624,6 +635,11 @@ def next_token
624635
if scanner.scan(/\>\>\=/)
625636
return :OP_ASGN, '>>'
626637
elsif scanner.scan(/\>\>/)
638+
if @lex_state == :expr_fname or @lex_state == :expr_dot
639+
@lex_state = :expr_arg
640+
else
641+
@lex_state = :expr_beg
642+
end
627643
return '>>', '>>'
628644
elsif scanner.scan(/\>\=/)
629645
if @lex_state == :expr_fname

Diff for: ‎spec/parser/parse_spec.rb

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
require 'spec_helper'
2+
3+
describe Opal::Parser do
4+
it "parses operators before \n in command calls" do
5+
[:<<, :>>, :|, :^, :&, :<=>, :==, :===, :=~, :>, :>=, :<, :<=, :<<, :>>, :%, :**].each do |mid|
6+
opal_parse("self #{mid}\nself").should == [:call, [:self], mid, [:arglist, [:self]]]
7+
end
8+
end
9+
end

0 commit comments

Comments
 (0)
Please sign in to comment.