Hi,

Save the following in bug.lisp:

  (defclass data ()
    ((name :accessor name
           :initform nil
           :initarg :name)))

  (defmethod name :before ((data Data))
    (unless (slot-value data 'name)
      (setf (slot-value data 'name) "buggy")))

Type the following in the REPL of cmucl-2003-11-x86-linux:
  (compile-file "bug")
  (load "bug")

LOAD will generate a warning message:

  ; In: LAMBDA (#:G1345 #:G1346 #:G1347)

  ;   (FUNCALL (THE FUNCTION #'#)
  ;            (PCL::FAST-METHOD-CALL-PV-CELL #:G1346)
  ;            (PCL::FAST-METHOD-CALL-NEXT-METHOD-CALL #:G1346)
  ;            PCL::.ARG0.)
  ; ==>
  ;   (C::%FUNCALL FUNCTION #:FUNCALL-ARG-12 #:FUNCALL-ARG-13 #:FUNCALL-ARG-14)
  ; Warning: Function called with three arguments, but wants exactly four.

(NAME (MAKE-INSTANCE 'DATA)) will actually make cmucl-2003-11-x86-linux go 
belly up:

  Invalid number of arguments: 3
     [Condition of type KERNEL:SIMPLE-PROGRAM-ERROR]

  Restarts:
    0: [ABORT] Return to Top-Level.

  Debug  (type H for help)

  ("DEFUN MAKE-STD-WRITER-METHOD-FUNCTION" 3 (#(0) . #()) #<unavailable-arg>
   #<DATA {481402BD}> ...)[:EXTERNAL]
  0] back

  0: ("DEFUN MAKE-STD-WRITER-METHOD-FUNCTION" 3 (#(0) . #()) #<unavailable-arg>
      #<DATA {481402BD}> ...)[:EXTERNAL]
  1: (INTERACTIVE-EVAL (NAME (MAKE-INSTANCE 'DATA)))
  2: (LISP::%TOP-LEVEL)
  3: ((LABELS LISP::RESTART-LISP
        SAVE-LISP))

No such a problem in cmucl-18e-x86-linux.

Best,

-cph


Reply via email to