mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* test/lib/iseq_loader_checker.rb: add iseq dumper/loader checker.
If you enable this checker (remove `#' in test/runner.rb), you can see comparison results between an original iseq disassembed result and dumped and loaded iseq disassembed result. There are several bugs around there, because of inexact stack depth calculation. Now, I leave these bugs because they are not critical and difficult to solve completely. * test/runner.rb: require test/lib/iseq_loader_checker.rb but disabled at default (commented out). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b401937c62
commit
7476be4def
3 changed files with 70 additions and 0 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
Tue Dec 8 03:56:05 2015 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* test/lib/iseq_loader_checker.rb: add iseq dumper/loader checker.
|
||||
If you enable this checker (remove `#' in test/runner.rb),
|
||||
you can see comparison results between an original iseq disassembed
|
||||
result and dumped and loaded iseq disassembed result.
|
||||
|
||||
There are several bugs around there, because of inexact stack depth
|
||||
calculation. Now, I leave these bugs because they are not critical
|
||||
and difficult to solve completely.
|
||||
|
||||
* test/runner.rb: require test/lib/iseq_loader_checker.rb but
|
||||
disabled at default (commented out).
|
||||
|
||||
Tue Dec 8 03:45:47 2015 Eric Wong <e@80x24.org>
|
||||
|
||||
* doc/extension.rdoc: warn about kwargs performance in C
|
||||
|
|
55
test/lib/iseq_loader_checker.rb
Normal file
55
test/lib/iseq_loader_checker.rb
Normal file
|
@ -0,0 +1,55 @@
|
|||
|
||||
require '-test-/iseq_load/iseq_load'
|
||||
require 'tempfile'
|
||||
|
||||
class RubyVM::InstructionSequence
|
||||
def disasm_if_possible
|
||||
begin
|
||||
self.disasm
|
||||
rescue Encoding::CompatibilityError, EncodingError, SecurityError
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def self.compare_dump_and_load i1, dumper, loader
|
||||
dump = dumper.call(i1)
|
||||
return i1 unless dump
|
||||
i2 = loader.call(dump)
|
||||
|
||||
# compare disassembled result
|
||||
d1 = i1.disasm_if_possible
|
||||
d2 = i2.disasm_if_possible
|
||||
|
||||
if d1 != d2
|
||||
p i1
|
||||
return
|
||||
|
||||
STDERR.puts "expected:"
|
||||
STDERR.puts d1
|
||||
STDERR.puts "actual:"
|
||||
STDERR.puts d2
|
||||
|
||||
t1 = Tempfile.new("expected"); t1.puts d1; t1.close
|
||||
t2 = Tempfile.new("actual"); t2.puts d2; t2.close
|
||||
system("diff -u #{t1.path} #{t2.path}") # use diff if available
|
||||
exit(1)
|
||||
end
|
||||
i2
|
||||
end
|
||||
|
||||
def self.translate i1
|
||||
# check to_a/load_iseq
|
||||
i2 = compare_dump_and_load(i1,
|
||||
proc{|iseq|
|
||||
ary = iseq.to_a
|
||||
ary[9] == :top ? ary : nil
|
||||
},
|
||||
proc{|ary|
|
||||
RubyVM::InstructionSequence.iseq_load(ary)
|
||||
})
|
||||
# return value
|
||||
i1
|
||||
end
|
||||
end
|
||||
|
||||
#require_relative 'x'; exit(1)
|
|
@ -22,6 +22,7 @@ ENV["GEM_SKIP"] = ENV["GEM_HOME"] = ENV["GEM_PATH"] = "".freeze
|
|||
require_relative 'lib/profile_test_all' if ENV.has_key?('RUBY_TEST_ALL_PROFILE')
|
||||
require_relative 'lib/tracepointchecker'
|
||||
require_relative 'lib/zombie_hunter'
|
||||
# require_relative 'lib/iseq_loader_checker'
|
||||
|
||||
if ENV['COVERAGE']
|
||||
%w[doclie simplecov-html simplecov].each do |f|
|
||||
|
|
Loading…
Add table
Reference in a new issue