Hi,
Currently, ABCL doesn't qualify the package of FIND-PACKAGE when it
serializes a package in a compiled file. This causes a bug when
loading a compiled file that has code (for example, the EOS:TEST macro
from the EOS unit-testing library) that serializes a package, and
occurs after an IN-PACKAGE into a package that either shadows or does
not import FIND-PACKAGE from COMMON-LISP.
I didn't work out a minimum test case, but the problem can be observed
when trying to load the Parenscript test suite:
(ql:quickload :parenscript.test)
Here's the fix:
Index: src/org/armedbear/lisp/compiler-pass2.lisp
===================================================================
--- src/org/armedbear/lisp/compiler-pass2.lisp (revision 14055)
+++ src/org/armedbear/lisp/compiler-pass2.lisp (working copy)
@@ -1191,7 +1191,7 @@
(defun serialize-package (pkg)
"Generate code to restore a serialized package."
- (emit 'ldc (pool-string (concatenate 'string "#.(FIND-PACKAGE \""
+ (emit 'ldc (pool-string (concatenate 'string "#.(CL:FIND-PACKAGE \""
(package-name pkg) "\")")))
(emit-invokestatic +lisp+ "readObjectFromString"
(list +java-string+) +lisp-object+))
Index: src/org/armedbear/lisp/Package.java
===================================================================
--- src/org/armedbear/lisp/Package.java (revision 14055)
+++ src/org/armedbear/lisp/Package.java (working copy)
@@ -865,7 +865,7 @@
public String printObject()
{
if (_PRINT_FASL_.symbolValue() != NIL && name != null) {
- StringBuilder sb = new StringBuilder("#.(FIND-PACKAGE \"");
+ StringBuilder sb = new StringBuilder("#.(CL:FIND-PACKAGE \"");
sb.append(name);
sb.append("\")");
return sb.toString();
Happy hacking,
Vladimir