Class: Riml::Compiler::AssignNodeVisitor

Inherits:
ScopedVisitor show all
Defined in:
lib/compiler.rb

Instance Method Summary collapse

Methods inherited from Visitor

#initialize, #visit

Constructor Details

This class inherits a constructor from Riml::Compiler::Visitor

Instance Method Details

#compile(node) ⇒ Object



294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/compiler.rb', line 294

def compile(node)
  lhs = visit_lhs(node)
  rhs = visit_rhs(node)
  if GetVariableNode === node.lhs && node.scope && (func = node.scope.function)
    if func.argument_variable_names.include?(node.lhs.full_name)
      if !func.shadowed_argument_variable_names.include?(node.lhs.full_name)
        func.shadowed_argument_variable_names << node.lhs.full_name
      end
    end
  end
  node.compiled_output = "#{lhs}#{rhs}"
  node.force_newline = true
  node.compiled_output
end

#visit_lhs(node) ⇒ Object



309
310
311
312
# File 'lib/compiler.rb', line 309

def visit_lhs(node)
  node.lhs.accept(visitor_for_node(node.lhs, :propagate_up_tree => false))
  "let #{node.lhs.compiled_output} #{node.operator} "
end

#visit_rhs(node) ⇒ Object



314
315
316
317
# File 'lib/compiler.rb', line 314

def visit_rhs(node)
  node.rhs.accept(visitor_for_node(node.rhs, :propagate_up_tree => false))
  node.rhs.compiled_output
end