X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Freader.lisp;h=5d85c730bb09c8b51dd7a4f7c782961c78e242f9;hb=a6a12ed609d5467ec43b411283e5b3568fee81df;hp=77ab6f015795a6cd797555ba542283333acb38f6;hpb=2612849876e000af9b3c1f52cddb04cef0841f37;p=sbcl.git diff --git a/src/code/reader.lisp b/src/code/reader.lisp index 77ab6f0..5d85c73 100644 --- a/src/code/reader.lisp +++ b/src/code/reader.lisp @@ -904,6 +904,8 @@ standard Lisp readtable when NIL." (cond (all-lower (raise-em)) (all-upper (lower-em)))))))))))) +(defvar *reader-package* nil) + (defun read-token (stream firstchar) #!+sb-doc "Default readmacro function. Handles numbers, symbols, and SBCL's @@ -1262,7 +1264,7 @@ extended :: syntax." (#.+char-attr-delimiter+ (unread-char char stream) (if package-designator - (let ((*package* (%find-package-or-lose package-designator))) + (let* ((*reader-package* (%find-package-or-lose package-designator))) (return (read stream t nil t))) (simple-reader-error stream "illegal terminating character after a double-colon: ~S" @@ -1277,8 +1279,13 @@ extended :: syntax." RETURN-SYMBOL (casify-read-buffer escapes) (let ((found (if package-designator - (%find-package-or-lose package-designator) - (sane-package)))) + (or (find-package package-designator) + (error 'simple-reader-package-error + :package package-designator + :stream stream + :format-control "Package ~A does not exist." + :format-arguments (list package-designator))) + (or *reader-package* (sane-package))))) (if (or (zerop colons) (= colons 2) (eq found *keyword-package*)) (return (intern* *read-buffer* *ouch-ptr* found)) (multiple-value-bind (symbol test) @@ -1286,7 +1293,9 @@ extended :: syntax." (when (eq test :external) (return symbol)) (let ((name (read-buffer-to-string))) (with-simple-restart (continue "Use symbol anyway.") - (error 'simple-reader-package-error :stream stream + (error 'simple-reader-package-error + :package found + :stream stream :format-arguments (list name (package-name found)) :format-control (if test