class Ikra::Translator::LastStatementReturnsVisitor

Visitor that replaces implicit returns with explicit ones

Public Instance Methods

process_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 61
def process_node(node)
    node.parent.replace_child(node, AST::ReturnNode.new(value: node))
end
visit_begin_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 49
def visit_begin_node(node)
    node.body_stmts.last.accept(self)
end
visit_bool_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 28
def visit_bool_node(node)
    process_node(node)
end
visit_break_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 40
def visit_break_node(node)
    raise AssertionError.new("Break must not be a return value")
end
visit_float_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 24
def visit_float_node(node)
    process_node(node)
end
visit_for_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 36
def visit_for_node(node)
    raise NotImplementedError.new("Cannot handle for loop as return value")
end
visit_if_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 44
def visit_if_node(node)
    node.true_body_stmts.accept(self)
    node.false_body_stmts.accept(self)
end
visit_int_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 20
def visit_int_node(node)
    process_node(node)
end
visit_lvar_read_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 12
def visit_lvar_read_node(node)
    process_node(node)
end
visit_lvar_write_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 16
def visit_lvar_write_node(node)
    process_node(node)
end
visit_nil_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 32
def visit_nil_node(node)
    process_node(node)
end
visit_return_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 57
def visit_return_node(node)
    # Do nothing
end
visit_root_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 8
def visit_root_node(node)
    node.single_child.accept(self)
end
visit_send_node(node) click to toggle source
# File lib/translator/last_returns_visitor.rb, line 53
def visit_send_node(node)
    process_node(node)
end