![](https://secure.gravatar.com/avatar/ffe96f25cbe777db8ee1081ff83754ff.jpg?s=120&d=mm&r=g)
this piece of parenscript: (defun my-element-by-id (cache id) (return (or (slot-value cache id) (setf (slot-value cache id) (document.get-element-by-id id))))) gets transformed to: function myElementById(cache, id) { return cache[id] || cache[id] = document.getElementById(id); }; which i believe is wrong -- browsers interpret it (according to JS operator priority rules, i guess) as return (cache[id] || cache[id]) = document.getElementById(id); and complain about wrong assignment to non-lvalue. while with correctly set parentheses it works fine: function myElementById(cache, id) { return cache[id] || (cache[id] = document.getElementById(id)); }; so, i guess, parenscript should detect this operator priority problem and insert parentheses correctly?