     # of any function, subroutine, etc.
     # Assumes indent is set at the correct level.
     $body: (node) ->
-      # TODO: visit the var declarations.
-      vars = []
+      vars = @visit node.vars, '$stmt'
 
       # Compile all of the subroutines.
       subroutines =

      # TODO: Bounds checking.
      [@visit(node.apropos)].concat(subexpressions)

    # Turns a record access into a 
    record_access: (node) ->
      [@visit(node.apropos), '[', @visit(node.field, 'string'), ']']

    # Got to place strings in quotes and escape characters.
    string: (node) ->

    program: (node) ->
      [
        # Emit the header of the self-contained function
        '(function (input, output) {\n'
        # Print variables and the body.
        @visit node.declarations
        # Emit the bottom
