     @consolidateBodies node
     @removeEmptyStatementsFromBody node
   FunctionDeclaration: (node, parent) ->
-    @pushStack node.body
     @removeUndefinedParameter node
     @moveDeclarationToTopOfScope node, parent
+    { type: 'EmptyStatement' }
   FunctionDeclarationExit: (node) ->
     @popStack()
   FunctionExpression: (node) ->

          type: 'FunctionExpression'
          params: node.params
          body: node.body
    { type: 'EmptyStatement' }

  removeEmptyStatementsFromBody: (node) ->
    node.body = node.body.filter (n) ->

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