class CodeTools::AST::Return
Attributes
value[RW]
Public Class Methods
new(line, expr)
click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 679 def initialize(line, expr) @line = line @value = expr @splat = nil end
Public Instance Methods
block=(node)
click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 685 def block=(node) @value.block = node if @value end
bytecode(g, force=false)
click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 689 def bytecode(g, force=false) pos(g) # Literal ArrayList and a splat if @splat splat_node = @value.body.pop @value.bytecode(g) splat_node.call_bytecode(g) g.send :+, 1 elsif @value @value.bytecode(g) else g.push_tagged_nil 0 end if lcl = g.state.rescue? g.push_stack_local lcl g.restore_exception_state end if g.state.block? g.raise_return elsif !force and g.state.ensure? g.ensure_return else g.ret end end
defined(g)
click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 718 def defined(g) g.push_literal "expression" end
to_sexp()
click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 722 def to_sexp sexp = [:return] sexp << @value.to_sexp if @value sexp << @splat.to_sexp if @splat sexp end