[armedbear-devel] CLOS / D-M-C tests failure DMC-TEST-MC.1 help requested

Erik Huelsmann ehuels at gmail.com
Mon Aug 13 05:54:10 UTC 2012


And the attachment...

On Tue, Aug 7, 2012 at 9:09 PM, Erik Huelsmann <ehuels at gmail.com> wrote:

>
> > What happens is that the second form expands into:
>
>> >
>> > (PROG1 (SYSTEM:%DEFGENERIC 'DMC-TEST-ARGS-WITH-OPTIONAL.4A
>> >                            :LAMBDA-LIST
>> >                            '(X &OPTIONAL B)
>> >                            :METHOD-COMBINATION
>> >                            '(DMC-TEST-ARGS-WITH-OPTIONAL.4))
>> >        (PUSH (DEFMETHOD DMC-TEST-ARGS-WITH-OPTIONAL.4A
>> >                         (X &OPTIONAL B)
>> >                         (PROGN X B))
>> >              (SYSTEM:GENERIC-FUNCTION-INITIAL-METHODS (FDEFINITION
>> 'DMC-TEST-ARGS-WITH-OPTIONAL.4A))))
>> >
>> > Because the macro expander continues to expand the forms before
>> compiling them, it'll expand the DEFMETHOD above. When the DEFMETHOD gets
>> expanded however, it's expansion is dependent on the existence of the
>> generic function. However, since the form as a whole hasn't been
>> interpreted yet, there *is* no generic function: after all, that's being
>> created in the first form of the PROG1.
>> >
>> > Something similar probably happens during compilation.
>> >
>> >
>> > I'm now wondering what the next step should be to resolve this
>> situation...
>> >
>> >
>> > Ah. Going back 10 months and looking at the DEFMETHOD macro there, I
>> see now what the difference is between then and now: back then we didn't
>> depend on the GF existing during the macro expansion. Now we do. Can we
>> generate a different macroexpansion which defers the GF-being-defined
>> requirement to evaluation time?
>>
>> Cute.  I think we can beef up %defgeneric to accept a list of method
>> descriptions and the macro environment (for make-method-lambda) and call
>> ensure-method inside %defgeneric, after creating the generic function.  I
>> can have a look at that.
>>
>
> I can see how doing that would work at run-time, ie where %defgeneric
> would be called without the image having been exited (simply grab the
> environment and tuck it in a closure, or even simply stick it in the
> expansion). However, how do you expect to do the same at file-compilation
> time where the %defgeneric gets called after the image (possibly) has been
> closed and cleanly started up?
>
>
> Bye,
>
>
> Erik.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20120813/9c98df3a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clos.lisp.patch
Type: application/octet-stream
Size: 2564 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20120813/9c98df3a/attachment.obj>


More information about the armedbear-devel mailing list