[Openmcl-devel] funcallable instances

Gary Byers gb at clozure.com
Sun Aug 29 23:12:14 UTC 2004



On Sun, 29 Aug 2004, Timothy Moore wrote:

> Hi,
> Here's a patch to support funcallable instances, as specified in AMOP.
> The changes are pretty minor:

> Change defclass to not supply default direct superclasses;

OK,

> Change the shared-initialize :after method for slots-class to supply a
> default superclass of funcallable-standard-object for classes with
> metaclass funcallable-standard-class;

OK.

> A trampoline for funcallable instances;
> A couple of functions that seem to need implementations for funcallable
> instances.

This basically implements section 5.5.4 of the spec, which is probably.
good.

>
> I haven't tested this extensively, but it seems to work.

We can certainly implement SET-FUNCALLABLE-INSTANCE-FUNCTION as
a generic function.  Since section 5.5.5 of the spec isn't implemented
(or close to it: there are significant differences in how method functions
receive their args and other issues), I'd be tempted to want to split this
up:

(defmethod set-funcallable-instance-function ((funcallable-instance
                                               funcallable-standard-object)
                                              function)
  ;; Your implementation here.
)

(defmethod set-funcallable-instance-function ((funcallable-instance
                                               generic-function)
                                              function)
  (error "Section 5.5.5 of the AMOP isn't implemented in this lisp.
         ~s was called with args ~s and ~s. "
        'set-funcallable-instance-function funcallable-instance function))


Maybe that's overly paranoid, but someone who wants to use
SET-FUNCALLABLE-INSTANCE-FUNCTION to set the discriminating code in
a GF should probably be dissuaded from doing so.  (Maybe letting them
do it once is a good way of dissuading them: how else will they learn ?)

>
> Tim
>

Thanks.



More information about the Openmcl-devel mailing list