Class: AdLint::Ld::ObjectXRefGraph
- Inherits:
-
Object
- Object
- AdLint::Ld::ObjectXRefGraph
- Defined in:
- lib/adlint/ld/object.rb
Instance Method Summary collapse
- #add(obj_ref) ⇒ Object
- #all_referrers_of(obj) ⇒ Object
- #direct_referrers_of(obj) ⇒ Object
- #indirect_referrers_of(obj) ⇒ Object
-
#initialize(funcall_graph) ⇒ ObjectXRefGraph
constructor
A new instance of ObjectXRefGraph.
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 |