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.
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 |