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