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.



456
457
458
459
# 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

Instance Method Details

#add(obj_ref) ⇒ Object



461
462
463
# 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) ⇒ Object



465
466
467
# 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) ⇒ Object



469
470
471
# 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) ⇒ Object



473
474
475
476
477
478
479
480
481
# 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