]> granicus.if.org Git - python/commitdiff
If Py_OptimizeFlag is false then always evaluate assert conditions, don't
authorNeil Schemenauer <nascheme@enme.ucalgary.ca>
Fri, 26 Apr 2002 01:58:53 +0000 (01:58 +0000)
committerNeil Schemenauer <nascheme@enme.ucalgary.ca>
Fri, 26 Apr 2002 01:58:53 +0000 (01:58 +0000)
test __debug__ at runtime.  Closes SF patch #548833.

Misc/NEWS
Python/compile.c

index a0ae51e151611f5b07f0fa330ffc7627ac1ecadc..936369419104bb112d78334ea9415f9907aaebd1 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -6,6 +6,10 @@ Type/class unification and new-style classes
 
 Core and builtins
 
+- The assert statement no longer tests __debug__ at runtime.  This means
+  that assert statements cannot be disabled by assigning a false value
+  to __debug__.
+
 - A method zfill() was added to str and unicode, that fills a numeric
   string to the left with zeros.  For example,
   "+123".zfill(6) -> "+00123".
index 373363fb68deff37608462f650230cec48166a8c..03f8e3cd516e3b211f1eccb86a950bf56c49d608 100644 (file)
@@ -2664,27 +2664,20 @@ com_expr_stmt(struct compiling *c, node *n)
 static void
 com_assert_stmt(struct compiling *c, node *n)
 {
-       int a = 0, b = 0;
+       int a = 0;
        int i;
        REQ(n, assert_stmt); /* 'assert' test [',' test] */
-       /* Generate code like for
+       if (Py_OptimizeFlag)
+               return;
+       /* Generate code like
           
-          if __debug__:
-             if not <test>:
+            if not <test>:
                 raise AssertionError [, <message>]
 
           where <message> is the second test, if present.
        */
-
-       if (Py_OptimizeFlag)
-               return;
-       com_addop_name(c, LOAD_GLOBAL, "__debug__");
-       com_push(c, 1);
-       com_addfwref(c, JUMP_IF_FALSE, &a);
-       com_addbyte(c, POP_TOP);
-       com_pop(c, 1);
        com_node(c, CHILD(n, 1));
-       com_addfwref(c, JUMP_IF_TRUE, &b);
+       com_addfwref(c, JUMP_IF_TRUE, &a);
        com_addbyte(c, POP_TOP);
        com_pop(c, 1);
        /* Raise that exception! */
@@ -2696,9 +2689,8 @@ com_assert_stmt(struct compiling *c, node *n)
        com_addoparg(c, RAISE_VARARGS, i);
        com_pop(c, i);
        /* The interpreter does not fall through */
-       /* All jumps converge here */
+       /* Jump ends up here */
        com_backpatch(c, a);
-       com_backpatch(c, b);
        com_addbyte(c, POP_TOP);
 }