class Riml::Compiler::FinishNodeVisitor

Public Instance Methods

compile(node) click to toggle source
# File lib/riml/compiler.rb, line 167
def compile(node)
  value = case node.value
  when TrueClass
    1
  when FalseClass
    0
  when Numeric
    node.value
  when String
    StringNode === node ? string_surround(node) : node.value
  when Array
    if ListNode === node
      node.value.each {|n| n.parent_node = node}
      '[' <<
      node.value.map do |n|
        n.accept(visitor_for_node(n))
        n.compiled_output
      end.join(', ') << ']'
    elsif DictionaryNode === node
      '{' <<
      node.value.map do |(k, v)|
        k.accept(visitor_for_node(k))
        v.accept(visitor_for_node(v))
        k.compiled_output << ': ' << v.compiled_output
      end.join(', ') << '}'
    end
  end.to_s

  node.compiled_output = value
end

Private Instance Methods

string_surround(string_node) click to toggle source
# File lib/riml/compiler.rb, line 199
def string_surround(string_node)
  case string_node.type.to_sym
  when :d
    '"' << string_node.value << '"'
  when :s
    "'" << string_node.value << "'"
  end
end