class Riml::AST_Rewriter::ClassDefinitionToFunctions::InitializeSuperToObjectExtension
Attributes
class_node[R]
Public Class Methods
new(constructor, classes, class_node)
click to toggle source
Calls superclass method
Riml::AST_Rewriter::new
# File lib/riml/ast_rewriter.rb, line 664 def initialize(constructor, classes, class_node) super(constructor, classes) @class_node = class_node end
Public Instance Methods
match?(constructor)
click to toggle source
# File lib/riml/ast_rewriter.rb, line 669 def match?(constructor) DefNode === constructor && constructor.super_node end
max_recursion_lvl()
click to toggle source
# File lib/riml/ast_rewriter.rb, line 715 def max_recursion_lvl 1 end
replace(constructor)
click to toggle source
# File lib/riml/ast_rewriter.rb, line 673 def replace(constructor) unless class_node.superclass? error_msg "class #{class_node.full_name.inspect} called super in its " \ " initialize function, but it has no superclass." error = InvalidSuper.new(error_msg, constructor) raise error end superclass = classes.superclass(class_node.full_name) super_constructor = superclass.constructor set_var_node = AssignNode.new('=', GetVariableNode.new(nil, superclass.constructor_obj_name), CallNode.new( super_constructor.scope_modifier, super_constructor.name, super_arguments(constructor.super_node) ) ) constructor.super_node.replace_with(set_var_node) constructor.expressions.insert_after(set_var_node, ExplicitCallNode.new( nil, "extend", [ GetVariableNode.new(nil, class_node.constructor_obj_name), GetVariableNode.new(nil, superclass.constructor_obj_name) ] ) ) reestablish_parents(constructor) end
super_arguments(super_node)
click to toggle source
# File lib/riml/ast_rewriter.rb, line 706 def super_arguments(super_node) if super_node.use_all_arguments? # here, ast is 'constructor' ast.parameters.map {|p| GetVariableNode.new(nil, p)} else super_node.arguments end end