     [ "new ", callee, args ]
 
   WhileStatement: (node) ->
-    isLoop = not node.test? or
-      (node.test?.type is 'Literal' and node.test?.value is true)
-
-    looper = if isLoop
-      [ "loop" ]
-    else
-      [ "while ", @walk(node.test) ]
-
-    [ looper, "\n", @makeLoopBody(node.body) ]
+    [ "while ", @walk(node.test), "\n", @makeLoopBody(node.body) ]
+
+  CoffeeLoopStatement: (node) ->
+    [ "loop", "\n", @makeLoopBody(node.body) ]
 
   DoWhileStatement: (node) ->
     @indent =>

    else
      []

    [ init, @WhileStatement(node) ]

  ForInStatement: (node) ->
    if node.left.type isnt 'VariableDeclaration'

  VariableDeclarator: (node) ->
    @addShadowingIfNeeded(node)
    @addExplicitUndefinedInitializer(node)

  WhileStatement: (node) ->
    @convertToLoopStatement(node)

  ###
  # Converts a `while (true)` to a CoffeeLoopStatement.
  ###

  convertToLoopStatement: (node) ->
    isLoop = not node.test? or
      (node.test?.type is 'Literal' and node.test?.value is true)

    if isLoop
      replace node,
        type: 'CoffeeLoopStatement'
        body: node.body
    else
      node

  ###
  # Remove `{type: 'EmptyStatement'}` from the body.
