X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=ecmalisp.lisp;h=867c2835ab3265fe1f3c89115c6cbbb4a0149d98;hb=90d70940965a3c6348ef5046dcee2455bdbcda10;hp=9a1080d2a2a77e9ff4654a3b3e50b3cfed593a08;hpb=2890060b5446322f3831a8d6fdcba189ac2877ff;p=jscl.git diff --git a/ecmalisp.lisp b/ecmalisp.lisp index 9a1080d..867c283 100644 --- a/ecmalisp.lisp +++ b/ecmalisp.lisp @@ -588,22 +588,29 @@ ;; with the symbols built during bootstrap. (defun %intern-symbol (symbol) (let* ((package - (if (in "package" symbol) - (find-package-or-fail (oget symbol "package")) - *common-lisp-package*)) - (symbols (%package-symbols *common-lisp-package*))) + (if (in "package" symbol) + (find-package-or-fail (oget symbol "package")) + *common-lisp-package*)) + (symbols (%package-symbols package))) (oset symbol "package" package) + (when (eq package *keyword-package*) + (oset symbol "value" symbol)) (oset symbols (symbol-name symbol) symbol))) (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) :interned) - (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))) @@ -1352,7 +1359,7 @@ (let ((package (symbol-package sexp))) (if (eq package (find-package "KEYWORD")) (concat "{name: \"" (escape-string (symbol-name sexp)) - "\", package: '" (package-name package) "'}") + "\", 'package': '" (package-name package) "'}") (concat "{name: \"" (escape-string (symbol-name sexp)) "\"}"))) #+ecmalisp (let ((package (symbol-package sexp)))