Plaster

common-lisp
(in-package :cl-user) (eval-when (:compile-toplevel :load-toplevel :execute) (unless (find-package :my-package) (make-package :my-package :use '(:cl)))) (in-package :my-package) (defun foo () t) (export '(foo) :my-package) #| Works: $ sbcl --eval '(compile-file "test.lisp")' --quit $ sbcl --load test.fasl --quit Doesn't work: $ sbcl --eval '(compile-file "test.lisp")' --eval '(compile-file "test.lisp")' --quit $ sbcl --load test.fasl --quit I get the following error: debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR in thread #<THREAD "main thread" RUNNING {1004638073}>: These symbols are not accessible in the MY-PACKAGE package:(MY-PACKAGE::FOO) Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. Loading twice like this *does* work, however: $ sbcl --eval '(ignore-errors (load "test.fasl"))' --load test.fasl --quit Backtrace for when it doesn't work: Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1001068003}> 0: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN EXPORT)) 1: ((FLET "WITHOUT-INTERRUPTS-BODY-11" :IN SB-THREAD::CALL-WITH-RECURSIVE-LOCK)) 2: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK #<FUNCTION (FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK :IN EXPORT) {7FAD8475F5EB}> #<SB-THREAD:MUTEX "Package Graph Lock" taken owner=main thread> T NIL) 3: (EXPORT (MY-PACKAGE::FOO) :MY-PACKAGE) 4: ((SB-C::TOP-LEVEL-FORM (SETQ *PACKAGE* (SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE "CL-USER")))) [toplevel] 5: (SB-FASL::LOAD-FASL-GROUP #S(SB-FASL::FASL-INPUT :STREAM #<SB-SYS:FD-STREAM for "file /home/peter/test.fasl" {1001080213}> :TABLE #(64 #1="/home/peter/test.lisp" #<PACKAGE "MY-PACKAGE"> MY-PACKAGE::FOO #<PACKAGE "SB-INT"> SB-INT:SFUNCTION MEMBER #2=(MEMBER T) (SB-INT:SFUNCTION NIL #2#) #() #(71 44 66 20) :STANDARD ...) :STACK #(0 #<FUNCTION (SB-C::TOP-LEVEL-FORM (SETQ *PACKAGE* (SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE #3="CL-USER"))) {10010881CB}> NIL NIL (SB-INT:SFUNCTION NIL NULL) #<SB-KERNEL:FDEFN SB-INT:FIND-UNDELETED-PACKAGE-OR-LOSE> #<SB-KERNEL:FDEFN SB-IMPL::CACHED-FIND-PACKAGE> #<SB-KERNEL:FDEFN MAKE-PACKAGE> #<SB-KERNEL:FDEFN SB-IMPL::%DEFUN> #<SB-KERNEL:FDEFN EXPORT> #3# *PACKAGE* ...) :NAME-BUFFER #("^@" "CLEPACKAGEGEPACKAGEAGE-OR-LOSE^@") :PRINT NIL :PARTIAL-SOURCE-INFO #S(SB-C::DEBUG-SOURCE :NAMESTRING #1# :CREATED 3892455404 :START-POSITIONS NIL :PLIST NIL))) 6: ((LAMBDA NIL :IN SB-FASL::LOAD-AS-FASL)) 7: (SB-IMPL::CALL-WITH-LOADER-PACKAGE-NAMES #<FUNCTION (LAMBDA NIL :IN SB-FASL::LOAD-AS-FASL) {1001082F4B}>) 8: (SB-FASL::LOAD-AS-FASL #<SB-SYS:FD-STREAM for "file /home/peter/test.fasl" {1001080213}> NIL NIL) 9: ((LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) #<SB-SYS:FD-STREAM for "file /home/peter/test.fasl" {1001080213}> T) 10: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<FUNCTION (LABELS SB-FASL::LOAD-STREAM-1 :IN LOAD) {7FAD8475F97B}> #<SB-SYS:FD-STREAM for "file /home/peter/test.fasl" {1001080213}> T #<SB-SYS:FD-STREAM for "file /home/peter/test.fasl" {1001080213}>) 11: (LOAD #P"test" :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST :ERROR :EXTERNAL-FORMAT :DEFAULT) 12: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:LOAD . "test") (:QUIT))) 13: (SB-IMPL::TOPLEVEL-INIT) 14: ((FLET SB-UNIX::BODY :IN SB-IMPL::START-LISP)) 15: ((FLET "WITHOUT-INTERRUPTS-BODY-3" :IN SB-IMPL::START-LISP)) 16: (SB-IMPL::%START-LISP) |#