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
Hi Vladimir,
Thanks for the report! I've committed the fix to trunk, which means it's up for inclusion in 1.1.0 which is due later this year.
Bye,
Erik.
On Mon, Aug 6, 2012 at 4:02 AM, Vladimir Sedach vsedach@gmail.com wrote:
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
armedbear-devel mailing list armedbear-devel@common-lisp.net http://lists.common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel
armedbear-devel@common-lisp.net