Commit f3545753 authored by Jeremy Hylton's avatar Jeremy Hylton

Generate FOR_ITER-based loops instead of old FOR_LOOP-based loops

parent 318e167e
...@@ -355,11 +355,11 @@ class CodeGenerator: ...@@ -355,11 +355,11 @@ class CodeGenerator:
self.set_lineno(node) self.set_lineno(node)
self.emit('SETUP_LOOP', after) self.emit('SETUP_LOOP', after)
self.visit(node.list) self.visit(node.list)
self.visit(ast.Const(0)) self.emit('GET_ITER')
self.nextBlock(start) self.nextBlock(start)
self.set_lineno(node, force=1) self.set_lineno(node, force=1)
self.emit('FOR_LOOP', anchor) self.emit('FOR_ITER', anchor)
self.nextBlock()
self.visit(node.assign) self.visit(node.assign)
self.visit(node.body) self.visit(node.body)
self.emit('JUMP_ABSOLUTE', start) self.emit('JUMP_ABSOLUTE', start)
...@@ -567,7 +567,8 @@ class CodeGenerator: ...@@ -567,7 +567,8 @@ class CodeGenerator:
self.nextBlock(next) self.nextBlock(next)
else: else:
self.nextBlock() self.nextBlock()
self.emit('POP_TOP') if expr: # XXX
self.emit('POP_TOP')
self.emit('END_FINALLY') self.emit('END_FINALLY')
if node.else_: if node.else_:
self.nextBlock(lElse) self.nextBlock(lElse)
...@@ -1001,7 +1002,10 @@ class NestedScopeCodeGenerator(CodeGenerator): ...@@ -1001,7 +1002,10 @@ class NestedScopeCodeGenerator(CodeGenerator):
else: else:
self.emit(prefix + '_FAST', name) self.emit(prefix + '_FAST', name)
elif scope == SC_GLOBAL: 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: elif scope == SC_FREE or scope == SC_CELL:
self.emit(prefix + '_DEREF', name) self.emit(prefix + '_DEREF', name)
else: else:
......
...@@ -355,11 +355,11 @@ class CodeGenerator: ...@@ -355,11 +355,11 @@ class CodeGenerator:
self.set_lineno(node) self.set_lineno(node)
self.emit('SETUP_LOOP', after) self.emit('SETUP_LOOP', after)
self.visit(node.list) self.visit(node.list)
self.visit(ast.Const(0)) self.emit('GET_ITER')
self.nextBlock(start) self.nextBlock(start)
self.set_lineno(node, force=1) self.set_lineno(node, force=1)
self.emit('FOR_LOOP', anchor) self.emit('FOR_ITER', anchor)
self.nextBlock()
self.visit(node.assign) self.visit(node.assign)
self.visit(node.body) self.visit(node.body)
self.emit('JUMP_ABSOLUTE', start) self.emit('JUMP_ABSOLUTE', start)
...@@ -567,7 +567,8 @@ class CodeGenerator: ...@@ -567,7 +567,8 @@ class CodeGenerator:
self.nextBlock(next) self.nextBlock(next)
else: else:
self.nextBlock() self.nextBlock()
self.emit('POP_TOP') if expr: # XXX
self.emit('POP_TOP')
self.emit('END_FINALLY') self.emit('END_FINALLY')
if node.else_: if node.else_:
self.nextBlock(lElse) self.nextBlock(lElse)
...@@ -1001,7 +1002,10 @@ class NestedScopeCodeGenerator(CodeGenerator): ...@@ -1001,7 +1002,10 @@ class NestedScopeCodeGenerator(CodeGenerator):
else: else:
self.emit(prefix + '_FAST', name) self.emit(prefix + '_FAST', name)
elif scope == SC_GLOBAL: 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: elif scope == SC_FREE or scope == SC_CELL:
self.emit(prefix + '_DEREF', name) self.emit(prefix + '_DEREF', name)
else: else:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment