class RDG::Analysis::Propagater

Public Instance Methods

analyse() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 6
def analyse
  add_internal_flow_edges
  propogate_incoming_flow
  propogate_outgoing_flow
  remove_non_flow_vertices
  add_equivalences
end

Private Instance Methods

add_equivalences() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 46
def add_equivalences
  equivalences.add(@ast_node, nodes)
end
add_internal_flow_edges() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 24
def add_internal_flow_edges
  internal_flow_edges.each { |s, t| graph.add_edge(s, t) }
end
children() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 16
def children
  @ast_node.children
end
nodes() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 20
def nodes
  children.reject(&:empty?)
end
propogate_incoming_flow() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 28
def propogate_incoming_flow
  graph.each_predecessor(@ast_node) do |predecessor|
    graph.remove_edge(predecessor, @ast_node)
    graph.add_edge(predecessor, start_node)
  end
end
propogate_outgoing_flow() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 35
def propogate_outgoing_flow
  graph.each_successor(@ast_node) do |successor|
    graph.remove_edge(@ast_node, successor)
    end_nodes.each { |n| graph.add_edge(n, successor) }
  end
end
remove_non_flow_vertices() click to toggle source
# File lib/rdg/analysis/propagater.rb, line 42
def remove_non_flow_vertices
  graph.remove_vertex(@ast_node)
end