@@ -2364,17 +2364,27 @@ dummy_func(
2364
2364
2365
2365
PyCodeObject * code = _PyFrame_GetCode (frame );
2366
2366
_PyExecutorObject * executor = (_PyExecutorObject * )code -> co_executors -> executors [oparg & 255 ];
2367
- Py_INCREF (executor );
2368
- if (executor -> execute == _PyUOpExecute ) {
2369
- current_executor = (_PyUOpExecutorObject * )executor ;
2370
- GOTO_TIER_TWO ();
2367
+ if (executor -> vm_data .valid ) {
2368
+ Py_INCREF (executor );
2369
+ if (executor -> execute == _PyUOpExecute ) {
2370
+ current_executor = (_PyUOpExecutorObject * )executor ;
2371
+ GOTO_TIER_TWO ();
2372
+ }
2373
+ next_instr = executor -> execute (executor , frame , stack_pointer );
2374
+ frame = tstate -> current_frame ;
2375
+ if (next_instr == NULL ) {
2376
+ goto resume_with_error ;
2377
+ }
2378
+ stack_pointer = _PyFrame_GetStackPointer (frame );
2371
2379
}
2372
- next_instr = executor -> execute (executor , frame , stack_pointer );
2373
- frame = tstate -> current_frame ;
2374
- if (next_instr == NULL ) {
2375
- goto resume_with_error ;
2380
+ else {
2381
+ opcode = this_instr -> op .code = executor -> vm_data .opcode ;
2382
+ this_instr -> op .arg = executor -> vm_data .oparg ;
2383
+ oparg = (oparg & (~255 )) | executor -> vm_data .oparg ;
2384
+ code -> co_executors -> executors [oparg & 255 ] = NULL ;
2385
+ Py_DECREF (executor );
2386
+ DISPATCH_GOTO ();
2376
2387
}
2377
- stack_pointer = _PyFrame_GetStackPointer (frame );
2378
2388
}
2379
2389
2380
2390
replaced op (_POP_JUMP_IF_FALSE , (cond -- )) {
0 commit comments