@@ -384,8 +384,7 @@ dummy_func(
384
384
if (!_PyErr_Occurred (tstate )) {
385
385
_PyErr_SetKeyError (sub );
386
386
}
387
- Py_DECREF (dict );
388
- Py_DECREF (sub );
387
+ DECREF_INPUTS ();
389
388
ERROR_IF (true, error );
390
389
}
391
390
Py_INCREF (res ); // Do this before DECREF'ing dict, sub
@@ -420,7 +419,7 @@ dummy_func(
420
419
421
420
inst (SET_ADD , (set , unused [oparg - 1 ], v -- set , unused [oparg - 1 ])) {
422
421
int err = PySet_Add (set , v );
423
- Py_DECREF ( v );
422
+ DECREF_INPUTS ( );
424
423
ERROR_IF (err , error );
425
424
PREDICT (JUMP_BACKWARD );
426
425
}
@@ -899,7 +898,7 @@ dummy_func(
899
898
#endif /* ENABLE_SPECIALIZATION */
900
899
PyObject * * top = stack_pointer + oparg - 1 ;
901
900
int res = unpack_iterable (tstate , seq , oparg , -1 , top );
902
- Py_DECREF ( seq );
901
+ DECREF_INPUTS ( );
903
902
ERROR_IF (res == 0 , error );
904
903
}
905
904
@@ -910,7 +909,7 @@ dummy_func(
910
909
STAT_INC (UNPACK_SEQUENCE , hit );
911
910
values [0 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
912
911
values [1 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
913
- Py_DECREF ( seq );
912
+ DECREF_INPUTS ( );
914
913
}
915
914
916
915
inst (UNPACK_SEQUENCE_TUPLE , (unused /1 , seq -- values [oparg ])) {
@@ -921,7 +920,7 @@ dummy_func(
921
920
for (int i = oparg ; -- i >= 0 ; ) {
922
921
* values ++ = Py_NewRef (items [i ]);
923
922
}
924
- Py_DECREF ( seq );
923
+ DECREF_INPUTS ( );
925
924
}
926
925
927
926
inst (UNPACK_SEQUENCE_LIST , (unused /1 , seq -- values [oparg ])) {
@@ -932,14 +931,14 @@ dummy_func(
932
931
for (int i = oparg ; -- i >= 0 ; ) {
933
932
* values ++ = Py_NewRef (items [i ]);
934
933
}
935
- Py_DECREF ( seq );
934
+ DECREF_INPUTS ( );
936
935
}
937
936
938
937
inst (UNPACK_EX , (seq -- unused [oparg & 0xFF ], unused , unused [oparg >> 8 ])) {
939
938
int totalargs = 1 + (oparg & 0xFF ) + (oparg >> 8 );
940
939
PyObject * * top = stack_pointer + totalargs - 1 ;
941
940
int res = unpack_iterable (tstate , seq , oparg & 0xFF , oparg >> 8 , top );
942
- Py_DECREF ( seq );
941
+ DECREF_INPUTS ( );
943
942
ERROR_IF (res == 0 , error );
944
943
}
945
944
@@ -967,22 +966,21 @@ dummy_func(
967
966
#endif /* ENABLE_SPECIALIZATION */
968
967
PyObject * name = GETITEM (frame -> f_code -> co_names , oparg );
969
968
int err = PyObject_SetAttr (owner , name , v );
970
- Py_DECREF (v );
971
- Py_DECREF (owner );
969
+ DECREF_INPUTS ();
972
970
ERROR_IF (err , error );
973
971
}
974
972
975
973
inst (DELETE_ATTR , (owner -- )) {
976
974
PyObject * name = GETITEM (frame -> f_code -> co_names , oparg );
977
975
int err = PyObject_SetAttr (owner , name , (PyObject * )NULL );
978
- Py_DECREF ( owner );
976
+ DECREF_INPUTS ( );
979
977
ERROR_IF (err , error );
980
978
}
981
979
982
980
inst (STORE_GLOBAL , (v -- )) {
983
981
PyObject * name = GETITEM (frame -> f_code -> co_names , oparg );
984
982
int err = PyDict_SetItem (GLOBALS (), name , v );
985
- Py_DECREF ( v );
983
+ DECREF_INPUTS ( );
986
984
ERROR_IF (err , error );
987
985
}
988
986
@@ -1249,9 +1247,7 @@ dummy_func(
1249
1247
1250
1248
inst (BUILD_STRING , (pieces [oparg ] -- str )) {
1251
1249
str = _PyUnicode_JoinArray (& _Py_STR (empty ), pieces , oparg );
1252
- for (int i = 0 ; i < oparg ; i ++ ) {
1253
- Py_DECREF (pieces [i ]);
1254
- }
1250
+ DECREF_INPUTS ();
1255
1251
ERROR_IF (str == NULL , error );
1256
1252
}
1257
1253
@@ -1314,10 +1310,7 @@ dummy_func(
1314
1310
if (map == NULL )
1315
1311
goto error ;
1316
1312
1317
- for (int i = 0 ; i < oparg ; i ++ ) {
1318
- Py_DECREF (values [i * 2 ]);
1319
- Py_DECREF (values [i * 2 + 1 ]);
1320
- }
1313
+ DECREF_INPUTS ();
1321
1314
ERROR_IF (map == NULL , error );
1322
1315
}
1323
1316
@@ -1373,10 +1366,7 @@ dummy_func(
1373
1366
map = _PyDict_FromItems (
1374
1367
& PyTuple_GET_ITEM (keys , 0 ), 1 ,
1375
1368
values , 1 , oparg );
1376
- Py_DECREF (keys );
1377
- for (int i = 0 ; i < oparg ; i ++ ) {
1378
- Py_DECREF (values [i ]);
1379
- }
1369
+ DECREF_INPUTS ();
1380
1370
ERROR_IF (map == NULL , error );
1381
1371
}
1382
1372
@@ -1464,7 +1454,7 @@ dummy_func(
1464
1454
1465
1455
NULL | meth | arg1 | ... | argN
1466
1456
*/
1467
- Py_DECREF ( owner );
1457
+ DECREF_INPUTS ( );
1468
1458
ERROR_IF (meth == NULL , error );
1469
1459
res2 = NULL ;
1470
1460
res = meth ;
@@ -1473,7 +1463,7 @@ dummy_func(
1473
1463
else {
1474
1464
/* Classic, pushes one value. */
1475
1465
res = PyObject_GetAttr (owner , name );
1476
- Py_DECREF ( owner );
1466
+ DECREF_INPUTS ( );
1477
1467
ERROR_IF (res == NULL , error );
1478
1468
}
1479
1469
}
@@ -1492,7 +1482,7 @@ dummy_func(
1492
1482
STAT_INC (LOAD_ATTR , hit );
1493
1483
Py_INCREF (res );
1494
1484
res2 = NULL ;
1495
- Py_DECREF ( owner );
1485
+ DECREF_INPUTS ( );
1496
1486
}
1497
1487
1498
1488
inst (LOAD_ATTR_MODULE , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1509,7 +1499,7 @@ dummy_func(
1509
1499
STAT_INC (LOAD_ATTR , hit );
1510
1500
Py_INCREF (res );
1511
1501
res2 = NULL ;
1512
- Py_DECREF ( owner );
1502
+ DECREF_INPUTS ( );
1513
1503
}
1514
1504
1515
1505
inst (LOAD_ATTR_WITH_HINT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1540,7 +1530,7 @@ dummy_func(
1540
1530
STAT_INC (LOAD_ATTR , hit );
1541
1531
Py_INCREF (res );
1542
1532
res2 = NULL ;
1543
- Py_DECREF ( owner );
1533
+ DECREF_INPUTS ( );
1544
1534
}
1545
1535
1546
1536
inst (LOAD_ATTR_SLOT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1554,7 +1544,7 @@ dummy_func(
1554
1544
STAT_INC (LOAD_ATTR , hit );
1555
1545
Py_INCREF (res );
1556
1546
res2 = NULL ;
1557
- Py_DECREF ( owner );
1547
+ DECREF_INPUTS ( );
1558
1548
}
1559
1549
1560
1550
inst (LOAD_ATTR_CLASS , (unused /1 , type_version /2 , unused /2 , descr /4 , cls -- res2 if (oparg & 1 ), res )) {
@@ -1570,7 +1560,7 @@ dummy_func(
1570
1560
res = descr ;
1571
1561
assert (res != NULL );
1572
1562
Py_INCREF (res );
1573
- Py_DECREF ( cls );
1563
+ DECREF_INPUTS ( );
1574
1564
}
1575
1565
1576
1566
inst (LOAD_ATTR_PROPERTY , (unused /1 , type_version /2 , func_version /2 , fget /4 , owner -- unused if (oparg & 1 ), unused )) {
@@ -1707,8 +1697,7 @@ dummy_func(
1707
1697
STAT_INC (COMPARE_OP , deferred );
1708
1698
assert ((oparg >> 4 ) <= Py_GE );
1709
1699
res = PyObject_RichCompare (left , right , oparg >>4 );
1710
- Py_DECREF (left );
1711
- Py_DECREF (right );
1700
+ DECREF_INPUTS ();
1712
1701
ERROR_IF (res == NULL , error );
1713
1702
}
1714
1703
@@ -1734,8 +1723,7 @@ dummy_func(
1734
1723
#endif /* ENABLE_SPECIALIZATION */
1735
1724
assert ((oparg >> 4 ) <= Py_GE );
1736
1725
PyObject * cond = PyObject_RichCompare (left , right , oparg >>4 );
1737
- Py_DECREF (left );
1738
- Py_DECREF (right );
1726
+ DECREF_INPUTS ();
1739
1727
ERROR_IF (cond == NULL , error );
1740
1728
assert (next_instr [1 ].op .code == POP_JUMP_IF_FALSE ||
1741
1729
next_instr [1 ].op .code == POP_JUMP_IF_TRUE );
@@ -1885,7 +1873,7 @@ dummy_func(
1885
1873
}
1886
1874
else {
1887
1875
int err = PyObject_IsTrue (cond );
1888
- Py_DECREF ( cond );
1876
+ DECREF_INPUTS ( );
1889
1877
if (err == 0 ) {
1890
1878
JUMPBY (oparg );
1891
1879
}
@@ -1905,7 +1893,7 @@ dummy_func(
1905
1893
}
1906
1894
else {
1907
1895
int err = PyObject_IsTrue (cond );
1908
- Py_DECREF ( cond );
1896
+ DECREF_INPUTS ( );
1909
1897
if (err > 0 ) {
1910
1898
JUMPBY (oparg );
1911
1899
}
@@ -1917,7 +1905,7 @@ dummy_func(
1917
1905
1918
1906
inst (POP_JUMP_IF_NOT_NONE , (value -- )) {
1919
1907
if (!Py_IsNone (value )) {
1920
- Py_DECREF ( value );
1908
+ DECREF_INPUTS ( );
1921
1909
JUMPBY (oparg );
1922
1910
}
1923
1911
else {
@@ -1931,7 +1919,7 @@ dummy_func(
1931
1919
JUMPBY (oparg );
1932
1920
}
1933
1921
else {
1934
- Py_DECREF ( value );
1922
+ DECREF_INPUTS ( );
1935
1923
}
1936
1924
}
1937
1925
@@ -2065,7 +2053,7 @@ dummy_func(
2065
2053
if (iter == NULL ) {
2066
2054
goto error ;
2067
2055
}
2068
- Py_DECREF ( iterable );
2056
+ DECREF_INPUTS ( );
2069
2057
}
2070
2058
PREDICT (LOAD_CONST );
2071
2059
}
@@ -2940,9 +2928,7 @@ dummy_func(
2940
2928
assert (PyTuple_CheckExact (callargs ));
2941
2929
2942
2930
result = do_call_core (tstate , func , callargs , kwargs , cframe .use_tracing );
2943
- Py_DECREF (func );
2944
- Py_DECREF (callargs );
2945
- Py_XDECREF (kwargs );
2931
+ DECREF_INPUTS ();
2946
2932
2947
2933
assert (PEEK (3 + (oparg & 1 )) == NULL );
2948
2934
ERROR_IF (result == NULL , error );
@@ -3009,9 +2995,7 @@ dummy_func(
3009
2995
3010
2996
inst (BUILD_SLICE , (start , stop , step if (oparg == 3 ) -- slice )) {
3011
2997
slice = PySlice_New (start , stop , step );
3012
- Py_DECREF (start );
3013
- Py_DECREF (stop );
3014
- Py_XDECREF (step );
2998
+ DECREF_INPUTS ();
3015
2999
ERROR_IF (slice == NULL , error );
3016
3000
}
3017
3001
@@ -3057,8 +3041,7 @@ dummy_func(
3057
3041
} else {
3058
3042
/* Actually call format(). */
3059
3043
result = PyObject_Format (value , fmt_spec );
3060
- Py_DECREF (value );
3061
- Py_XDECREF (fmt_spec );
3044
+ DECREF_INPUTS ();
3062
3045
ERROR_IF (result == NULL , error );
3063
3046
}
3064
3047
}
@@ -3084,8 +3067,7 @@ dummy_func(
3084
3067
assert ((unsigned )oparg < Py_ARRAY_LENGTH (binary_ops ));
3085
3068
assert (binary_ops [oparg ]);
3086
3069
res = binary_ops [oparg ](lhs , rhs );
3087
- Py_DECREF (lhs );
3088
- Py_DECREF (rhs );
3070
+ DECREF_INPUTS ();
3089
3071
ERROR_IF (res == NULL , error );
3090
3072
}
3091
3073
0 commit comments