X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-package.lisp;h=88b3cbf69de71c6e8c75ac731688988ae48be46b;hb=69d60b456b07a0256f08df0d02484f361ce5737c;hp=4a6f3dab518c8a3ad6b3c3f37e00d8acc7c75ac7;hpb=da554aabb26815adee15c78dd41ced81dd7fd5d2;p=sbcl.git diff --git a/src/code/target-package.lisp b/src/code/target-package.lisp index 4a6f3da..88b3cbf 100644 --- a/src/code/target-package.lisp +++ b/src/code/target-package.lisp @@ -237,9 +237,11 @@ error if any of PACKAGES is not a valid package designator." #!+sb-package-locks (let* ((symbol (etypecase name (symbol name) - (list (if (eq 'setf (first name)) + (list (if (and (consp (cdr name)) + (eq 'setf (first name))) (second name) - ;; Skip (class-predicate foo), etc. + ;; Skip lists of length 1, single conses and + ;; (class-predicate foo), etc. ;; FIXME: MOP and package-lock ;; interaction needs to be thought about. (return-from @@ -477,15 +479,17 @@ error if any of PACKAGES is not a valid package designator." (push n (package-%nicknames package))) ((eq found package)) ((string= (the string (package-%name found)) n) - (error 'simple-package-error - :package package - :format-control "~S is a package name, so it cannot be a nickname for ~S." - :format-arguments (list n (package-%name package)))) + (cerror "Ignore this nickname." + 'simple-package-error + :package package + :format-control "~S is a package name, so it cannot be a nickname for ~S." + :format-arguments (list n (package-%name package)))) (t - (error 'simple-package-error - :package package - :format-control "~S is already a nickname for ~S." - :format-arguments (list n (package-%name found)))))))) + (cerror "Leave this nickname alone." + 'simple-package-error + :package package + :format-control "~S is already a nickname for ~S." + :format-arguments (list n (package-%name found)))))))) (defun make-package (name &key (use '#.*default-package-use-list*) @@ -545,7 +549,7 @@ error if any of PACKAGES is not a valid package designator." #!+sb-doc "Changes the name and nicknames for a package." (let* ((package (find-undeleted-package-or-lose package)) - (name (string name)) + (name (package-namify name)) (found (find-package name)) (nicks (mapcar #'string nicknames))) (unless (or (not found) (eq found package)) @@ -647,8 +651,8 @@ error if any of PACKAGES is not a valid package designator." ;; We just simple-stringify the name and call INTERN*, where the real ;; logic is. (let ((name (if (simple-string-p name) - name - (coerce name 'simple-string))) + name + (coerce name 'simple-string))) (package (find-undeleted-package-or-lose package))) (declare (simple-string name)) (intern* name @@ -985,7 +989,8 @@ error if any of PACKAGES is not a valid package designator." :package package :format-control "~@" - :format-arguments (list (package-%name package) missing))) + :format-arguments (list (package-%name package) missing)) + 'import (package-%name package)) (import missing package)) (import imports package))