]> granicus.if.org Git - python/commitdiff
SF patch 836879.
authorJeremy Hylton <jeremy@alum.mit.edu>
Sat, 7 Aug 2004 19:21:56 +0000 (19:21 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Sat, 7 Aug 2004 19:21:56 +0000 (19:21 +0000)
Don't generate code for asserts in -O mode.

Lib/compiler/pycodegen.py

index e33551a9a9433c59aa4c783307e7a24cea77e1cb..e5d1ff175a9c5b39a8ee59fc57fe0ebd8e08e224 100644 (file)
@@ -707,27 +707,25 @@ class CodeGenerator:
     def visitAssert(self, node):
         # XXX would be interesting to implement this via a
         # transformation of the AST before this stage
-        end = self.newBlock()
-        self.set_lineno(node)
-        # XXX __debug__ and AssertionError appear to be special cases
-        # -- they are always loaded as globals even if there are local
-        # names.  I guess this is a sort of renaming op.
-        self.emit('LOAD_GLOBAL', '__debug__')
-        self.emit('JUMP_IF_FALSE', end)
-        self.nextBlock()
-        self.emit('POP_TOP')
-        self.visit(node.test)
-        self.emit('JUMP_IF_TRUE', end)
-        self.nextBlock()
-        self.emit('POP_TOP')
-        self.emit('LOAD_GLOBAL', 'AssertionError')
-        if node.fail:
-            self.visit(node.fail)
-            self.emit('RAISE_VARARGS', 2)
-        else:
-            self.emit('RAISE_VARARGS', 1)
-        self.nextBlock(end)
-        self.emit('POP_TOP')
+        if __debug__:
+            end = self.newBlock()
+            self.set_lineno(node)
+            # XXX AssertionError appears to be special case -- it is always
+            # loaded as a global even if there is a local name.  I guess this
+            # is a sort of renaming op.
+            self.nextBlock()
+            self.visit(node.test)
+            self.emit('JUMP_IF_TRUE', end)
+            self.nextBlock()
+            self.emit('POP_TOP')
+            self.emit('LOAD_GLOBAL', 'AssertionError')
+            if node.fail:
+                self.visit(node.fail)
+                self.emit('RAISE_VARARGS', 2)
+            else:
+                self.emit('RAISE_VARARGS', 1)
+            self.nextBlock(end)
+            self.emit('POP_TOP')
 
     def visitRaise(self, node):
         self.set_lineno(node)