X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=ecmalisp.lisp;h=20c68124f930d75f4e6268d27329b8f0a5fce5f7;hb=bfc35a4a1c2c0ba780ef686a166529534beb1be4;hp=ac6f02b7d0b8c820ceeae986bd321097014f2e71;hpb=b0e60d593040ed49161ced44aa42fa4f170b9be0;p=jscl.git diff --git a/ecmalisp.lisp b/ecmalisp.lisp index ac6f02b..20c6812 100644 --- a/ecmalisp.lisp +++ b/ecmalisp.lisp @@ -599,20 +599,25 @@ (defun find-symbol (name &optional (package *package*)) (let* ((package (find-package-or-fail package)) + (externals (%package-external-symbols package)) (symbols (%package-symbols package))) - (if (in name symbols) - (values (oget symbols name) t) - (dolist (used (package-use-list package) (values nil nil)) - (let ((exports (%package-external-symbols used))) - (when (in name exports) - (return (values (oget exports name) t)))))))) + (cond + ((in name externals) + (values (oget externals name) :external)) + ((in name symbols) + (values (oget symbols name) :internal)) + (t + (dolist (used (package-use-list package) (values nil nil)) + (let ((exports (%package-external-symbols used))) + (when (in name exports) + (return (values (oget exports name) :inherit))))))))) (defun intern (name &optional (package *package*)) (let ((package (find-package-or-fail package))) (multiple-value-bind (symbol foundp) (find-symbol name package) (if foundp - symbol + (values symbol foundp) (let ((symbols (%package-symbols package))) (oget symbols name) (let ((symbol (make-symbol name))) @@ -620,7 +625,8 @@ (when (eq package *keyword-package*) (oset symbol "value" symbol) (export (list symbol) package)) - (oset symbols name symbol))))))) + (oset symbols name symbol) + (values symbol nil))))))) (defun symbol-package (symbol) (unless (symbolp symbol)