summaryrefslogtreecommitdiff
path: root/tool/ruby_vm/helpers/scanner.rb
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-12 08:38:11 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-12 08:38:11 +0000
commit8a72c77c7920d129818b7b83bb4fa669cd7e3f7d (patch)
treee88e17811fdb1059cc3a63199c297582780c8497 /tool/ruby_vm/helpers/scanner.rb
parent069e9ff52cbb01fe2c5821a9b6a8077ab59c26c7 (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.rb21
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