Helmut Eller wrote:
- Mark Evenson [2007-09-03 11:21+0200] writes:
o allows the use of slime-compile-and-load-file (C-c C-k) by patching the definition of COMPILER-CONDITION with explicit NILs, and does a load time creation of a COMPILER-CONDITION to get the MOP discriminating functions initialized correctly
I didn't see any difference for C-c C-k with and without the patch. Can you explain what it is?
On any version subsequent to (and inclusive of) ABCL-0.0.10 that I have compiled without this patch to SLIME, slime-compile-and-load-file doesn't work, producing a backtrace akin to something like [1]. I received exactly one (1) report of another user for whom this patch solved a similar problem, so I had some confidence that it would help some of the users of SLIME/ABCL. But I suspect that the the SLIME + ABCL community is fairly small, and it may be that for some unknown reason the bug only manifests itself for some versions of the JavaVM that hosts ABCL.
The patch was derived from a trial and error approach from the SLIME side of things, as opposed to ABCL internals (which I am only starting to understand). Essentially, without this patch the first time SLIME tries to create a SWANK-BACKEND::COMPILER-CONDITION with sufficiently complicated arguments (/me waves hands), I would get the backtrace. But if I:
1) gave the definition of COMPILER-CONDITION explicit nil :INITFORMs
2) created an empty COMPILER-CONDITION at load-time that calls each of the readers
then the bug doesn't occur.
Out of curiosity, which version of ABCL on which JVM on which OS where you testing on?
I'd like to keep the definition of COMPILER-CONDITION as it is. Would it be enough to supply explicit nils in the load time form? Like so:
(let ((c (make-condition 'compiler-condition :original-condition nil :severity ':note :message "" :location nil)) (slots `(severity message short-message references location))) (dolist (slot slots) (funcall slot c)))
Using this supplied form in 'swank-abcl.lisp' doesn't help. It seems that one needs the explicit :INITFORM nil for all the COMPILER-CONDITION slots.
Thanks for looking at the patch. Even if you decide not to accept it, at least this thread can give future SLIME/ABCL hackers (including me when I have the time) a place to start looking at this issue.
[1]: http://article.gmane.org/gmane.editors.j.devel/1397