--- Python/ceval.c +++ Python/ceval.c @@ -1316,0 +1317,110 @@ + +__declspec(noinline) static void _My_DECREF( +#if defined(Py_REF_DEBUG) && !(defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000) + const char *filename, int lineno, +#endif + PyObject *op) +{ +#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000 + // Stable ABI for Python 3.10 built in debug mode. + _Py_DecRef(op); +#else + // Non-limited C API and limited C API for Python 3.9 and older access + // directly PyObject.ob_refcnt. +#ifdef Py_REF_DEBUG + _Py_RefTotal--; +#endif + if (--op->ob_refcnt != 0) { +#ifdef Py_REF_DEBUG + if (op->ob_refcnt < 0) { + _Py_NegativeRefcount(filename, lineno, op); + } +#endif + } + else { + _Py_Dealloc(op); + } +#endif +} +#if defined(Py_REF_DEBUG) && !(defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030A0000) +# define My_DECREF(op) _My_DECREF(__FILE__, __LINE__, _PyObject_CAST(op)) +#else +# define My_DECREF(op) _My_DECREF(_PyObject_CAST(op)) +#endif + +__declspec(noinline) static void _My_XDECREF(PyObject *op) +{ + if (op != NULL) { + My_DECREF(op); + } +} +#define My_XDECREF(op) _My_XDECREF(_PyObject_CAST(op)) + +#define My_CLEAR(op) \ + do { \ + PyObject *_py_tmp = _PyObject_CAST(op); \ + if (_py_tmp != NULL) { \ + (op) = NULL; \ + My_DECREF(_py_tmp); \ + } \ + } while (0) + +#define My_SETREF(op, op2) \ + do { \ + PyObject *_py_tmp = _PyObject_CAST(op); \ + (op) = (op2); \ + My_DECREF(_py_tmp); \ + } while (0) + +__declspec(noinline) static int _My_IS_TYPE(const PyObject *ob, const PyTypeObject *type) { + // bpo-44378: Don't use Py_TYPE() since Py_TYPE() requires a non-const + // object. + return ob->ob_type == type; +} +#define My_IS_TYPE(objp, type) _My_IS_TYPE(_PyObject_CAST_CONST(objp), type) +#define MyAsyncGen_CheckExact(objp) My_IS_TYPE(objp, &PyAsyncGen_Type) +#define MyCoro_CheckExact(objp) My_IS_TYPE(objp, &PyCoro_Type) +#define MyDict_CheckExact(objp) My_IS_TYPE(objp, &PyDict_Type) +#define MyFloat_CheckExact(objp) My_IS_TYPE(objp, &PyFloat_Type) +#define MyGen_CheckExact(objp) My_IS_TYPE(objp, &PyGen_Type) +#define MyList_CheckExact(objp) My_IS_TYPE(objp, &PyList_Type) +#define MyLong_CheckExact(objp) My_IS_TYPE(objp, &PyLong_Type) +#define MyModule_CheckExact(objp) My_IS_TYPE(objp, &PyModule_Type) +#define MyTuple_CheckExact(objp) My_IS_TYPE(objp, &PyTuple_Type) +#define MyUnicode_CheckExact(objp) My_IS_TYPE(objp, &PyUnicode_Type) + +#if !defined(_MSC_VER) +#define MY_ATOMIC_LOAD_RELAXED(ATOMIC_VAL) _Py_atomic_load_relaxed(ATOMIC_VAL) +#else +__declspec(noinline) static int _My_atomic_load_32bit_impl(volatile int* value, int order) { + long old; + switch (order) { + case _Py_memory_order_acquire: + { + do { + old = *value; + } while(_InterlockedCompareExchange_HLEAcquire((volatile long*)value, old, old) != old); + break; + } + case _Py_memory_order_release: + { + do { + old = *value; + } while(_InterlockedCompareExchange_HLERelease((volatile long*)value, old, old) != old); + break; + } + case _Py_memory_order_relaxed: + old = *value; + break; + default: + { + do { + old = *value; + } while(_InterlockedCompareExchange((volatile long*)value, old, old) != old); + break; + } + } + return old; +} +#define MY_ATOMIC_LOAD_RELAXED(ATOMIC_VAL) _My_atomic_load_32bit_impl((volatile int*)&((ATOMIC_VAL)->_value), _Py_memory_order_relaxed) +#endif @@ -1318 +1428 @@ - if (_Py_atomic_load_relaxed(eval_breaker)) { \ + if (MY_ATOMIC_LOAD_RELAXED(eval_breaker)) { \ @@ -1449 +1559 @@ - Py_XDECREF(tmp); } while (0) + My_XDECREF(tmp); } while (0) @@ -1455 +1565 @@ - Py_XDECREF(v); \ + My_XDECREF(v); \ @@ -1465 +1575 @@ - Py_XDECREF(value); \ + My_XDECREF(value); \ @@ -1474,3 +1584,3 @@ - Py_XDECREF(type); \ - Py_XDECREF(value); \ - Py_XDECREF(traceback); \ + My_XDECREF(type); \ + My_XDECREF(value); \ + My_XDECREF(traceback); \ @@ -1755 +1865 @@ - if (_Py_atomic_load_relaxed(eval_breaker)) { + if (MY_ATOMIC_LOAD_RELAXED(eval_breaker)) { @@ -1880 +1990 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1935 +2045 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1945 +2055 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1955 +2065 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1973 +2083 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1984,2 +2094,2 @@ - Py_DECREF(base); - Py_DECREF(exp); + My_DECREF(base); + My_DECREF(exp); @@ -1996,2 +2106,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2008,2 +2118,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2020,2 +2130,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2032,2 +2142,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2044,2 +2154,2 @@ - if (PyUnicode_CheckExact(dividend) && ( - !PyUnicode_Check(divisor) || PyUnicode_CheckExact(divisor))) { + if (MyUnicode_CheckExact(dividend) && ( + !PyUnicode_Check(divisor) || MyUnicode_CheckExact(divisor))) { @@ -2052,2 +2162,2 @@ - Py_DECREF(divisor); - Py_DECREF(dividend); + My_DECREF(divisor); + My_DECREF(dividend); @@ -2070,2 +2180,2 @@ - if (PyUnicode_CheckExact(left) && - PyUnicode_CheckExact(right)) { + if (MyUnicode_CheckExact(left) && + MyUnicode_CheckExact(right)) { @@ -2077 +2187 @@ - Py_DECREF(left); + My_DECREF(left); @@ -2079 +2189 @@ - Py_DECREF(right); + My_DECREF(right); @@ -2090,2 +2200,2 @@ - Py_DECREF(right); - Py_DECREF(left); + My_DECREF(right); + My_DECREF(left); @@ -2102,2 +2212,2 @@ - Py_DECREF(container); - Py_DECREF(sub); + My_DECREF(container); + My_DECREF(sub); @@ -2114,2 +2224,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2126,2 +2236,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2138,2 +2248,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2150,2 +2260,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2162,2 +2272,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2175 +2285 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2187 +2297 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2198,2 +2308,2 @@ - Py_DECREF(base); - Py_DECREF(exp); + My_DECREF(base); + My_DECREF(exp); @@ -2210,2 +2320,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2222,2 +2332,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2234,2 +2344,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2246,2 +2356,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2258,2 +2368,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2270 +2380 @@ - if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { + if (MyUnicode_CheckExact(left) && MyUnicode_CheckExact(right)) { @@ -2276 +2386 @@ - Py_DECREF(left); + My_DECREF(left); @@ -2278 +2388 @@ - Py_DECREF(right); + My_DECREF(right); @@ -2289,2 +2399,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2301,2 +2411,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2313,2 +2423,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2325,2 +2435,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2337,2 +2447,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2349,2 +2459,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2365,3 +2475,3 @@ - Py_DECREF(v); - Py_DECREF(container); - Py_DECREF(sub); + My_DECREF(v); + My_DECREF(container); + My_DECREF(sub); @@ -2380,2 +2490,2 @@ - Py_DECREF(container); - Py_DECREF(sub); + My_DECREF(container); + My_DECREF(sub); @@ -2395 +2505 @@ - Py_DECREF(value); + My_DECREF(value); @@ -2399 +2509 @@ - Py_DECREF(value); + My_DECREF(value); @@ -2402 +2512 @@ - Py_DECREF(res); + My_DECREF(res); @@ -2449 +2559 @@ - Py_DECREF(obj); + My_DECREF(obj); @@ -2461 +2571 @@ - Py_DECREF(obj); + My_DECREF(obj); @@ -2473 +2583 @@ - Py_DECREF(iter); + My_DECREF(iter); @@ -2488 +2598 @@ - if (PyAsyncGen_CheckExact(aiter)) { + if (MyAsyncGen_CheckExact(aiter)) { @@ -2520 +2630 @@ - Py_DECREF(next_iter); + My_DECREF(next_iter); @@ -2523 +2633 @@ - Py_DECREF(next_iter); + My_DECREF(next_iter); @@ -2547 +2657 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -2549 +2659 @@ - if (iter != NULL && PyCoro_CheckExact(iter)) { + if (iter != NULL && MyCoro_CheckExact(iter)) { @@ -2555,2 +2665,2 @@ - Py_DECREF(yf); - Py_CLEAR(iter); + My_DECREF(yf); + My_CLEAR(iter); @@ -2602 +2712 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2610 +2720 @@ - Py_DECREF(receiver); + My_DECREF(receiver); @@ -2630 +2740 @@ - Py_DECREF(retval); + My_DECREF(retval); @@ -2644 +2754 @@ - Py_DECREF(none); + My_DECREF(none); @@ -2684,3 +2794,3 @@ - Py_XDECREF(type); - Py_XDECREF(value); - Py_XDECREF(traceback); + My_XDECREF(type); + My_XDECREF(value); + My_XDECREF(traceback); @@ -2714 +2824 @@ - Py_DECREF(exc); + My_DECREF(exc); @@ -2716 +2826 @@ - Py_DECREF(POP()); + My_DECREF(POP()); @@ -2739 +2849 @@ - if (PyDict_CheckExact(f->f_builtins)) { + if (MyDict_CheckExact(f->f_builtins)) { @@ -2774 +2884 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2777 +2887 @@ - if (PyDict_CheckExact(ns)) + if (MyDict_CheckExact(ns)) @@ -2781 +2891 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2809 +2919 @@ - if (PyTuple_CheckExact(seq) && + if (MyTuple_CheckExact(seq) && @@ -2817 +2927 @@ - } else if (PyList_CheckExact(seq) && + } else if (MyList_CheckExact(seq) && @@ -2830 +2940 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2833 +2943 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2845 +2955 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2848 +2958 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2859,2 +2969,2 @@ - Py_DECREF(v); - Py_DECREF(owner); + My_DECREF(v); + My_DECREF(owner); @@ -2871 +2981 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -2882 +2992 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2911 +3021 @@ - if (PyDict_CheckExact(locals)) { + if (MyDict_CheckExact(locals)) { @@ -2937 +3047 @@ - if (PyDict_CheckExact(f->f_builtins)) { + if (MyDict_CheckExact(f->f_builtins)) { @@ -2969,2 +3079,2 @@ - if (PyDict_CheckExact(f->f_globals) - && PyDict_CheckExact(f->f_builtins)) + if (MyDict_CheckExact(f->f_globals) + && MyDict_CheckExact(f->f_builtins)) @@ -3071 +3181 @@ - Py_DECREF(oldobj); + My_DECREF(oldobj); @@ -3093 +3203 @@ - if (PyDict_CheckExact(locals)) { + if (MyDict_CheckExact(locals)) { @@ -3141 +3251 @@ - Py_XDECREF(oldobj); + My_XDECREF(oldobj); @@ -3152 +3262 @@ - Py_DECREF(empty); + My_DECREF(empty); @@ -3157 +3267 @@ - Py_DECREF(item); + My_DECREF(item); @@ -3190 +3300 @@ - Py_DECREF(list); + My_DECREF(list); @@ -3211 +3321 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -3214,2 +3324,2 @@ - Py_DECREF(none_val); - Py_DECREF(iterable); + My_DECREF(none_val); + My_DECREF(iterable); @@ -3223 +3333 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -3240 +3350 @@ - Py_DECREF(item); + My_DECREF(item); @@ -3244 +3354 @@ - Py_DECREF(set); + My_DECREF(set); @@ -3262 +3372 @@ - Py_DECREF(map); + My_DECREF(map); @@ -3268,2 +3378,2 @@ - Py_DECREF(POP()); - Py_DECREF(POP()); + My_DECREF(POP()); + My_DECREF(POP()); @@ -3285 +3395 @@ - if (PyDict_CheckExact(f->f_locals)) { + if (MyDict_CheckExact(f->f_locals)) { @@ -3299 +3409 @@ - Py_DECREF(ann_dict); + My_DECREF(ann_dict); @@ -3322 +3432 @@ - Py_DECREF(ann_dict); + My_DECREF(ann_dict); @@ -3328 +3438 @@ - Py_DECREF(ann_dict); + My_DECREF(ann_dict); @@ -3338 +3448 @@ - if (!PyTuple_CheckExact(keys) || + if (!MyTuple_CheckExact(keys) || @@ -3354 +3464 @@ - Py_DECREF(map); + My_DECREF(map); @@ -3359 +3469 @@ - Py_DECREF(POP()); + My_DECREF(POP()); @@ -3361 +3471 @@ - Py_DECREF(POP()); + My_DECREF(POP()); @@ -3376 +3486 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3379 +3489 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3389 +3499 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3392 +3502 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3406,2 +3516,2 @@ - Py_DECREF(value); - Py_DECREF(key); + My_DECREF(value); + My_DECREF(key); @@ -3446 +3556 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3458 +3568 @@ - if (dict != NULL && PyDict_CheckExact(dict)) { + if (dict != NULL && MyDict_CheckExact(dict)) { @@ -3477,2 +3587,2 @@ - Py_DECREF(owner); - Py_DECREF(dict); + My_DECREF(owner); + My_DECREF(dict); @@ -3486 +3596 @@ - Py_DECREF(dict); + My_DECREF(dict); @@ -3490 +3600 @@ - // There is no dict, or __dict__ doesn't satisfy PyDict_CheckExact. + // There is no dict, or __dict__ doesn't satisfy MyDict_CheckExact. @@ -3508 +3618 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3540 +3650 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3557 +3667 @@ - if (dict != NULL && PyDict_CheckExact(dict)) { + if (dict != NULL && MyDict_CheckExact(dict)) { @@ -3564,2 +3674,2 @@ - Py_DECREF(dict); - Py_DECREF(owner); + My_DECREF(dict); + My_DECREF(owner); @@ -3585 +3695 @@ - Py_DECREF(dict); + My_DECREF(dict); @@ -3587 +3697 @@ - // There is no dict, or __dict__ doesn't satisfy PyDict_CheckExact. + // There is no dict, or __dict__ doesn't satisfy MyDict_CheckExact. @@ -3601 +3711 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3614,2 +3724,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3630,2 +3740,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3641,2 +3751,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3668,2 +3778,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3678,2 +3788,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3684,2 +3794,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3704,2 +3814,2 @@ - Py_DECREF(level); - Py_DECREF(fromlist); + My_DECREF(level); + My_DECREF(fromlist); @@ -3716 +3826 @@ - Py_DECREF(from); + My_DECREF(from); @@ -3724 +3834 @@ - Py_DECREF(from); + My_DECREF(from); @@ -3729 +3839 @@ - Py_DECREF(from); + My_DECREF(from); @@ -3756 +3866 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3760 +3870 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3765 +3875 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3780 +3890 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3784 +3894 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3789 +3899 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3805 +3915 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3815 +3925 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3829 +3939 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3842 +3952 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3878 +3988 @@ - Py_DECREF(names); + My_DECREF(names); @@ -3882 +3992 @@ - Py_DECREF(subject); + My_DECREF(subject); @@ -3888 +3998 @@ - Py_DECREF(type); + My_DECREF(type); @@ -3997 +4107 @@ - Py_XDECREF(rest); + My_XDECREF(rest); @@ -4005 +4115 @@ - Py_DECREF(rest); + My_DECREF(rest); @@ -4009 +4119 @@ - Py_DECREF(keys); + My_DECREF(keys); @@ -4018 +4128 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -4031 +4141 @@ - if (PyCoro_CheckExact(iterable)) { + if (MyCoro_CheckExact(iterable)) { @@ -4036 +4146 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -4044 +4154 @@ - else if (!PyGen_CheckExact(iterable)) { + else if (!MyGen_CheckExact(iterable)) { @@ -4047 +4157 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -4078 +4188 @@ - Py_DECREF(iter); + My_DECREF(iter); @@ -4100 +4210 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4104 +4214 @@ - Py_DECREF(mgr); + My_DECREF(mgr); @@ -4106 +4216 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4135 +4245 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4139 +4249 @@ - Py_DECREF(mgr); + My_DECREF(mgr); @@ -4141 +4251 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4212 +4322 @@ - Py_DECREF(obj); + My_DECREF(obj); @@ -4293 +4403 @@ - Py_DECREF(names); + My_DECREF(names); @@ -4307 +4417 @@ - if (!PyDict_CheckExact(kwargs)) { + if (!MyDict_CheckExact(kwargs)) { @@ -4312 +4422 @@ - Py_DECREF(d); + My_DECREF(d); @@ -4314 +4424 @@ - Py_DECREF(kwargs); + My_DECREF(kwargs); @@ -4317 +4427 @@ - Py_DECREF(kwargs); + My_DECREF(kwargs); @@ -4324 +4434 @@ - if (!PyTuple_CheckExact(callargs)) { + if (!MyTuple_CheckExact(callargs)) { @@ -4326 +4436 @@ - Py_DECREF(callargs); + My_DECREF(callargs); @@ -4329 +4439 @@ - Py_SETREF(callargs, PySequence_Tuple(callargs)); + My_SETREF(callargs, PySequence_Tuple(callargs)); @@ -4337,3 +4447,3 @@ - Py_DECREF(func); - Py_DECREF(callargs); - Py_XDECREF(kwargs); + My_DECREF(func); + My_DECREF(callargs); + My_XDECREF(kwargs); @@ -4355,2 +4465,2 @@ - Py_DECREF(codeobj); - Py_DECREF(qualname); + My_DECREF(codeobj); + My_DECREF(qualname); @@ -4391,3 +4501,3 @@ - Py_DECREF(start); - Py_DECREF(stop); - Py_XDECREF(step); + My_DECREF(start); + My_DECREF(stop); + My_XDECREF(step); @@ -4430 +4540 @@ - Py_DECREF(value); + My_DECREF(value); @@ -4432 +4542 @@ - Py_XDECREF(fmt_spec); + My_XDECREF(fmt_spec); @@ -4443 +4553 @@ - if (PyUnicode_CheckExact(value) && fmt_spec == NULL) { + if (MyUnicode_CheckExact(value) && fmt_spec == NULL) { @@ -4449,2 +4559,2 @@ - Py_DECREF(value); - Py_XDECREF(fmt_spec); + My_DECREF(value); + My_XDECREF(fmt_spec); @@ -4574 +4684 @@ - Py_XDECREF(o); + My_XDECREF(o); @@ -4583 +4693 @@ - Py_CLEAR(retval); + My_CLEAR(retval); @@ -4589 +4699 @@ - Py_CLEAR(retval); + My_CLEAR(retval);