class Opal::Nodes::WhileNode

def compile

def compile
  with_temp do |redo_var|
    test_code = js_truthy(test)
    compiler.in_while do
      while_loop[:closure] = true if wrap_in_closure?
      while_loop[:redo_var] = redo_var
      body_code = stmt(body)
      if uses_redo?
        push "#{redo_var} = false; #{while_open}#{redo_var} || "
        push test_code
        push while_close
      else
        push while_open, test_code, while_close
      end
      push "#{redo_var} = false;" if uses_redo?
      line body_code, "}"
    end
  end
  wrap '(function() {', '; return nil; })()' if wrap_in_closure?
end

def uses_redo?

def uses_redo?
  while_loop[:use_redo]
end

def while_close

def while_close
  ") {"
end

def while_open

def while_open
  "while ("
end

def wrap_in_closure?

def wrap_in_closure?
  expr? or recv?
end