class Riml::AST_Rewriter::ClassDefinitionToFunctions::ExtendObjectWithMethods
Public Instance Methods
extend_obj_with_methods(def_node)
click to toggle source
Ex: ‘let dogObj.bark = function(’<SNR>‘ . s:SID() . ’_s:Dog_bark’)‘
# File lib/riml/ast_rewriter.rb, line 547 def extend_obj_with_methods(def_node) constructor = ast.constructor extension = AssignNode.new('=', DictGetDotNode.new( GetVariableNode.new(nil, ast.constructor_obj_name), [def_node.original_name] ), CallNode.new( nil, 'function', [ BinaryOperatorNode.new( '.', [ BinaryOperatorNode.new( '.', [ StringNode.new('<SNR>', :s), CallNode.new('s:', 'SID', []), ] ), StringNode.new("_s:#{def_node.name}", :s) ] ) ] ) ) constructor.expressions << extension extension.parent = constructor.expressions end
match?(node)
click to toggle source
# File lib/riml/ast_rewriter.rb, line 527 def match?(node) node.instance_of?(DefMethodNode) end
max_recursion_lvl()
click to toggle source
# File lib/riml/ast_rewriter.rb, line 577 def max_recursion_lvl 2 end
replace(node)
click to toggle source
# File lib/riml/ast_rewriter.rb, line 531 def replace(node) def_node = node.to_def_node class_expressions = ast.expressions class_expressions.insert_after(class_expressions.nodes.last, def_node) def_node.parent = class_expressions # to remove it node.parent = class_expressions node.remove def_node.original_name = def_node.name.dup def_node.name.insert(0, "#{ast.name}_") def_node.sid = SIDNode.new reestablish_parents(def_node) extend_obj_with_methods(def_node) end