I'm seeing a bug in how conditionals are grouped together.

(ps (return (if (if x y z) a b)))
  => "return x ? y : z ? a : b;"

This requires parentheses in order to evaluate the way the PS expression was clearly intended, namely:

  (x ? y : z) ? a : b

PS appears to make the wrong decision about when to include parentheses, since it does it here when the default would do:

(ps (return (if x y (if z a b))))
 => "return x ? y : (z ? a : b);"

Daniel