summaryrefslogtreecommitdiff
path: root/Tools/compiler
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2001-08-28 16:35:18 +0000
committerJeremy Hylton <jeremy@alum.mit.edu>2001-08-28 16:35:18 +0000
commit006059ce1a925d45087f7736ffdf4ee9e83329bb (patch)
tree4f4e7e3b8f483696b167edb7fe8329dc43459201 /Tools/compiler
parentc9e9ea7e393863145c09fbff54ea0a8646e1ab99 (diff)
downloadcpython-006059ce1a925d45087f7736ffdf4ee9e83329bb.tar.gz
Generate FOR_ITER-based loops instead of old FOR_LOOP-based loops
Diffstat (limited to 'Tools/compiler')
-rw-r--r--Tools/compiler/compiler/pycodegen.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/Tools/compiler/compiler/pycodegen.py b/Tools/compiler/compiler/pycodegen.py
index ced0f07d42..37dbcfdfe5 100644
--- a/Tools/compiler/compiler/pycodegen.py
+++ b/Tools/compiler/compiler/pycodegen.py
@@ -355,11 +355,11 @@ class CodeGenerator:
self.set_lineno(node)
self.emit('SETUP_LOOP', after)
self.visit(node.list)
- self.visit(ast.Const(0))
+ self.emit('GET_ITER')
+
self.nextBlock(start)
self.set_lineno(node, force=1)
- self.emit('FOR_LOOP', anchor)
- self.nextBlock()
+ self.emit('FOR_ITER', anchor)
self.visit(node.assign)
self.visit(node.body)
self.emit('JUMP_ABSOLUTE', start)
@@ -567,7 +567,8 @@ class CodeGenerator:
self.nextBlock(next)
else:
self.nextBlock()
- self.emit('POP_TOP')
+ if expr: # XXX
+ self.emit('POP_TOP')
self.emit('END_FINALLY')
if node.else_:
self.nextBlock(lElse)
@@ -1001,7 +1002,10 @@ class NestedScopeCodeGenerator(CodeGenerator):
else:
self.emit(prefix + '_FAST', name)
elif scope == SC_GLOBAL:
- self.emit(prefix + '_GLOBAL', name)
+ 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)
else: