@@ -137,7 +137,9 @@ dummy_func(
137
137
res = NULL ;
138
138
}
139
139
140
- macro (END_FOR ) = POP_TOP + POP_TOP ;
140
+ inst (END_FOR , (second , first -- )) {
141
+ DECREF_INPUTS ();
142
+ }
141
143
142
144
inst (UNARY_NEGATIVE , (value -- res )) {
143
145
res = PyNumber_Negative (value );
@@ -386,8 +388,7 @@ dummy_func(
386
388
if (!_PyErr_Occurred (tstate )) {
387
389
_PyErr_SetKeyError (sub );
388
390
}
389
- Py_DECREF (dict );
390
- Py_DECREF (sub );
391
+ DECREF_INPUTS ();
391
392
ERROR_IF (true, error );
392
393
}
393
394
Py_INCREF (res ); // Do this before DECREF'ing dict, sub
@@ -422,7 +423,7 @@ dummy_func(
422
423
423
424
inst (SET_ADD , (set , unused [oparg - 1 ], v -- set , unused [oparg - 1 ])) {
424
425
int err = PySet_Add (set , v );
425
- Py_DECREF ( v );
426
+ DECREF_INPUTS ( );
426
427
ERROR_IF (err , error );
427
428
PREDICT (JUMP_BACKWARD );
428
429
}
@@ -901,7 +902,7 @@ dummy_func(
901
902
#endif /* ENABLE_SPECIALIZATION */
902
903
PyObject * * top = stack_pointer + oparg - 1 ;
903
904
int res = unpack_iterable (tstate , seq , oparg , -1 , top );
904
- Py_DECREF ( seq );
905
+ DECREF_INPUTS ( );
905
906
ERROR_IF (res == 0 , error );
906
907
}
907
908
@@ -912,7 +913,7 @@ dummy_func(
912
913
STAT_INC (UNPACK_SEQUENCE , hit );
913
914
values [0 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
914
915
values [1 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
915
- Py_DECREF ( seq );
916
+ DECREF_INPUTS ( );
916
917
}
917
918
918
919
inst (UNPACK_SEQUENCE_TUPLE , (unused /1 , seq -- values [oparg ])) {
@@ -923,7 +924,7 @@ dummy_func(
923
924
for (int i = oparg ; -- i >= 0 ; ) {
924
925
* values ++ = Py_NewRef (items [i ]);
925
926
}
926
- Py_DECREF ( seq );
927
+ DECREF_INPUTS ( );
927
928
}
928
929
929
930
inst (UNPACK_SEQUENCE_LIST , (unused /1 , seq -- values [oparg ])) {
@@ -934,14 +935,14 @@ dummy_func(
934
935
for (int i = oparg ; -- i >= 0 ; ) {
935
936
* values ++ = Py_NewRef (items [i ]);
936
937
}
937
- Py_DECREF ( seq );
938
+ DECREF_INPUTS ( );
938
939
}
939
940
940
941
inst (UNPACK_EX , (seq -- unused [oparg & 0xFF ], unused , unused [oparg >> 8 ])) {
941
942
int totalargs = 1 + (oparg & 0xFF ) + (oparg >> 8 );
942
943
PyObject * * top = stack_pointer + totalargs - 1 ;
943
944
int res = unpack_iterable (tstate , seq , oparg & 0xFF , oparg >> 8 , top );
944
- Py_DECREF ( seq );
945
+ DECREF_INPUTS ( );
945
946
ERROR_IF (res == 0 , error );
946
947
}
947
948
@@ -969,22 +970,21 @@ dummy_func(
969
970
#endif /* ENABLE_SPECIALIZATION */
970
971
PyObject * name = GETITEM (names , oparg );
971
972
int err = PyObject_SetAttr (owner , name , v );
972
- Py_DECREF (v );
973
- Py_DECREF (owner );
973
+ DECREF_INPUTS ();
974
974
ERROR_IF (err , error );
975
975
}
976
976
977
977
inst (DELETE_ATTR , (owner -- )) {
978
978
PyObject * name = GETITEM (names , oparg );
979
979
int err = PyObject_SetAttr (owner , name , (PyObject * )NULL );
980
- Py_DECREF ( owner );
980
+ DECREF_INPUTS ( );
981
981
ERROR_IF (err , error );
982
982
}
983
983
984
984
inst (STORE_GLOBAL , (v -- )) {
985
985
PyObject * name = GETITEM (names , oparg );
986
986
int err = PyDict_SetItem (GLOBALS (), name , v );
987
- Py_DECREF ( v );
987
+ DECREF_INPUTS ( );
988
988
ERROR_IF (err , error );
989
989
}
990
990
@@ -1251,9 +1251,7 @@ dummy_func(
1251
1251
1252
1252
inst (BUILD_STRING , (pieces [oparg ] -- str )) {
1253
1253
str = _PyUnicode_JoinArray (& _Py_STR (empty ), pieces , oparg );
1254
- for (int i = 0 ; i < oparg ; i ++ ) {
1255
- Py_DECREF (pieces [i ]);
1256
- }
1254
+ DECREF_INPUTS ();
1257
1255
ERROR_IF (str == NULL , error );
1258
1256
}
1259
1257
@@ -1316,10 +1314,7 @@ dummy_func(
1316
1314
if (map == NULL )
1317
1315
goto error ;
1318
1316
1319
- for (int i = 0 ; i < oparg ; i ++ ) {
1320
- Py_DECREF (values [i * 2 ]);
1321
- Py_DECREF (values [i * 2 + 1 ]);
1322
- }
1317
+ DECREF_INPUTS ();
1323
1318
ERROR_IF (map == NULL , error );
1324
1319
}
1325
1320
@@ -1375,10 +1370,7 @@ dummy_func(
1375
1370
map = _PyDict_FromItems (
1376
1371
& PyTuple_GET_ITEM (keys , 0 ), 1 ,
1377
1372
values , 1 , oparg );
1378
- Py_DECREF (keys );
1379
- for (int i = 0 ; i < oparg ; i ++ ) {
1380
- Py_DECREF (values [i ]);
1381
- }
1373
+ DECREF_INPUTS ();
1382
1374
ERROR_IF (map == NULL , error );
1383
1375
}
1384
1376
@@ -1466,7 +1458,7 @@ dummy_func(
1466
1458
1467
1459
NULL | meth | arg1 | ... | argN
1468
1460
*/
1469
- Py_DECREF ( owner );
1461
+ DECREF_INPUTS ( );
1470
1462
ERROR_IF (meth == NULL , error );
1471
1463
res2 = NULL ;
1472
1464
res = meth ;
@@ -1475,7 +1467,7 @@ dummy_func(
1475
1467
else {
1476
1468
/* Classic, pushes one value. */
1477
1469
res = PyObject_GetAttr (owner , name );
1478
- Py_DECREF ( owner );
1470
+ DECREF_INPUTS ( );
1479
1471
ERROR_IF (res == NULL , error );
1480
1472
}
1481
1473
}
@@ -1494,7 +1486,7 @@ dummy_func(
1494
1486
STAT_INC (LOAD_ATTR , hit );
1495
1487
Py_INCREF (res );
1496
1488
res2 = NULL ;
1497
- Py_DECREF ( owner );
1489
+ DECREF_INPUTS ( );
1498
1490
}
1499
1491
1500
1492
inst (LOAD_ATTR_MODULE , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1511,7 +1503,7 @@ dummy_func(
1511
1503
STAT_INC (LOAD_ATTR , hit );
1512
1504
Py_INCREF (res );
1513
1505
res2 = NULL ;
1514
- Py_DECREF ( owner );
1506
+ DECREF_INPUTS ( );
1515
1507
}
1516
1508
1517
1509
inst (LOAD_ATTR_WITH_HINT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1542,7 +1534,7 @@ dummy_func(
1542
1534
STAT_INC (LOAD_ATTR , hit );
1543
1535
Py_INCREF (res );
1544
1536
res2 = NULL ;
1545
- Py_DECREF ( owner );
1537
+ DECREF_INPUTS ( );
1546
1538
}
1547
1539
1548
1540
inst (LOAD_ATTR_SLOT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1556,7 +1548,7 @@ dummy_func(
1556
1548
STAT_INC (LOAD_ATTR , hit );
1557
1549
Py_INCREF (res );
1558
1550
res2 = NULL ;
1559
- Py_DECREF ( owner );
1551
+ DECREF_INPUTS ( );
1560
1552
}
1561
1553
1562
1554
inst (LOAD_ATTR_CLASS , (unused /1 , type_version /2 , unused /2 , descr /4 , cls -- res2 if (oparg & 1 ), res )) {
@@ -1572,7 +1564,7 @@ dummy_func(
1572
1564
res = descr ;
1573
1565
assert (res != NULL );
1574
1566
Py_INCREF (res );
1575
- Py_DECREF ( cls );
1567
+ DECREF_INPUTS ( );
1576
1568
}
1577
1569
1578
1570
inst (LOAD_ATTR_PROPERTY , (unused /1 , type_version /2 , func_version /2 , fget /4 , owner -- unused if (oparg & 1 ), unused )) {
@@ -1709,8 +1701,7 @@ dummy_func(
1709
1701
STAT_INC (COMPARE_OP , deferred );
1710
1702
assert ((oparg >> 4 ) <= Py_GE );
1711
1703
res = PyObject_RichCompare (left , right , oparg >>4 );
1712
- Py_DECREF (left );
1713
- Py_DECREF (right );
1704
+ DECREF_INPUTS ();
1714
1705
ERROR_IF (res == NULL , error );
1715
1706
}
1716
1707
@@ -1736,8 +1727,7 @@ dummy_func(
1736
1727
#endif /* ENABLE_SPECIALIZATION */
1737
1728
assert ((oparg >> 4 ) <= Py_GE );
1738
1729
PyObject * cond = PyObject_RichCompare (left , right , oparg >>4 );
1739
- Py_DECREF (left );
1740
- Py_DECREF (right );
1730
+ DECREF_INPUTS ();
1741
1731
ERROR_IF (cond == NULL , error );
1742
1732
assert (next_instr [1 ].op .code == POP_JUMP_IF_FALSE ||
1743
1733
next_instr [1 ].op .code == POP_JUMP_IF_TRUE );
@@ -1887,7 +1877,7 @@ dummy_func(
1887
1877
}
1888
1878
else {
1889
1879
int err = PyObject_IsTrue (cond );
1890
- Py_DECREF ( cond );
1880
+ DECREF_INPUTS ( );
1891
1881
if (err == 0 ) {
1892
1882
JUMPBY (oparg );
1893
1883
}
@@ -1907,7 +1897,7 @@ dummy_func(
1907
1897
}
1908
1898
else {
1909
1899
int err = PyObject_IsTrue (cond );
1910
- Py_DECREF ( cond );
1900
+ DECREF_INPUTS ( );
1911
1901
if (err > 0 ) {
1912
1902
JUMPBY (oparg );
1913
1903
}
@@ -1919,7 +1909,7 @@ dummy_func(
1919
1909
1920
1910
inst (POP_JUMP_IF_NOT_NONE , (value -- )) {
1921
1911
if (!Py_IsNone (value )) {
1922
- Py_DECREF ( value );
1912
+ DECREF_INPUTS ( );
1923
1913
JUMPBY (oparg );
1924
1914
}
1925
1915
else {
@@ -1933,7 +1923,7 @@ dummy_func(
1933
1923
JUMPBY (oparg );
1934
1924
}
1935
1925
else {
1936
- Py_DECREF ( value );
1926
+ DECREF_INPUTS ( );
1937
1927
}
1938
1928
}
1939
1929
@@ -1950,7 +1940,7 @@ dummy_func(
1950
1940
else {
1951
1941
err = PyObject_IsTrue (cond );
1952
1942
if (err > 0 ) {
1953
- Py_DECREF ( cond );
1943
+ DECREF_INPUTS ( );
1954
1944
}
1955
1945
else if (err == 0 ) {
1956
1946
JUMPBY (oparg );
@@ -1979,7 +1969,7 @@ dummy_func(
1979
1969
jump = true;
1980
1970
}
1981
1971
else if (err == 0 ) {
1982
- Py_DECREF ( cond );
1972
+ DECREF_INPUTS ( );
1983
1973
}
1984
1974
else {
1985
1975
goto error ;
@@ -2067,7 +2057,7 @@ dummy_func(
2067
2057
if (iter == NULL ) {
2068
2058
goto error ;
2069
2059
}
2070
- Py_DECREF ( iterable );
2060
+ DECREF_INPUTS ( );
2071
2061
}
2072
2062
PREDICT (LOAD_CONST );
2073
2063
}
@@ -2112,7 +2102,7 @@ dummy_func(
2112
2102
}
2113
2103
/* iterator ended normally */
2114
2104
assert (next_instr [INLINE_CACHE_ENTRIES_FOR_ITER + oparg ].op .code == END_FOR );
2115
- Py_DECREF ( iter );
2105
+ DECREF_INPUTS ( );
2116
2106
STACK_SHRINK (1 );
2117
2107
/* Jump forward oparg, then skip following END_FOR instruction */
2118
2108
JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 );
@@ -2135,7 +2125,7 @@ dummy_func(
2135
2125
it -> it_seq = NULL ;
2136
2126
Py_DECREF (seq );
2137
2127
}
2138
- Py_DECREF ( iter );
2128
+ DECREF_INPUTS ( );
2139
2129
STACK_SHRINK (1 );
2140
2130
/* Jump forward oparg, then skip following END_FOR instruction */
2141
2131
JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 );
@@ -2158,7 +2148,7 @@ dummy_func(
2158
2148
it -> it_seq = NULL ;
2159
2149
Py_DECREF (seq );
2160
2150
}
2161
- Py_DECREF ( iter );
2151
+ DECREF_INPUTS ( );
2162
2152
STACK_SHRINK (1 );
2163
2153
/* Jump forward oparg, then skip following END_FOR instruction */
2164
2154
JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 );
@@ -2942,9 +2932,7 @@ dummy_func(
2942
2932
assert (PyTuple_CheckExact (callargs ));
2943
2933
2944
2934
result = do_call_core (tstate , func , callargs , kwargs , cframe .use_tracing );
2945
- Py_DECREF (func );
2946
- Py_DECREF (callargs );
2947
- Py_XDECREF (kwargs );
2935
+ DECREF_INPUTS ();
2948
2936
2949
2937
assert (PEEK (3 + (oparg & 1 )) == NULL );
2950
2938
ERROR_IF (result == NULL , error );
@@ -3011,9 +2999,7 @@ dummy_func(
3011
2999
3012
3000
inst (BUILD_SLICE , (start , stop , step if (oparg == 3 ) -- slice )) {
3013
3001
slice = PySlice_New (start , stop , step );
3014
- Py_DECREF (start );
3015
- Py_DECREF (stop );
3016
- Py_XDECREF (step );
3002
+ DECREF_INPUTS ();
3017
3003
ERROR_IF (slice == NULL , error );
3018
3004
}
3019
3005
@@ -3059,8 +3045,7 @@ dummy_func(
3059
3045
} else {
3060
3046
/* Actually call format(). */
3061
3047
result = PyObject_Format (value , fmt_spec );
3062
- Py_DECREF (value );
3063
- Py_XDECREF (fmt_spec );
3048
+ DECREF_INPUTS ();
3064
3049
ERROR_IF (result == NULL , error );
3065
3050
}
3066
3051
}
@@ -3086,8 +3071,7 @@ dummy_func(
3086
3071
assert ((unsigned )oparg < Py_ARRAY_LENGTH (binary_ops ));
3087
3072
assert (binary_ops [oparg ]);
3088
3073
res = binary_ops [oparg ](lhs , rhs );
3089
- Py_DECREF (lhs );
3090
- Py_DECREF (rhs );
3074
+ DECREF_INPUTS ();
3091
3075
ERROR_IF (res == NULL , error );
3092
3076
}
3093
3077
0 commit comments