Craig Lanning <[EMAIL PROTECTED]> writes:

> Thanks for the patch, but it doesn't compile.
> 
> Craig
> 
> > (I think it would be necessary to recompile at least some of the
> > sources to see if it has an effect.)
> > 
> > (in-package :pcl)
> > 
> > (defmacro simple-lexical-method-functions
> >     ((lambda-list method-args next-methods &rest lmf-options) 
> >      &body body)
> >   `(let ((,method-args ,method-args)
> >      (,next-methods ,next-methods))
>              ^^^^^^^^^^^^^^
> The variable list for the let looks suspicious to me.

It looks odd, but I think it expands correctly.  The two macro
arguments in the LET are names of lambda variables, .METHOD-ARGS. and
.NEXT-METHODS. to be precise, so this expands to something like
  
  (let ((.next-methods. .next-methods.)
        (.method-args. .method-args.))
    (declare (ignorable .next-methods. .method-args.))
    ...)

I'm afraid the only way that I can currently cover that path through
the code is with something like

  (defclass foo () ())

  (defmethod initialize-instance :after ((x foo) &rest args)
    (declare (ignore args))
    (print "after"))

  (defun make-one ()
    (make-instance 'foo))

where the optimized MAKE-INSTANCE in MAKE-ONE constructs a method
lambda for the INITIALIZE-INSTANCE method using the above macro.  That
compiles and works without a hitch here, with the patch compiled in.

Could you please tell me more about errors you are seeing?

Reply via email to