anchor.diff:  	     :code code
   	     :successors (list (nil-fill (cdr value-context) successor)))))))
   
  -(defmethod compile-ast ((ast p1:typed-location-ast) value-context successor)
  +(defmethod compile-ast
  +    ((ast sicl-env:lexical-location-info) value-context successor)
     (cond ((eq value-context t)
   	 (make-instance 'put-values-instruction
  -	   :inputs (list (p1:location ast))
  +	   :inputs (list ast)
   	   :successors (list successor)))
   	((null value-context)
   	 (warn "variable compiled in a context with no values"))
   	(t
   	 (make-instance 'variable-assignment-instruction
   	   :outputs (list (car value-context))
  -	   :inputs (list (p1:location ast))
  +	   :inputs (list ast)
  +	   :successors (list (nil-fill (cdr value-context) successor))))))
  +
  +;;; This might be wrong.
  +(defmethod compile-ast
  +    ((ast sicl-env:global-location-info) value-context successor)
  +  (cond ((eq value-context t)
  +	 (make-instance 'put-values-instruction
  +	   :inputs (list ast)
  +	   :successors (list successor)))
  +	((null value-context)
  +	 (warn "variable compiled in a context with no values"))
  +	(t
  +	 (make-instance 'variable-assignment-instruction
  +	   :outputs (list (car value-context))
  +	   :inputs (list ast)
   	   :successors (list (nil-fill (cdr value-context) successor))))))
   
   (defun compile-toplevel (ast)
  
positive.code: 	  (gethash instruction *instruction-table*)
  	  (class-name (class-of instruction))))
  
  (defgeneric draw-location (location stream))
  
  (defmethod draw-location :around (location stream)
    (when (null (gethash location *instruction-table*))
      (setf (gethash location *instruction-table*) (gensym))
      (format stream "  ~a [shape = circle];~%"
  	    (gethash location *instruction-table*))
      (call-next-method)))
  
  (defmethod draw-location (location stream)
    (format stream "   ~a [label = \"?\"];~%"
  	  (gethash location *instruction-table*)))
  
  (defmethod draw-location ((location sicl-env:global-location) stream)
    (format stream "   ~a [label = \"?\", style = filled, fillcolor = green];~%"
  	  (gethash location *instruction-table*)))
  
  (defmethod draw-instruction :after (instruction stream)
    (loop for location in (inputs instruction)
  	do (draw-location location stream)
  	   (format stream "  ~a -> ~a [color = red, style = dashed];~%"
  		   (gethash location *instruction-table*)
  		   (gethash instruction *instruction-table*)))
    (loop for location in (outputs instruction)
  	do (draw-location location stream)
  	   (format stream "  ~a -> ~a [color = blue, style = dashed];~%"
  		   (gethash instruction *instruction-table*)
  		   (gethash location *instruction-table*))))
    
  (defmethod draw-instruction ((instruction close-instruction) stream)
    (format stream "   ~a [label = \"close\"];~%"
  	  (gethash instruction *instruction-table*))
  
negative.code:   (with-open-file (stream filename
  			  :direction :output
  			  :if-exists :supersede)
      (let ((*instruction-table* (make-hash-table :test #'eq))
  	  (p1::*table* (make-hash-table :test #'eq)))
  	(format stream "digraph G {~%")
  	(draw-instruction start stream)
  	(format stream "}~%"))))
  