class Riml::Compiler::ForNodeVisitor

Public Instance Methods

compile(node) click to toggle source
# File lib/riml/compiler.rb, line 627
def compile(node)
  scope_visitor = EstablishScopeVisitor.new(:scope => node.to_scope)
  if node.variables
    node.variables.parent_node = node
    node.variables.accept(scope_visitor)
    node.variables.accept(
      visitor_for_node(
        node.variables,
        :propagate_up_tree => false
      )
    )
    node.compiled_output = "for #{node.variables.compiled_output} in "
  else
    node.variable.parent_node = node
    node.variable.accept(scope_visitor)
    set_modifier(node.variable)
    node.compiled_output = "for #{node.variable.full_name} in "
  end
  node.in_expression.parent_node = node
  node.in_expression.force_newline = true
  node.in_expression.accept(visitor_for_node(node.in_expression))
  node.expressions.parent_node = node
  node.expressions.accept(scope_visitor)
  node.expressions.accept(NodesVisitor.new :propagate_up_tree => false)
  body = node.expressions.compiled_output
  body.each_line do |line|
    node.compiled_output << node.indent + line
  end
  node.compiled_output << "endfor\n"
end