anchor.diff:       (map-program-buffer-groups (lambda (buffers) ,@body) ,program)
        ,result))
   
  -(defun allocator (program)
  +(defun allocator-and-deallocator (program)
     (let* (;; A list of lists of buffers.  Each list of buffers contains at
            ;; most one root buffer, which is then the first buffer of that
            ;; list.
  
positive.code: 
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;
  ;;; Allocation
  
  (defun map-program-buffer-groups (function program)
    (let ((buffers '()))
  
negative.code:                    (funcall process-results backend storage-vector ,@results)
                     (funcall process-arguments backend storage-vector ,@arguments)
                     (funcall allocate backend storage-vector)
                     (unwind-protect (funcall run backend storage-vector)
                       (funcall deallocate backend storage-vector))))
                 (lambda (,@results ,@arguments)
                   (let ((storage-vector (make-array number-of-buffers :initial-element nil)))
                     (funcall process-results backend storage-vector ,@results)
                     (funcall process-arguments backend storage-vector ,@arguments)
                     (funcall allocate backend storage-vector)
                     (unwind-protect (funcall run backend storage-vector)
                       (funcall deallocate backend storage-vector)))))))))))
  
  (defun generate-variable (prefix integer)
    (intern
  