From 89e3ee0ccff975f30b81b40dec1ee1d7e6b09f9c Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Fri, 26 Apr 2002 01:58:53 +0000 Subject: If Py_OptimizeFlag is false then always evaluate assert conditions, don't test __debug__ at runtime. Closes SF patch #548833. --- Misc/NEWS | 4 ++++ Python/compile.c | 22 +++++++--------------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index a0ae51e..9363694 100644 --- 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". diff --git a/Python/compile.c b/Python/compile.c index 373363f..03f8e3c 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -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 : + if not : raise AssertionError [, ] where 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); } -- cgit v0.12