   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.

    else
      []

    [ init, @WhileStatement(node) ]

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

    [ "new ", callee, args ]

  WhileStatement: (node) ->
    [ "while ", @walk(node.test), "\n", @makeLoopBody(node.body) ]

  CoffeeLoopStatement: (node) ->
    [ "loop", "\n", @makeLoopBody(node.body) ]

  DoWhileStatement: (node) ->
    @indent =>
