--- Python/ceval.c +++ Python/ceval.c @@ -1315,0 +1316,54 @@ + +#define My_DECREF(objp) \ + do { \ + PyObject *_py_tmp = _PyObject_CAST(objp); \ + if (--_py_tmp->ob_refcnt == 0) { \ + _Py_Dealloc(_py_tmp); \ + } \ + } while (0) + +#define My_XDECREF(objp) \ + do { \ + PyObject *_py_tmp = _PyObject_CAST(objp); \ + if (_py_tmp != NULL && --_py_tmp->ob_refcnt == 0) { \ + _Py_Dealloc(_py_tmp); \ + } \ + } while (0) + +#define My_CLEAR(objp) \ + do { \ + PyObject *_py_tmp = _PyObject_CAST(objp); \ + if (_py_tmp != NULL) { \ + (objp) = NULL; \ + if (--_py_tmp->ob_refcnt == 0) { \ + _Py_Dealloc(_py_tmp); \ + } \ + } \ + } while (0) + +#define My_SETREF(objp, objp2) \ + do { \ + PyObject *_py_tmp = _PyObject_CAST(objp); \ + (objp) = (objp2); \ + if (--_py_tmp->ob_refcnt == 0) { \ + _Py_Dealloc(_py_tmp); \ + } \ + } while (0) + +#define My_IS_TYPE(objp, type) (_PyObject_CAST_CONST(objp)->ob_type == 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) ((ATOMIC_VAL)->_value) +#else +#define MY_ATOMIC_LOAD_RELAXED(ATOMIC_VAL) _Py_atomic_load_relaxed(ATOMIC_VAL) +#endif @@ -1317 +1371 @@ - if (_Py_atomic_load_relaxed(eval_breaker)) { \ + if (MY_ATOMIC_LOAD_RELAXED(eval_breaker)) { \ @@ -1448 +1502 @@ - Py_XDECREF(tmp); } while (0) + My_XDECREF(tmp); } while (0) @@ -1454 +1508 @@ - Py_XDECREF(v); \ + My_XDECREF(v); \ @@ -1464 +1518 @@ - Py_XDECREF(value); \ + My_XDECREF(value); \ @@ -1473,3 +1527,3 @@ - Py_XDECREF(type); \ - Py_XDECREF(value); \ - Py_XDECREF(traceback); \ + My_XDECREF(type); \ + My_XDECREF(value); \ + My_XDECREF(traceback); \ @@ -1754 +1808 @@ - if (_Py_atomic_load_relaxed(eval_breaker)) { + if (MY_ATOMIC_LOAD_RELAXED(eval_breaker)) { @@ -1880 +1934 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1935 +1989 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1945 +1999 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1955 +2009 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1973 +2027 @@ - Py_DECREF(value); + My_DECREF(value); @@ -1984,2 +2038,2 @@ - Py_DECREF(base); - Py_DECREF(exp); + My_DECREF(base); + My_DECREF(exp); @@ -1996,2 +2050,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2008,2 +2062,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2020,2 +2074,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2032,2 +2086,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2044,2 +2098,2 @@ - if (PyUnicode_CheckExact(dividend) && ( - !PyUnicode_Check(divisor) || PyUnicode_CheckExact(divisor))) { + if (MyUnicode_CheckExact(dividend) && ( + !PyUnicode_Check(divisor) || MyUnicode_CheckExact(divisor))) { @@ -2052,2 +2106,2 @@ - Py_DECREF(divisor); - Py_DECREF(dividend); + My_DECREF(divisor); + My_DECREF(dividend); @@ -2070,2 +2124,2 @@ - if (PyUnicode_CheckExact(left) && - PyUnicode_CheckExact(right)) { + if (MyUnicode_CheckExact(left) && + MyUnicode_CheckExact(right)) { @@ -2077 +2131 @@ - Py_DECREF(left); + My_DECREF(left); @@ -2079 +2133 @@ - Py_DECREF(right); + My_DECREF(right); @@ -2090,2 +2144,2 @@ - Py_DECREF(right); - Py_DECREF(left); + My_DECREF(right); + My_DECREF(left); @@ -2102,2 +2156,2 @@ - Py_DECREF(container); - Py_DECREF(sub); + My_DECREF(container); + My_DECREF(sub); @@ -2114,2 +2168,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2126,2 +2180,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2138,2 +2192,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2150,2 +2204,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2162,2 +2216,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2175 +2229 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2187 +2241 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2198,2 +2252,2 @@ - Py_DECREF(base); - Py_DECREF(exp); + My_DECREF(base); + My_DECREF(exp); @@ -2210,2 +2264,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2222,2 +2276,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2234,2 +2288,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2246,2 +2300,2 @@ - Py_DECREF(dividend); - Py_DECREF(divisor); + My_DECREF(dividend); + My_DECREF(divisor); @@ -2258,2 +2312,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2270 +2324 @@ - if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { + if (MyUnicode_CheckExact(left) && MyUnicode_CheckExact(right)) { @@ -2276 +2330 @@ - Py_DECREF(left); + My_DECREF(left); @@ -2278 +2332 @@ - Py_DECREF(right); + My_DECREF(right); @@ -2289,2 +2343,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2301,2 +2355,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2313,2 +2367,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2325,2 +2379,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2337,2 +2391,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2349,2 +2403,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -2365,3 +2419,3 @@ - Py_DECREF(v); - Py_DECREF(container); - Py_DECREF(sub); + My_DECREF(v); + My_DECREF(container); + My_DECREF(sub); @@ -2380,2 +2434,2 @@ - Py_DECREF(container); - Py_DECREF(sub); + My_DECREF(container); + My_DECREF(sub); @@ -2395 +2449 @@ - Py_DECREF(value); + My_DECREF(value); @@ -2399 +2453 @@ - Py_DECREF(value); + My_DECREF(value); @@ -2402 +2456 @@ - Py_DECREF(res); + My_DECREF(res); @@ -2449 +2503 @@ - Py_DECREF(obj); + My_DECREF(obj); @@ -2461 +2515 @@ - Py_DECREF(obj); + My_DECREF(obj); @@ -2473 +2527 @@ - Py_DECREF(iter); + My_DECREF(iter); @@ -2488 +2542 @@ - if (PyAsyncGen_CheckExact(aiter)) { + if (MyAsyncGen_CheckExact(aiter)) { @@ -2520 +2574 @@ - Py_DECREF(next_iter); + My_DECREF(next_iter); @@ -2523 +2577 @@ - Py_DECREF(next_iter); + My_DECREF(next_iter); @@ -2547 +2601 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -2549 +2603 @@ - if (iter != NULL && PyCoro_CheckExact(iter)) { + if (iter != NULL && MyCoro_CheckExact(iter)) { @@ -2555,2 +2609,2 @@ - Py_DECREF(yf); - Py_CLEAR(iter); + My_DECREF(yf); + My_CLEAR(iter); @@ -2602 +2656 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2610 +2664 @@ - Py_DECREF(receiver); + My_DECREF(receiver); @@ -2630 +2684 @@ - Py_DECREF(retval); + My_DECREF(retval); @@ -2644 +2698 @@ - Py_DECREF(none); + My_DECREF(none); @@ -2684,3 +2738,3 @@ - Py_XDECREF(type); - Py_XDECREF(value); - Py_XDECREF(traceback); + My_XDECREF(type); + My_XDECREF(value); + My_XDECREF(traceback); @@ -2714 +2768 @@ - Py_DECREF(exc); + My_DECREF(exc); @@ -2716 +2770 @@ - Py_DECREF(POP()); + My_DECREF(POP()); @@ -2739 +2793 @@ - if (PyDict_CheckExact(f->f_builtins)) { + if (MyDict_CheckExact(f->f_builtins)) { @@ -2774 +2828 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2777 +2831 @@ - if (PyDict_CheckExact(ns)) + if (MyDict_CheckExact(ns)) @@ -2781 +2835 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2809 +2863 @@ - if (PyTuple_CheckExact(seq) && + if (MyTuple_CheckExact(seq) && @@ -2817 +2871 @@ - } else if (PyList_CheckExact(seq) && + } else if (MyList_CheckExact(seq) && @@ -2830 +2884 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2833 +2887 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2845 +2899 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2848 +2902 @@ - Py_DECREF(seq); + My_DECREF(seq); @@ -2859,2 +2913,2 @@ - Py_DECREF(v); - Py_DECREF(owner); + My_DECREF(v); + My_DECREF(owner); @@ -2871 +2925 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -2882 +2936 @@ - Py_DECREF(v); + My_DECREF(v); @@ -2911 +2965 @@ - if (PyDict_CheckExact(locals)) { + if (MyDict_CheckExact(locals)) { @@ -2937 +2991 @@ - if (PyDict_CheckExact(f->f_builtins)) { + if (MyDict_CheckExact(f->f_builtins)) { @@ -2969,2 +3023,2 @@ - if (PyDict_CheckExact(f->f_globals) - && PyDict_CheckExact(f->f_builtins)) + if (MyDict_CheckExact(f->f_globals) + && MyDict_CheckExact(f->f_builtins)) @@ -3071 +3125 @@ - Py_DECREF(oldobj); + My_DECREF(oldobj); @@ -3093 +3147 @@ - if (PyDict_CheckExact(locals)) { + if (MyDict_CheckExact(locals)) { @@ -3141 +3195 @@ - Py_XDECREF(oldobj); + My_XDECREF(oldobj); @@ -3152 +3206 @@ - Py_DECREF(empty); + My_DECREF(empty); @@ -3157 +3211 @@ - Py_DECREF(item); + My_DECREF(item); @@ -3190 +3244 @@ - Py_DECREF(list); + My_DECREF(list); @@ -3211 +3265 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -3214,2 +3268,2 @@ - Py_DECREF(none_val); - Py_DECREF(iterable); + My_DECREF(none_val); + My_DECREF(iterable); @@ -3223 +3277 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -3240 +3294 @@ - Py_DECREF(item); + My_DECREF(item); @@ -3244 +3298 @@ - Py_DECREF(set); + My_DECREF(set); @@ -3262 +3316 @@ - Py_DECREF(map); + My_DECREF(map); @@ -3268,2 +3322,2 @@ - Py_DECREF(POP()); - Py_DECREF(POP()); + My_DECREF(POP()); + My_DECREF(POP()); @@ -3285 +3339 @@ - if (PyDict_CheckExact(f->f_locals)) { + if (MyDict_CheckExact(f->f_locals)) { @@ -3299 +3353 @@ - Py_DECREF(ann_dict); + My_DECREF(ann_dict); @@ -3322 +3376 @@ - Py_DECREF(ann_dict); + My_DECREF(ann_dict); @@ -3328 +3382 @@ - Py_DECREF(ann_dict); + My_DECREF(ann_dict); @@ -3338 +3392 @@ - if (!PyTuple_CheckExact(keys) || + if (!MyTuple_CheckExact(keys) || @@ -3354 +3408 @@ - Py_DECREF(map); + My_DECREF(map); @@ -3359 +3413 @@ - Py_DECREF(POP()); + My_DECREF(POP()); @@ -3361 +3415 @@ - Py_DECREF(POP()); + My_DECREF(POP()); @@ -3376 +3430 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3379 +3433 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3389 +3443 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3392 +3446 @@ - Py_DECREF(update); + My_DECREF(update); @@ -3406,2 +3460,2 @@ - Py_DECREF(value); - Py_DECREF(key); + My_DECREF(value); + My_DECREF(key); @@ -3446 +3500 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3458 +3512 @@ - if (dict != NULL && PyDict_CheckExact(dict)) { + if (dict != NULL && MyDict_CheckExact(dict)) { @@ -3477,2 +3531,2 @@ - Py_DECREF(owner); - Py_DECREF(dict); + My_DECREF(owner); + My_DECREF(dict); @@ -3486 +3540 @@ - Py_DECREF(dict); + My_DECREF(dict); @@ -3490 +3544 @@ - // There is no dict, or __dict__ doesn't satisfy PyDict_CheckExact. + // There is no dict, or __dict__ doesn't satisfy MyDict_CheckExact. @@ -3508 +3562 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3540 +3594 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3557 +3611 @@ - if (dict != NULL && PyDict_CheckExact(dict)) { + if (dict != NULL && MyDict_CheckExact(dict)) { @@ -3564,2 +3618,2 @@ - Py_DECREF(dict); - Py_DECREF(owner); + My_DECREF(dict); + My_DECREF(owner); @@ -3585 +3639 @@ - Py_DECREF(dict); + My_DECREF(dict); @@ -3587 +3641 @@ - // There is no dict, or __dict__ doesn't satisfy PyDict_CheckExact. + // There is no dict, or __dict__ doesn't satisfy MyDict_CheckExact. @@ -3601 +3655 @@ - Py_DECREF(owner); + My_DECREF(owner); @@ -3614,2 +3668,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3630,2 +3684,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3641,2 +3695,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3668,2 +3722,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3678,2 +3732,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3684,2 +3738,2 @@ - Py_DECREF(left); - Py_DECREF(right); + My_DECREF(left); + My_DECREF(right); @@ -3704,2 +3758,2 @@ - Py_DECREF(level); - Py_DECREF(fromlist); + My_DECREF(level); + My_DECREF(fromlist); @@ -3716 +3770 @@ - Py_DECREF(from); + My_DECREF(from); @@ -3724 +3778 @@ - Py_DECREF(from); + My_DECREF(from); @@ -3729 +3783 @@ - Py_DECREF(from); + My_DECREF(from); @@ -3756 +3810 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3760 +3814 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3766 +3820 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3783 +3837 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3787 +3841 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3793 +3847 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3810 +3864 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3820 +3874 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3834 +3888 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3847 +3901 @@ - Py_DECREF(cond); + My_DECREF(cond); @@ -3883 +3937 @@ - Py_DECREF(names); + My_DECREF(names); @@ -3887 +3941 @@ - Py_DECREF(subject); + My_DECREF(subject); @@ -3893 +3947 @@ - Py_DECREF(type); + My_DECREF(type); @@ -3946 +4000 @@ - Py_XDECREF(rest); + My_XDECREF(rest); @@ -3954 +4008 @@ - Py_DECREF(rest); + My_DECREF(rest); @@ -3958 +4012 @@ - Py_DECREF(keys); + My_DECREF(keys); @@ -3967 +4021 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -3980 +4034 @@ - if (PyCoro_CheckExact(iterable)) { + if (MyCoro_CheckExact(iterable)) { @@ -3985 +4039 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -3993 +4047 @@ - else if (!PyGen_CheckExact(iterable)) { + else if (!MyGen_CheckExact(iterable)) { @@ -3996 +4050 @@ - Py_DECREF(iterable); + My_DECREF(iterable); @@ -4027 +4081 @@ - Py_DECREF(iter); + My_DECREF(iter); @@ -4049 +4103 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4053 +4107 @@ - Py_DECREF(mgr); + My_DECREF(mgr); @@ -4055 +4109 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4084 +4138 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4088 +4142 @@ - Py_DECREF(mgr); + My_DECREF(mgr); @@ -4090 +4144 @@ - Py_DECREF(enter); + My_DECREF(enter); @@ -4161 +4215 @@ - Py_DECREF(obj); + My_DECREF(obj); @@ -4242 +4296 @@ - Py_DECREF(names); + My_DECREF(names); @@ -4256 +4310 @@ - if (!PyDict_CheckExact(kwargs)) { + if (!MyDict_CheckExact(kwargs)) { @@ -4261 +4315 @@ - Py_DECREF(d); + My_DECREF(d); @@ -4263 +4317 @@ - Py_DECREF(kwargs); + My_DECREF(kwargs); @@ -4266 +4320 @@ - Py_DECREF(kwargs); + My_DECREF(kwargs); @@ -4273 +4327 @@ - if (!PyTuple_CheckExact(callargs)) { + if (!MyTuple_CheckExact(callargs)) { @@ -4275 +4329 @@ - Py_DECREF(callargs); + My_DECREF(callargs); @@ -4278 +4332 @@ - Py_SETREF(callargs, PySequence_Tuple(callargs)); + My_SETREF(callargs, PySequence_Tuple(callargs)); @@ -4286,3 +4340,3 @@ - Py_DECREF(func); - Py_DECREF(callargs); - Py_XDECREF(kwargs); + My_DECREF(func); + My_DECREF(callargs); + My_XDECREF(kwargs); @@ -4304,2 +4358,2 @@ - Py_DECREF(codeobj); - Py_DECREF(qualname); + My_DECREF(codeobj); + My_DECREF(qualname); @@ -4340,3 +4394,3 @@ - Py_DECREF(start); - Py_DECREF(stop); - Py_XDECREF(step); + My_DECREF(start); + My_DECREF(stop); + My_XDECREF(step); @@ -4379 +4433 @@ - Py_DECREF(value); + My_DECREF(value); @@ -4381 +4435 @@ - Py_XDECREF(fmt_spec); + My_XDECREF(fmt_spec); @@ -4392 +4446 @@ - if (PyUnicode_CheckExact(value) && fmt_spec == NULL) { + if (MyUnicode_CheckExact(value) && fmt_spec == NULL) { @@ -4398,2 +4452,2 @@ - Py_DECREF(value); - Py_XDECREF(fmt_spec); + My_DECREF(value); + My_XDECREF(fmt_spec); @@ -4528 +4582 @@ - Py_XDECREF(o); + My_XDECREF(o); @@ -4537 +4591 @@ - Py_CLEAR(retval); + My_CLEAR(retval); @@ -4543 +4597 @@ - Py_CLEAR(retval); + My_CLEAR(retval);