summaryrefslogtreecommitdiff
path: root/tool/id2token.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/id2token.rb')
-rwxr-xr-xtool/id2token.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/tool/id2token.rb b/tool/id2token.rb
new file mode 100755
index 0000000000..4c7189c094
--- /dev/null
+++ b/tool/id2token.rb
@@ -0,0 +1,29 @@
+#! /usr/bin/ruby -p
+BEGIN {
+ require 'optparse'
+ vpath = ["."]
+ header = nil
+
+ opt = OptionParser.new do |o|
+ o.on('-v', '--vpath=DIR') {|dirs| vpath.concat dirs.split(File::PATH_SEPARATOR)}
+ header = o.order!(ARGV).shift
+ end or abort opt.opt_s
+
+ TOKENS = {}
+ vpath.find do |dir|
+ begin
+ h = File.read(File.join(dir, header))
+ rescue Errno::ENOENT
+ nil
+ else
+ h.scan(/^#define\s+RUBY_TOKEN_(\w+)\s+(\d+)/) do |token, id|
+ TOKENS[token] = id
+ end
+ true
+ end
+ end or abort "#{header} not found in #{vpath.inspect}"
+
+ TOKENS_RE = /\bRUBY_TOKEN\((#{TOKENS.keys.join('|')})\)\s*(?=\s)/
+}
+
+$_.gsub!(TOKENS_RE) {TOKENS[$1]} if /^%token/ =~ $_