anchor.diff:  (defmethod read-value ((input cleavir-mir:constant-input) environment)
     (declare (ignore environment))
     (cleavir-mir:value input))
  -
  -(defmethod read-value ((input cleavir-mir:global-input) environment)
  -  (declare (ignore environment))
  -  (fdefinition (cleavir-mir:name input)))
   
   (defgeneric write-value (output environment value))
   
  
positive.code:   (when *step* (break))
    (call-next-method))
  
  (defun interpret-mir (enter-instruction environment arguments)
    (push (make-hash-table :test #'eq) environment)
    (let* ((lambda-list (cleavir-mir:lambda-list enter-instruction)) 
  	 (pos (position-if (lambda (x) (member x '(&optional &key)))
  			   lambda-list)))
      (cond ((null pos)
  	   ;; Only required arguments.
  	   (when (< (length arguments) (length lambda-list))
  	     (error "too few arguments"))
  	   (when (> (length arguments) (length lambda-list))
  	     (error "too many arguments"))
  	   (loop for value in arguments
  		 for variable in lambda-list
  		 do (store-lexical variable environment value)))
  	  (t
  	   (error "can't handle &optional or &key yet")))
      (let ((next (first (cleavir-mir:successors enter-instruction))))
        (catch 'return
  	(loop do (setf next (execute-instruction next environment)))))))
  
  (defun enclose (enter-instruction environment)
    (lambda (&rest arguments)
      (interpret-mir enter-instruction environment arguments)))
  
  (defmethod execute-instruction
      ((instruction cleavir-mir:assignment-instruction) environment)
  
negative.code: (cl:in-package #:cleavir-mir-interpreter)
  
  (defgeneric read-value (input environment))
  
  