Class: Riml::Compiler::AssignNodeVisitor

Inherits:
ScopedVisitor show all
Defined in:
lib/riml/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



302
303
304
305
306
307
308
309
310
311
312
313
314
315
# File 'lib/riml/compiler.rb', line 302

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



317
318
319
320
# File 'lib/riml/compiler.rb', line 317

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



322
323
324
325
# File 'lib/riml/compiler.rb', line 322

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