From bb0bae6da2c322971041d7943d1096d0590a9d3f Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Thu, 12 Apr 2001 21:54:41 +0000 Subject: [PATCH] Pop loop off the loop stack before handling the loop's else clause. Otherwise, continue/break will attempt to affect the wrong loop. A few more fiddles to get the SET_LINENOs consistent across compilers. --- Lib/compiler/pycodegen.py | 8 ++++---- Tools/compiler/compiler/pycodegen.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py index dc2be324da8..9f580675562 100644 --- a/Lib/compiler/pycodegen.py +++ b/Lib/compiler/pycodegen.py @@ -326,7 +326,7 @@ class CodeGenerator: self.nextBlock(loop) self.loops.push(loop) - self.set_lineno(node) + self.set_lineno(node, force=1) self.visit(node.test) self.emit('JUMP_IF_FALSE', else_ or after) @@ -338,9 +338,9 @@ class CodeGenerator: self.startBlock(else_) # or just the POPs if not else clause self.emit('POP_TOP') self.emit('POP_BLOCK') + self.loops.pop() if node.else_: self.visit(node.else_) - self.loops.pop() self.nextBlock(after) def visitFor(self, node): @@ -354,7 +354,7 @@ class CodeGenerator: self.visit(node.list) self.visit(ast.Const(0)) self.nextBlock(start) - self.set_lineno(node) + self.set_lineno(node, force=1) self.emit('FOR_LOOP', anchor) self.nextBlock() self.visit(node.assign) @@ -362,9 +362,9 @@ class CodeGenerator: self.emit('JUMP_ABSOLUTE', start) self.startBlock(anchor) self.emit('POP_BLOCK') + self.loops.pop() if node.else_: self.visit(node.else_) - self.loops.pop() self.nextBlock(after) def visitBreak(self, node): diff --git a/Tools/compiler/compiler/pycodegen.py b/Tools/compiler/compiler/pycodegen.py index dc2be324da8..9f580675562 100644 --- a/Tools/compiler/compiler/pycodegen.py +++ b/Tools/compiler/compiler/pycodegen.py @@ -326,7 +326,7 @@ class CodeGenerator: self.nextBlock(loop) self.loops.push(loop) - self.set_lineno(node) + self.set_lineno(node, force=1) self.visit(node.test) self.emit('JUMP_IF_FALSE', else_ or after) @@ -338,9 +338,9 @@ class CodeGenerator: self.startBlock(else_) # or just the POPs if not else clause self.emit('POP_TOP') self.emit('POP_BLOCK') + self.loops.pop() if node.else_: self.visit(node.else_) - self.loops.pop() self.nextBlock(after) def visitFor(self, node): @@ -354,7 +354,7 @@ class CodeGenerator: self.visit(node.list) self.visit(ast.Const(0)) self.nextBlock(start) - self.set_lineno(node) + self.set_lineno(node, force=1) self.emit('FOR_LOOP', anchor) self.nextBlock() self.visit(node.assign) @@ -362,9 +362,9 @@ class CodeGenerator: self.emit('JUMP_ABSOLUTE', start) self.startBlock(anchor) self.emit('POP_BLOCK') + self.loops.pop() if node.else_: self.visit(node.else_) - self.loops.pop() self.nextBlock(after) def visitBreak(self, node):