;; 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)))