[parenscript-devel] Bug: ps::case generates incorrect code on quoted keys
Daniel Gackle
danielgackle at gmail.com
Wed Aug 20 04:19:15 UTC 2008
I ran into a bug in ps::case (patch below). The trouble occurs when one of
the keys that case is trying to match on is quoted:
(ps::ps-macroexpand '(case val ('a (b))))
=> (SWITCH VAL (QUOTE) (A (B)))
This yields the following nonsensical js:
"switch (val) {
case quote:
case a:
b();};"
A better macroexpansion would avoid processing the quoted form like a list,
yielding:
(SWITCH VAL ('A (B)))
This doesn't produce any javascript, but rather an error:
(ps (case val '(a (b))))
=> Cannot translate quoted value A to javascript
[Condition of type SIMPLE-ERROR]
... which is the desired behavior, because PS always produces this error
when encountering a quoted form it doesn't understand.
The reason this came up is that I'm building a specialized compiler on top
of PS that handles quoted forms by turning them into strings. I've got this
to work by means of :around methods on ps::compile-parenscript-form. But now
the above bug with ps::case becomes a show-stopper because I need it to work
with quoted keys (not just signal an error). I fixed it like so:
hunk ./src/special-forms.lisp 189
- (cond ((listp val)
+ (cond ((and (listp val) (not (eq (car val) 'quote)))
Could this fix please be added to PS?
Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/parenscript-devel/attachments/20080819/fbdef644/attachment.html>
More information about the parenscript-devel
mailing list