From: Peter Seibel
Subject: Question about EQL specializers
Date: 
Message-ID: <m3pt8pmbop.fsf@javamonkey.com>
In the DEFMETHOD dictionary entry it says:

  The parameter specializer name (eql eql-specializer-form) indicates
  that the corresponding argument must be eql to the object that is
  the value of eql-specializer-form for the method to be applicable.
  The eql-specializer-form is evaluated at the time that the expansion
  of the defmethod macro is evaluated.

Does "the time that the expansion of the defmethod macro is evaluated"
mean the time that the macro expander is run or the time that the
resulting expanded code is evaluated? (In other words does "the
expansion" mean "the result of the expansion" or "the act of
expanding". Or in yet other words, suppose I have a method like:

  (defmethod foo ((object (eql *value*))) ...)

If that code is in a file that gets compiled with COMPILE-FILE and
then LOAD'ed, is *value* evaluated at compile time or at LOAD time?
I'm hoping load time as I'm not sure what it would even mean for it
to be evaluated at compile time.

-Peter

-- 
Peter Seibel                                      ·····@javamonkey.com

         Lisp is the red pill. -- John Fraser, comp.lang.lisp
From: Steven M. Haflich
Subject: Re: Question about EQL specializers
Date: 
Message-ID: <40B6CE44.3040502@alum.mit.edu>
Peter Seibel wrote:

> Does "the time that the expansion of the defmethod macro is evaluated"
> mean the time that the macro expander is run or the time that the
> resulting expanded code is evaluated? (In other words does "the
> expansion" mean "the result of the expansion" or "the act of
> expanding".

What you expect is correct.

The macro is "expanded" at file compile time.  The expansion is
"evaluated" (a sloppy word for "executed") at load time.