class Opal::Nodes::WhileNode

def compile

def compile
  test_code = js_truthy(test)
  with_temp do |redo_var|
    compiler.in_while do
      while_loop[:closure] = true if wrap_in_closure?
      while_loop[:redo_var] = redo_var
      body_code = indent { stmt(body) }
      if uses_redo?
        compile_with_redo(test_code, body_code, redo_var)
      else
        compile_without_redo(test_code, body_code)
      end
    end
  end
  if wrap_in_closure?
    if scope.await_encountered
      wrap '(await (async function() {', '; return nil; })())'
    else
      wrap '(function() {', '; return nil; })()'
    end
  end
end