The old one was becoming such a huge mess that I had to spend two minutes
doing boolean analysis to figure out the conditions for a multiplication
operator. The logic parser was also insufficient for expressing
sophisticated relationships between variables.
The new one operates with expression, starting from a target variable and
pulling in others to compute its value. The logic parser is still there,
buts its burden is greatly reduced, as most of the work is done by the
dependency resolver.
Reflections are missing at the moment, but will be added back soon. They
were pretty broken in the old system anyway, with the assumption that the
environment map is in eye space.
The generated shader code is rather verbose, containing a lot more local
variables than are needed. An optimizer will be implemented in the near
future.