Ahoy,
I'm having another crack at backend refactoring. This time I'm going "by the book" and doing it incrementally on CVS HEAD.
The plan is to move to James's plan [1], roughly:
swank.lisp: shared, portable code swank-backend.lisp: defines the interface to non-portable code swank-{cmucl,...}.lisp: implements the interface from swank-backend.lisp
Ultimately each file will be a different package, but for now all files are in the SWANK package. The advantage is that nothing breaks by default - some things are now working via swank-backend.lisp, but the rest (not refactored yet) is just like before and still works.
The most significant refactoring so far is the compiler-note reportage: now each backend detects a compiler note in whatever non-portable way is appropriate, then resignals it as a `swank:compiler-condition' which is handled in swank.lisp. So all the notes-database business is shared now.
I also switched to using generic functions to define callbacks and methods to implement them. This seems like a neat fit compared with my ugly macro hacks from last time.
Still hacking, so things may be a little unstable. Currently
NB: I updated the FAIRLY-STABLE tag incase I'm breaking things. Currently HEAD should be okay on all platforms AFAIK.
NB2: SLIME's surprisingly nice for doing major surgery on itself, at least when not breaking the debugger and repl :-)
NB3: Thanks James, Dan, and Brian for helping me with OpenMCL access!
Cheers, Luke