Hi Rudi,
Unfortunately, this is still not enough. (Although AspectL now seems to work, but filtered-functions don't work yet.)
In ensure-generic-function, there are still a number of computations going on that are based on information that may still be modified later on in user-defined :around methods on initialize-instance or reinitialize-instance. My concrete stumbling block is currently the information about required arguments that is returned by gf-required-args, which does not reflect any changes made to a lambda list in such :around methods. I immediately see similar potential problems with optional arguments, argument precedence order, and documentation (not sure if that is all).
You may want to look into this.
However, filtered-functions is a library that does not work well in a number of other CL implementations either. Everything else seems to work with ABCL, so I would already consider ABCL very mature with regard to CLOS MOP support, and wouldn't hesitate releasing official Closer to MOP support with the next official version of ABCL, even if this problem is not fixed beforehand…
Pascal
On 5 Jan 2013, at 19:46, Rudolf Schlatte rudi@constantly.at wrote:
On Jan 1, 2013, at 21:36, Pascal Costanza pc@p-cos.net wrote:
OK, this looks pretty good. More and more of my tests succeed.
I am now running into an issue which is admittedly not a bug in the strict sense, but I would encourage you to consider changing the existing behavior anyway: In ensure-generic-function-using-class, abcl is making a few sanity checks and issuing errors, and it is correct to do so according to the HyperSpec. However, since they are done already at such an early stage, some useful MOP idioms are not easily expressible, or at least need to be expressed differently, and I think it would be better to perform the checks at a later stage, for example inside shared-initialize.
Hi Pascal, r14347 moves the check for lambda list congruence to reinitialize-instance :before. I chose this location instead of shared-initialize since only in this case can we have existing methods. Changing method-class is actually allowed according to the hyperspec so that test is gone. I only did light testing (basically, building abcl and running ansi-tests) but I trust you'll let me know when something's broken. :)
Rudi
-- Pascal Costanza