mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	gh-132744: Check recursion limit in CALL_PY_GENERAL (GH-132746)
This commit is contained in:
		
							parent
							
								
									987e45e632
								
							
						
					
					
						commit
						ddac7ac59a
					
				
					 9 changed files with 220 additions and 170 deletions
				
			
		
							
								
								
									
										10
									
								
								Include/internal/pycore_opcode_metadata.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								Include/internal/pycore_opcode_metadata.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -1319,7 +1319,7 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[267] = {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_UOP_PER_EXPANSION 9
 | 
					#define MAX_UOP_PER_EXPANSION 10
 | 
				
			||||||
struct opcode_macro_expansion {
 | 
					struct opcode_macro_expansion {
 | 
				
			||||||
    int nuops;
 | 
					    int nuops;
 | 
				
			||||||
    struct { int16_t uop; int8_t size; int8_t offset; } uops[MAX_UOP_PER_EXPANSION];
 | 
					    struct { int16_t uop; int8_t size; int8_t offset; } uops[MAX_UOP_PER_EXPANSION];
 | 
				
			||||||
| 
						 | 
					@ -1355,8 +1355,8 @@ _PyOpcode_macro_expansion[256] = {
 | 
				
			||||||
    [BUILD_TEMPLATE] = { .nuops = 1, .uops = { { _BUILD_TEMPLATE, OPARG_SIMPLE, 0 } } },
 | 
					    [BUILD_TEMPLATE] = { .nuops = 1, .uops = { { _BUILD_TEMPLATE, OPARG_SIMPLE, 0 } } },
 | 
				
			||||||
    [BUILD_TUPLE] = { .nuops = 1, .uops = { { _BUILD_TUPLE, OPARG_SIMPLE, 0 } } },
 | 
					    [BUILD_TUPLE] = { .nuops = 1, .uops = { { _BUILD_TUPLE, OPARG_SIMPLE, 0 } } },
 | 
				
			||||||
    [CALL_ALLOC_AND_ENTER_INIT] = { .nuops = 4, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_AND_ALLOCATE_OBJECT, 2, 1 }, { _CREATE_INIT_FRAME, OPARG_SIMPLE, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_ALLOC_AND_ENTER_INIT] = { .nuops = 4, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_AND_ALLOCATE_OBJECT, 2, 1 }, { _CREATE_INIT_FRAME, OPARG_SIMPLE, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 9, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_BOUND_METHOD_EXACT_ARGS] = { .nuops = 10, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _INIT_CALL_BOUND_METHOD_EXACT_ARGS, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_BOUND_METHOD_GENERAL] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_METHOD_VERSION, 2, 1 }, { _EXPAND_METHOD, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_BOUND_METHOD_GENERAL] = { .nuops = 7, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_METHOD_VERSION, 2, 1 }, { _EXPAND_METHOD, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_BUILTIN_CLASS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_CLASS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_BUILTIN_CLASS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_CLASS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_BUILTIN_FAST] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_BUILTIN_FAST] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_BUILTIN_FAST_WITH_KEYWORDS] = { .nuops = 2, .uops = { { _CALL_BUILTIN_FAST_WITH_KEYWORDS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
| 
						 | 
					@ -1374,8 +1374,8 @@ _PyOpcode_macro_expansion[256] = {
 | 
				
			||||||
    [CALL_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_NOARGS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_METHOD_DESCRIPTOR_NOARGS] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_NOARGS, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_METHOD_DESCRIPTOR_O] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_O, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_METHOD_DESCRIPTOR_O] = { .nuops = 2, .uops = { { _CALL_METHOD_DESCRIPTOR_O, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_NON_PY_GENERAL] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE, OPARG_SIMPLE, 3 }, { _CALL_NON_PY_GENERAL, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_NON_PY_GENERAL] = { .nuops = 3, .uops = { { _CHECK_IS_NOT_PY_CALLABLE, OPARG_SIMPLE, 3 }, { _CALL_NON_PY_GENERAL, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_PY_EXACT_ARGS] = { .nuops = 7, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_PY_EXACT_ARGS] = { .nuops = 8, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_FUNCTION_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _CHECK_STACK_SPACE, OPARG_SIMPLE, 3 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _INIT_CALL_PY_EXACT_ARGS, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_PY_GENERAL] = { .nuops = 5, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_PY_GENERAL] = { .nuops = 6, .uops = { { _CHECK_PEP_523, OPARG_SIMPLE, 1 }, { _CHECK_FUNCTION_VERSION, 2, 1 }, { _CHECK_RECURSION_REMAINING, OPARG_SIMPLE, 3 }, { _PY_FRAME_GENERAL, OPARG_SIMPLE, 3 }, { _SAVE_RETURN_OFFSET, OPARG_SAVE_RETURN_OFFSET, 3 }, { _PUSH_FRAME, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_STR_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_STR_1, OPARG_SIMPLE, 3 }, { _CALL_STR_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_STR_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_STR_1, OPARG_SIMPLE, 3 }, { _CALL_STR_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_TUPLE_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TUPLE_1, OPARG_SIMPLE, 3 }, { _CALL_TUPLE_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_TUPLE_1] = { .nuops = 4, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TUPLE_1, OPARG_SIMPLE, 3 }, { _CALL_TUPLE_1, OPARG_SIMPLE, 3 }, { _CHECK_PERIODIC, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
    [CALL_TYPE_1] = { .nuops = 3, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TYPE_1, OPARG_SIMPLE, 3 }, { _CALL_TYPE_1, OPARG_SIMPLE, 3 } } },
 | 
					    [CALL_TYPE_1] = { .nuops = 3, .uops = { { _GUARD_NOS_NULL, OPARG_SIMPLE, 3 }, { _GUARD_CALLABLE_TYPE_1, OPARG_SIMPLE, 3 }, { _CALL_TYPE_1, OPARG_SIMPLE, 3 } } },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										331
									
								
								Include/internal/pycore_uop_ids.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										331
									
								
								Include/internal/pycore_uop_ids.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -74,92 +74,93 @@ extern "C" {
 | 
				
			||||||
#define _CHECK_PEP_523 347
 | 
					#define _CHECK_PEP_523 347
 | 
				
			||||||
#define _CHECK_PERIODIC 348
 | 
					#define _CHECK_PERIODIC 348
 | 
				
			||||||
#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM 349
 | 
					#define _CHECK_PERIODIC_IF_NOT_YIELD_FROM 349
 | 
				
			||||||
#define _CHECK_STACK_SPACE 350
 | 
					#define _CHECK_RECURSION_REMAINING 350
 | 
				
			||||||
#define _CHECK_STACK_SPACE_OPERAND 351
 | 
					#define _CHECK_STACK_SPACE 351
 | 
				
			||||||
#define _CHECK_VALIDITY 352
 | 
					#define _CHECK_STACK_SPACE_OPERAND 352
 | 
				
			||||||
#define _COMPARE_OP 353
 | 
					#define _CHECK_VALIDITY 353
 | 
				
			||||||
#define _COMPARE_OP_FLOAT 354
 | 
					#define _COMPARE_OP 354
 | 
				
			||||||
#define _COMPARE_OP_INT 355
 | 
					#define _COMPARE_OP_FLOAT 355
 | 
				
			||||||
#define _COMPARE_OP_STR 356
 | 
					#define _COMPARE_OP_INT 356
 | 
				
			||||||
#define _CONTAINS_OP 357
 | 
					#define _COMPARE_OP_STR 357
 | 
				
			||||||
#define _CONTAINS_OP_DICT 358
 | 
					#define _CONTAINS_OP 358
 | 
				
			||||||
#define _CONTAINS_OP_SET 359
 | 
					#define _CONTAINS_OP_DICT 359
 | 
				
			||||||
 | 
					#define _CONTAINS_OP_SET 360
 | 
				
			||||||
#define _CONVERT_VALUE CONVERT_VALUE
 | 
					#define _CONVERT_VALUE CONVERT_VALUE
 | 
				
			||||||
#define _COPY COPY
 | 
					#define _COPY COPY
 | 
				
			||||||
#define _COPY_FREE_VARS COPY_FREE_VARS
 | 
					#define _COPY_FREE_VARS COPY_FREE_VARS
 | 
				
			||||||
#define _CREATE_INIT_FRAME 360
 | 
					#define _CREATE_INIT_FRAME 361
 | 
				
			||||||
#define _DELETE_ATTR DELETE_ATTR
 | 
					#define _DELETE_ATTR DELETE_ATTR
 | 
				
			||||||
#define _DELETE_DEREF DELETE_DEREF
 | 
					#define _DELETE_DEREF DELETE_DEREF
 | 
				
			||||||
#define _DELETE_FAST DELETE_FAST
 | 
					#define _DELETE_FAST DELETE_FAST
 | 
				
			||||||
#define _DELETE_GLOBAL DELETE_GLOBAL
 | 
					#define _DELETE_GLOBAL DELETE_GLOBAL
 | 
				
			||||||
#define _DELETE_NAME DELETE_NAME
 | 
					#define _DELETE_NAME DELETE_NAME
 | 
				
			||||||
#define _DELETE_SUBSCR DELETE_SUBSCR
 | 
					#define _DELETE_SUBSCR DELETE_SUBSCR
 | 
				
			||||||
#define _DEOPT 361
 | 
					#define _DEOPT 362
 | 
				
			||||||
#define _DICT_MERGE DICT_MERGE
 | 
					#define _DICT_MERGE DICT_MERGE
 | 
				
			||||||
#define _DICT_UPDATE DICT_UPDATE
 | 
					#define _DICT_UPDATE DICT_UPDATE
 | 
				
			||||||
#define _DO_CALL 362
 | 
					#define _DO_CALL 363
 | 
				
			||||||
#define _DO_CALL_FUNCTION_EX 363
 | 
					#define _DO_CALL_FUNCTION_EX 364
 | 
				
			||||||
#define _DO_CALL_KW 364
 | 
					#define _DO_CALL_KW 365
 | 
				
			||||||
#define _END_FOR END_FOR
 | 
					#define _END_FOR END_FOR
 | 
				
			||||||
#define _END_SEND END_SEND
 | 
					#define _END_SEND END_SEND
 | 
				
			||||||
#define _ERROR_POP_N 365
 | 
					#define _ERROR_POP_N 366
 | 
				
			||||||
#define _EXIT_INIT_CHECK EXIT_INIT_CHECK
 | 
					#define _EXIT_INIT_CHECK EXIT_INIT_CHECK
 | 
				
			||||||
#define _EXPAND_METHOD 366
 | 
					#define _EXPAND_METHOD 367
 | 
				
			||||||
#define _EXPAND_METHOD_KW 367
 | 
					#define _EXPAND_METHOD_KW 368
 | 
				
			||||||
#define _FATAL_ERROR 368
 | 
					#define _FATAL_ERROR 369
 | 
				
			||||||
#define _FORMAT_SIMPLE FORMAT_SIMPLE
 | 
					#define _FORMAT_SIMPLE FORMAT_SIMPLE
 | 
				
			||||||
#define _FORMAT_WITH_SPEC FORMAT_WITH_SPEC
 | 
					#define _FORMAT_WITH_SPEC FORMAT_WITH_SPEC
 | 
				
			||||||
#define _FOR_ITER 369
 | 
					#define _FOR_ITER 370
 | 
				
			||||||
#define _FOR_ITER_GEN_FRAME 370
 | 
					#define _FOR_ITER_GEN_FRAME 371
 | 
				
			||||||
#define _FOR_ITER_TIER_TWO 371
 | 
					#define _FOR_ITER_TIER_TWO 372
 | 
				
			||||||
#define _GET_AITER GET_AITER
 | 
					#define _GET_AITER GET_AITER
 | 
				
			||||||
#define _GET_ANEXT GET_ANEXT
 | 
					#define _GET_ANEXT GET_ANEXT
 | 
				
			||||||
#define _GET_AWAITABLE GET_AWAITABLE
 | 
					#define _GET_AWAITABLE GET_AWAITABLE
 | 
				
			||||||
#define _GET_ITER GET_ITER
 | 
					#define _GET_ITER GET_ITER
 | 
				
			||||||
#define _GET_LEN GET_LEN
 | 
					#define _GET_LEN GET_LEN
 | 
				
			||||||
#define _GET_YIELD_FROM_ITER GET_YIELD_FROM_ITER
 | 
					#define _GET_YIELD_FROM_ITER GET_YIELD_FROM_ITER
 | 
				
			||||||
#define _GUARD_BINARY_OP_EXTEND 372
 | 
					#define _GUARD_BINARY_OP_EXTEND 373
 | 
				
			||||||
#define _GUARD_CALLABLE_STR_1 373
 | 
					#define _GUARD_CALLABLE_STR_1 374
 | 
				
			||||||
#define _GUARD_CALLABLE_TUPLE_1 374
 | 
					#define _GUARD_CALLABLE_TUPLE_1 375
 | 
				
			||||||
#define _GUARD_CALLABLE_TYPE_1 375
 | 
					#define _GUARD_CALLABLE_TYPE_1 376
 | 
				
			||||||
#define _GUARD_DORV_NO_DICT 376
 | 
					#define _GUARD_DORV_NO_DICT 377
 | 
				
			||||||
#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 377
 | 
					#define _GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 378
 | 
				
			||||||
#define _GUARD_GLOBALS_VERSION 378
 | 
					#define _GUARD_GLOBALS_VERSION 379
 | 
				
			||||||
#define _GUARD_IS_FALSE_POP 379
 | 
					#define _GUARD_IS_FALSE_POP 380
 | 
				
			||||||
#define _GUARD_IS_NONE_POP 380
 | 
					#define _GUARD_IS_NONE_POP 381
 | 
				
			||||||
#define _GUARD_IS_NOT_NONE_POP 381
 | 
					#define _GUARD_IS_NOT_NONE_POP 382
 | 
				
			||||||
#define _GUARD_IS_TRUE_POP 382
 | 
					#define _GUARD_IS_TRUE_POP 383
 | 
				
			||||||
#define _GUARD_KEYS_VERSION 383
 | 
					#define _GUARD_KEYS_VERSION 384
 | 
				
			||||||
#define _GUARD_NOS_DICT 384
 | 
					#define _GUARD_NOS_DICT 385
 | 
				
			||||||
#define _GUARD_NOS_FLOAT 385
 | 
					#define _GUARD_NOS_FLOAT 386
 | 
				
			||||||
#define _GUARD_NOS_INT 386
 | 
					#define _GUARD_NOS_INT 387
 | 
				
			||||||
#define _GUARD_NOS_LIST 387
 | 
					#define _GUARD_NOS_LIST 388
 | 
				
			||||||
#define _GUARD_NOS_NULL 388
 | 
					#define _GUARD_NOS_NULL 389
 | 
				
			||||||
#define _GUARD_NOS_TUPLE 389
 | 
					#define _GUARD_NOS_TUPLE 390
 | 
				
			||||||
#define _GUARD_NOS_UNICODE 390
 | 
					#define _GUARD_NOS_UNICODE 391
 | 
				
			||||||
#define _GUARD_NOT_EXHAUSTED_LIST 391
 | 
					#define _GUARD_NOT_EXHAUSTED_LIST 392
 | 
				
			||||||
#define _GUARD_NOT_EXHAUSTED_RANGE 392
 | 
					#define _GUARD_NOT_EXHAUSTED_RANGE 393
 | 
				
			||||||
#define _GUARD_NOT_EXHAUSTED_TUPLE 393
 | 
					#define _GUARD_NOT_EXHAUSTED_TUPLE 394
 | 
				
			||||||
#define _GUARD_TOS_ANY_SET 394
 | 
					#define _GUARD_TOS_ANY_SET 395
 | 
				
			||||||
#define _GUARD_TOS_DICT 395
 | 
					#define _GUARD_TOS_DICT 396
 | 
				
			||||||
#define _GUARD_TOS_FLOAT 396
 | 
					#define _GUARD_TOS_FLOAT 397
 | 
				
			||||||
#define _GUARD_TOS_INT 397
 | 
					#define _GUARD_TOS_INT 398
 | 
				
			||||||
#define _GUARD_TOS_LIST 398
 | 
					#define _GUARD_TOS_LIST 399
 | 
				
			||||||
#define _GUARD_TOS_SLICE 399
 | 
					#define _GUARD_TOS_SLICE 400
 | 
				
			||||||
#define _GUARD_TOS_TUPLE 400
 | 
					#define _GUARD_TOS_TUPLE 401
 | 
				
			||||||
#define _GUARD_TOS_UNICODE 401
 | 
					#define _GUARD_TOS_UNICODE 402
 | 
				
			||||||
#define _GUARD_TYPE_VERSION 402
 | 
					#define _GUARD_TYPE_VERSION 403
 | 
				
			||||||
#define _GUARD_TYPE_VERSION_AND_LOCK 403
 | 
					#define _GUARD_TYPE_VERSION_AND_LOCK 404
 | 
				
			||||||
#define _IMPORT_FROM IMPORT_FROM
 | 
					#define _IMPORT_FROM IMPORT_FROM
 | 
				
			||||||
#define _IMPORT_NAME IMPORT_NAME
 | 
					#define _IMPORT_NAME IMPORT_NAME
 | 
				
			||||||
#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 404
 | 
					#define _INIT_CALL_BOUND_METHOD_EXACT_ARGS 405
 | 
				
			||||||
#define _INIT_CALL_PY_EXACT_ARGS 405
 | 
					#define _INIT_CALL_PY_EXACT_ARGS 406
 | 
				
			||||||
#define _INIT_CALL_PY_EXACT_ARGS_0 406
 | 
					#define _INIT_CALL_PY_EXACT_ARGS_0 407
 | 
				
			||||||
#define _INIT_CALL_PY_EXACT_ARGS_1 407
 | 
					#define _INIT_CALL_PY_EXACT_ARGS_1 408
 | 
				
			||||||
#define _INIT_CALL_PY_EXACT_ARGS_2 408
 | 
					#define _INIT_CALL_PY_EXACT_ARGS_2 409
 | 
				
			||||||
#define _INIT_CALL_PY_EXACT_ARGS_3 409
 | 
					#define _INIT_CALL_PY_EXACT_ARGS_3 410
 | 
				
			||||||
#define _INIT_CALL_PY_EXACT_ARGS_4 410
 | 
					#define _INIT_CALL_PY_EXACT_ARGS_4 411
 | 
				
			||||||
#define _INSERT_NULL 411
 | 
					#define _INSERT_NULL 412
 | 
				
			||||||
#define _INSTRUMENTED_FOR_ITER INSTRUMENTED_FOR_ITER
 | 
					#define _INSTRUMENTED_FOR_ITER INSTRUMENTED_FOR_ITER
 | 
				
			||||||
#define _INSTRUMENTED_INSTRUCTION INSTRUMENTED_INSTRUCTION
 | 
					#define _INSTRUMENTED_INSTRUCTION INSTRUMENTED_INSTRUCTION
 | 
				
			||||||
#define _INSTRUMENTED_JUMP_FORWARD INSTRUMENTED_JUMP_FORWARD
 | 
					#define _INSTRUMENTED_JUMP_FORWARD INSTRUMENTED_JUMP_FORWARD
 | 
				
			||||||
| 
						 | 
					@ -169,163 +170,163 @@ extern "C" {
 | 
				
			||||||
#define _INSTRUMENTED_POP_JUMP_IF_NONE INSTRUMENTED_POP_JUMP_IF_NONE
 | 
					#define _INSTRUMENTED_POP_JUMP_IF_NONE INSTRUMENTED_POP_JUMP_IF_NONE
 | 
				
			||||||
#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE INSTRUMENTED_POP_JUMP_IF_NOT_NONE
 | 
					#define _INSTRUMENTED_POP_JUMP_IF_NOT_NONE INSTRUMENTED_POP_JUMP_IF_NOT_NONE
 | 
				
			||||||
#define _INSTRUMENTED_POP_JUMP_IF_TRUE INSTRUMENTED_POP_JUMP_IF_TRUE
 | 
					#define _INSTRUMENTED_POP_JUMP_IF_TRUE INSTRUMENTED_POP_JUMP_IF_TRUE
 | 
				
			||||||
#define _IS_NONE 412
 | 
					#define _IS_NONE 413
 | 
				
			||||||
#define _IS_OP IS_OP
 | 
					#define _IS_OP IS_OP
 | 
				
			||||||
#define _ITER_CHECK_LIST 413
 | 
					#define _ITER_CHECK_LIST 414
 | 
				
			||||||
#define _ITER_CHECK_RANGE 414
 | 
					#define _ITER_CHECK_RANGE 415
 | 
				
			||||||
#define _ITER_CHECK_TUPLE 415
 | 
					#define _ITER_CHECK_TUPLE 416
 | 
				
			||||||
#define _ITER_JUMP_LIST 416
 | 
					#define _ITER_JUMP_LIST 417
 | 
				
			||||||
#define _ITER_JUMP_RANGE 417
 | 
					#define _ITER_JUMP_RANGE 418
 | 
				
			||||||
#define _ITER_JUMP_TUPLE 418
 | 
					#define _ITER_JUMP_TUPLE 419
 | 
				
			||||||
#define _ITER_NEXT_LIST 419
 | 
					#define _ITER_NEXT_LIST 420
 | 
				
			||||||
#define _ITER_NEXT_LIST_TIER_TWO 420
 | 
					#define _ITER_NEXT_LIST_TIER_TWO 421
 | 
				
			||||||
#define _ITER_NEXT_RANGE 421
 | 
					#define _ITER_NEXT_RANGE 422
 | 
				
			||||||
#define _ITER_NEXT_TUPLE 422
 | 
					#define _ITER_NEXT_TUPLE 423
 | 
				
			||||||
#define _JUMP_TO_TOP 423
 | 
					#define _JUMP_TO_TOP 424
 | 
				
			||||||
#define _LIST_APPEND LIST_APPEND
 | 
					#define _LIST_APPEND LIST_APPEND
 | 
				
			||||||
#define _LIST_EXTEND LIST_EXTEND
 | 
					#define _LIST_EXTEND LIST_EXTEND
 | 
				
			||||||
#define _LOAD_ATTR 424
 | 
					#define _LOAD_ATTR 425
 | 
				
			||||||
#define _LOAD_ATTR_CLASS 425
 | 
					#define _LOAD_ATTR_CLASS 426
 | 
				
			||||||
#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN
 | 
					#define _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN
 | 
				
			||||||
#define _LOAD_ATTR_INSTANCE_VALUE 426
 | 
					#define _LOAD_ATTR_INSTANCE_VALUE 427
 | 
				
			||||||
#define _LOAD_ATTR_METHOD_LAZY_DICT 427
 | 
					#define _LOAD_ATTR_METHOD_LAZY_DICT 428
 | 
				
			||||||
#define _LOAD_ATTR_METHOD_NO_DICT 428
 | 
					#define _LOAD_ATTR_METHOD_NO_DICT 429
 | 
				
			||||||
#define _LOAD_ATTR_METHOD_WITH_VALUES 429
 | 
					#define _LOAD_ATTR_METHOD_WITH_VALUES 430
 | 
				
			||||||
#define _LOAD_ATTR_MODULE 430
 | 
					#define _LOAD_ATTR_MODULE 431
 | 
				
			||||||
#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 431
 | 
					#define _LOAD_ATTR_NONDESCRIPTOR_NO_DICT 432
 | 
				
			||||||
#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 432
 | 
					#define _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES 433
 | 
				
			||||||
#define _LOAD_ATTR_PROPERTY_FRAME 433
 | 
					#define _LOAD_ATTR_PROPERTY_FRAME 434
 | 
				
			||||||
#define _LOAD_ATTR_SLOT 434
 | 
					#define _LOAD_ATTR_SLOT 435
 | 
				
			||||||
#define _LOAD_ATTR_WITH_HINT 435
 | 
					#define _LOAD_ATTR_WITH_HINT 436
 | 
				
			||||||
#define _LOAD_BUILD_CLASS LOAD_BUILD_CLASS
 | 
					#define _LOAD_BUILD_CLASS LOAD_BUILD_CLASS
 | 
				
			||||||
#define _LOAD_BYTECODE 436
 | 
					#define _LOAD_BYTECODE 437
 | 
				
			||||||
#define _LOAD_COMMON_CONSTANT LOAD_COMMON_CONSTANT
 | 
					#define _LOAD_COMMON_CONSTANT LOAD_COMMON_CONSTANT
 | 
				
			||||||
#define _LOAD_CONST LOAD_CONST
 | 
					#define _LOAD_CONST LOAD_CONST
 | 
				
			||||||
#define _LOAD_CONST_IMMORTAL LOAD_CONST_IMMORTAL
 | 
					#define _LOAD_CONST_IMMORTAL LOAD_CONST_IMMORTAL
 | 
				
			||||||
#define _LOAD_CONST_INLINE 437
 | 
					#define _LOAD_CONST_INLINE 438
 | 
				
			||||||
#define _LOAD_CONST_INLINE_BORROW 438
 | 
					#define _LOAD_CONST_INLINE_BORROW 439
 | 
				
			||||||
#define _LOAD_CONST_MORTAL LOAD_CONST_MORTAL
 | 
					#define _LOAD_CONST_MORTAL LOAD_CONST_MORTAL
 | 
				
			||||||
#define _LOAD_DEREF LOAD_DEREF
 | 
					#define _LOAD_DEREF LOAD_DEREF
 | 
				
			||||||
#define _LOAD_FAST 439
 | 
					#define _LOAD_FAST 440
 | 
				
			||||||
#define _LOAD_FAST_0 440
 | 
					#define _LOAD_FAST_0 441
 | 
				
			||||||
#define _LOAD_FAST_1 441
 | 
					#define _LOAD_FAST_1 442
 | 
				
			||||||
#define _LOAD_FAST_2 442
 | 
					#define _LOAD_FAST_2 443
 | 
				
			||||||
#define _LOAD_FAST_3 443
 | 
					#define _LOAD_FAST_3 444
 | 
				
			||||||
#define _LOAD_FAST_4 444
 | 
					#define _LOAD_FAST_4 445
 | 
				
			||||||
#define _LOAD_FAST_5 445
 | 
					#define _LOAD_FAST_5 446
 | 
				
			||||||
#define _LOAD_FAST_6 446
 | 
					#define _LOAD_FAST_6 447
 | 
				
			||||||
#define _LOAD_FAST_7 447
 | 
					#define _LOAD_FAST_7 448
 | 
				
			||||||
#define _LOAD_FAST_AND_CLEAR LOAD_FAST_AND_CLEAR
 | 
					#define _LOAD_FAST_AND_CLEAR LOAD_FAST_AND_CLEAR
 | 
				
			||||||
#define _LOAD_FAST_BORROW 448
 | 
					#define _LOAD_FAST_BORROW 449
 | 
				
			||||||
#define _LOAD_FAST_BORROW_0 449
 | 
					#define _LOAD_FAST_BORROW_0 450
 | 
				
			||||||
#define _LOAD_FAST_BORROW_1 450
 | 
					#define _LOAD_FAST_BORROW_1 451
 | 
				
			||||||
#define _LOAD_FAST_BORROW_2 451
 | 
					#define _LOAD_FAST_BORROW_2 452
 | 
				
			||||||
#define _LOAD_FAST_BORROW_3 452
 | 
					#define _LOAD_FAST_BORROW_3 453
 | 
				
			||||||
#define _LOAD_FAST_BORROW_4 453
 | 
					#define _LOAD_FAST_BORROW_4 454
 | 
				
			||||||
#define _LOAD_FAST_BORROW_5 454
 | 
					#define _LOAD_FAST_BORROW_5 455
 | 
				
			||||||
#define _LOAD_FAST_BORROW_6 455
 | 
					#define _LOAD_FAST_BORROW_6 456
 | 
				
			||||||
#define _LOAD_FAST_BORROW_7 456
 | 
					#define _LOAD_FAST_BORROW_7 457
 | 
				
			||||||
#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW LOAD_FAST_BORROW_LOAD_FAST_BORROW
 | 
					#define _LOAD_FAST_BORROW_LOAD_FAST_BORROW LOAD_FAST_BORROW_LOAD_FAST_BORROW
 | 
				
			||||||
#define _LOAD_FAST_CHECK LOAD_FAST_CHECK
 | 
					#define _LOAD_FAST_CHECK LOAD_FAST_CHECK
 | 
				
			||||||
#define _LOAD_FAST_LOAD_FAST LOAD_FAST_LOAD_FAST
 | 
					#define _LOAD_FAST_LOAD_FAST LOAD_FAST_LOAD_FAST
 | 
				
			||||||
#define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF
 | 
					#define _LOAD_FROM_DICT_OR_DEREF LOAD_FROM_DICT_OR_DEREF
 | 
				
			||||||
#define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS
 | 
					#define _LOAD_FROM_DICT_OR_GLOBALS LOAD_FROM_DICT_OR_GLOBALS
 | 
				
			||||||
#define _LOAD_GLOBAL 457
 | 
					#define _LOAD_GLOBAL 458
 | 
				
			||||||
#define _LOAD_GLOBAL_BUILTINS 458
 | 
					#define _LOAD_GLOBAL_BUILTINS 459
 | 
				
			||||||
#define _LOAD_GLOBAL_MODULE 459
 | 
					#define _LOAD_GLOBAL_MODULE 460
 | 
				
			||||||
#define _LOAD_LOCALS LOAD_LOCALS
 | 
					#define _LOAD_LOCALS LOAD_LOCALS
 | 
				
			||||||
#define _LOAD_NAME LOAD_NAME
 | 
					#define _LOAD_NAME LOAD_NAME
 | 
				
			||||||
#define _LOAD_SMALL_INT 460
 | 
					#define _LOAD_SMALL_INT 461
 | 
				
			||||||
#define _LOAD_SMALL_INT_0 461
 | 
					#define _LOAD_SMALL_INT_0 462
 | 
				
			||||||
#define _LOAD_SMALL_INT_1 462
 | 
					#define _LOAD_SMALL_INT_1 463
 | 
				
			||||||
#define _LOAD_SMALL_INT_2 463
 | 
					#define _LOAD_SMALL_INT_2 464
 | 
				
			||||||
#define _LOAD_SMALL_INT_3 464
 | 
					#define _LOAD_SMALL_INT_3 465
 | 
				
			||||||
#define _LOAD_SPECIAL 465
 | 
					#define _LOAD_SPECIAL 466
 | 
				
			||||||
#define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR
 | 
					#define _LOAD_SUPER_ATTR_ATTR LOAD_SUPER_ATTR_ATTR
 | 
				
			||||||
#define _LOAD_SUPER_ATTR_METHOD LOAD_SUPER_ATTR_METHOD
 | 
					#define _LOAD_SUPER_ATTR_METHOD LOAD_SUPER_ATTR_METHOD
 | 
				
			||||||
#define _MAKE_CALLARGS_A_TUPLE 466
 | 
					#define _MAKE_CALLARGS_A_TUPLE 467
 | 
				
			||||||
#define _MAKE_CELL MAKE_CELL
 | 
					#define _MAKE_CELL MAKE_CELL
 | 
				
			||||||
#define _MAKE_FUNCTION MAKE_FUNCTION
 | 
					#define _MAKE_FUNCTION MAKE_FUNCTION
 | 
				
			||||||
#define _MAKE_WARM 467
 | 
					#define _MAKE_WARM 468
 | 
				
			||||||
#define _MAP_ADD MAP_ADD
 | 
					#define _MAP_ADD MAP_ADD
 | 
				
			||||||
#define _MATCH_CLASS MATCH_CLASS
 | 
					#define _MATCH_CLASS MATCH_CLASS
 | 
				
			||||||
#define _MATCH_KEYS MATCH_KEYS
 | 
					#define _MATCH_KEYS MATCH_KEYS
 | 
				
			||||||
#define _MATCH_MAPPING MATCH_MAPPING
 | 
					#define _MATCH_MAPPING MATCH_MAPPING
 | 
				
			||||||
#define _MATCH_SEQUENCE MATCH_SEQUENCE
 | 
					#define _MATCH_SEQUENCE MATCH_SEQUENCE
 | 
				
			||||||
#define _MAYBE_EXPAND_METHOD 468
 | 
					#define _MAYBE_EXPAND_METHOD 469
 | 
				
			||||||
#define _MAYBE_EXPAND_METHOD_KW 469
 | 
					#define _MAYBE_EXPAND_METHOD_KW 470
 | 
				
			||||||
#define _MONITOR_CALL 470
 | 
					#define _MONITOR_CALL 471
 | 
				
			||||||
#define _MONITOR_CALL_KW 471
 | 
					#define _MONITOR_CALL_KW 472
 | 
				
			||||||
#define _MONITOR_JUMP_BACKWARD 472
 | 
					#define _MONITOR_JUMP_BACKWARD 473
 | 
				
			||||||
#define _MONITOR_RESUME 473
 | 
					#define _MONITOR_RESUME 474
 | 
				
			||||||
#define _NOP NOP
 | 
					#define _NOP NOP
 | 
				
			||||||
#define _POP_EXCEPT POP_EXCEPT
 | 
					#define _POP_EXCEPT POP_EXCEPT
 | 
				
			||||||
#define _POP_JUMP_IF_FALSE 474
 | 
					#define _POP_JUMP_IF_FALSE 475
 | 
				
			||||||
#define _POP_JUMP_IF_TRUE 475
 | 
					#define _POP_JUMP_IF_TRUE 476
 | 
				
			||||||
#define _POP_TOP POP_TOP
 | 
					#define _POP_TOP POP_TOP
 | 
				
			||||||
#define _POP_TOP_LOAD_CONST_INLINE 476
 | 
					#define _POP_TOP_LOAD_CONST_INLINE 477
 | 
				
			||||||
#define _POP_TOP_LOAD_CONST_INLINE_BORROW 477
 | 
					#define _POP_TOP_LOAD_CONST_INLINE_BORROW 478
 | 
				
			||||||
#define _POP_TWO_LOAD_CONST_INLINE_BORROW 478
 | 
					#define _POP_TWO_LOAD_CONST_INLINE_BORROW 479
 | 
				
			||||||
#define _PUSH_EXC_INFO PUSH_EXC_INFO
 | 
					#define _PUSH_EXC_INFO PUSH_EXC_INFO
 | 
				
			||||||
#define _PUSH_FRAME 479
 | 
					#define _PUSH_FRAME 480
 | 
				
			||||||
#define _PUSH_NULL PUSH_NULL
 | 
					#define _PUSH_NULL PUSH_NULL
 | 
				
			||||||
#define _PUSH_NULL_CONDITIONAL 480
 | 
					#define _PUSH_NULL_CONDITIONAL 481
 | 
				
			||||||
#define _PY_FRAME_GENERAL 481
 | 
					#define _PY_FRAME_GENERAL 482
 | 
				
			||||||
#define _PY_FRAME_KW 482
 | 
					#define _PY_FRAME_KW 483
 | 
				
			||||||
#define _QUICKEN_RESUME 483
 | 
					#define _QUICKEN_RESUME 484
 | 
				
			||||||
#define _REPLACE_WITH_TRUE 484
 | 
					#define _REPLACE_WITH_TRUE 485
 | 
				
			||||||
#define _RESUME_CHECK RESUME_CHECK
 | 
					#define _RESUME_CHECK RESUME_CHECK
 | 
				
			||||||
#define _RETURN_GENERATOR RETURN_GENERATOR
 | 
					#define _RETURN_GENERATOR RETURN_GENERATOR
 | 
				
			||||||
#define _RETURN_VALUE RETURN_VALUE
 | 
					#define _RETURN_VALUE RETURN_VALUE
 | 
				
			||||||
#define _SAVE_RETURN_OFFSET 485
 | 
					#define _SAVE_RETURN_OFFSET 486
 | 
				
			||||||
#define _SEND 486
 | 
					#define _SEND 487
 | 
				
			||||||
#define _SEND_GEN_FRAME 487
 | 
					#define _SEND_GEN_FRAME 488
 | 
				
			||||||
#define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS
 | 
					#define _SETUP_ANNOTATIONS SETUP_ANNOTATIONS
 | 
				
			||||||
#define _SET_ADD SET_ADD
 | 
					#define _SET_ADD SET_ADD
 | 
				
			||||||
#define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE
 | 
					#define _SET_FUNCTION_ATTRIBUTE SET_FUNCTION_ATTRIBUTE
 | 
				
			||||||
#define _SET_UPDATE SET_UPDATE
 | 
					#define _SET_UPDATE SET_UPDATE
 | 
				
			||||||
#define _START_EXECUTOR 488
 | 
					#define _START_EXECUTOR 489
 | 
				
			||||||
#define _STORE_ATTR 489
 | 
					#define _STORE_ATTR 490
 | 
				
			||||||
#define _STORE_ATTR_INSTANCE_VALUE 490
 | 
					#define _STORE_ATTR_INSTANCE_VALUE 491
 | 
				
			||||||
#define _STORE_ATTR_SLOT 491
 | 
					#define _STORE_ATTR_SLOT 492
 | 
				
			||||||
#define _STORE_ATTR_WITH_HINT 492
 | 
					#define _STORE_ATTR_WITH_HINT 493
 | 
				
			||||||
#define _STORE_DEREF STORE_DEREF
 | 
					#define _STORE_DEREF STORE_DEREF
 | 
				
			||||||
#define _STORE_FAST 493
 | 
					#define _STORE_FAST 494
 | 
				
			||||||
#define _STORE_FAST_0 494
 | 
					#define _STORE_FAST_0 495
 | 
				
			||||||
#define _STORE_FAST_1 495
 | 
					#define _STORE_FAST_1 496
 | 
				
			||||||
#define _STORE_FAST_2 496
 | 
					#define _STORE_FAST_2 497
 | 
				
			||||||
#define _STORE_FAST_3 497
 | 
					#define _STORE_FAST_3 498
 | 
				
			||||||
#define _STORE_FAST_4 498
 | 
					#define _STORE_FAST_4 499
 | 
				
			||||||
#define _STORE_FAST_5 499
 | 
					#define _STORE_FAST_5 500
 | 
				
			||||||
#define _STORE_FAST_6 500
 | 
					#define _STORE_FAST_6 501
 | 
				
			||||||
#define _STORE_FAST_7 501
 | 
					#define _STORE_FAST_7 502
 | 
				
			||||||
#define _STORE_FAST_LOAD_FAST STORE_FAST_LOAD_FAST
 | 
					#define _STORE_FAST_LOAD_FAST STORE_FAST_LOAD_FAST
 | 
				
			||||||
#define _STORE_FAST_STORE_FAST STORE_FAST_STORE_FAST
 | 
					#define _STORE_FAST_STORE_FAST STORE_FAST_STORE_FAST
 | 
				
			||||||
#define _STORE_GLOBAL STORE_GLOBAL
 | 
					#define _STORE_GLOBAL STORE_GLOBAL
 | 
				
			||||||
#define _STORE_NAME STORE_NAME
 | 
					#define _STORE_NAME STORE_NAME
 | 
				
			||||||
#define _STORE_SLICE 502
 | 
					#define _STORE_SLICE 503
 | 
				
			||||||
#define _STORE_SUBSCR 503
 | 
					#define _STORE_SUBSCR 504
 | 
				
			||||||
#define _STORE_SUBSCR_DICT 504
 | 
					#define _STORE_SUBSCR_DICT 505
 | 
				
			||||||
#define _STORE_SUBSCR_LIST_INT 505
 | 
					#define _STORE_SUBSCR_LIST_INT 506
 | 
				
			||||||
#define _SWAP SWAP
 | 
					#define _SWAP SWAP
 | 
				
			||||||
#define _TIER2_RESUME_CHECK 506
 | 
					#define _TIER2_RESUME_CHECK 507
 | 
				
			||||||
#define _TO_BOOL 507
 | 
					#define _TO_BOOL 508
 | 
				
			||||||
#define _TO_BOOL_BOOL TO_BOOL_BOOL
 | 
					#define _TO_BOOL_BOOL TO_BOOL_BOOL
 | 
				
			||||||
#define _TO_BOOL_INT TO_BOOL_INT
 | 
					#define _TO_BOOL_INT TO_BOOL_INT
 | 
				
			||||||
#define _TO_BOOL_LIST 508
 | 
					#define _TO_BOOL_LIST 509
 | 
				
			||||||
#define _TO_BOOL_NONE TO_BOOL_NONE
 | 
					#define _TO_BOOL_NONE TO_BOOL_NONE
 | 
				
			||||||
#define _TO_BOOL_STR 509
 | 
					#define _TO_BOOL_STR 510
 | 
				
			||||||
#define _UNARY_INVERT UNARY_INVERT
 | 
					#define _UNARY_INVERT UNARY_INVERT
 | 
				
			||||||
#define _UNARY_NEGATIVE UNARY_NEGATIVE
 | 
					#define _UNARY_NEGATIVE UNARY_NEGATIVE
 | 
				
			||||||
#define _UNARY_NOT UNARY_NOT
 | 
					#define _UNARY_NOT UNARY_NOT
 | 
				
			||||||
#define _UNPACK_EX UNPACK_EX
 | 
					#define _UNPACK_EX UNPACK_EX
 | 
				
			||||||
#define _UNPACK_SEQUENCE 510
 | 
					#define _UNPACK_SEQUENCE 511
 | 
				
			||||||
#define _UNPACK_SEQUENCE_LIST 511
 | 
					#define _UNPACK_SEQUENCE_LIST 512
 | 
				
			||||||
#define _UNPACK_SEQUENCE_TUPLE 512
 | 
					#define _UNPACK_SEQUENCE_TUPLE 513
 | 
				
			||||||
#define _UNPACK_SEQUENCE_TWO_TUPLE 513
 | 
					#define _UNPACK_SEQUENCE_TWO_TUPLE 514
 | 
				
			||||||
#define _WITH_EXCEPT_START WITH_EXCEPT_START
 | 
					#define _WITH_EXCEPT_START WITH_EXCEPT_START
 | 
				
			||||||
#define _YIELD_VALUE YIELD_VALUE
 | 
					#define _YIELD_VALUE YIELD_VALUE
 | 
				
			||||||
#define MAX_UOP_ID 513
 | 
					#define MAX_UOP_ID 514
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								Include/internal/pycore_uop_metadata.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Include/internal/pycore_uop_metadata.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -238,6 +238,7 @@ const uint16_t _PyUop_Flags[MAX_UOP_ID+1] = {
 | 
				
			||||||
    [_CHECK_PEP_523] = HAS_DEOPT_FLAG,
 | 
					    [_CHECK_PEP_523] = HAS_DEOPT_FLAG,
 | 
				
			||||||
    [_CHECK_FUNCTION_EXACT_ARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG,
 | 
					    [_CHECK_FUNCTION_EXACT_ARGS] = HAS_ARG_FLAG | HAS_EXIT_FLAG,
 | 
				
			||||||
    [_CHECK_STACK_SPACE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
 | 
					    [_CHECK_STACK_SPACE] = HAS_ARG_FLAG | HAS_DEOPT_FLAG,
 | 
				
			||||||
 | 
					    [_CHECK_RECURSION_REMAINING] = HAS_DEOPT_FLAG,
 | 
				
			||||||
    [_INIT_CALL_PY_EXACT_ARGS_0] = HAS_PURE_FLAG,
 | 
					    [_INIT_CALL_PY_EXACT_ARGS_0] = HAS_PURE_FLAG,
 | 
				
			||||||
    [_INIT_CALL_PY_EXACT_ARGS_1] = HAS_PURE_FLAG,
 | 
					    [_INIT_CALL_PY_EXACT_ARGS_1] = HAS_PURE_FLAG,
 | 
				
			||||||
    [_INIT_CALL_PY_EXACT_ARGS_2] = HAS_PURE_FLAG,
 | 
					    [_INIT_CALL_PY_EXACT_ARGS_2] = HAS_PURE_FLAG,
 | 
				
			||||||
| 
						 | 
					@ -380,6 +381,7 @@ const char *const _PyOpcode_uop_name[MAX_UOP_ID+1] = {
 | 
				
			||||||
    [_CHECK_PEP_523] = "_CHECK_PEP_523",
 | 
					    [_CHECK_PEP_523] = "_CHECK_PEP_523",
 | 
				
			||||||
    [_CHECK_PERIODIC] = "_CHECK_PERIODIC",
 | 
					    [_CHECK_PERIODIC] = "_CHECK_PERIODIC",
 | 
				
			||||||
    [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = "_CHECK_PERIODIC_IF_NOT_YIELD_FROM",
 | 
					    [_CHECK_PERIODIC_IF_NOT_YIELD_FROM] = "_CHECK_PERIODIC_IF_NOT_YIELD_FROM",
 | 
				
			||||||
 | 
					    [_CHECK_RECURSION_REMAINING] = "_CHECK_RECURSION_REMAINING",
 | 
				
			||||||
    [_CHECK_STACK_SPACE] = "_CHECK_STACK_SPACE",
 | 
					    [_CHECK_STACK_SPACE] = "_CHECK_STACK_SPACE",
 | 
				
			||||||
    [_CHECK_STACK_SPACE_OPERAND] = "_CHECK_STACK_SPACE_OPERAND",
 | 
					    [_CHECK_STACK_SPACE_OPERAND] = "_CHECK_STACK_SPACE_OPERAND",
 | 
				
			||||||
    [_CHECK_VALIDITY] = "_CHECK_VALIDITY",
 | 
					    [_CHECK_VALIDITY] = "_CHECK_VALIDITY",
 | 
				
			||||||
| 
						 | 
					@ -1046,6 +1048,8 @@ int _PyUop_num_popped(int opcode, int oparg)
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        case _CHECK_STACK_SPACE:
 | 
					        case _CHECK_STACK_SPACE:
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
 | 
					        case _CHECK_RECURSION_REMAINING:
 | 
				
			||||||
 | 
					            return 0;
 | 
				
			||||||
        case _INIT_CALL_PY_EXACT_ARGS_0:
 | 
					        case _INIT_CALL_PY_EXACT_ARGS_0:
 | 
				
			||||||
            return 2 + oparg;
 | 
					            return 2 + oparg;
 | 
				
			||||||
        case _INIT_CALL_PY_EXACT_ARGS_1:
 | 
					        case _INIT_CALL_PY_EXACT_ARGS_1:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -560,6 +560,13 @@ def instantiate():
 | 
				
			||||||
        with self.assertRaises(TypeError):
 | 
					        with self.assertRaises(TypeError):
 | 
				
			||||||
            instantiate()
 | 
					            instantiate()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_recursion_check_for_general_calls(self):
 | 
				
			||||||
 | 
					        def test(default=None):
 | 
				
			||||||
 | 
					            return test()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        with self.assertRaises(RecursionError):
 | 
				
			||||||
 | 
					            test()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def make_deferred_ref_count_obj():
 | 
					def make_deferred_ref_count_obj():
 | 
				
			||||||
    """Create an object that uses deferred reference counting.
 | 
					    """Create an object that uses deferred reference counting.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					Certain calls now check for runaway recursion and respect the system recursion limit.
 | 
				
			||||||
| 
						 | 
					@ -3858,6 +3858,7 @@ dummy_func(
 | 
				
			||||||
            unused/1 + // Skip over the counter
 | 
					            unused/1 + // Skip over the counter
 | 
				
			||||||
            _CHECK_PEP_523 +
 | 
					            _CHECK_PEP_523 +
 | 
				
			||||||
            _CHECK_FUNCTION_VERSION +
 | 
					            _CHECK_FUNCTION_VERSION +
 | 
				
			||||||
 | 
					            _CHECK_RECURSION_REMAINING +
 | 
				
			||||||
            _PY_FRAME_GENERAL +
 | 
					            _PY_FRAME_GENERAL +
 | 
				
			||||||
            _SAVE_RETURN_OFFSET +
 | 
					            _SAVE_RETURN_OFFSET +
 | 
				
			||||||
            _PUSH_FRAME;
 | 
					            _PUSH_FRAME;
 | 
				
			||||||
| 
						 | 
					@ -3889,6 +3890,7 @@ dummy_func(
 | 
				
			||||||
            _CHECK_METHOD_VERSION +
 | 
					            _CHECK_METHOD_VERSION +
 | 
				
			||||||
            _EXPAND_METHOD +
 | 
					            _EXPAND_METHOD +
 | 
				
			||||||
            flush + // so that self is in the argument array
 | 
					            flush + // so that self is in the argument array
 | 
				
			||||||
 | 
					            _CHECK_RECURSION_REMAINING +
 | 
				
			||||||
            _PY_FRAME_GENERAL +
 | 
					            _PY_FRAME_GENERAL +
 | 
				
			||||||
            _SAVE_RETURN_OFFSET +
 | 
					            _SAVE_RETURN_OFFSET +
 | 
				
			||||||
            _PUSH_FRAME;
 | 
					            _PUSH_FRAME;
 | 
				
			||||||
| 
						 | 
					@ -3967,6 +3969,9 @@ dummy_func(
 | 
				
			||||||
            PyFunctionObject *func = (PyFunctionObject *)callable_o;
 | 
					            PyFunctionObject *func = (PyFunctionObject *)callable_o;
 | 
				
			||||||
            PyCodeObject *code = (PyCodeObject *)func->func_code;
 | 
					            PyCodeObject *code = (PyCodeObject *)func->func_code;
 | 
				
			||||||
            DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize));
 | 
					            DEOPT_IF(!_PyThreadState_HasStackSpace(tstate, code->co_framesize));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        op(_CHECK_RECURSION_REMAINING, (--)) {
 | 
				
			||||||
            DEOPT_IF(tstate->py_recursion_remaining <= 1);
 | 
					            DEOPT_IF(tstate->py_recursion_remaining <= 1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4008,6 +4013,7 @@ dummy_func(
 | 
				
			||||||
            _CHECK_FUNCTION_VERSION +
 | 
					            _CHECK_FUNCTION_VERSION +
 | 
				
			||||||
            _CHECK_FUNCTION_EXACT_ARGS +
 | 
					            _CHECK_FUNCTION_EXACT_ARGS +
 | 
				
			||||||
            _CHECK_STACK_SPACE +
 | 
					            _CHECK_STACK_SPACE +
 | 
				
			||||||
 | 
					            _CHECK_RECURSION_REMAINING +
 | 
				
			||||||
            _INIT_CALL_PY_EXACT_ARGS +
 | 
					            _INIT_CALL_PY_EXACT_ARGS +
 | 
				
			||||||
            _SAVE_RETURN_OFFSET +
 | 
					            _SAVE_RETURN_OFFSET +
 | 
				
			||||||
            _PUSH_FRAME;
 | 
					            _PUSH_FRAME;
 | 
				
			||||||
| 
						 | 
					@ -4018,6 +4024,7 @@ dummy_func(
 | 
				
			||||||
            _CHECK_FUNCTION_VERSION +
 | 
					            _CHECK_FUNCTION_VERSION +
 | 
				
			||||||
            _CHECK_FUNCTION_EXACT_ARGS +
 | 
					            _CHECK_FUNCTION_EXACT_ARGS +
 | 
				
			||||||
            _CHECK_STACK_SPACE +
 | 
					            _CHECK_STACK_SPACE +
 | 
				
			||||||
 | 
					            _CHECK_RECURSION_REMAINING +
 | 
				
			||||||
            _INIT_CALL_PY_EXACT_ARGS +
 | 
					            _INIT_CALL_PY_EXACT_ARGS +
 | 
				
			||||||
            _SAVE_RETURN_OFFSET +
 | 
					            _SAVE_RETURN_OFFSET +
 | 
				
			||||||
            _PUSH_FRAME;
 | 
					            _PUSH_FRAME;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								Python/executor_cases.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Python/executor_cases.c.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -5094,6 +5094,10 @@
 | 
				
			||||||
                UOP_STAT_INC(uopcode, miss);
 | 
					                UOP_STAT_INC(uopcode, miss);
 | 
				
			||||||
                JUMP_TO_JUMP_TARGET();
 | 
					                JUMP_TO_JUMP_TARGET();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case _CHECK_RECURSION_REMAINING: {
 | 
				
			||||||
            if (tstate->py_recursion_remaining <= 1) {
 | 
					            if (tstate->py_recursion_remaining <= 1) {
 | 
				
			||||||
                UOP_STAT_INC(uopcode, miss);
 | 
					                UOP_STAT_INC(uopcode, miss);
 | 
				
			||||||
                JUMP_TO_JUMP_TARGET();
 | 
					                JUMP_TO_JUMP_TARGET();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								Python/generated_cases.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										22
									
								
								Python/generated_cases.c.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -1907,6 +1907,9 @@
 | 
				
			||||||
                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
					                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
				
			||||||
                    JUMP_TO_PREDICTED(CALL);
 | 
					                    JUMP_TO_PREDICTED(CALL);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // _CHECK_RECURSION_REMAINING
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                if (tstate->py_recursion_remaining <= 1) {
 | 
					                if (tstate->py_recursion_remaining <= 1) {
 | 
				
			||||||
                    UPDATE_MISS_STATS(CALL);
 | 
					                    UPDATE_MISS_STATS(CALL);
 | 
				
			||||||
                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
					                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
				
			||||||
| 
						 | 
					@ -2022,6 +2025,14 @@
 | 
				
			||||||
                stack_pointer = _PyFrame_GetStackPointer(frame);
 | 
					                stack_pointer = _PyFrame_GetStackPointer(frame);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            // flush
 | 
					            // flush
 | 
				
			||||||
 | 
					            // _CHECK_RECURSION_REMAINING
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (tstate->py_recursion_remaining <= 1) {
 | 
				
			||||||
 | 
					                    UPDATE_MISS_STATS(CALL);
 | 
				
			||||||
 | 
					                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
				
			||||||
 | 
					                    JUMP_TO_PREDICTED(CALL);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            // _PY_FRAME_GENERAL
 | 
					            // _PY_FRAME_GENERAL
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                args = &stack_pointer[-oparg];
 | 
					                args = &stack_pointer[-oparg];
 | 
				
			||||||
| 
						 | 
					@ -4168,6 +4179,9 @@
 | 
				
			||||||
                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
					                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
				
			||||||
                    JUMP_TO_PREDICTED(CALL);
 | 
					                    JUMP_TO_PREDICTED(CALL);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // _CHECK_RECURSION_REMAINING
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                if (tstate->py_recursion_remaining <= 1) {
 | 
					                if (tstate->py_recursion_remaining <= 1) {
 | 
				
			||||||
                    UPDATE_MISS_STATS(CALL);
 | 
					                    UPDATE_MISS_STATS(CALL);
 | 
				
			||||||
                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
					                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
				
			||||||
| 
						 | 
					@ -4254,6 +4268,14 @@
 | 
				
			||||||
                    JUMP_TO_PREDICTED(CALL);
 | 
					                    JUMP_TO_PREDICTED(CALL);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            // _CHECK_RECURSION_REMAINING
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (tstate->py_recursion_remaining <= 1) {
 | 
				
			||||||
 | 
					                    UPDATE_MISS_STATS(CALL);
 | 
				
			||||||
 | 
					                    assert(_PyOpcode_Deopt[opcode] == (CALL));
 | 
				
			||||||
 | 
					                    JUMP_TO_PREDICTED(CALL);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            // _PY_FRAME_GENERAL
 | 
					            // _PY_FRAME_GENERAL
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                args = &stack_pointer[-oparg];
 | 
					                args = &stack_pointer[-oparg];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								Python/optimizer_cases.c.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								Python/optimizer_cases.c.h
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -1844,6 +1844,10 @@
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case _CHECK_RECURSION_REMAINING: {
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case _INIT_CALL_PY_EXACT_ARGS: {
 | 
					        case _INIT_CALL_PY_EXACT_ARGS: {
 | 
				
			||||||
            JitOptSymbol **args;
 | 
					            JitOptSymbol **args;
 | 
				
			||||||
            JitOptSymbol *self_or_null;
 | 
					            JitOptSymbol *self_or_null;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue