       [ @walk(node.argument), node.operator ]
 
   SwitchStatement: (node) ->
-    @consolidateCases(node)
     body = @indent => @makeStatements(node, node.cases)
     item = @walk(node.discriminant)
 

  popStack: (node) ->
    @block = @scopes.pop()

  CallExpression: (node) ->
    @parenthesizeCallee node

  ###
  # In an IIFE, ensure that the function expression is parenthesized (eg,


  run: ->
    self = this
    @estraverse().replace @ast,
      enter: (node, parent) =>
        fn = self["#{node.type}"]
        if fn
          fn.apply self, [ node, parent, (=> @skip()), (=> @break()) ]
      exit: (node, parent) ->
        fn = self["exit#{node.type}Exit"]
        if fn
          fn.apply self, [ node, parent, (=> @skip()), (=> @break()) ]
    @ast

  estraverse: ->
    @_estraverse ?= do ->
      es = require('estraverse')
      es.VisitorKeys.CoffeeEscapedExpression = []
      es.VisitorKeys.CoffeeListExpression = []
      es

  Program: (node) ->
    @pushStack node
  ProgramExit: (node) ->
    @popStack()
  BlockStatement: (node) ->
    @pushStack node
  BlockStatementExit: (node) ->
    @popStack()
  FunctionExpression: (node) ->
    @moveNamedFunctionExpressions node
  SwitchStatement: (node) ->
    @consolidateCases node
  SwitchCase: (node) ->
    @removeBreaksFromConsequents node
  CallExpression: (node) ->
    @parenthesizeCallee node

  pushStack: (node) ->
    @scopes.push node
