@@ -3448,7 +3448,7 @@ dummy_func(
3448
3448
}
3449
3449
}
3450
3450
3451
- op (_CHECK_FUNCTION_VERSION , (func_version /2 , callable , unused , unused [oparg ] -- callable , unused , unused [oparg ])) {
3451
+ op (_CHECK_FUNCTION_VERSION , (func_version /2 , callable , self_or_null , unused [oparg ] -- callable , self_or_null , unused [oparg ])) {
3452
3452
PyObject * callable_o = PyStackRef_AsPyObjectBorrow (callable );
3453
3453
EXIT_IF (!PyFunction_Check (callable_o ));
3454
3454
PyFunctionObject * func = (PyFunctionObject * )callable_o ;
@@ -3479,7 +3479,6 @@ dummy_func(
3479
3479
assert (PyStackRef_IsNull (null ));
3480
3480
assert (Py_TYPE (callable_o ) == & PyMethod_Type );
3481
3481
self = PyStackRef_FromPyObjectNew (((PyMethodObject * )callable_o )-> im_self );
3482
- stack_pointer [-1 - oparg ] = self ; // Patch stack as it is used by _PY_FRAME_GENERAL
3483
3482
method = PyStackRef_FromPyObjectNew (((PyMethodObject * )callable_o )-> im_func );
3484
3483
assert (PyFunction_Check (PyStackRef_AsPyObjectBorrow (method )));
3485
3484
PyStackRef_CLOSE (callable );
@@ -3490,6 +3489,7 @@ dummy_func(
3490
3489
_CHECK_PEP_523 +
3491
3490
_CHECK_METHOD_VERSION +
3492
3491
_EXPAND_METHOD +
3492
+ flush + // so that self is in the argument array
3493
3493
_PY_FRAME_GENERAL +
3494
3494
_SAVE_RETURN_OFFSET +
3495
3495
_PUSH_FRAME ;
@@ -3544,16 +3544,12 @@ dummy_func(
3544
3544
EXIT_IF (Py_TYPE (PyStackRef_AsPyObjectBorrow (callable )) != & PyMethod_Type );
3545
3545
}
3546
3546
3547
- op (_INIT_CALL_BOUND_METHOD_EXACT_ARGS , (callable , unused , unused [oparg ] -- func , self , unused [oparg ])) {
3547
+ op (_INIT_CALL_BOUND_METHOD_EXACT_ARGS , (callable , null , unused [oparg ] -- func , self , unused [oparg ])) {
3548
3548
PyObject * callable_o = PyStackRef_AsPyObjectBorrow (callable );
3549
3549
STAT_INC (CALL , hit );
3550
- stack_pointer [-1 - oparg ] = PyStackRef_FromPyObjectNew (((PyMethodObject * )callable_o )-> im_self ); // Patch stack as it is used by _INIT_CALL_PY_EXACT_ARGS
3551
- stack_pointer [-2 - oparg ] = PyStackRef_FromPyObjectNew (((PyMethodObject * )callable_o )-> im_func ); // This is used by CALL, upon deoptimization
3552
- self = stack_pointer [-1 - oparg ];
3553
- func = stack_pointer [-2 - oparg ];
3550
+ self = PyStackRef_FromPyObjectNew (((PyMethodObject * )callable_o )-> im_self );
3551
+ func = PyStackRef_FromPyObjectNew (((PyMethodObject * )callable_o )-> im_func );
3554
3552
PyStackRef_CLOSE (callable );
3555
- // self may be unused in tier 1, so silence warnings.
3556
- (void )self ;
3557
3553
}
3558
3554
3559
3555
op (_CHECK_PEP_523 , (-- )) {
@@ -3568,7 +3564,7 @@ dummy_func(
3568
3564
EXIT_IF (code -> co_argcount != oparg + (!PyStackRef_IsNull (self_or_null )));
3569
3565
}
3570
3566
3571
- op (_CHECK_STACK_SPACE , (callable , unused , unused [oparg ] -- callable , unused , unused [oparg ])) {
3567
+ op (_CHECK_STACK_SPACE , (callable , self_or_null , unused [oparg ] -- callable , self_or_null , unused [oparg ])) {
3572
3568
PyObject * callable_o = PyStackRef_AsPyObjectBorrow (callable );
3573
3569
PyFunctionObject * func = (PyFunctionObject * )callable_o ;
3574
3570
PyCodeObject * code = (PyCodeObject * )func -> func_code ;
@@ -3609,6 +3605,7 @@ dummy_func(
3609
3605
_CHECK_PEP_523 +
3610
3606
_CHECK_CALL_BOUND_METHOD_EXACT_ARGS +
3611
3607
_INIT_CALL_BOUND_METHOD_EXACT_ARGS +
3608
+ flush + // In case the following deopt
3612
3609
_CHECK_FUNCTION_VERSION +
3613
3610
_CHECK_FUNCTION_EXACT_ARGS +
3614
3611
_CHECK_STACK_SPACE +
0 commit comments