[parenscript-devel] Symbol-macrolet bug
This works correctly: (ps (symbol-macrolet ((blah "y")) (setf (aref x blah) 123))) => "x['y'] = 123;" ... while it appears this does not: (ps (symbol-macrolet ((blah "y")) (setf (@ x blah) 123))) => "x.blah = 123;" Daniel
For everyone's reference, here's the definition of @: (defpsmacro @ (obj &rest props) (if (null props) obj `(@ (slot-value ,(if (stringp obj) `($ ,obj) obj) ,(let ((prop (macroexpand (first props)))) (if (symbolp prop) `',prop prop))) ,@(cdr props)))) It's a macro whose idea Daniel borrowed from Peter Seibel's Lispscript Lisp-to-JavaScript compiler, and does things like (ps (@ foo "bar" 3 baz)) => foo['bar'][3].baz;. I will probably include it in the ParenScript helper library someday when I am unlazy enough to write the documentation. That being said, the behavior demonstrated is a feature, not a bug. The macros are being expanded in the right order (that is, same order as Common Lisp does it). Consider the following Common Lisp code: (defmacro foo (x) (format nil "~a" x)) (foo bar) => "BAR" (symbol-macrolet ((bar 1)) (list (foo bar) bar)) => ("BAR" 1) Vladimir On 9/12/07, Daniel Gackle <danielgackle@gmail.com> wrote:
This works correctly:
(ps (symbol-macrolet ((blah "y")) (setf (aref x blah) 123)))
=> "x['y'] = 123;"
... while it appears this does not:
(ps (symbol-macrolet ((blah "y")) (setf (@ x blah) 123)))
=> "x.blah = 123;"
Daniel
_______________________________________________ parenscript-devel mailing list parenscript-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
participants (2)
-
Daniel Gackle
-
Vladimir Sedach