summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2016-11-11 12:31:18 (GMT)
committerRaymond Hettinger <python@rcn.com>2016-11-11 12:31:18 (GMT)
commit13527123a100f4cd8620473ae8da4cb727279866 (patch)
tree25c4dcc5d4021a43ac4b257b1e7ff8059f2f1137
parenta27c064428c9e3b601be69876ef7e7299a3e0b7f (diff)
downloadcpython-13527123a100f4cd8620473ae8da4cb727279866.zip
cpython-13527123a100f4cd8620473ae8da4cb727279866.tar.gz
cpython-13527123a100f4cd8620473ae8da4cb727279866.tar.bz2
Issue #28665: Harmonize STORE_DEREF with STORE_FAST and LOAD_DEREF giving a 40% speedup.
-rw-r--r--Misc/NEWS2
-rw-r--r--Python/ceval.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index cb244f3..24810f0 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 b2c90cc..6bdc998 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();
}