From 5e275dd2af4d9d24cdb1cfc0f232f348dae9c2cd Mon Sep 17 00:00:00 2001 From: aycabta Date: Tue, 28 May 2019 03:23:52 +0900 Subject: Treat :@1, :@@1, @1, and @@1 correctly to check termination --- lib/irb/ruby-lex.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib') diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb index 4121fa1f7c..b3985fb838 100644 --- a/lib/irb/ruby-lex.rb +++ b/lib/irb/ruby-lex.rb @@ -136,6 +136,15 @@ class RubyLex return false elsif @tokens.size >= 2 and @tokens[-2][1] == :on_kw and (@tokens[-2][2] == 'begin' or @tokens[-2][2] == 'else') return false + elsif @tokens.size >= 3 and @tokens[-3][1] == :on_symbeg and @tokens[-2][1] == :on_ivar + # This is for :@a or :@1 because :@1 ends with EXPR_FNAME + return false + elsif @tokens.size >= 2 and @tokens[-2][1] == :on_ivar and @tokens[-2][2] =~ /\A@\d+\z/ + # This is for @1 + return false + elsif @tokens.size >= 2 and @tokens[-2][1] == :on_cvar and @tokens[-1][1] == :on_int + # This is for @@1 or :@@1 and ends with on_int because it's syntax error + return false elsif !@tokens.empty? and @tokens.last[2] == "\\\n" return true elsif @tokens.size >= 2 and @tokens[-2][3].anybits?(continued_bits) @@ -199,6 +208,12 @@ class RubyLex # example: # method / f / return false + when /numbered parameter outside block/ + # "numbered parameter outside block" + # + # example: + # :@1 + return false end ensure $VERBOSE = verbose -- cgit v1.2.3