   onUnknownNode: (node, ctx) ->
     @syntaxError(node, "#{ctx?.type} is not supported")
 
-  ###*
-  # syntaxError():
-  # Throws a syntax error for the given `node`.
-  #
-  #     @syntaxError node, "Not supported"
-  ###
-
-  syntaxError: (node, description) ->
-    err = buildError({
-      lineNumber: node.loc?.start?.line,
-      column: node.loc?.start?.column,
-      description: description
-    }, @options.source, @options.filename)
-    throw err
+  syntaxError: Transformer::syntaxError
 
   ###
   # visitors:


  run: ->
    self = this
    require('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}"]
        if fn
          fn.apply self, [ node, parent, (=> @skip()), (=> @break()) ]
    @ast

  Program: (node) ->
    @pushStack node

  exitProgram: (node) ->
    @popStack()

  BlockStatement: (node) ->
    @pushStack node

  exitBlockStatement: ->
    @popStack()

  FunctionExpression: (node) ->
    @moveNamedFunctionExpressions node

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

      [ @walk(node.argument), node.operator ]

  SwitchStatement: (node) ->
    body = @indent => @makeStatements(node, node.cases)
    item = @walk(node.discriminant)

