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