Class: Riml::AST_Rewriter::ClassDefinitionToFunctions::PrivateFunctionCallToPassObjExplicitly

Inherits:
Riml::AST_Rewriter
  • Object
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)


282
283
284
285
# File 'lib/ast_rewriter.rb', line 282

def match?(node)
  CallNode === node && DictGetDotNode === node.name && node.name.dict.scope_modifier.nil? &&
    node.name.dict.name == 'self' && (node.name.keys & ast.private_function_names).size == 1
end

#replace(node) ⇒ Object



287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'lib/ast_rewriter.rb', line 287

def replace(node)
  node.scope_modifier = 's:'
  # find function that I'm in
  n = node
  until n.instance_of?(DefNode)
    n = n.parent
  end
  if n.original_name == 'initialize'
    node.arguments.unshift(GetVariableNode.new(nil, ast.constructor_obj_name))
  elsif n.private_function
    node.arguments.unshift(GetVariableNode.new('a:', ast.constructor_obj_name))
  else
    node.arguments.unshift(GetVariableNode.new(nil, 'self'))
  end
  func_name = node.name.keys.first
  node.name = "#{ast.name}_#{func_name}"
  reestablish_parents(node)
end