anchor.diff:        elm)))
   
   (defmethod transform ((xform (eql 'uniquify)) (elm function-decl))
  -  (let* ((*environment* (add-environment))
  -         (new-params (mapcar #'add-ugly-binding (function-decl-parameters elm))))
  -    (make-function-decl :name (find-binding (function-decl-name elm))
  -                        :parameters new-params
  -                        :body (transform-in-scope (function-decl-body elm)))))
  -
  +  (with-added-environment
  +    (let ((new-params (mapcar #'add-ugly-binding (function-decl-parameters elm))))
  +      (make-function-decl :name (find-binding (function-decl-name elm))
  +                          :parameters new-params
  +                          :body (transform-in-scope (function-decl-body elm))))))
  +  
   (defmethod transform ((xform (eql 'uniquify)) (elm function-expression))
  -  (let* ((*environment* (add-environment))
  -         (new-name (add-ugly-binding (function-expression-name elm)))
  -         (new-params (mapcar #'add-ugly-binding (function-expression-parameters elm))))
  -    (make-function-expression :name new-name
  -                              :parameters new-params
  -                              :body (transform-in-scope (function-expression-body elm)))))
  -
  +  (with-added-environment
  +    (let* ((new-name (add-ugly-binding (function-expression-name elm)))
  +           (new-params (mapcar #'add-ugly-binding (function-expression-parameters elm))))
  +      (make-function-expression :name new-name
  +                                :parameters new-params
  +                                :body (transform-in-scope (function-expression-body elm))))))
  +  
   (defmethod transform ((xform (eql 'uniquify)) (elm var-decl))
     (make-var-decl :name (find-binding (var-decl-name elm))
                    :initializer (transform xform (var-decl-initializer elm))))
positive.code: (defparameter *environment* '()
    "list of assoc lists representing the current lexical environment")
  
  (defun add-environment ()
    "Adds a new environment to the environment stack, makes it the current environment"
    (cons '() *environment*))
  
  (defun find-binding (var-name)
    "Looks through the set of environments and finds the most recently bound variable, returns its bound value"
  
negative.code: 
  (defun add-binding (var-name var-newname)
    "Add a binding to the environment. In our case, name and new name"
    (push (cons var-name var-newname) (car *environment*)))
  
  (defun add-ugly-binding (var-name)
    "Takes a variable name and creates a new ugly name and adds that to the environment. Returns the ugly name"
  