Source

astoptimizer / NOTES

Maybe optimized later
=====================

Need type inference.

 - x + 0.
   Example: 'abc' + 0 raises a TypeError.
 - x * 0 or x * 1.
   Example: 5*0=0, 'abc'*0=''.
 - x and True, x and False, x or True, x or False.
   Example: '' and True='', 'abc' and True=True.

Cannot be optimized
===================

 - "def f(): if 0: yield", without the yield, the function is no more
   a generator.
 - x in {1, 2} => x in frozenset({1, 2}).
   AST cannot create literal frozenset. The "frozenset" builtin may be shadowed
   at runtime.
 - x in (a, b, c) => x in {a, b, c}.
   A list can contain non-hashable objects, a set cannot.
   x can be non-hashable, whereas x in set() would fail.
 - [x*2 for x in "abc"] => (x*2 for x in "abc").
   The generator expression doesn't set the local variable x, and generators
   are slower than list comprehensions.
 - range(n) => xrange(n).
   xrange() raises an OverflowError if n is too big, or a TypeError if n is
   not an integer.