| I was hoping someone could confirm this problem with d-m-c on PCL - I
| took the liberty of attaching a file that contains the problem:
[snip]
Sorry the mailer ate my ascii file. I'm appending it here - Thanks.
Regards
Madhu
;;; -*- Mode: LISP; Package: :cl-user; BASE: 10; Syntax: ANSI-Common-Lisp; ;-*-
(in-package "CL-USER")
(define-method-combination standard-foo () ; cloned from hyperspec's standard
((around (:around))
(before (:before))
(primary () :required t)
(after (:after)))
(flet ((call-methods (methods)
(mapcar #'(lambda (method)
`(call-method ,method))
methods)))
(let ((form (if (or before after (rest primary))
`(multiple-value-prog1
(progn ,@(call-methods before)
(call-method ,(first primary)
,(rest primary)))
,@(call-methods (reverse after)))
`(call-method ,(first primary)))))
(if around
`(call-method ,(first around)
(,@(rest around)
(make-method ,form)))
form))))
(defclass experiment-mixin () ())
(defclass experiment (experiment-mixin) ())
(defgeneric update-experiment (experiment-mixin)
(:method-combination standard-foo))
;;;
(defmethod run-experiment :before ((experiment experiment-mixin))
(warn "run experiment-mixin(before)"))
(defmethod run-experiment ((experiment experiment-mixin))
(warn "run experiment-mixin(primary)"))
(defmethod run-experiment :after ((experiment experiment-mixin))
(warn "run experiment-mixin(after)"))
;;;
(defmethod run-experiment :before ((experiment experiment))
(warn "run experiment(before)"))
(defmethod run-experiment ((experiment experiment))
(warn "run experiment(primary)"))
(defmethod run-experiment :after ((experiment experiment))
(warn "run experiment(after)"))
;;;
(setq foo (make-instance 'experiment))
(run-experiment foo)