     @addShadowingIfNeeded(node)
     @addExplicitUndefinedInitializer node, parent, skip
 
+  consolidateBodies: (node) ->
+    console.log 'consolidating prebody of', node.type
+    if node._prebody
+      console.log "√"
+      node.body = node._prebody.concat(node.body)
+      delete node._prebody
+
   moveDeclarationToTopOfScope: (node, paren) ->
     @parent._prebody ?= []
     @parent._prebody.unshift


  recurse: (root) ->
    self = this
    orr = (n1, n2) ->
      if n1 or (n1 is null) then n1 else n2
    @estraverse().replace root,
      enter: (node, parent) ->
        fn = self["#{node.type}"]
        if fn
          orr fn.apply(self, [ node, parent, (=> @skip()), (=> @break()) ]), node
        fn = self["#{node.type}Exit"]
        if fn
          orr fn.apply(self, [ node, parent, (=> @skip()), (=> @break()) ]), node
    root

  estraverse: ->

  BlockStatementExit: (node) ->
    @consolidateBodies node
    @removeEmptyStatementsFromBody node
  FunctionDeclaration: (node, parent) ->
    @pushStack node.body
    @removeUndefinedParameter node
