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