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