class SFRP::Flat::Node

Public Instance Methods

initialized?() click to toggle source
# File lib/sfrp/flat/elements.rb, line 43
def initialized?
  !init_exp.nil?
end
to_poly(src_set, dest_set) click to toggle source
# File lib/sfrp/flat/elements.rb, line 47
def to_poly(src_set, dest_set)
  dest_set << P.node(str, ta && ta.to_poly) do |n|
    collected_node_refs = []
    poly_exp = exp.alpha_convert({}, (0..1000).to_a)
      .lift_node_ref(collected_node_refs).to_poly
    collected_node_refs.each do |nr|
      if nr.last && !src_set.node(nr.node_str).initialized?
        raise NodeInvalidLastReferrenceError.new(nr.node_str)
      end
      nr.last ? n.l(nr.node_str) : n.c(nr.node_str)
    end
    dest_set << n.eval_func(str, ta && ta.to_poly) do |f|
      f.exp { poly_exp }
      collected_node_refs.each_with_index.map do |_, i|
        f.param("__node_ref_#{i}")
      end
    end
    next if init_exp.nil?
    dest_set << n.init_func(str + '#init', ta && ta.to_poly) do |f|
      f.exp { init_exp.alpha_convert({}, (0..1000).to_a).to_poly }
    end
  end
end