Second value of FIND-SYMBOL is a keyword
[jscl.git] / ecmalisp.lisp
index 9a1080d..867c283 100644 (file)
   ;; 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)))
                  (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)))