class Opal::Nodes::BreakNode

def break_val

def break_val
  if value.nil?
    expr(s(:nil))
  else
    expr(value)
  end
end

def compile

def compile
  if in_while?
    compile_while
  elsif scope.iter?
    compile_iter
  else
    error 'void value expression: cannot use break outside of iter/while'
  end
end

def compile_iter

def compile_iter
  error 'break must be used as a statement' unless stmt?
  line 'Opal.brk(', break_val, ', $brk)'
end

def compile_while

def compile_while
  if while_loop[:closure]
    push 'return ', expr_or_nil(value)
  else
    push 'break;'
  end
end