<div dir="ltr">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:<br><br><span style="font-family: courier new,monospace;">(ps::ps-macroexpand '(case val ('a (b))))</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">  => (SWITCH VAL (QUOTE) (A (B)))</span><br><br>This yields the following nonsensical js:<br><br><span style="font-family: courier new,monospace;">"switch (val) {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">case quote:</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">case a:</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">    b();};"</span><br><br>A better macroexpansion would avoid processing the quoted form like a list, yielding:<br><br><span style="font-family: courier new,monospace;">(SWITCH VAL ('A (B)))</span><br>
<br>This doesn't produce any javascript, but rather an error:<br><br><span style="font-family: courier new,monospace;">(ps (case val '(a (b))))</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">  => Cannot translate quoted value A to javascript</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">   [Condition of type SIMPLE-ERROR]</span><br><br>... which is the desired behavior, because PS always produces this error when encountering a quoted form it doesn't understand.<br>
<br>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:<br>
<br><span style="font-family: courier new,monospace;">hunk ./src/special-forms.lisp 189</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">-             (cond ((listp val)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">+             (cond ((and (listp val) (not (eq (car val) 'quote)))</span><br style="font-family: courier new,monospace;"><br>Could this fix please be added to PS?<br><br>
Dan<br><br><br><br><br><br><br><br><br></div>