@@ -129,6 +129,8 @@ dummy_func(
129
129
PyObject * top ;
130
130
PyObject * type ;
131
131
PyObject * typevars ;
132
+ PyObject * val0 ;
133
+ PyObject * val1 ;
132
134
int values_or_none ;
133
135
134
136
switch (opcode ) {
@@ -1223,13 +1225,13 @@ dummy_func(
1223
1225
1224
1226
macro (UNPACK_SEQUENCE ) = _SPECIALIZE_UNPACK_SEQUENCE + _UNPACK_SEQUENCE ;
1225
1227
1226
- inst (UNPACK_SEQUENCE_TWO_TUPLE , (unused /1 , seq -- values [oparg ])) {
1228
+ inst (UNPACK_SEQUENCE_TWO_TUPLE , (unused /1 , seq -- val1 , val0 )) {
1229
+ assert (oparg == 2 );
1227
1230
DEOPT_IF (!PyTuple_CheckExact (seq ));
1228
1231
DEOPT_IF (PyTuple_GET_SIZE (seq ) != 2 );
1229
- assert (oparg == 2 );
1230
1232
STAT_INC (UNPACK_SEQUENCE , hit );
1231
- values [ 0 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
1232
- values [ 1 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
1233
+ val0 = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
1234
+ val1 = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
1233
1235
DECREF_INPUTS ();
1234
1236
}
1235
1237
@@ -3236,39 +3238,33 @@ dummy_func(
3236
3238
DISPATCH_INLINED (new_frame );
3237
3239
}
3238
3240
3239
- inst (CALL_TYPE_1 , (unused /1 , unused /2 , callable , null , args [ oparg ] -- res )) {
3241
+ inst (CALL_TYPE_1 , (unused /1 , unused /2 , callable , null , arg -- res )) {
3240
3242
assert (oparg == 1 );
3241
3243
DEOPT_IF (null != NULL );
3242
- PyObject * obj = args [0 ];
3243
3244
DEOPT_IF (callable != (PyObject * )& PyType_Type );
3244
3245
STAT_INC (CALL , hit );
3245
- res = Py_NewRef (Py_TYPE (obj ));
3246
- Py_DECREF (obj );
3247
- Py_DECREF (& PyType_Type ); // I.e., callable
3246
+ res = Py_NewRef (Py_TYPE (arg ));
3247
+ Py_DECREF (arg );
3248
3248
}
3249
3249
3250
- inst (CALL_STR_1 , (unused /1 , unused /2 , callable , null , args [ oparg ] -- res )) {
3250
+ inst (CALL_STR_1 , (unused /1 , unused /2 , callable , null , arg -- res )) {
3251
3251
assert (oparg == 1 );
3252
3252
DEOPT_IF (null != NULL );
3253
3253
DEOPT_IF (callable != (PyObject * )& PyUnicode_Type );
3254
3254
STAT_INC (CALL , hit );
3255
- PyObject * arg = args [0 ];
3256
3255
res = PyObject_Str (arg );
3257
3256
Py_DECREF (arg );
3258
- Py_DECREF (& PyUnicode_Type ); // I.e., callable
3259
3257
ERROR_IF (res == NULL , error );
3260
3258
CHECK_EVAL_BREAKER ();
3261
3259
}
3262
3260
3263
- inst (CALL_TUPLE_1 , (unused /1 , unused /2 , callable , null , args [ oparg ] -- res )) {
3261
+ inst (CALL_TUPLE_1 , (unused /1 , unused /2 , callable , null , arg -- res )) {
3264
3262
assert (oparg == 1 );
3265
3263
DEOPT_IF (null != NULL );
3266
3264
DEOPT_IF (callable != (PyObject * )& PyTuple_Type );
3267
3265
STAT_INC (CALL , hit );
3268
- PyObject * arg = args [0 ];
3269
3266
res = PySequence_Tuple (arg );
3270
3267
Py_DECREF (arg );
3271
- Py_DECREF (& PyTuple_Type ); // I.e., tuple
3272
3268
ERROR_IF (res == NULL , error );
3273
3269
CHECK_EVAL_BREAKER ();
3274
3270
}
@@ -3490,14 +3486,14 @@ dummy_func(
3490
3486
}
3491
3487
3492
3488
// This is secretly a super-instruction
3493
- tier1 inst (CALL_LIST_APPEND , (unused /1 , unused /2 , callable , self , args [ oparg ] -- unused )) {
3489
+ tier1 inst (CALL_LIST_APPEND , (unused /1 , unused /2 , callable , self , arg -- unused )) {
3494
3490
assert (oparg == 1 );
3495
3491
PyInterpreterState * interp = tstate -> interp ;
3496
3492
DEOPT_IF (callable != interp -> callable_cache .list_append );
3497
3493
assert (self != NULL );
3498
3494
DEOPT_IF (!PyList_Check (self ));
3499
3495
STAT_INC (CALL , hit );
3500
- if (_PyList_AppendTakeRef ((PyListObject * )self , args [ 0 ] ) < 0 ) {
3496
+ if (_PyList_AppendTakeRef ((PyListObject * )self , arg ) < 0 ) {
3501
3497
goto pop_1_error ; // Since arg is DECREF'ed already
3502
3498
}
3503
3499
Py_DECREF (self );
0 commit comments