summaryrefslogtreecommitdiff
path: root/tool/ruby_vm
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2022-09-18 14:22:35 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2022-09-18 14:39:53 +0900
commita988fe0b3e4cd5a3955706affdc1f498ff9b5d77 (patch)
treecb8478fc417dc73bb495636b45b0393190c74926 /tool/ruby_vm
parent12023c833fb2ba3b50a34ab7f6b53f5f77d78658 (diff)
downloadruby-a988fe0b3e4cd5a3955706affdc1f498ff9b5d77.tar.gz
Introduce --basedir to insns2vm.rb
and leverage that to preserve the directory structure under tool/ruby_vm/views
Diffstat (limited to 'tool/ruby_vm')
-rw-r--r--tool/ruby_vm/controllers/application_controller.rb5
-rw-r--r--tool/ruby_vm/helpers/dumper.rb5
-rw-r--r--tool/ruby_vm/scripts/insns2vm.rb12
-rw-r--r--tool/ruby_vm/views/lib/mjit/instruction.rb.erb (renamed from tool/ruby_vm/views/instruction.rb.erb)0
4 files changed, 16 insertions, 6 deletions
diff --git a/tool/ruby_vm/controllers/application_controller.rb b/tool/ruby_vm/controllers/application_controller.rb
index 25c10947ed..e03e54e397 100644
--- a/tool/ruby_vm/controllers/application_controller.rb
+++ b/tool/ruby_vm/controllers/application_controller.rb
@@ -16,10 +16,11 @@ require_relative '../models/typemap'
require_relative '../loaders/vm_opts_h'
class ApplicationController
- def generate i, destdir
+ def generate i, destdir, basedir
path = Pathname.new i
dst = destdir ? Pathname.new(destdir).join(i) : Pathname.new(i)
- dumper = RubyVM::Dumper.new dst
+ base = basedir ? Pathname.new(basedir) : Pathname.pwd
+ dumper = RubyVM::Dumper.new dst, base.expand_path
return [path, dumper]
end
end
diff --git a/tool/ruby_vm/helpers/dumper.rb b/tool/ruby_vm/helpers/dumper.rb
index 7aec9c7631..c8a65e0650 100644
--- a/tool/ruby_vm/helpers/dumper.rb
+++ b/tool/ruby_vm/helpers/dumper.rb
@@ -28,7 +28,7 @@ class RubyVM::Dumper
path = Pathname.new(__FILE__)
path = (path.relative_path_from(Pathname.pwd) rescue path).dirname
path += '../views'
- path += File.basename(spec)
+ path += Pathname.pwd.join(spec).to_s.sub("#{@base}/", '')
src = path.read mode: 'rt:utf-8:utf-8'
rescue Errno::ENOENT
raise "don't know how to generate #{path}"
@@ -85,10 +85,11 @@ class RubyVM::Dumper
. join
end
- def initialize dst
+ def initialize dst, base
@erb = {}
@empty = new_binding
@file = cstr dst.to_path
+ @base = base
end
def render partial, opts = { :locals => {} }
diff --git a/tool/ruby_vm/scripts/insns2vm.rb b/tool/ruby_vm/scripts/insns2vm.rb
index 8325dd364f..47d8da5513 100644
--- a/tool/ruby_vm/scripts/insns2vm.rb
+++ b/tool/ruby_vm/scripts/insns2vm.rb
@@ -15,10 +15,10 @@ require_relative '../controllers/application_controller.rb'
module RubyVM::Insns2VM
def self.router argv
- options = { destdir: nil }
+ options = { destdir: nil, basedir: nil }
targets = generate_parser(options).parse argv
return targets.map do |i|
- next ApplicationController.new.generate i, options[:destdir]
+ next ApplicationController.new.generate i, options[:destdir], options[:basedir]
end
end
@@ -84,6 +84,14 @@ module RubyVM::Insns2VM
options[:destdir] = dir
end
+ this.on "--basedir=DIR", <<-'begin' do |dir|
+ Change the base directory from the current working directory
+ to the given path. Used for searching the source template.
+ begin
+ raise "directory was not found in '#{dir}'" unless Dir.exist?(dir)
+ options[:basedir] = dir
+ end
+
this.on "-V", "--[no-]verbose", <<-'end'
Please let us ignore this and be modest.
end
diff --git a/tool/ruby_vm/views/instruction.rb.erb b/tool/ruby_vm/views/lib/mjit/instruction.rb.erb
index 1c462de53a..1c462de53a 100644
--- a/tool/ruby_vm/views/instruction.rb.erb
+++ b/tool/ruby_vm/views/lib/mjit/instruction.rb.erb