I wrote an optimizer rewriting the AST to implement various optimizatoions:
https://bitbucket.org/haypo/astoptimizer
To be able to use it, or use any other kind of AST transformation, I propose to add a new sys.setasthook() function to set a custom AST hook.
Attached patch is a proof-of-concept. The patch should be improved: document the function and add write unit tests.
Prototype of the hook:
def asthook(ast, filename):
# ...
return new_ast
I don't know if we need to add a compiler option (like _ast.PyCF_ONLY_AST) to skip the hook.