On Thu, May 8, 2008 at 5:54 PM, Thomas Lee <[EMAIL PROTECTED]> wrote: > Adam Olsen wrote: >> >> On Thu, May 8, 2008 at 5:22 PM, Thomas Lee <[EMAIL PROTECTED]> wrote: >> >>> >>> Nick Coghlan wrote: >>> >>>> >>>> There are a lot of micro-optimisations that are actually context >>>> independent, so moving them before the symtable pass should be quite >>>> feasible - e.g. replacing "return None" with "return", stripping dead >>>> code >>>> after a return statement, changing a "if not" statement into an "if" >>>> statement with the two suites reversed, changing "(1, 2, 3)" into a >>>> stored >>>> constant, folding "1 + 2" into the constant "3". >>>> >>>> I believe the goal is to see how many of the current bytecode >>>> optimisations can actually be brought forward to the AST generation >>>> stage, >>>> rather than waiting until after the bytecode symtable calculation and >>>> compilation passes. >>>> >>>> >>> >>> That's been the aim so far. It's been largely successful with the >>> exception >>> of a few edge cases (most notably the functions vs. generator stuff). The >>> elimination of unreachable paths (whether they be things like "if 0: ..." >>> or >>> "return; ... more code ...") completely breaks generators since we might >>> potentially be blowing away "yield" statements during the elimination >>> process. >>> >> >> Also breaks various sanity checks relating to the global statement. >> >> > > What sanity checks are these exactly? Is this related to the lnotab?
Here we are. In 2.4.4: >>> def foo(): ... print test ... if 0: ... import test ... >>> foo() Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in foo NameError: global name 'test' is not defined 2.5.1 correctly raises an UnboundLocalError instead. Searching the bug DB for old bugs involving the optimizer showed several variations on this, such as "if 0: yield None" at module scope not raising a SyntaxError (Issue 1875, still open in trunk). Clearly there needs to be a general approach to avoid affecting these checks with optimizations. -- Adam Olsen, aka Rhamphoryncus _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com