On Tue, Dec 29, 2009 at 12:29 AM, Erik Huelsmann ehuels@gmail.com wrote:
While the fix below does seem to fix slime - on my system, it doesn't fix all cases of what we're seeing: infinite recursion in clos.lisp, related to initial-discriminating-function.
My own application suffers from the same issue, even after this fix.
(just to let you know what our progress is)
Erik, to update you on my own progress: I found out that the infinite recursion is caused by initial-discriminating-function being called before the class standard-generic-function has been installed - (find-class 'standard-generic-function) returns NIL. This means that the branch that calls std-compute-discr.-function (the base case) never gets to run, causing an infinite loop.
Now the very strange thing is that the std-gf class is installed by a static block in StandardClass.java, and that - to my understanding - should be executed in our case, since with autoload-verbose I see the line ; Autoloading org.armedbear.lisp.StandardObjectFunctions ... early on during the loading of Slime. StandardObjectFunctions refers to StandardClass, thus it should initialize it.
What's worse, I have discovered that CLOS is entirely broken: (find-class 'standard-object) -> stack overflow (defclass c () ()) -> The value NIL is not of type STANDARD-CLASS.
I believe it's a bootstrap problem; something gets called too early, or too late, or doesn't get called at all.
Bye, Alessio