class TypeProf::CodeRangeTable

Constants

Entry

Public Class Methods

new(list = []) click to toggle source
# File typeprof-0.21.9/lib/typeprof/code-range.rb, line 104
def initialize(list = [])
  @list = list # Array[Entry]
end

Public Instance Methods

[](loc) click to toggle source
# File typeprof-0.21.9/lib/typeprof/code-range.rb, line 133
def [](loc)
  e = @list.bsearch {|e| e.range.last > loc }
  if e && e.range.contain_loc?(loc)
    return e.children[loc] || e.value
  end
  return nil
end
[]=(range, value) click to toggle source
# File typeprof-0.21.9/lib/typeprof/code-range.rb, line 108
def []=(range, value)
  i_b = @list.bsearch_index {|e| e.range.last > range.first } || @list.size
  i_e = @list.bsearch_index {|e| e.range.first >= range.last } || @list.size
  if i_b < i_e
    # for all i in i_b...i_e, @list[i] overlaps with the range
    if i_e - i_b == 1
      if range.contain?(@list[i_b].range)
        @list[i_b] = Entry[range, value, CodeRangeTable.new(@list[i_b, 1])]
      elsif @list[i_b].range.contain?(range)
        @list[i_b].children[range] = value
      else
        raise
      end
    else
      if range.contain?(@list[i_b].range) && range.contain?(@list[i_e - 1].range)
        @list[i_b...i_e] = [Entry[range, value, CodeRangeTable.new(@list[i_b...i_e])]]
      else
        raise
      end
    end
  else
    @list[i_b, 0] = [Entry[range, value, CodeRangeTable.new]]
  end
end