Class: AdLint::Ld::ObjectXRefGraph

Inherits:
Object
  • Object
show all
Defined in:
lib/adlint/ld/object.rb

Instance Method Summary collapse

Constructor Details

#initialize(funcall_graph) ⇒ ObjectXRefGraph

Returns a new instance of ObjectXRefGraph.



454
455
456
457
# File 'lib/adlint/ld/object.rb', line 454

def initialize(funcall_graph)
  @funcall_graph = funcall_graph
  @obj_index = Hash.new { |hash, key| hash[key] = Set.new }
end

Instance Method Details

#add(obj_ref) ⇒ Object



459
460
461
# File 'lib/adlint/ld/object.rb', line 459

def add(obj_ref)
  @obj_index[obj_ref.object].add(obj_ref)
end

#all_referrers_of(obj) ⇒ Object



463
464
465
# File 'lib/adlint/ld/object.rb', line 463

def all_referrers_of(obj)
  direct_referrers_of(obj) + indirect_referrers_of(obj)
end

#direct_referrers_of(obj) ⇒ Object



467
468
469
# File 'lib/adlint/ld/object.rb', line 467

def direct_referrers_of(obj)
  @obj_index[obj].map { |obj_ref| obj_ref.referrer }.to_set
end

#indirect_referrers_of(obj) ⇒ Object



471
472
473
474
475
476
477
478
479
# File 'lib/adlint/ld/object.rb', line 471

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