class Seafoam::IsabelleWriter
Write graphs in the Isabelle file format.
Public Class Methods
new(out)
click to toggle source
# File lib/seafoam/isabelle_writer.rb, line 4 def initialize(out) @out = out end
Public Instance Methods
write(index, name, graph)
click to toggle source
# File lib/seafoam/isabelle_writer.rb, line 8 def write(index, name, graph) # definition eg_short_cut_or1 :: IRGraph where # "eg_short_cut_or1 = # (add_node 14 ReturnNode [13] [] # (add_node 13 PhiNode [10, 11, 12] [] # (add_node 12 (ConstantNode 0) [] [] # (add_node 11 (ConstantNode 42) [] [] # (add_node 10 MergeNode [7, 9] [14] # (add_node 9 EndNode [] [] # (add_node 8 BeginNode [] [9] # (add_node 7 EndNode [] [] # (add_node 6 BeginNode [] [7] # (add_node 5 IfNode [3] [6, 8] # (add_node 3 (ShortCircuitOrNode False False) [1, 2] [] # (add_node 2 (ParameterNode 1) [] [] # (add_node 1 (ParameterNode 0) [] [] # (add_node 0 StartNode [] [5] # empty_graph))))))))))))))" @out.puts "graph#{index} = # #{name}" graph.nodes.each_value do |node| node_class = node.props[:node_class][:node_class] case node_class when 'org.graalvm.compiler.nodes.ConstantNode' desc = "(ConstantNode #{node.props['rawvalue']})" when 'org.graalvm.compiler.nodes.ParameterNode' desc = "(ParameterNode #{node.props['index']})" else desc = node_class.split('.').last end inputs = node.inputs.map(&:from).map(&:id) outputs = node.outputs.map(&:to).map(&:id) @out.puts " (add_node #{node.id} #{desc} #{inputs.inspect} #{outputs.inspect}" end @out.puts ' empty_graph' + (')' * graph.nodes.size) end