mirror of
https://github.com/python/cpython.git
synced 2025-10-09 08:31:26 +00:00
bpo-34880: Add the LOAD_ASSERTION_ERROR opcode. (GH-15073)
Fix assert statement misbehavior if AssertionError is shadowed.
This commit is contained in:
parent
8371799e30
commit
ce6a070414
14 changed files with 2664 additions and 2627 deletions
|
@ -1129,6 +1129,8 @@ stack_effect(int opcode, int oparg, int jump)
|
|||
return (oparg & FVS_MASK) == FVS_HAVE_SPEC ? -1 : 0;
|
||||
case LOAD_METHOD:
|
||||
return 1;
|
||||
case LOAD_ASSERTION_ERROR:
|
||||
return 1;
|
||||
default:
|
||||
return PY_INVALID_STACK_EFFECT;
|
||||
}
|
||||
|
@ -3253,16 +3255,10 @@ compiler_from_import(struct compiler *c, stmt_ty s)
|
|||
static int
|
||||
compiler_assert(struct compiler *c, stmt_ty s)
|
||||
{
|
||||
static PyObject *assertion_error = NULL;
|
||||
basicblock *end;
|
||||
|
||||
if (c->c_optimize)
|
||||
return 1;
|
||||
if (assertion_error == NULL) {
|
||||
assertion_error = PyUnicode_InternFromString("AssertionError");
|
||||
if (assertion_error == NULL)
|
||||
return 0;
|
||||
}
|
||||
if (s->v.Assert.test->kind == Tuple_kind &&
|
||||
asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0)
|
||||
{
|
||||
|
@ -3277,7 +3273,7 @@ compiler_assert(struct compiler *c, stmt_ty s)
|
|||
return 0;
|
||||
if (!compiler_jump_if(c, s->v.Assert.test, end, 1))
|
||||
return 0;
|
||||
ADDOP_O(c, LOAD_GLOBAL, assertion_error, names);
|
||||
ADDOP(c, LOAD_ASSERTION_ERROR);
|
||||
if (s->v.Assert.msg) {
|
||||
VISIT(c, expr, s->v.Assert.msg);
|
||||
ADDOP_I(c, CALL_FUNCTION, 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue