class AdLint::Ld::ObjectXRefGraph

Public Class Methods

new(funcall_graph) click to toggle source
# File lib/adlint/ld/object.rb, line 456
def initialize(funcall_graph)
  @funcall_graph = funcall_graph
  @obj_index = Hash.new { |hash, key| hash[key] = Set.new }
end

Public Instance Methods

add(obj_ref) click to toggle source
# File lib/adlint/ld/object.rb, line 461
def add(obj_ref)
  @obj_index[obj_ref.object].add(obj_ref)
end
all_referrers_of(obj) click to toggle source
# File lib/adlint/ld/object.rb, line 465
def all_referrers_of(obj)
  direct_referrers_of(obj) + indirect_referrers_of(obj)
end
direct_referrers_of(obj) click to toggle source
# File lib/adlint/ld/object.rb, line 469
def direct_referrers_of(obj)
  @obj_index[obj].map { |obj_ref| obj_ref.referrer }.to_set
end
indirect_referrers_of(obj) click to toggle source
# File lib/adlint/ld/object.rb, line 473
def indirect_referrers_of(obj)
  direct_referrers_of(obj).reduce(Set.new) do |res, ref|
    if fun = ref.function
      res + @funcall_graph.all_callers_of(fun)
    else
      res
    end
  end
end