anchor.diff:  		    :types (list (variable-type (cdr it)))
   		    :side-effects
   		    (make-instance 'side-effects
  -				   :used-variables (list var-name)))))
  +				   :used-variables (list var-name)
  +				   :variables-used-before-assigned (list var-name)))))
         (t
          (let* ((bst-function (get-bst-function function-name))
   	      (arg-types (bst-function-argument-types bst-function))
  
positive.code:   "Non-nil if we are compiling a Common Lisp program from the BST
  program, rather than interpreting the BST program.")
  
  (defvar *lisp-stream* nil
    "A stream where we write the Common Lisp program equivalent to the
  BST program.")
  
  (defvar *main-lisp-body* ()
    "A list collecting the forms corresponding to EXECUTE, ITERATE,
  
negative.code: 		  (bst-compile-literal then-literal then-stack :borrowing-allowed nil)
  		(declare (ignore then-arg-types))
  		(let* ((res-types (mapcar #'type-union then-res-types else-res-types))
  		       (then-or-else-side-effects
  			(max-side-effects then-side-effects else-side-effects)))
  		  (setf (side-effects-unconditionally-assigned-variables then-or-else-side-effects)
  			(intersection (side-effects-unconditionally-assigned-variables then-side-effects)
  				      (side-effects-unconditionally-assigned-variables else-side-effects)
  				      :test 'equalp)
  			(side-effects-variables-used-before-assigned then-or-else-side-effects)
  			(union (side-effects-variables-used-before-assigned then-side-effects)
  			       (side-effects-variables-used-before-assigned else-side-effects)
  			       :test 'equalp))
  		  (let ((side-effects
  			 (max-side-effects (mvform-side-effects val-mvform)
  					   then-or-else-side-effects)))
  		    (push-mvform :form (build-if-form (mvform-form val-mvform) then-form else-form)
  				 :types res-types
  				 :side-effects side-effects))))))))))   
  
  (define-bst-special-form "pop$"
      (pop-form t :need-variable :if-side-effects))
  