Index: Python/ceval.c =================================================================== --- Python/ceval.c (revision 61088) +++ Python/ceval.c (working copy) @@ -1788,8 +1788,22 @@ case BUILD_MAP: x = _PyDict_NewPresized((Py_ssize_t)oparg); - PUSH(x); - if (x != NULL) continue; + if (x != NULL) { + for (; --oparg >= 0;) { + w = POP(); + u = POP(); + if (err == 0) + err = PyDict_SetItem(x, w, u); + Py_DECREF(u); + Py_DECREF(w); + } + if (err != 0) { + Py_DECREF(x); + break; + } + PUSH(x); + continue; + } break; case STORE_MAP: Index: Python/compile.c =================================================================== --- Python/compile.c (revision 61088) +++ Python/compile.c (working copy) @@ -793,7 +793,7 @@ case BUILD_SET: return 1-oparg; case BUILD_MAP: - return 1; + return 1-2*oparg; case LOAD_ATTR: return 0; case COMPARE_OP: @@ -3217,14 +3217,13 @@ return compiler_ifexp(c, e); case Dict_kind: n = asdl_seq_LEN(e->v.Dict.values); - ADDOP_I(c, BUILD_MAP, (n>0xFFFF ? 0xFFFF : n)); - for (i = 0; i < n; i++) { + for (i = n-1; i >= 0; --i) { VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i)); VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i)); - ADDOP(c, STORE_MAP); } + ADDOP_I(c, BUILD_MAP, n); break; case Set_kind: n = asdl_seq_LEN(e->v.Set.elts);