class Yomikomu::BasicStorage
Public Class Methods
new()
click to toggle source
# File lib/yomikomu.rb, line 50 def initialize require 'digest/sha1' end
Public Instance Methods
compile_and_store_iseq(fname, iseq_key = iseq_key_name(fname = File.expand_path(fname)))
click to toggle source
# File lib/yomikomu.rb, line 78 def compile_and_store_iseq fname, iseq_key = iseq_key_name(fname = File.expand_path(fname)) ::Yomikomu.debug{ "compile #{fname} into #{iseq_key}" } begin iseq = RubyVM::InstructionSequence.compile_file(fname) binary = iseq.to_binary(extra_data(fname)) write_compiled_iseq(fname, iseq_key, binary) ::Yomikomu::STATISTICS[:compiled] += 1 iseq rescue SyntaxError, RuntimeError => e puts "#{e}: #{fname}" nil end end
extra_data(fname)
click to toggle source
# File lib/yomikomu.rb, line 74 def extra_data fname "SHA-1:#{::Digest::SHA1.file(fname).digest}" end
load_iseq(fname)
click to toggle source
# File lib/yomikomu.rb, line 54 def load_iseq fname iseq_key = iseq_key_name(fname) if compiled_iseq_exist?(fname, iseq_key) && compiled_iseq_is_younger?(fname, iseq_key) ::Yomikomu::STATISTICS[:loaded] += 1 ::Yomikomu.debug{ "load #{fname} from #{iseq_key}" } binary = read_compiled_iseq(fname, iseq_key) iseq = RubyVM::InstructionSequence.load_from_binary(binary) # p [extra_data(iseq.path), RubyVM::InstructionSequence.load_from_binary_extra_data(binary)] # raise unless extra_data(iseq.path) == RubyVM::InstructionSequence.load_from_binary_extra_data(binary) iseq elsif YOMIKOMU_AUTO_COMPILE compile_and_store_iseq(fname, iseq_key) else ::Yomikomu::STATISTICS[:ignored] += 1 ::Yomikomu.debug{ "ignored #{fname}" } nil end end
Private Instance Methods
iseq_key_name(fname)
click to toggle source
def remove_compiled_iseq fname; nil; end # should implement at sub classes
# File lib/yomikomu.rb, line 96 def iseq_key_name fname fname end