# HG changeset patch # User Paul Boddie # Date 1489272168 -3600 # Node ID 26f115c5ba503d7e96d66ce0b802936925f37627 # Parent eab034cdda85bc5d33fa46468904dcfb115327b2 Expose iterator objects and the objects providing them via temporary names, permitting potential deduction benefits. diff -r eab034cdda85 -r 26f115c5ba50 common.py --- a/common.py Sat Mar 11 23:39:20 2017 +0100 +++ b/common.py Sat Mar 11 23:42:48 2017 +0100 @@ -551,20 +551,32 @@ the iterator, producing a replacement node for the original. """ + t0 = self.get_temporary_name() + self.next_temporary() + t1 = self.get_temporary_name() + self.next_temporary() i0 = self.get_temporary_name() self.next_temporary() node = compiler.ast.Stmt([ - # = {n.list}.__iter__().next + # = {n.list} + # = .__iter__() + # = .next + + compiler.ast.Assign( + [compiler.ast.AssName(t0, "OP_ASSIGN")], + n.list), + + compiler.ast.Assign( + [compiler.ast.AssName(t1, "OP_ASSIGN")], + compiler.ast.CallFunc( + compiler.ast.Getattr(compiler.ast.Name(t0), "__iter__"), + [])), compiler.ast.Assign( [compiler.ast.AssName(i0, "OP_ASSIGN")], - compiler.ast.Getattr( - compiler.ast.CallFunc( - compiler.ast.Getattr(n.list, "__iter__"), - [] - ), "next")), + compiler.ast.Getattr(compiler.ast.Name(t1), "next")), # try: # while True: