[parenscript-devel] create object doesn't accept symbols

Russell Sim russell.sim at gmail.com
Sat Jun 2 07:27:16 UTC 2012


Hey,

I have hit another small bug while I was using some older code which was
using quoted symbols as keys when defining an object.  For example when
I evaluate

CL-USER> (ps:ps (ps:create 'test "bang" 'symbol-saved-my-life "parenscript"))

I get the following error.

Slot key 'TEST is not one of symbol, string or number.
   [Condition of type SIMPLE-ERROR]


I have personally been using keywords instead of quoted symbols but it
seems there was a time when quoted symbols were ok and the documentation
seems to suggest that symbols should be fine?

The following patch enables quoted symbols to work again and will
convert them to the appropriate camelCase form.

CL-USER> (ps:ps (ps:create 'test "bang" 'symbol-saved-my-life "parenscript"))
"({ 'test' : 'bang', 'symbolSavedMyLife' : 'parenscript' });"


Cheers,
Russell


commit 84d94815b1655179b283627a64bf6ed1ac1dba07 (HEAD, refs/heads/master)
Author: Russell Sim <russell.sim at gmail.com>
Date:   Sat Jun 2 14:48:20 2012 +1000

    Allow quoted strings to be used as keys in objects

	Modified   src/non-cl.lisp
diff --git a/src/non-cl.lisp b/src/non-cl.lisp
index f2ed0e7..5cba0a8 100644
--- a/src/non-cl.lisp
+++ b/src/non-cl.lisp
@@ -52,12 +52,18 @@
   `(ps-js:object
     ,@(loop for (key val-expr) on arrows by #'cddr collecting
            (progn
-             (assert (or (stringp key) (numberp key) (symbolp key))
-                     ()
-                     "Slot key ~s is not one of symbol, string or number."
-                     key)
-             (cons (aif (and (symbolp key) (reserved-symbol? key)) it key)
-                   (compile-expression val-expr))))))
+               (assert (or (stringp key) (numberp key) (symbolp key) (eq 'quote (car key)))
+                       ()
+                       "Slot key ~s is not one of symbol, string or number."
+                       key)
+               (cons (acond
+                       ((and (symbolp key) (reserved-symbol? key))
+                        it)
+                       ((and (consp key) (eq 'quote (car key)))
+                        (symbol-to-js-string (eval key)))
+                       (t
+                        key))
+                     (compile-expression val-expr))))))
 
 (define-expression-operator %js-getprop (obj slot)
   (let ((expanded-slot (ps-macroexpand slot))






More information about the parenscript-devel mailing list