summaryrefslogtreecommitdiff
path: root/lib/irb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/irb')
-rw-r--r--lib/irb/ruby-lex.rb22
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/irb/ruby-lex.rb b/lib/irb/ruby-lex.rb
index 4b7ad6a0bf..4bfa5f2001 100644
--- a/lib/irb/ruby-lex.rb
+++ b/lib/irb/ruby-lex.rb
@@ -936,23 +936,29 @@ class RubyLex
@lex_state = EXPR_END
if peek(0) == "0" && peek(1) !~ /[.eE]/
- len0 = true
- non_digit = false
- getc
- if /[xX]/ =~ peek(0)
+ case peek(0)
+ when /[xX]/
ch = getc
match = /[0-9a-fA-F_]/
- elsif /[bB]/ =~ peek(0)
+ when /[bB]/
ch = getc
match = /[01_]/
- elsif /[oO]/ =~ peek(0)
+ when /[oO]/
ch = getc
match = /[0-7_]/
- else
+ when /[dD]/
+ ch = getc
+ match = /[0-9_]/
+ when /[0-7]/
match = /[0-7_]/
- len0 = false
+ when /[89]/
+ RubyLex.fail SyntaxError, "Illegal octal digit"
+ else
+ return Token(TkINTEGER)
end
+ len0 = true
+ non_digit = false
while ch = getc
if match =~ ch
if ch == "_"