Module: Optimize::Codec::CiEntries
- Defined in:
- lib/optimize/codec/ci_entries.rb
Overview
Parse and emit the ci_entries section of an iseq body.
On-disk shape (research/cruby/ibf-format.md ยง4.1):
per entry: mid_idx, flag, argc, kwlen, kw_indices[kwlen]
All values are small_value-encoded.
Class Method Summary collapse
- .decode(bytes, ci_size) ⇒ Array<IR::CallData>
-
.encode(entries) ⇒ String
ASCII-8BIT byte string.
Class Method Details
.decode(bytes, ci_size) ⇒ Array<IR::CallData>
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/optimize/codec/ci_entries.rb', line 19 def decode(bytes, ci_size) return [] if ci_size.nil? || ci_size.zero? || bytes.nil? || bytes.empty? reader = BinaryReader.new(bytes) Array.new(ci_size) do mid_idx = reader.read_small_value flag = reader.read_small_value argc = reader.read_small_value kwlen = reader.read_small_value kw_indices = Array.new(kwlen) { reader.read_small_value } IR::CallData.new( mid_idx: mid_idx, flag: flag, argc: argc, kwlen: kwlen, kw_indices: kw_indices, ) end end |
.encode(entries) ⇒ String
Returns ASCII-8BIT byte string.
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/optimize/codec/ci_entries.rb', line 37 def encode(entries) writer = BinaryWriter.new entries.each do |cd| writer.write_small_value(cd.mid_idx) writer.write_small_value(cd.flag) writer.write_small_value(cd.argc) writer.write_small_value(cd.kwlen) cd.kw_indices.each { |i| writer.write_small_value(i) } end writer.buffer end |