@@ -457,8 +457,7 @@ dummy_func(
457
457
if (!_PyErr_Occurred (tstate )) {
458
458
_PyErr_SetKeyError (sub );
459
459
}
460
- Py_DECREF (dict );
461
- Py_DECREF (sub );
460
+ DECREF_INPUTS ();
462
461
ERROR_IF (true, error );
463
462
}
464
463
Py_INCREF (res ); // Do this before DECREF'ing dict, sub
@@ -493,7 +492,7 @@ dummy_func(
493
492
494
493
inst (SET_ADD , (set , unused [oparg - 1 ], v -- set , unused [oparg - 1 ])) {
495
494
int err = PySet_Add (set , v );
496
- Py_DECREF ( v );
495
+ DECREF_INPUTS ( );
497
496
ERROR_IF (err , error );
498
497
PREDICT (JUMP_BACKWARD );
499
498
}
@@ -972,7 +971,7 @@ dummy_func(
972
971
#endif /* ENABLE_SPECIALIZATION */
973
972
PyObject * * top = stack_pointer + oparg - 1 ;
974
973
int res = unpack_iterable (tstate , seq , oparg , -1 , top );
975
- Py_DECREF ( seq );
974
+ DECREF_INPUTS ( );
976
975
ERROR_IF (res == 0 , error );
977
976
}
978
977
@@ -983,7 +982,7 @@ dummy_func(
983
982
STAT_INC (UNPACK_SEQUENCE , hit );
984
983
values [0 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
985
984
values [1 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
986
- Py_DECREF ( seq );
985
+ DECREF_INPUTS ( );
987
986
}
988
987
989
988
inst (UNPACK_SEQUENCE_TUPLE , (unused /1 , seq -- values [oparg ])) {
@@ -994,7 +993,7 @@ dummy_func(
994
993
for (int i = oparg ; -- i >= 0 ; ) {
995
994
* values ++ = Py_NewRef (items [i ]);
996
995
}
997
- Py_DECREF ( seq );
996
+ DECREF_INPUTS ( );
998
997
}
999
998
1000
999
inst (UNPACK_SEQUENCE_LIST , (unused /1 , seq -- values [oparg ])) {
@@ -1005,14 +1004,14 @@ dummy_func(
1005
1004
for (int i = oparg ; -- i >= 0 ; ) {
1006
1005
* values ++ = Py_NewRef (items [i ]);
1007
1006
}
1008
- Py_DECREF ( seq );
1007
+ DECREF_INPUTS ( );
1009
1008
}
1010
1009
1011
1010
inst (UNPACK_EX , (seq -- unused [oparg & 0xFF ], unused , unused [oparg >> 8 ])) {
1012
1011
int totalargs = 1 + (oparg & 0xFF ) + (oparg >> 8 );
1013
1012
PyObject * * top = stack_pointer + totalargs - 1 ;
1014
1013
int res = unpack_iterable (tstate , seq , oparg & 0xFF , oparg >> 8 , top );
1015
- Py_DECREF ( seq );
1014
+ DECREF_INPUTS ( );
1016
1015
ERROR_IF (res == 0 , error );
1017
1016
}
1018
1017
@@ -1040,22 +1039,21 @@ dummy_func(
1040
1039
#endif /* ENABLE_SPECIALIZATION */
1041
1040
PyObject * name = GETITEM (frame -> f_code -> co_names , oparg );
1042
1041
int err = PyObject_SetAttr (owner , name , v );
1043
- Py_DECREF (v );
1044
- Py_DECREF (owner );
1042
+ DECREF_INPUTS ();
1045
1043
ERROR_IF (err , error );
1046
1044
}
1047
1045
1048
1046
inst (DELETE_ATTR , (owner -- )) {
1049
1047
PyObject * name = GETITEM (frame -> f_code -> co_names , oparg );
1050
1048
int err = PyObject_SetAttr (owner , name , (PyObject * )NULL );
1051
- Py_DECREF ( owner );
1049
+ DECREF_INPUTS ( );
1052
1050
ERROR_IF (err , error );
1053
1051
}
1054
1052
1055
1053
inst (STORE_GLOBAL , (v -- )) {
1056
1054
PyObject * name = GETITEM (frame -> f_code -> co_names , oparg );
1057
1055
int err = PyDict_SetItem (GLOBALS (), name , v );
1058
- Py_DECREF ( v );
1056
+ DECREF_INPUTS ( );
1059
1057
ERROR_IF (err , error );
1060
1058
}
1061
1059
@@ -1322,9 +1320,7 @@ dummy_func(
1322
1320
1323
1321
inst (BUILD_STRING , (pieces [oparg ] -- str : PyUnicode_Type )) {
1324
1322
str = _PyUnicode_JoinArray (& _Py_STR (empty ), pieces , oparg );
1325
- for (int i = 0 ; i < oparg ; i ++ ) {
1326
- Py_DECREF (pieces [i ]);
1327
- }
1323
+ DECREF_INPUTS ();
1328
1324
ERROR_IF (str == NULL , error );
1329
1325
}
1330
1326
@@ -1387,10 +1383,7 @@ dummy_func(
1387
1383
if (map == NULL )
1388
1384
goto error ;
1389
1385
1390
- for (int i = 0 ; i < oparg ; i ++ ) {
1391
- Py_DECREF (values [i * 2 ]);
1392
- Py_DECREF (values [i * 2 + 1 ]);
1393
- }
1386
+ DECREF_INPUTS ();
1394
1387
ERROR_IF (map == NULL , error );
1395
1388
}
1396
1389
@@ -1446,10 +1439,7 @@ dummy_func(
1446
1439
map = _PyDict_FromItems (
1447
1440
& PyTuple_GET_ITEM (keys , 0 ), 1 ,
1448
1441
values , 1 , oparg );
1449
- Py_DECREF (keys );
1450
- for (int i = 0 ; i < oparg ; i ++ ) {
1451
- Py_DECREF (values [i ]);
1452
- }
1442
+ DECREF_INPUTS ();
1453
1443
ERROR_IF (map == NULL , error );
1454
1444
}
1455
1445
@@ -1537,7 +1527,7 @@ dummy_func(
1537
1527
1538
1528
NULL | meth | arg1 | ... | argN
1539
1529
*/
1540
- Py_DECREF ( owner );
1530
+ DECREF_INPUTS ( );
1541
1531
ERROR_IF (meth == NULL , error );
1542
1532
res2 = NULL ;
1543
1533
res = meth ;
@@ -1546,7 +1536,7 @@ dummy_func(
1546
1536
else {
1547
1537
/* Classic, pushes one value. */
1548
1538
res = PyObject_GetAttr (owner , name );
1549
- Py_DECREF ( owner );
1539
+ DECREF_INPUTS ( );
1550
1540
ERROR_IF (res == NULL , error );
1551
1541
}
1552
1542
}
@@ -1565,7 +1555,7 @@ dummy_func(
1565
1555
STAT_INC (LOAD_ATTR , hit );
1566
1556
Py_INCREF (res );
1567
1557
res2 = NULL ;
1568
- Py_DECREF ( owner );
1558
+ DECREF_INPUTS ( );
1569
1559
}
1570
1560
1571
1561
inst (LOAD_ATTR_MODULE , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1582,7 +1572,7 @@ dummy_func(
1582
1572
STAT_INC (LOAD_ATTR , hit );
1583
1573
Py_INCREF (res );
1584
1574
res2 = NULL ;
1585
- Py_DECREF ( owner );
1575
+ DECREF_INPUTS ( );
1586
1576
}
1587
1577
1588
1578
inst (LOAD_ATTR_WITH_HINT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1613,7 +1603,7 @@ dummy_func(
1613
1603
STAT_INC (LOAD_ATTR , hit );
1614
1604
Py_INCREF (res );
1615
1605
res2 = NULL ;
1616
- Py_DECREF ( owner );
1606
+ DECREF_INPUTS ( );
1617
1607
}
1618
1608
1619
1609
inst (LOAD_ATTR_SLOT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1627,7 +1617,7 @@ dummy_func(
1627
1617
STAT_INC (LOAD_ATTR , hit );
1628
1618
Py_INCREF (res );
1629
1619
res2 = NULL ;
1630
- Py_DECREF ( owner );
1620
+ DECREF_INPUTS ( );
1631
1621
}
1632
1622
1633
1623
inst (LOAD_ATTR_CLASS , (unused /1 , type_version /2 , unused /2 , descr /4 , cls -- res2 if (oparg & 1 ), res )) {
@@ -1643,7 +1633,7 @@ dummy_func(
1643
1633
res = descr ;
1644
1634
assert (res != NULL );
1645
1635
Py_INCREF (res );
1646
- Py_DECREF ( cls );
1636
+ DECREF_INPUTS ( );
1647
1637
}
1648
1638
1649
1639
inst (LOAD_ATTR_PROPERTY , (unused /1 , type_version /2 , func_version /2 , fget /4 , owner -- unused if (oparg & 1 ), unused )) {
@@ -1780,8 +1770,7 @@ dummy_func(
1780
1770
STAT_INC (COMPARE_OP , deferred );
1781
1771
assert ((oparg >> 4 ) <= Py_GE );
1782
1772
res = PyObject_RichCompare (left , right , oparg >>4 );
1783
- Py_DECREF (left );
1784
- Py_DECREF (right );
1773
+ DECREF_INPUTS ();
1785
1774
ERROR_IF (res == NULL , error );
1786
1775
}
1787
1776
@@ -1807,8 +1796,7 @@ dummy_func(
1807
1796
#endif /* ENABLE_SPECIALIZATION */
1808
1797
assert ((oparg >> 4 ) <= Py_GE );
1809
1798
PyObject * cond = PyObject_RichCompare (left , right , oparg >>4 );
1810
- Py_DECREF (left );
1811
- Py_DECREF (right );
1799
+ DECREF_INPUTS ();
1812
1800
ERROR_IF (cond == NULL , error );
1813
1801
assert (next_instr [1 ].op .code == POP_JUMP_IF_FALSE ||
1814
1802
next_instr [1 ].op .code == POP_JUMP_IF_TRUE );
@@ -1963,7 +1951,7 @@ dummy_func(
1963
1951
}
1964
1952
else {
1965
1953
int err = PyObject_IsTrue (cond );
1966
- Py_DECREF ( cond );
1954
+ DECREF_INPUTS ( );
1967
1955
if (err == 0 ) {
1968
1956
JUMPBY (oparg );
1969
1957
}
@@ -2004,7 +1992,7 @@ dummy_func(
2004
1992
}
2005
1993
else {
2006
1994
int err = PyObject_IsTrue (cond );
2007
- Py_DECREF ( cond );
1995
+ DECREF_INPUTS ( );
2008
1996
if (err > 0 ) {
2009
1997
JUMPBY (oparg );
2010
1998
}
@@ -2038,7 +2026,7 @@ dummy_func(
2038
2026
2039
2027
inst (POP_JUMP_IF_NOT_NONE , (value -- )) {
2040
2028
if (!Py_IsNone (value )) {
2041
- Py_DECREF ( value );
2029
+ DECREF_INPUTS ( );
2042
2030
JUMPBY (oparg );
2043
2031
}
2044
2032
else {
@@ -2063,7 +2051,7 @@ dummy_func(
2063
2051
JUMPBY (oparg );
2064
2052
}
2065
2053
else {
2066
- Py_DECREF ( value );
2054
+ DECREF_INPUTS ( );
2067
2055
}
2068
2056
}
2069
2057
@@ -2270,7 +2258,7 @@ dummy_func(
2270
2258
if (iter == NULL ) {
2271
2259
goto error ;
2272
2260
}
2273
- Py_DECREF ( iterable );
2261
+ DECREF_INPUTS ( );
2274
2262
}
2275
2263
PREDICT (LOAD_CONST );
2276
2264
}
@@ -3168,9 +3156,7 @@ dummy_func(
3168
3156
assert (PyTuple_CheckExact (callargs ));
3169
3157
3170
3158
result = do_call_core (tstate , func , callargs , kwargs , cframe .use_tracing );
3171
- Py_DECREF (func );
3172
- Py_DECREF (callargs );
3173
- Py_XDECREF (kwargs );
3159
+ DECREF_INPUTS ();
3174
3160
3175
3161
assert (PEEK (3 + (oparg & 1 )) == NULL );
3176
3162
ERROR_IF (result == NULL , error );
@@ -3237,9 +3223,7 @@ dummy_func(
3237
3223
3238
3224
inst (BUILD_SLICE , (start , stop , step if (oparg == 3 ) -- slice )) {
3239
3225
slice = PySlice_New (start , stop , step );
3240
- Py_DECREF (start );
3241
- Py_DECREF (stop );
3242
- Py_XDECREF (step );
3226
+ DECREF_INPUTS ();
3243
3227
ERROR_IF (slice == NULL , error );
3244
3228
}
3245
3229
@@ -3285,8 +3269,7 @@ dummy_func(
3285
3269
} else {
3286
3270
/* Actually call format(). */
3287
3271
result = PyObject_Format (value , fmt_spec );
3288
- Py_DECREF (value );
3289
- Py_XDECREF (fmt_spec );
3272
+ DECREF_INPUTS ();
3290
3273
ERROR_IF (result == NULL , error );
3291
3274
}
3292
3275
}
@@ -3312,8 +3295,7 @@ dummy_func(
3312
3295
assert ((unsigned )oparg < Py_ARRAY_LENGTH (binary_ops ));
3313
3296
assert (binary_ops [oparg ]);
3314
3297
res = binary_ops [oparg ](lhs , rhs );
3315
- Py_DECREF (lhs );
3316
- Py_DECREF (rhs );
3298
+ DECREF_INPUTS ();
3317
3299
ERROR_IF (res == NULL , error );
3318
3300
}
3319
3301
0 commit comments