@@ -307,6 +307,9 @@ CTracer_handle_call(CTracer *self, PyFrameObject *frame)
307
307
PyObject * plugin = NULL ;
308
308
PyObject * plugin_name = NULL ;
309
309
PyObject * next_tracename = NULL ;
310
+ #ifdef RESUME
311
+ PyObject * pCode = NULL ;
312
+ #endif
310
313
311
314
/* Borrowed references. */
312
315
PyObject * filename = NULL ;
@@ -526,16 +529,16 @@ CTracer_handle_call(CTracer *self, PyFrameObject *frame)
526
529
*/
527
530
BOOL real_call = FALSE;
528
531
529
- #ifdef RESUME // 3.11.0a4
532
+ #ifdef RESUME
530
533
/*
531
534
* The current opcode is guaranteed to be RESUME. The argument
532
535
* determines what kind of resume it is.
533
536
*/
534
- PyObject * pCode = MyFrame_GetCode (frame )-> co_code ;
535
- real_call = (PyBytes_AS_STRING (pCode )[MyFrame_lasti (frame ) + 1 ] == 0 );
537
+ pCode = MyCode_GetCode ( MyFrame_GetCode (frame )) ;
538
+ real_call = (PyBytes_AS_STRING (pCode )[MyFrame_GetLasti (frame ) + 1 ] == 0 );
536
539
#else
537
540
// f_lasti is -1 for a true call, and a real byte offset for a generator re-entry.
538
- real_call = (MyFrame_lasti (frame ) < 0 );
541
+ real_call = (MyFrame_GetLasti (frame ) < 0 );
539
542
#endif
540
543
541
544
if (real_call ) {
@@ -549,6 +552,9 @@ CTracer_handle_call(CTracer *self, PyFrameObject *frame)
549
552
ret = RET_OK ;
550
553
551
554
error :
555
+ #ifdef RESUME
556
+ MyCode_FreeCode (pCode );
557
+ #endif
552
558
Py_XDECREF (next_tracename );
553
559
Py_XDECREF (disposition );
554
560
Py_XDECREF (plugin );
@@ -689,6 +695,8 @@ CTracer_handle_return(CTracer *self, PyFrameObject *frame)
689
695
{
690
696
int ret = RET_ERROR ;
691
697
698
+ PyObject * pCode = NULL ;
699
+
692
700
STATS ( self -> stats .returns ++ ; )
693
701
/* A near-copy of this code is above in the missing-return handler. */
694
702
if (CTracer_set_pdata_stack (self ) < 0 ) {
@@ -699,8 +707,8 @@ CTracer_handle_return(CTracer *self, PyFrameObject *frame)
699
707
if (self -> pdata_stack -> depth >= 0 ) {
700
708
if (self -> tracing_arcs && self -> pcur_entry -> file_data ) {
701
709
BOOL real_return = FALSE;
702
- PyObject * pCode = MyFrame_GetCode (frame )-> co_code ;
703
- int lasti = MyFrame_lasti (frame );
710
+ pCode = MyCode_GetCode ( MyFrame_GetCode (frame )) ;
711
+ int lasti = MyFrame_GetLasti (frame );
704
712
Py_ssize_t code_size = PyBytes_GET_SIZE (pCode );
705
713
unsigned char * code_bytes = (unsigned char * )PyBytes_AS_STRING (pCode );
706
714
#ifdef RESUME
@@ -760,6 +768,7 @@ CTracer_handle_return(CTracer *self, PyFrameObject *frame)
760
768
761
769
error :
762
770
771
+ MyCode_FreeCode (pCode );
763
772
return ret ;
764
773
}
765
774
0 commit comments