Further to the previous bug report, I noticed that lexical variables are being renamed unnecessarily in this case:
(ps (let ((x (@ foo x)))
(blah x)))
=>
"var x2 = foo.x;
blah(x2);"
Here the generated code isn't incorrect, as in the bug with CREATE, but I wonder if the two problems aren't related: in each case, PS appears to mistake a symbol reference for a lexical variable reference.
In this example, the CREATE form is being expanded incorrectly, because the symbol A passed to it is not a reference to either of the lexical variables in scope.
(ps (let ((a 99))
(let ((a 22))
(create a 33))))
=>
"var a = 99;
var a666 = 22;
{ a666 : 33 };"