From: Pascal B. <pj...@in...> - 2003-05-11 18:19:17
|
My .sbclrc loads a .common.lisp which loads a package from the file: /home/pascal/src/common/lisp/common-lisp/package.lisp Here is the beginning of this file: ;;;----------------------------------------------------------------------= -- (DEFPACKAGE "COM.INFORMATIMAGO.COMMON-LISP.PACKAGE" (:NICKNAMES "PACKAGE") (:DOCUMENTATION "This package exports a macro used to declare a package.") (:USE "COMMON-LISP") (:EXPORT "PACKAGE-EXPORTS" ;; missing from CL or not? "DECLARE-PACKAGE" "*PACKAGES*" "ADD-TRANSLATIONS" "ADD-NICKNAME") ) (IN-PACKAGE "COM.INFORMATIMAGO.COMMON-LISP.PACKAGE") (DEFMACRO WHILE (CONDITION &BODY BODY) `(DO () ((NOT ,CONDITION)) ,@BOD= Y)) (DEFMACRO UNTIL (CONDITION &BODY BODY) `(DO () (,CONDITION) ,@BOD= Y)) (DEFUN PACKAGE-EXPORTS (PACKAGE) " RETURN: A new list of exported symbols from PACKAGE. " (LET ((RESULT NIL)) (DO-EXTERNAL-SYMBOLS (SYM PACKAGE RESULT) (PUSH SYM RESULT))) ) ;;PACKAGE-EXPORTS ;;; ... ;;;----------------------------------------------------------------------= -- When launching sbcl, it work correctly: [pascal@thalassa pascal]$ sbcl --noinform ; in: LAMBDA NIL ; (AREF PACKAGE COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::FROM-SRC) ; --> LET* SB-KERNEL:HAIRY-DATA-VECTOR-REF MULTIPLE-VALUE-BIND=20 ; --> MULTIPLE-VALUE-CALL=20 ; =3D=3D> ; (SB-KERNEL:%DATA-VECTOR-AND-INDEX ARRAY SB-INT:INDEX) ;=20 ; note: unable to ; optimize ; due to type uncertainty: ; The first argument is a BASE-STRING, not a SIMPLE-ARRAY. ; compilation unit finished ; printed 2 notes * (quit) =20 ------------------------------------------------------------------------ But when I try to compile it, there's this problem: [pascal@thalassa pascal]$ cd src/common/lisp/common-lisp=20 [pascal@thalassa common-lisp]$ sbcl --noinform --disable-debugger --eval = '(SETQ *EFFICIENCY-NOTE-COST-THRESHOLD* 3)' --eval '(SETQ *EFFICIENCY-NOT= E-LIMIT* 3)' --eval '(DECLAIM (OPTIMIZE (SAFETY 3)))' --eval '(DECLAIM (O= PTIMIZE (SB-EXT::INHIBIT-WARNINGS 3)))' --eval '(COMPILE-FILE "'"package= .lisp"'")' --eval '(QUIT)' 2>&1=20 ; in: LAMBDA NIL ; (AREF PACKAGE COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::FROM-SRC) ; --> LET* SB-KERNEL:HAIRY-DATA-VECTOR-REF MULTIPLE-VALUE-BIND=20 ; --> MULTIPLE-VALUE-CALL=20 ; =3D=3D> ; (SB-KERNEL:%DATA-VECTOR-AND-INDEX ARRAY SB-INT:INDEX) ;=20 ; note: unable to ; optimize ; due to type uncertainty: ; The first argument is a BASE-STRING, not a SIMPLE-ARRAY. ; compilation unit finished ; printed 2 notes ; compiling file "/local/users/pascal/src/common/lisp/common-lisp/package= .lisp" (written 11 MAY 2003 08:09:02 PM): ;=20 ; caught WARNING: ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE used to use the following packa= ges: ; (#<PACKAGE "COMMON-LISP">) ; compiling top level form:=20 ; compiling top level form:=20 ; compiling top level form:=20 ; compiling top level form:=20 ; file: /local/users/pascal/src/common/lisp/common-lisp/package.lisp ; in: DEFUN PACKAGE-EXPORTS ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::RESULT ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NIL)) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; compiling top level form:=20 ; file: /local/users/pascal/src/common/lisp/common-lisp/package.lisp ; in: DEFUN PACKAGE-PATHNAME ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::STRINGP ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::LET ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH #)) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::REPLACE ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH ; "PACKAGE:" ; :START1 ; 0 ; :END1 ; 8 ; :START2 ..))) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::SYMBOLP ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE-PATHNAME ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::STRING ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE))) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGEP ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE-PATHNAME ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE-NAME ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE))) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; compiling top level form:=20 ; compiling top level form:=20 ; compiling top level form:=20 ; compiling top level form:=20 ; file: /local/users/pascal/src/common/lisp/common-lisp/package.lisp ; in: DEFUN CLOSE-PATH ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE-PATHNAME ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE) ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NEXT) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NEXT ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::TRANSLATE-LOGICAL-PATHNAME ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::TRANSLATE-LOGICAL-PATHNAME ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH)) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::COUNT 0 ; (COM.INFORMATIMAGO.COM= MON-LISP.PACKAGE::1+ ; COM.INFORMATIMAGO.COM= MON-LISP.PACKAGE::COUNT))) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::STRING=3D ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NAMESTRING ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NAMESTRING ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NEXT)) ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::NAMESTRING ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH)) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; compiling top level form:=20 ; file: /local/users/pascal/src/common/lisp/common-lisp/package.lisp ; in: DEFUN REGISTER ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::CLOSE-PATH ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE))) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; compiling top level form:=20 ; file: /local/users/pascal/src/common/lisp/common-lisp/package.lisp ; in: DEFUN IS-REGISTERED ; ((COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PATH ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::CLOSE-PATH ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::PACKAGE))) ;=20 ; caught COMMON-LISP:ERROR: ; illegal function call ; compiling top level form:=20 ; compilation unit aborted ; caught 1 fatal ERROR condition ; caught 8 ERROR conditions ; caught 1 WARNING condition compilation aborted because of input error: COMMON-LISP:READ failure in COMMON-LISP:COMPILE-FILE: READER-ERROR at 6131 on #<COMMON-LISP:FILE-STREAM for "file \"/local/users/pascal/src/common/= lisp/common-lisp/package.lisp\"" {95678C9}>: The symbol "LOAD" is not external in the COMMON-LISP-USER package. ; /local/users/pascal/src/common/lisp/common-lisp/package.fasl written ; compilation finished in 0:00:01 ------------------------------------------------------------------------ There's no manipulation of the package COM.INFORMATIMAGO.COMMON-LISP.PACK= AGE elsewhere in my .sbclrc or .common.lisp, so why does it says that: ; caught WARNING: ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE used to use the following packa= ges: ; (#<PACKAGE "COMMON-LISP">) and seem to have forgotten that COM.INFORMATIMAGO.COMMON-LISP.PACKAGE :USEs "COMMON-LISP"? It's quite strange because it worked a few days ago... --=20 __Pascal_Bourguignon__ http://www.informatimago.com/ ---------------------------------------------------------------------- Do not adjust your mind, there is a fault in reality. |
From: William H. N. <wil...@ai...> - 2003-05-11 20:37:30
|
On Sun, May 11, 2003 at 08:17:32PM +0200, Pascal Bourguignon wrote: > My .sbclrc loads a .common.lisp which loads a package from the file: > /home/pascal/src/common/lisp/common-lisp/package.lisp > Here is the beginning of this file: [...] I couldn't guess what the cause of your problem is, and I experimented a little with running your code on my system without finding similar problems. So I don't have an answer, but I have a few questions. What version of SBCL are you using? (And: you mentioned that it used to work a few days ago, so what version were you using then?) Is it possible to construct a standalone test case demonstrating the problem, which doesn't involve your .common.lisp and other .sbclrc-related files? E.g. something along the lines of $ cat <<EOF > package-bug.lisp (defpackage "BADPACKAGE" (:NICKNAMES "PACKAGE") (:USE "CL")) EOF $ sbcl --userinit /dev/null --sysinit /dev/null << EOF (load "package-bug.lisp") (compile-file "package-bug.lisp") (load *) ; causes WARNING or whatever EOF Or if the problem only happens with your .sbclrc and other files (.common.lisp, etc.) could you send copies of them so that we can experiment with the problem? -- William Harold Newman <wil...@ai...> I'm not claiming I write great software, but I know that when it comes to code I behave in a way that would make me eligible for prescription drugs if I approached everyday life the same way. -- <http://www.paulgraham.com/hp.html> PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C |
From: Pascal B. <pj...@in...> - 2003-05-13 07:32:22
Attachments:
sbcl-test.tar.gz
|
William Harold Newman writes: > On Sun, May 11, 2003 at 08:17:32PM +0200, Pascal Bourguignon wrote: > > My .sbclrc loads a .common.lisp which loads a package from the file: > > /home/pascal/src/common/lisp/common-lisp/package.lisp > > Here is the beginning of this file: > [...] >=20 > I couldn't guess what the cause of your problem is, and I experimented > a little with running your code on my system without finding similar > problems. So I don't have an answer, but I have a few questions. >=20 > What version of SBCL are you using? (And: you mentioned that it used > to work a few days ago, so what version were you using then?) Got from CVS: This is SBCL 0.pre8.104, an implementation of ANSI Common L= isp. > Is it possible to construct a standalone test case demonstrating the > problem, which doesn't involve your .common.lisp and other > .sbclrc-related files? E.g. something along the lines of > $ cat <<EOF > package-bug.lisp > (defpackage "BADPACKAGE" (:NICKNAMES "PACKAGE") (:USE "CL")) > EOF > $ sbcl --userinit /dev/null --sysinit /dev/null << EOF > (load "package-bug.lisp") > (compile-file "package-bug.lisp") > (load *) ; causes WARNING or whatever > EOF I could not built a reduced test case, so I'm sending the whole files used to compile that package.lisp plus a list.lisp "test case" for package.lisp. > Or if the problem only happens with your .sbclrc and other files > (.common.lisp, etc.) could you send copies of them so that we can > experiment with the problem? Ok. Attached a tar.gz containing: .common.lisp .clisprc.lisp .sbclrc .cmucl-init.lisp src/common/lisp/Makefile src/common/lisp/Makefile.rules src/common/lisp/common-lisp/Makefile src/common/lisp/common-lisp/package.lisp src/common/lisp/common-lisp/list.lisp All these files should be placed in a sand-box HOME directory. .clisprc.lisp, .cmucl-init.lisp and .sbclrc all load .common.lisp .common.lisp loads package.lisp. Please edit the DEFCONSTANT +PJB-LISP+ in there to point to your sand-box HOME directory. src/common/lisp/common-lisp/Makefile includes ../Makefile.rules to get common rules to compile lisp files. You may edit the all:: target in src/common/lisp/common-lisp/Makefile to select one or more compilers to use: clisp, cmucl or sbcl. In particular, if you put: all:: clisp cmucl=20 instead of: all:: clisp sbcl it compiles correctly. cd src/common/lisp/common-lisp ; make clean all .clisprc.lisp and .cmucl-init.lisp are provided if you want to test the package with clisp or cmucl. Once succesfullY compiled, it would allow to do: [pascal@thalassa pascal]$ clisp ;; Loading file /home/pascal/.clisprc.lisp ... ;; Loaded file /home/pascal/.clisprc.lisp [1]> (LOAD (PACKAGE::PACKAGE-PATHNAME 'COM.INFORMATIMAGO.COMMON-LISP.LIST= )) T [2]> (SETQ *PRINT-CIRCLE* T) T [3]> (COM.INFORMATIMAGO.COMMON-LISP.LIST:LIST-TO-DOUBLE-LINKED-LIST '(A B= C D)) #1=3D(A NIL . #2=3D(B #1# . #3=3D(C #2# D #3#))) [4]> (QUIT) While composing this message, I found a smaller test case: just load again package.lisp. [pascal@thalassa pascal]$ sbcl This is SBCL 0.pre8.104, an implementation of ANSI Common Lisp. [...] More information about SBCL is available at <http://sbcl.sourceforge.net/= >. ; in: LAMBDA NIL ; (AREF PACKAGE COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::FROM-SRC) ; --> LET* SB-KERNEL:HAIRY-DATA-VECTOR-REF MULTIPLE-VALUE-BIND=20 ; --> MULTIPLE-VALUE-CALL=20 ; =3D=3D> ; (SB-KERNEL:%DATA-VECTOR-AND-INDEX ARRAY SB-INT:INDEX) ;=20 ; note: unable to ; optimize ; due to type uncertainty: ; The first argument is a BASE-STRING, not a SIMPLE-ARRAY. ; compilation unit finished ; printed 2 notes * (load "package:com;informatimago;common-lisp;package.lisp") WARNING: COM.INFORMATIMAGO.COMMON-LISP.PACKAGE used to use the following packag= es: (#<PACKAGE "COMMON-LISP">) ; in: DEFMACRO WHILE ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::CONDITION ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::&BODY ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::BODY) ;=20 ; caught COMMON-LISP:STYLE-WARNING: ; undefined variable: &BODY ;=20 ; caught COMMON-LISP:STYLE-WARNING: ; undefined variable: BODY --=20 __Pascal_Bourguignon__ http://www.informatimago.com/ ---------------------------------------------------------------------- Do not adjust your mind, there is a fault in reality. |
From: Christophe R. <cs...@ca...> - 2003-05-13 08:26:48
|
Pascal Bourguignon <pj...@in...> writes: > [pascal@thalassa pascal]$ sbcl > This is SBCL 0.pre8.104, an implementation of ANSI Common Lisp. > [...] > More information about SBCL is available at <http://sbcl.sourceforge.net/>. > ; in: LAMBDA NIL > ; (AREF PACKAGE COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::FROM-SRC) > ; --> LET* SB-KERNEL:HAIRY-DATA-VECTOR-REF MULTIPLE-VALUE-BIND > ; --> MULTIPLE-VALUE-CALL > ; ==> > ; (SB-KERNEL:%DATA-VECTOR-AND-INDEX ARRAY SB-INT:INDEX) > ; > ; note: unable to > ; optimize > ; due to type uncertainty: > ; The first argument is a BASE-STRING, not a SIMPLE-ARRAY. > ; compilation unit finished > ; printed 2 notes > * (load "package:com;informatimago;common-lisp;package.lisp") > WARNING: > COM.INFORMATIMAGO.COMMON-LISP.PACKAGE used to use the following packages: > (#<PACKAGE "COMMON-LISP">) > ; in: DEFMACRO WHILE > ; (COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::CONDITION > ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::&BODY > ; COM.INFORMATIMAGO.COMMON-LISP.PACKAGE::BODY) > ; > ; caught COMMON-LISP:STYLE-WARNING: > ; undefined variable: &BODY > ; > ; caught COMMON-LISP:STYLE-WARNING: > ; undefined variable: BODY (DEFVAR *BUILT-IN-PACKAGES* (MAPCAN (LAMBDA (PACK) (CONS (PACKAGE-NAME PACK) (PACKAGE-NICKNAMES PACK))) (LIST-ALL-PACKAGES))) You are destructively changing the package-nicknames list of PACK. Don't do that. Changing this to (defvar *built-in-packages* (mapcan (lambda (pack) (cons (package-name pack) (copy-list (package-nicknames pack)))) (list-all-packages))) makes the problem go away. Cheers, Christophe -- http://www-jcsu.jesus.cam.ac.uk/~csr21/ +44 1223 510 299/+44 7729 383 757 (set-pprint-dispatch 'number (lambda (s o) (declare (special b)) (format s b))) (defvar b "~&Just another Lisp hacker~%") (pprint #36rJesusCollegeCambridge) |
From: Pascal B. <pj...@in...> - 2003-05-13 09:03:20
|
Christophe Rhodes writes: > Pascal Bourguignon <pj...@in...> writes: >=20 > (DEFVAR *BUILT-IN-PACKAGES* > (MAPCAN (LAMBDA (PACK) > (CONS (PACKAGE-NAME PACK) (PACKAGE-NICKNAMES PACK))) > (LIST-ALL-PACKAGES))) >=20 > You are destructively changing the package-nicknames list of PACK. > Don't do that. >=20 > Changing this to=20 > (defvar *built-in-packages* > (mapcan (lambda (pack) > (cons (package-name pack)=20 > (copy-list (package-nicknames pack)))) > (list-all-packages))) > makes the problem go away. Indeed! That worked before I switch from (flatten (mapcar to (mapcan because my flatten function did all the consing.=20 Thank you very much!=20 --=20 __Pascal_Bourguignon__ http://www.informatimago.com/ ---------------------------------------------------------------------- Do not adjust your mind, there is a fault in reality. |