@@ -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 );
@@ -395,8 +397,7 @@ dummy_func(
395
397
if (!_PyErr_Occurred (tstate )) {
396
398
_PyErr_SetKeyError (sub );
397
399
}
398
- Py_DECREF (dict );
399
- Py_DECREF (sub );
400
+ DECREF_INPUTS ();
400
401
ERROR_IF (true, error );
401
402
}
402
403
Py_INCREF (res ); // Do this before DECREF'ing dict, sub
@@ -431,7 +432,7 @@ dummy_func(
431
432
432
433
inst (SET_ADD , (set , unused [oparg - 1 ], v -- set , unused [oparg - 1 ])) {
433
434
int err = PySet_Add (set , v );
434
- Py_DECREF ( v );
435
+ DECREF_INPUTS ( );
435
436
ERROR_IF (err , error );
436
437
PREDICT (JUMP_BACKWARD );
437
438
}
@@ -910,7 +911,7 @@ dummy_func(
910
911
#endif /* ENABLE_SPECIALIZATION */
911
912
PyObject * * top = stack_pointer + oparg - 1 ;
912
913
int res = unpack_iterable (tstate , seq , oparg , -1 , top );
913
- Py_DECREF ( seq );
914
+ DECREF_INPUTS ( );
914
915
ERROR_IF (res == 0 , error );
915
916
}
916
917
@@ -921,7 +922,7 @@ dummy_func(
921
922
STAT_INC (UNPACK_SEQUENCE , hit );
922
923
values [0 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 1 ));
923
924
values [1 ] = Py_NewRef (PyTuple_GET_ITEM (seq , 0 ));
924
- Py_DECREF ( seq );
925
+ DECREF_INPUTS ( );
925
926
}
926
927
927
928
inst (UNPACK_SEQUENCE_TUPLE , (unused /1 , seq -- values [oparg ])) {
@@ -932,7 +933,7 @@ dummy_func(
932
933
for (int i = oparg ; -- i >= 0 ; ) {
933
934
* values ++ = Py_NewRef (items [i ]);
934
935
}
935
- Py_DECREF ( seq );
936
+ DECREF_INPUTS ( );
936
937
}
937
938
938
939
inst (UNPACK_SEQUENCE_LIST , (unused /1 , seq -- values [oparg ])) {
@@ -943,14 +944,14 @@ dummy_func(
943
944
for (int i = oparg ; -- i >= 0 ; ) {
944
945
* values ++ = Py_NewRef (items [i ]);
945
946
}
946
- Py_DECREF ( seq );
947
+ DECREF_INPUTS ( );
947
948
}
948
949
949
950
inst (UNPACK_EX , (seq -- unused [oparg & 0xFF ], unused , unused [oparg >> 8 ])) {
950
951
int totalargs = 1 + (oparg & 0xFF ) + (oparg >> 8 );
951
952
PyObject * * top = stack_pointer + totalargs - 1 ;
952
953
int res = unpack_iterable (tstate , seq , oparg & 0xFF , oparg >> 8 , top );
953
- Py_DECREF ( seq );
954
+ DECREF_INPUTS ( );
954
955
ERROR_IF (res == 0 , error );
955
956
}
956
957
@@ -978,22 +979,21 @@ dummy_func(
978
979
#endif /* ENABLE_SPECIALIZATION */
979
980
PyObject * name = GETITEM (names , oparg );
980
981
int err = PyObject_SetAttr (owner , name , v );
981
- Py_DECREF (v );
982
- Py_DECREF (owner );
982
+ DECREF_INPUTS ();
983
983
ERROR_IF (err , error );
984
984
}
985
985
986
986
inst (DELETE_ATTR , (owner -- )) {
987
987
PyObject * name = GETITEM (names , oparg );
988
988
int err = PyObject_SetAttr (owner , name , (PyObject * )NULL );
989
- Py_DECREF ( owner );
989
+ DECREF_INPUTS ( );
990
990
ERROR_IF (err , error );
991
991
}
992
992
993
993
inst (STORE_GLOBAL , (v -- )) {
994
994
PyObject * name = GETITEM (names , oparg );
995
995
int err = PyDict_SetItem (GLOBALS (), name , v );
996
- Py_DECREF ( v );
996
+ DECREF_INPUTS ( );
997
997
ERROR_IF (err , error );
998
998
}
999
999
@@ -1260,9 +1260,7 @@ dummy_func(
1260
1260
1261
1261
inst (BUILD_STRING , (pieces [oparg ] -- str )) {
1262
1262
str = _PyUnicode_JoinArray (& _Py_STR (empty ), pieces , oparg );
1263
- for (int i = 0 ; i < oparg ; i ++ ) {
1264
- Py_DECREF (pieces [i ]);
1265
- }
1263
+ DECREF_INPUTS ();
1266
1264
ERROR_IF (str == NULL , error );
1267
1265
}
1268
1266
@@ -1325,10 +1323,7 @@ dummy_func(
1325
1323
if (map == NULL )
1326
1324
goto error ;
1327
1325
1328
- for (int i = 0 ; i < oparg ; i ++ ) {
1329
- Py_DECREF (values [i * 2 ]);
1330
- Py_DECREF (values [i * 2 + 1 ]);
1331
- }
1326
+ DECREF_INPUTS ();
1332
1327
ERROR_IF (map == NULL , error );
1333
1328
}
1334
1329
@@ -1384,10 +1379,7 @@ dummy_func(
1384
1379
map = _PyDict_FromItems (
1385
1380
& PyTuple_GET_ITEM (keys , 0 ), 1 ,
1386
1381
values , 1 , oparg );
1387
- Py_DECREF (keys );
1388
- for (int i = 0 ; i < oparg ; i ++ ) {
1389
- Py_DECREF (values [i ]);
1390
- }
1382
+ DECREF_INPUTS ();
1391
1383
ERROR_IF (map == NULL , error );
1392
1384
}
1393
1385
@@ -1475,7 +1467,7 @@ dummy_func(
1475
1467
1476
1468
NULL | meth | arg1 | ... | argN
1477
1469
*/
1478
- Py_DECREF ( owner );
1470
+ DECREF_INPUTS ( );
1479
1471
ERROR_IF (meth == NULL , error );
1480
1472
res2 = NULL ;
1481
1473
res = meth ;
@@ -1484,7 +1476,7 @@ dummy_func(
1484
1476
else {
1485
1477
/* Classic, pushes one value. */
1486
1478
res = PyObject_GetAttr (owner , name );
1487
- Py_DECREF ( owner );
1479
+ DECREF_INPUTS ( );
1488
1480
ERROR_IF (res == NULL , error );
1489
1481
}
1490
1482
}
@@ -1503,7 +1495,7 @@ dummy_func(
1503
1495
STAT_INC (LOAD_ATTR , hit );
1504
1496
Py_INCREF (res );
1505
1497
res2 = NULL ;
1506
- Py_DECREF ( owner );
1498
+ DECREF_INPUTS ( );
1507
1499
}
1508
1500
1509
1501
inst (LOAD_ATTR_MODULE , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1520,7 +1512,7 @@ dummy_func(
1520
1512
STAT_INC (LOAD_ATTR , hit );
1521
1513
Py_INCREF (res );
1522
1514
res2 = NULL ;
1523
- Py_DECREF ( owner );
1515
+ DECREF_INPUTS ( );
1524
1516
}
1525
1517
1526
1518
inst (LOAD_ATTR_WITH_HINT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1551,7 +1543,7 @@ dummy_func(
1551
1543
STAT_INC (LOAD_ATTR , hit );
1552
1544
Py_INCREF (res );
1553
1545
res2 = NULL ;
1554
- Py_DECREF ( owner );
1546
+ DECREF_INPUTS ( );
1555
1547
}
1556
1548
1557
1549
inst (LOAD_ATTR_SLOT , (unused /1 , type_version /2 , index /1 , unused /5 , owner -- res2 if (oparg & 1 ), res )) {
@@ -1565,7 +1557,7 @@ dummy_func(
1565
1557
STAT_INC (LOAD_ATTR , hit );
1566
1558
Py_INCREF (res );
1567
1559
res2 = NULL ;
1568
- Py_DECREF ( owner );
1560
+ DECREF_INPUTS ( );
1569
1561
}
1570
1562
1571
1563
inst (LOAD_ATTR_CLASS , (unused /1 , type_version /2 , unused /2 , descr /4 , cls -- res2 if (oparg & 1 ), res )) {
@@ -1581,7 +1573,7 @@ dummy_func(
1581
1573
res = descr ;
1582
1574
assert (res != NULL );
1583
1575
Py_INCREF (res<
2851
/span>);
1584
- Py_DECREF ( cls );
1576
+ DECREF_INPUTS ( );
1585
1577
}
1586
1578
1587
1579
inst (LOAD_ATTR_PROPERTY , (unused /1 , type_version /2 , func_version /2 , fget /4 , owner -- unused if (oparg & 1 ), unused )) {
@@ -1718,8 +1710,7 @@ dummy_func(
1718
1710
STAT_INC (COMPARE_OP , deferred );
1719
1711
assert ((oparg >> 4 ) <= Py_GE );
1720
1712
res = PyObject_RichCompare (left , right , oparg >>4 );
1721
- Py_DECREF (left );
1722
- Py_DECREF (right );
1713
+ DECREF_INPUTS ();
1723
1714
ERROR_IF (res == NULL , error );
1724
1715
}
1725
1716
@@ -1745,8 +1736,7 @@ dummy_func(
1745
1736
#endif /* ENABLE_SPECIALIZATION */
1746
1737
assert ((oparg >> 4 ) <= Py_GE );
1747
1738
PyObject * cond = PyObject_RichCompare (left , right , oparg >>4 );
1748
- Py_DECREF (left );
1749
- Py_DECREF (right );
1739
+ DECREF_INPUTS ();
1750
1740
ERROR_IF (cond == NULL , error );
1751
1741
assert (next_instr [1 ].op .code == POP_JUMP_IF_FALSE ||
1752
1742
next_instr [1 ].op .code == POP_JUMP_IF_TRUE );
@@ -1896,7 +1886,7 @@ dummy_func(
1896
1886
}
1897
1887
else {
1898
1888
int err = PyObject_IsTrue (cond );
1899
- Py_DECREF ( cond );
1889
+ DECREF_INPUTS ( );
1900
1890
if (err == 0 ) {
1901
1891
JUMPBY (oparg );
1902
1892
}
@@ -1916,7 +1906,7 @@ dummy_func(
1916
1906
}
1917
1907
else {
1918
1908
int err = PyObject_IsTrue (cond );
1919
- Py_DECREF ( cond );
1909
+ DECREF_INPUTS ( );
1920
1910
if (err > 0 ) {
1921
1911
JUMPBY (oparg );
1922
1912
}
@@ -1928,7 +1918,7 @@ dummy_func(
1928
1918
1929
1919
inst (POP_JUMP_IF_NOT_NONE , (value -- )) {
1930
1920
if (!Py_IsNone (value )) {
1931
- Py_DECREF ( value );
1921
+ DECREF_INPUTS ( );
1932
1922
JUMPBY (oparg );
1933
1923
}
1934
1924
else {
@@ -1942,7 +1932,7 @@ dummy_func(
1942
1932
JUMPBY (oparg );
1943
1933
}
1944
1934
else {
1945
- Py_DECREF ( value );
1935
+ DECREF_INPUTS ( );
1946
1936
}
1947
1937
}
1948
1938
@@ -1959,7 +1949,7 @@ dummy_func(
1959
1949
else {
1960
1950
err = PyObject_IsTrue (cond );
1961
1951
if (err > 0 ) {
1962
- Py_DECREF ( cond );
1952
+ DECREF_INPUTS ( );
1963
1953
}
1964
1954
else if (err == 0 ) {
1965
1955
JUMPBY (oparg );
@@ -1988,7 +1978,7 @@ dummy_func(
1988
1978
jump = true;
1989
1979
}
1990
1980
else if (err == 0 ) {
1991
- Py_DECREF ( cond );
1981
+ DECREF_INPUTS ( );
1992
1982
}
1993
1983
else {
1994
1984
goto error ;
@@ -2076,7 +2066,7 @@ dummy_func(
2076
2066
if (iter == NULL ) {
2077
2067
goto error ;
2078
2068
}
2079
- Py_DECREF ( iterable );
2069
+ DECREF_INPUTS ( );
2080
2070
}
2081
2071
PREDICT (LOAD_CONST );
2082
2072
}
@@ -2121,7 +2111,7 @@ dummy_func(
2121
2111
}
2122
2112
/* iterator ended normally */
2123
2113
assert (next_instr [INLINE_CACHE_ENTRIES_FOR_ITER + oparg ].op .code == END_FOR );
2124
- Py_DECREF ( iter );
2114
+ DECREF_INPUTS ( );
2125
2115
STACK_SHRINK (1 );
2126
2116
/* Jump forward oparg, then skip following END_FOR instruction */
2127
2117
JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 );
@@ -2144,7 +2134,7 @@ dummy_func(
2144
2134
it -> it_seq = NULL ;
2145
2135
Py_DECREF (seq );
2146
2136
}
2147
- Py_DECREF ( iter );
2137
+ DECREF_INPUTS ( );
2148
2138
STACK_SHRINK (1 );
2149
2139
/* Jump forward oparg, then skip following END_FOR instruction */
2150
2140
JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 );
@@ -2167,7 +2157,7 @@ dummy_func(
2167
2157
it -> it_seq = NULL ;
2168
2158
Py_DECREF (seq );
2169
2159
}
2170
- Py_DECREF ( iter );
2160
+ DECREF_INPUTS ( );
2171
2161
STACK_SHRINK (1 );
2172
2162
/* Jump forward oparg, then skip following END_FOR instruction */
2173
2163
JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 );
@@ -2951,9 +2941,7 @@ dummy_func(
2951
2941
assert (PyTuple_CheckExact (callargs ));
2952
2942
2953
2943
result = do_call_core (tstate , func , callargs , kwargs , cframe .use_tracing );
2954
- Py_DECREF (func );
2955
- Py_DECREF (callargs );
2956
- Py_XDECREF (kwargs );
2944
+ DECREF_INPUTS ();
2957
2945
2958
2946
assert (PEEK (3 + (oparg & 1 )) == NULL );
2959
2947
ERROR_IF (result == NULL , error );
@@ -3020,9 +3008,7 @@ dummy_func(
3020
3008
3021
3009
inst (BUILD_SLICE , (start , stop , step if (oparg == 3 ) -- slice )) {
3022
3010
slice = PySlice_New (start , stop , step );
3023
- Py_DECREF (start );
3024
- Py_DECREF (stop );
3025
- Py_XDECREF (step );
3011
+ DECREF_INPUTS ();
3026
3012
ERROR_IF (slice == NULL , error );
3027
3013
}
3028
3014
@@ -3068,8 +3054,7 @@ dummy_func(
3068
3054
} else {
3069
3055
/* Actually call format(). */
3070
3056
result = PyObject_Format (value , fmt_spec );
3071
- Py_DECREF (value );
3072
- Py_XDECREF (fmt_spec );
3057
+ DECREF_INPUTS ();
3073
3058
ERROR_IF (result == NULL , error );
3074
3059
}
3075
3060
}
@@ -3095,8 +3080,7 @@ dummy_func(
3095
3080
assert ((unsigned )oparg < Py_ARRAY_LENGTH (binary_ops ));
3096
3081
assert (binary_ops [oparg ]);
3097
3082
res = binary_ops [oparg ](lhs , rhs );
3098
- Py_DECREF (lhs );
3099
- Py_DECREF (rhs );
3083
+ DECREF_INPUTS ();
3100
3084
ERROR_IF (res == NULL , error );
3101
3085
}
3102
3086
0 commit comments