Date: Thu, 13 Aug 2009 13:43:14 +0200 From: Pascal Costanza pc@p-cos.net To: Andrew Philpot philpot@ISI.EDU Subject: Re: CLOSER-MOP:SLOT-DEFINITION-ALLOCATION
On 12 Aug 2009, at 23:26, Andrew Philpot wrote:
[also redirected to cl-serializer-devel]
[I didn't see that in the headers, so I don't know how to respond to cl-serializer-devel.]
CL-SERIALIZER calls CLOSER-MOP:SLOT-DEFINITION-ALLOCATION on a class object that might be a STANDARD-CLASS and might not (e.g. a STRUCTURE-CLASS). In SBCL, both of these are defined, but in Allegro 8.1, the only method on this generic function is on STANDARD-CLASS. Does it make sense to (1) extend the GF for the Allegro case in CLOSER-MOP to return NIL or some other sensible value (2) embed an appropriate check in the CL-SERIALIZER client code or (3) do you have another suggestion?
Thanks a lot for asking.
The CLOS MOP specification specifies methods for these accessor functions only for the CLOS metaobject classes, but explicitly not for structure classes (or other entities). Since Common Lisp implementations are allowed to do whatever they want for structure classes, I cannot ensure that whatever I want to define for structure classes in Closer to MOP will actually be portable (now and in the future). So I prefer not to touch structure classes.
I think the best option for you is to provide your own layer on top of the CLOS MOP that abstracts away from these differences. So define something like:
(defgeneric cl-serializer:slot-definition-allocation (...) (:method (... closer-mop:standard-slot-definition ...) (closer-mop:slot-definition-allocation ...)) (:method (... structure-slot ...) ...))
I hope this helps, Pascal
- -- Pascal Costanza, mailto:pc@p-cos.net, http://p-cos.net Vrije Universiteit Brussel Software Languages Lab Pleinlaan 2, B-1050 Brussel, Belgium
cl-serializer-devel@common-lisp.net