@@ -575,25 +575,13 @@ dummy_func(void) {
575575
576576 PyCodeObject * co = NULL ;
577577 assert ((this_instr + 2 )-> opcode == _PUSH_FRAME );
578- uint64_t push_operand = (this_instr + 2 )-> operand ;
579- if (push_operand & 1 ) {
580- co = (PyCodeObject * )(push_operand & ~1 );
581- DPRINTF (3 , "code=%p " , co );
582- assert (PyCode_Check (co ));
583- }
584- else {
585- PyFunctionObject * func = (PyFunctionObject * )push_operand ;
586- DPRINTF (3 , "func=%p " , func );
587- if (func == NULL ) {
588- DPRINTF (3 , "\n" );
589- DPRINTF (1 , "Missing function\n" );
590- ctx -> done = true;
591- break ;
592- }
593- co = (PyCodeObject * )func -> func_code ;
594- DPRINTF (3 , "code=%p " , co );
578+ co = get_code_with_logging ((this_instr + 2 ));
579+ if (co == NULL ) {
580+ ctx -> done = true;
581+ break ;
595582 }
596583
584+
597585 assert (self_or_null != NULL );
598586 assert (args != NULL );
599587 if (sym_is_not_null (self_or_null )) {
@@ -619,12 +607,17 @@ dummy_func(void) {
619607 }
620608
621609 op (_PY_FRAME_GENERAL , (callable , self_or_null , args [oparg ] -- new_frame : _Py_UOpsAbstractFrame * )) {
622- /* The _Py_UOpsAbstractFrame design assumes that we can copy arguments across directly */
623- (void )callable ;
624- (void )self_or_null ;
625- (void )args ;
626- new_frame = NULL ;
627- ctx -> done = true;
610+ (void )(self_or_null );
611+ (void )(callable );
612+ PyCodeObject * co = NULL ;
613+ assert ((this_instr + 2 )-> opcode == _PUSH_FRAME );
614+ co = get_code_with_logging ((this_instr + 2 ));
615+ if (co == NULL ) {
616+ ctx -> done = true;
617+ break ;
618+ }
619+
620+ new_frame = frame_new (ctx , co , 0 , NULL , 0 );
628621 }
629622
630623 op (_PY_FRAME_KW , (callable , self_or_null , args [oparg ], kwnames -- new_frame : _Py_UOpsAbstractFrame * )) {
0 commit comments