Class: Ikra::Translator::LastStatementReturnsVisitor
Overview
Visitor that replaces implicit returns with explicit ones
Instance Method Summary
collapse
#visit_array_node, #visit_block_def_node, #visit_class_def_node, #visit_const_node, #visit_hash_node, #visit_ivar_read_node, #visit_meth_def_node, #visit_node, #visit_program_node, #visit_source_code_expr_node, #visit_string_node, #visit_symbol_node, #visit_ternary_node, #visit_until_node, #visit_until_post_node, #visit_var_def_node, #visit_while_node, #visit_while_post_node
Instance Method Details
#process_node(node) ⇒ Object
61
62
63
|
# 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) ⇒ Object
49
50
51
|
# 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) ⇒ Object
28
29
30
|
# File 'lib/translator/last_returns_visitor.rb', line 28
def visit_bool_node(node)
process_node(node)
end
|
#visit_break_node(node) ⇒ Object
40
41
42
|
# 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) ⇒ Object
24
25
26
|
# File 'lib/translator/last_returns_visitor.rb', line 24
def visit_float_node(node)
process_node(node)
end
|
#visit_for_node(node) ⇒ Object
36
37
38
|
# 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) ⇒ Object
44
45
46
47
|
# 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) ⇒ Object
20
21
22
|
# File 'lib/translator/last_returns_visitor.rb', line 20
def visit_int_node(node)
process_node(node)
end
|
#visit_lvar_read_node(node) ⇒ Object
12
13
14
|
# File 'lib/translator/last_returns_visitor.rb', line 12
def visit_lvar_read_node(node)
process_node(node)
end
|
#visit_lvar_write_node(node) ⇒ Object
16
17
18
|
# File 'lib/translator/last_returns_visitor.rb', line 16
def visit_lvar_write_node(node)
process_node(node)
end
|
#visit_nil_node(node) ⇒ Object
32
33
34
|
# File 'lib/translator/last_returns_visitor.rb', line 32
def visit_nil_node(node)
process_node(node)
end
|
#visit_return_node(node) ⇒ Object
57
58
59
|
# File 'lib/translator/last_returns_visitor.rb', line 57
def visit_return_node(node)
end
|
#visit_root_node(node) ⇒ Object
8
9
10
|
# File 'lib/translator/last_returns_visitor.rb', line 8
def visit_root_node(node)
node.single_child.accept(self)
end
|
#visit_send_node(node) ⇒ Object
53
54
55
|
# File 'lib/translator/last_returns_visitor.rb', line 53
def visit_send_node(node)
process_node(node)
end
|