I recognize the [`Object.create` call](https://github.com/stackgl/glsl-parser/blob/master/lib/expr.js#L255) from Dougy Crock's top down operator precedence article. I don't think it's needed here though? The problem with this is when I try to clone an AST node with: ```javascript const clone = {...node}; ``` It doesn't work, because none of the keys on `node` are enumerable since they're made with `Object.create()`. So those keys don't show up on the cloned node. It took me a while to debug why an operation wasn't working, and it was because my AST node clone was missing the `.data` property. For anyone else who has this unlikely issue, for now I'm converting this node to all enumerable keys (I think) with this function: ```javascript const junk2js = node => ({ ...node, ...Object.getPrototypeOf(node) }); ```