Fix keyword dumping and restoring
authorDavid Vázquez <davazp@gmail.com>
Wed, 8 May 2013 08:27:07 +0000 (09:27 +0100)
committerDavid Vázquez <davazp@gmail.com>
Wed, 8 May 2013 08:27:07 +0000 (09:27 +0100)
src/compiler.lisp
src/package.lisp

index cfe7020..1f6668f 100644 (file)
   #+common-lisp
   (let ((package (symbol-package symbol)))
     (if (eq package (find-package "KEYWORD"))
-        (code "(new Symbol(" (dump-string (symbol-name symbol)) ", "
-              (dump-string (package-name package)) "))")
+        (code "(new Symbol(" (dump-string (symbol-name symbol)) ", " (dump-string (package-name package)) "))")
         (code "(new Symbol(" (dump-string (symbol-name symbol)) "))")))
   #+jscl
   (let ((package (symbol-package symbol)))
                (let ((jsvar (genlit)))
                  (push (cons sexp jsvar) *literal-table*)
                  (toplevel-compilation (code "var " jsvar " = " dumped))
+                 (when (keywordp sexp)
+                   (toplevel-compilation (code jsvar ".value = " jsvar)))
                  jsvar)))))))
 
 
index b16e9bb..d3861e8 100644 (file)
           (if (in "package" symbol)
               (find-package-or-fail (oget symbol "package"))
               *common-lisp-package*))
-         (symbols (%package-symbols package)))
+         (symbols (%package-symbols package))
+         (exports (%package-external-symbols package)))
     (oset symbol "package" package)
+    (oset symbols (symbol-name symbol) symbol)
+    ;; Turn keywords self-evaluated and export them.
     (when (eq package *keyword-package*)
-      (oset symbol "value" symbol))
-    (oset symbols (symbol-name symbol) symbol)))
+      (oset symbol "value" symbol)
+      (oset exports (symbol-name symbol) symbol))))
 
 (defun find-symbol (name &optional (package *package*))
   (let* ((package (find-package-or-fail package))