anchor.diff:  ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   
  -;; $Id: virtual-slots.lisp,v 1.4 2006-09-05 13:16:18 espen Exp $
  +;; $Id: virtual-slots.lisp,v 1.5 2006-09-13 10:52:16 espen Exp $
   
   (in-package "GFFI")
   
  
positive.code:     (call-next-method)))
  
  (defmethod compute-slot-writer-function ((slotd effective-virtual-slot-definition))
    (slot-value slotd 'setter))
  
  (define-condition slot-can-not-be-unbound (cell-error)
    ((instance :reader slot-can-not-be-unbound-instance :initarg :instance))
  
negative.code:    ((not (slot-writable-p slotd))
      #'(lambda (object)
  	(error 'unwritable-slot :name (slot-definition-name slotd) :instance object)))
     ((slot-boundp slotd 'makunbound)
      (let ((makunbound (slot-value slotd 'makunbound)))
        #-sbcl makunbound
        #+sbcl
        (etypecase makunbound
  	(symbol #'(lambda (object) (funcall makunbound object)))
  	(function makunbound))))
     ((slot-boundp slotd 'unbound)
      #'(lambda (object)
  	(funcall (slot-value slotd 'writer-function) (slot-value slotd 'unbound) object)))
  