[Python-checkins] CVS: python/dist/src/Tools/compiler/compiler pycodegen.py,1.42,1.43

Jeremy Hylton jhylton@users.sourceforge.net
2001年8月28日 09:35:20 -0700


Update of /cvsroot/python/python/dist/src/Tools/compiler/compiler
In directory usw-pr-cvs1:/tmp/cvs-serv16049
Modified Files:
	pycodegen.py 
Log Message:
Generate FOR_ITER-based loops instead of old FOR_LOOP-based loops
Index: pycodegen.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Tools/compiler/compiler/pycodegen.py,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** pycodegen.py	2001年08月27日 22:56:16	1.42
--- pycodegen.py	2001年08月28日 16:35:18	1.43
***************
*** 356,364 ****
 self.emit('SETUP_LOOP', after)
 self.visit(node.list)
! self.visit(ast.Const(0))
 self.nextBlock(start)
 self.set_lineno(node, force=1)
! self.emit('FOR_LOOP', anchor)
! self.nextBlock()
 self.visit(node.assign)
 self.visit(node.body)
--- 356,364 ----
 self.emit('SETUP_LOOP', after)
 self.visit(node.list)
! self.emit('GET_ITER')
! 
 self.nextBlock(start)
 self.set_lineno(node, force=1)
! self.emit('FOR_ITER', anchor)
 self.visit(node.assign)
 self.visit(node.body)
***************
*** 568,572 ****
 else:
 self.nextBlock()
! self.emit('POP_TOP')
 self.emit('END_FINALLY')
 if node.else_:
--- 568,573 ----
 else:
 self.nextBlock()
! if expr: # XXX
! self.emit('POP_TOP')
 self.emit('END_FINALLY')
 if node.else_:
***************
*** 1002,1006 ****
 self.emit(prefix + '_FAST', name)
 elif scope == SC_GLOBAL:
! self.emit(prefix + '_GLOBAL', name)
 elif scope == SC_FREE or scope == SC_CELL:
 self.emit(prefix + '_DEREF', name)
--- 1003,1010 ----
 self.emit(prefix + '_FAST', name)
 elif scope == SC_GLOBAL:
! if not self.optimized:
! self.emit(prefix + '_NAME', name)
! else:
! self.emit(prefix + '_GLOBAL', name)
 elif scope == SC_FREE or scope == SC_CELL:
 self.emit(prefix + '_DEREF', name)

AltStyle によって変換されたページ (->オリジナル) /