diff --git a/src/lsp/defpackage.lsp b/src/lsp/defpackage.lsp index f7f9694d8..76f7de3e1 100644 --- a/src/lsp/defpackage.lsp +++ b/src/lsp/defpackage.lsp @@ -106,25 +106,26 @@ :EXPORT-FROM) :test #'eq) (cerror "Proceed, ignoring this option." "~s is not a valid DEFPACKAGE option." option))) - (labels ((option-test (arg1 arg2) + (labels ((to-string (x) (if (numberp x) x (string x))) + (option-test (arg1 arg2) (when (consp arg2) (equal (car arg2) arg1))) (option-values-list (option options &aux output) (dolist (o options) (let ((o-option (first o))) (when (string= o-option option) (let* ((o-package (string (second o))) - (o-symbols (mapcar #'(lambda (x) - (if (numberp x) x (string x))) - (cddr o)))) - (setf (cdr (assoc output o-package)) - (union o-symbols (cdr (assoc output o-package)) - :test #'equal)))))) + (former-symbols (assoc o-package output)) + (o-symbols (union (mapcar #'to-string (cddr o)) + (cdr former-symbols) + :test #'equal))) + (if former-symbols + (setf (cdr former-symbols) o-symbols) + (setq output (acons o-package o-symbols output))))))) output) (option-values (option options &aux output) (dolist (o options) (let ((o-option (first o)) - (o-symbols (mapcar #'(lambda (x) (if (numberp x) x (string x))) - (cdr o)))) + (o-symbols (mapcar #'to-string (cdr o)))) (when (string= o-option option) (setq output (union o-symbols output :test #'equal))))) output)) @@ -205,8 +206,10 @@ (first shadowing-imported-from-symbol-names-list))) (use-package (or use "CL")) (when imported-from-symbol-names-list - (import (rest imported-from-symbol-names-list) - (first imported-from-symbol-names-list))) + (dolist (item imported-from-symbol-names-list) + (let ((package (find-package (car item)))) + (dolist (name (cdr item)) + (import (find-symbol name package) *package*))))) (when exported-symbol-names (export (mapcar #'intern exported-symbol-names))) (when exported-from-package-names