
2009/4/7 Cesare Di Mauro <cesare.dimauro@a-tono.com>:
The principle that I followed on doing constant folding was: "do what Python will do without constant folding enabled".
So if Python will generate
LOAD_CONST 1 LOAD_CONST 2 BINARY_ADD
the constant folding code will simply replace them with a single
LOAD_CONST 3
When working with such kind of optimizations, the temptation is to apply them at any situation possible. For example, in other languages this
a = b * 2 * 3
will be replaced by
a = b * 6
In Python I can't do that, because b can be an object which overloaded the * operator, so it *must* be called two times, one for 2 and one for 3.
That's the way I choose to implement constant folding.
That sounds sufficiently "super risk-averse" to me, so I'm in favour of constant folding being implemented with this attitude :-) Paul.