Sha256: c98e46dc6e11914f42c27f56fd8bb7bad80036b0776c68d1269dd29d4b3762bc
Contents?: true
Size: 1.33 KB
Versions: 1
Compression:
Stored size: 1.33 KB
Contents
module Furnace module CFG class Graph attr_reader :nodes, :edges def initialize @nodes = Set.new @edges = Set.new @pending_label = nil @pending_operations = [] end def find_node(label) if node = @nodes.find { |n| n.label == label } node else raise "Cannot find CFG node #{label}" end end def expand(label, operation) @pending_label ||= label @pending_operations << operation end def transfer(targets) return unless @pending_label @nodes << CFG::Node.new(self, @pending_label, @pending_operations) targets.each do |operation, target| @edges << CFG::Edge.new(self, operation, @pending_label, target) end @pending_label = nil @pending_operations = [] end def to_graphviz Graphviz.new do |graph| @nodes.each do |node| graph.node node.label, node.operations.map(&:inspect).join("\n") end @edges.each do |edge| if edge.source_operation.nil? label = "~" else label = edge.source_operation end graph.edge edge.source_label, edge.target_label, label end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
furnace-0.0.1 | lib/furnace/cfg/graph.rb |