class Opal::Nodes::ReturnNode

def compile

def compile
  if def_scope = scope_to_catch_return
    def_scope.catch_return = true
    push 'Opal.ret(', return_val, ')'
  elsif stmt?
    push 'return ', return_val
  else
    raise SyntaxError, "void value expression: cannot return as an expression"
  end
end

def return_expr_in_def?

def return_expr_in_def?
  return scope if expr? and scope.def?
end

def return_in_iter?

def return_in_iter?
  if scope.iter? and parent_def = scope.find_parent_def
    parent_def
  end
end

def return_val

def return_val
  if value.nil?
    expr(s(:nil))
  elsif children.size > 1
    expr(s(:array, *children))
  else
    expr(value)
  end
end

def scope_to_catch_return

def scope_to_catch_return
  return_in_iter? or return_expr_in_def?
end