Class: Yomikomu::BasicStorage
- Inherits:
-
Object
- Object
- Yomikomu::BasicStorage
- Defined in:
- lib/yomikomu.rb
Direct Known Subclasses
Instance Method Summary collapse
- #compile_and_store_iseq(fname, iseq_key = iseq_key_name(fname)) ⇒ Object
- #extra_data(fname) ⇒ Object
-
#initialize ⇒ BasicStorage
constructor
A new instance of BasicStorage.
- #load_iseq(fname) ⇒ Object
Constructor Details
#initialize ⇒ BasicStorage
Returns a new instance of BasicStorage.
44 45 46 |
# File 'lib/yomikomu.rb', line 44 def initialize require 'digest/sha1' end |
Instance Method Details
#compile_and_store_iseq(fname, iseq_key = iseq_key_name(fname)) ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/yomikomu.rb', line 72 def compile_and_store_iseq fname, iseq_key = iseq_key_name(fname) ::Yomikomu::STATISTICS[:compiled] += 1 ::Yomikomu.debug{ "[RUBY_COMPILED_FILE] compile #{fname} into #{iseq_key}" } iseq = RubyVM::InstructionSequence.compile_file(fname) binary = iseq.to_binary(extra_data(fname)) write_compiled_iseq(fname, iseq_key, binary) iseq end |
#extra_data(fname) ⇒ Object
68 69 70 |
# File 'lib/yomikomu.rb', line 68 def extra_data fname "SHA-1:#{::Digest::SHA1.file(fname).digest}" end |
#load_iseq(fname) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/yomikomu.rb', line 48 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 |