Index: src/code/reader.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/code/reader.lisp,v
retrieving revision 1.47
diff -u -r1.47 reader.lisp
--- src/code/reader.lisp	10 Aug 2005 07:57:33 -0000	1.47
+++ src/code/reader.lisp	31 Oct 2005 20:57:29 -0000
@@ -1180,28 +1180,36 @@
         (t (go SYMBOL)))
       RETURN-SYMBOL
       (casify-read-buffer escapes)
-      (let ((found (if package-designator
-                       (find-package package-designator)
-                       (sane-package))))
-        (unless found
-          (error 'reader-package-error :stream stream
-                 :format-arguments (list package-designator)
-                 :format-control "package ~S not found"))
-
-        (if (or (zerop colons) (= colons 2) (eq found *keyword-package*))
-            (return (intern* *read-buffer* *ouch-ptr* found))
-            (multiple-value-bind (symbol test)
-                (find-symbol* *read-buffer* *ouch-ptr* found)
-              (when (eq test :external) (return symbol))
-              (let ((name (read-buffer-to-string)))
-                (with-simple-restart (continue "Use symbol anyway.")
-                  (error 'reader-package-error :stream stream
-                         :format-arguments (list name (package-name found))
-                         :format-control
-                         (if test
-                             "The symbol ~S is not external in the ~A package."
-                             "Symbol ~S not found in the ~A package.")))
-                (return (intern name found)))))))))
+      (tagbody
+       retry
+         (let ((found (if package-designator
+                          (find-package package-designator)
+                          (sane-package))))
+           (unless found
+             (restart-case
+                 (error 'reader-package-error :stream stream
+                        :format-arguments (list package-designator)
+                        :format-control "package ~S not found")
+               (require ()
+                 :report (lambda (stream) (format stream "Require ~A"
+                                                  package-designator))
+                 (require (make-symbol package-designator))
+                 (go retry))))
+
+           (if (or (zerop colons) (= colons 2) (eq found *keyword-package*))
+               (return (intern* *read-buffer* *ouch-ptr* found))
+               (multiple-value-bind (symbol test)
+                   (find-symbol* *read-buffer* *ouch-ptr* found)
+                 (when (eq test :external) (return symbol))
+                 (let ((name (read-buffer-to-string)))
+                   (with-simple-restart (continue "Use symbol anyway.")
+                     (error 'reader-package-error :stream stream
+                            :format-arguments (list name (package-name found))
+                            :format-control
+                            (if test
+                                "The symbol ~S is not external in the ~A package."
+                                "Symbol ~S not found in the ~A package.")))
+                   (return (intern name found))))))))))
 
 ;;; for semi-external use:
 ;;;
