anchor.diff:  		   :initarg :used-variables :initform ())
      (assigned-variables :accessor side-effects-assigned-variables
   		       :initarg :assigned-variables :initform ())
  +   ;; unconditionally assigned variables are always assigned in the
  +   ;; form; in fact, they are assigned before they are referenced
      (unconditionally-assigned-variables :accessor side-effects-unconditionally-assigned-variables
   				       :initarg :unconditionally-assigned-variables
  -				       :initform ()))
  +				       :initform ())
  +   (variables-used-before-assigned :accessor side-effects-variables-used-before-assigned
  +				   :initarg :variables-used-before-assigned
  +				   :initform ()))
     (:documentation
      "A description of the side-effects of a computation"))
   
  
positive.code:   lisp-form-maker
    (side-effects null-side-effects)
    setter-form-maker
    ;; For use in the BST interpreter:
    value					; value as a variable
    body
  
negative.code:   (let ((variable (string variable)))
      (setf (gethash variable hash-table)
  	  (make-bst-function :name variable
  			     :lisp-name lisp-name
  			     :setter #'(lambda (value)
  					 (setf (bst-function-value
  						(gethash variable hash-table))
  