| 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)



Reply via email to