diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-12 08:38:11 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-01-12 08:38:11 +0000 |
commit | 8a72c77c7920d129818b7b83bb4fa669cd7e3f7d (patch) | |
tree | e88e17811fdb1059cc3a63199c297582780c8497 /tool/ruby_vm/helpers/scanner.rb | |
parent | 069e9ff52cbb01fe2c5821a9b6a8077ab59c26c7 (diff) |
tool/ruby_vm support for pre-2.1 BASERUBY
as requested by devs, support for BASERUBY prior to 2.1
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61786 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'tool/ruby_vm/helpers/scanner.rb')
-rw-r--r-- | tool/ruby_vm/helpers/scanner.rb | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/tool/ruby_vm/helpers/scanner.rb b/tool/ruby_vm/helpers/scanner.rb index 3dce6ffdfe..5ae1363480 100644 --- a/tool/ruby_vm/helpers/scanner.rb +++ b/tool/ruby_vm/helpers/scanner.rb @@ -11,8 +11,10 @@ # details. require 'pathname' -require 'strscan' +# Poor man's StringScanner. +# Sadly https://bugs.ruby-lang.org/issues/8343 is not backported to 2.0. We +# have to do it by hand. class RubyVM::Scanner attr_reader :__FILE__ attr_reader :__LINE__ @@ -22,28 +24,29 @@ class RubyVM::Scanner src += path @__LINE__ = 1 @__FILE__ = src.realpath.to_path - str = src.read mode: 'rt:utf-8:utf-8' - @scanner = StringScanner.new str + @str = src.read mode: 'rt:utf-8:utf-8' + @pos = 0 end def eos? - @scanner.eos? + return @pos >= @str.length end def scan re ret = @__LINE__ - match = @scanner.scan re - return unless match - @__LINE__ += match.count "\n" + @last_match = @str.match re, @pos + return unless @last_match + @__LINE__ += @last_match.to_s.count "\n" + @pos = @last_match.end 0 return ret end def scan! re scan re or raise sprintf "parse error at %s:%d near:\n %s...", \ - @__FILE__, @__LINE__, @scanner.peek(32) + @__FILE__, @__LINE__, @str[pos, 32] end def [] key - return @scanner[key] + return @last_match[key] end end |