Under the instruction of Martin, I've made some small changes to 2to3 so keeps track of which fixers act on which level of node. The speedup isn't too shabby: running on the example file, processing time went from 9 to 7 seconds, and the test suite dropped from 400 to 350.
I have attached the hacky, ugly, proof-of-concept patch to http:// bugs.python.org/issue2431
If there's no reason not to implement this sort of thing, I'll clean it up and commit it when I get home (or something).
-- David Wolever - http://wolever.net/%7Ewolever AIM: davidswolever MSN: firstname.lastname@example.org Phone: 416-906-0403 "Without payment you have received; without payment you are to give." (Mat 10:8 ISV)