mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +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
	
	 Zackery Spytz
						Zackery Spytz