         
       [callee, '('].concat(list).concat([')'])
 
+    # Default, when nothing else can do
+    Default: (type, node) ->
+      console.error node
+      throw new Error("walk(): No handler for #{type}")
+
+###
+# Performs transformations on the AST.
+#
+#     ast = esprima.parse(...);
+#     new Transformer(ast, {}).run();
+#     ast; //= this is changed now
+###
+
 class Transformer
   constructor: (@ast, @options = {}) ->
   run: -> @ast
+
+###*
+# parse():
+# Parses.
+###
 
 parse = (source, options = {}) ->
   ast = esprima.parse(source, loc: true, range: true, comment: true)

      output)

  nodes:
    Default: (type, node) ->
      console.error node
      throw new Error("walk(): No handler for #{type}")

    Program: (node) ->
      node.body.map(@walk)


SourceNode = require("source-map").SourceNode
Walker = require('./lib/walker')

###
# Generates output based on a JavaScript AST.
#
#     s = new Stringifier(ast, {})
#     s.get()
#     => { code: '...', map: { ... } }
###

class Stringifier extends Walker
  get: ->
    @run().toStringWithSourceMap()

  ###
  # decorator():
  # (private) takes the output of each of the node visitors and turns them into
  # a SourceNode.
  ###

  decorator: (node, output) ->
    new SourceNode(
