Class: Riml::AST_Rewriter::DeserializeVarAssignment

Inherits:
Riml::AST_Rewriter show all
Defined in:
lib/ast_rewriter.rb

Constant Summary

Constants included from Constants

Constants::BUILTIN_COMMANDS, Constants::BUILTIN_FUNCTIONS, Constants::COMPARISON_OPERATORS, Constants::DEFINE_KEYWORDS, Constants::END_KEYWORDS, Constants::IGNORECASE_CAPABLE_OPERATORS, Constants::KEYWORDS, Constants::REGISTERS, Constants::RIML_COMMANDS, Constants::RIML_END_KEYWORDS, Constants::RIML_KEYWORDS, Constants::SPECIAL_VARIABLE_PREFIXES, Constants::SPLAT_LITERAL, Constants::VIML_COMMANDS, Constants::VIML_END_KEYWORDS, Constants::VIML_KEYWORDS

Instance Attribute Summary

Attributes inherited from Riml::AST_Rewriter

#ast, #classes, #rewritten_included_and_sourced_files

Instance Method Summary collapse

Methods inherited from Riml::AST_Rewriter

#add_SID_function!, #add_SID_function?, #do_establish_parents, #do_rewrite_on_match, #establish_parents, #initialize, #recursive?, #rewrite, #rewrite_included_and_sourced_files!, #rewrite_on_match

Constructor Details

This class inherits a constructor from Riml::AST_Rewriter

Instance Method Details

#match?(node) ⇒ Boolean

Returns:

  • (Boolean)


606
607
608
# File 'lib/ast_rewriter.rb', line 606

def match?(node)
  AssignNode === node && AssignNode === node.rhs && node.operator == '='
end

#replace(node) ⇒ Object



610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
# File 'lib/ast_rewriter.rb', line 610

def replace(node)
  orig_assign = node.dup
  assigns = []
  while assign_node = (node.respond_to?(:rhs) && node.rhs)
    assigns.unshift([node.lhs, node.rhs])
    node = assign_node
  end
  assigns = assigns[0..0].concat(assigns[1..-1].map! { |(lhs, rhs)| [lhs, rhs.lhs] })

  assigns.map! do |(lhs, rhs)|
    AssignNode.new('=', lhs, rhs)
  end

  new_assigns = Nodes.new(assigns)
  new_assigns.parent = orig_assign.parent
  orig_assign.replace_with(new_assigns)
  establish_parents(new_assigns)
end