summaryrefslogtreecommitdiff
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorLarry Hastings <larry@hastings.org>2015-07-05 10:31:09 -0700
committerLarry Hastings <larry@hastings.org>2015-07-05 10:31:09 -0700
commitab30353adbef3a3fdd54fb30856af8ff94f2c108 (patch)
tree4c330aa36e455a7a6223e1488bc7a7a1b384b538 /Python/ceval.c
parentb34db6ad9b3332c3101bcf7e020e90583693db20 (diff)
parent95f9dd5e72d6a72db0ad7438b65990cba30cf36b (diff)
downloadcpython-git-ab30353adbef3a3fdd54fb30856af8ff94f2c108.tar.gz
Merge with ongoing work in 3.5 branch.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index e68ae33bfd..ac52ad91e2 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2561,22 +2561,25 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
}
TARGET(BUILD_MAP) {
+ int i;
PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg);
if (map == NULL)
goto error;
- while (--oparg >= 0) {
+ for (i = oparg; i > 0; i--) {
int err;
- PyObject *value = TOP();
- PyObject *key = SECOND();
- STACKADJ(-2);
+ PyObject *key = PEEK(2*i);
+ PyObject *value = PEEK(2*i - 1);
err = PyDict_SetItem(map, key, value);
- Py_DECREF(value);
- Py_DECREF(key);
if (err != 0) {
Py_DECREF(map);
goto error;
}
}
+
+ while (oparg--) {
+ Py_DECREF(POP());
+ Py_DECREF(POP());
+ }
PUSH(map);
DISPATCH();
}