class CodeTools::AST::Break

Attributes

value[RW]

Public Class Methods

new(line, expr) click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 541
def initialize(line, expr)
  @line = line
  @value = expr || NilLiteral.new(line)
end

Public Instance Methods

block=(node) click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 546
def block=(node)
  @value.block = node if @value
end
bytecode(g) click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 556
def bytecode(g)
  pos(g)

  g.pop if g.state.top_level_ensure?

  @value.bytecode(g)

  if g.break
    g.goto g.break
  elsif g.state.block?
    g.raise_break
  else
    g.pop
    jump_error g, :break
  end

  g.push_tagged_nil 0 if g.state.top_level_ensure?
end
defined(g) click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 575
def defined(g)
  g.push_literal "expression"
end
jump_error(g, name) click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 550
def jump_error(g, name)
  g.push_rubinius
  g.push_literal name
  g.send :jump_error, 1
end
sexp_name() click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 579
def sexp_name
  :break
end
to_sexp() click to toggle source
# File lib/rubinius/code/ast/control_flow.rb, line 583
def to_sexp
  sexp = [sexp_name]
  sexp << @value.to_sexp if @value
  sexp
end