Class: Riml::AST_Rewriter::ClassDefinitionToFunctions::SelfToObjArgumentInPrivateFunction

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

Constant Summary

Constants included from Constants

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

Instance Attribute Summary

Attributes inherited from Riml::AST_Rewriter

#ast, #classes, #options

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, #max_recursion_lvl, #reorder_includes_based_on_class_dependencies!, #resolve_class_dependencies!, #resolve_class_dependencies?, #rewrite, #rewrite_included_and_sourced_files!, #rewrite_on_match, #watch_for_class_pickup

Constructor Details

#initialize(ast, classes, class_node) ⇒ SelfToObjArgumentInPrivateFunction

Returns a new instance of SelfToObjArgumentInPrivateFunction.



448
449
450
451
# File 'lib/riml/ast_rewriter.rb', line 448

def initialize(ast, classes, class_node)
  super(ast, classes)
  @class_node = class_node
end

Instance Method Details

#match?(node) ⇒ Boolean

Returns:

  • (Boolean)


453
454
455
456
457
458
459
460
461
462
463
# File 'lib/riml/ast_rewriter.rb', line 453

def match?(node)
  return unless GetVariableNode === node && node.scope_modifier == nil && node.name == 'self'
  return if node.parent.is_a?(DictGetDotNode) && node.parent.parent.is_a?(CallNode) &&
    (@class_node.private_function_names & node.parent.keys).size == 1
  # make sure we're not nested in a different function
  n = node
  until n.instance_of?(DefNode)
    n = n.parent
  end
  n == ast
end

#replace(node) ⇒ Object



465
466
467
468
# File 'lib/riml/ast_rewriter.rb', line 465

def replace(node)
  node.name = @class_node.constructor_obj_name
  node.scope_modifier = 'a:'
end