More cleanup and optimizations possible from ExpressionNode separation As darin mentioned in bug 15885, now that we have ExpressionNode as a subclass of Node, it's possible to move more methods off of Node up onto ExpressionNode, as well as make some types of nodes not subclass from ExpressionNode at all (like ElementNode) and thus have a non-virtual evaluate function. None of these are necessarily large speedups, but certainly contribute towards general cleanliness of the node tree.
Thanks to SquirrelFish, this is no longer relevant.