From: Raymond Hettinger Date: Fri, 11 Nov 2016 12:31:18 +0000 (-0800) Subject: Issue #28665: Harmonize STORE_DEREF with STORE_FAST and LOAD_DEREF giving a 40% speedup. X-Git-Tag: v3.6.0b4~100 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=13527123a100f4cd8620473ae8da4cb727279866;p=thirdparty%2FPython%2Fcpython.git Issue #28665: Harmonize STORE_DEREF with STORE_FAST and LOAD_DEREF giving a 40% speedup. --- diff --git a/Misc/NEWS b/Misc/NEWS index cb244f3a352d..24810f05600b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,8 @@ Core and Builtins - Issue #19398: Extra slash no longer added to sys.path components in case of empty compile-time PYTHONPATH components. +- Issue #28665: Improve speed of the STORE_DEREF opcode by 40%. + - Issue #28583: PyDict_SetDefault didn't combine split table when needed. Patch by Xiang Zhang. diff --git a/Python/ceval.c b/Python/ceval.c index b2c90cc3b48d..6bdc9983e3f0 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2462,8 +2462,9 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag) TARGET(STORE_DEREF) { PyObject *v = POP(); PyObject *cell = freevars[oparg]; - PyCell_Set(cell, v); - Py_DECREF(v); + PyObject *oldobj = PyCell_GET(cell); + PyCell_SET(cell, v); + Py_XDECREF(oldobj); DISPATCH(); }