class Treetop::Compiler::RubyBuilder

def <<(ruby_line)

def <<(ruby_line)              
  return if ruby_line == ''
  ruby << ruby_line.tabto(level) << "\n"
end

def accumulate(left, right)

def accumulate(left, right)
  self << "#{left} << #{right}"
end

def assign(left, right)

def assign(left, right)
  if left.instance_of? Array
    self << "#{left.join(', ')} = #{right.join(', ')}"
  else
    self << "#{left} = #{right}"
  end
end

def break

def break
  self << 'break'
end

def class_declaration(name, &block)

def class_declaration(name, &block)
  self << "class #{name}"
  indented(&block)
  self << "end"
end

def else_(&block)

def else_(&block)
  self << 'else'
  indented(&block)
  self << 'end'
end

def extend(var, module_name)

def extend(var, module_name)
  self << "#{var}.extend(#{module_name})"
end

def if_(condition, &block)

def if_(condition, &block)
  if__(condition, &block)
  self << 'end'
end

def if__(condition, &block)

def if__(condition, &block)
  self << "if #{condition}"
  indented(&block)
end

def in(depth = 2)

def in(depth = 2)
  @level += depth
  self
end

def indent

def indent
  " " * level
end

def indented(depth = 2)

def indented(depth = 2)
  self.in(depth)
  yield
  self.out(depth)
end

def initialize

def initialize
  @level = 0
  @address_space = LexicalAddressSpace.new
  @ruby = String.new("")
end

def loop(&block)

def loop(&block)
  self << 'loop do'
  indented(&block)
  self << 'end'
end

def method_declaration(name, &block)

def method_declaration(name, &block)
  self << "def #{name}"
  indented(&block)
  self << "end"
end

def module_declaration(name, &block)

def module_declaration(name, &block)
  self << "module #{name}"
  indented(&block)
  self << "end"
end

def newline

def newline
  ruby << "\n"
end

def next_address

def next_address
  address_space.next_address
end

def out(depth = 2)

def out(depth = 2)
  @level -= depth
  self
end

def reset_addresses

def reset_addresses
  address_space.reset_addresses
end