python/dist/src/Python newcompile.c, 1.1.2.65, 1.1.2.66

Update of /cvsroot/python/python/dist/src/Python In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29504/Python Modified Files: Tag: ast-branch newcompile.c Log Message: Fix problem if two consts, 100 and 100L are stored. Putting both into a dict overwrites the first. Store the value and type, like in original compile. Index: newcompile.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/Attic/newcompile.c,v retrieving revision 1.1.2.65 retrieving revision 1.1.2.66 diff -C2 -d -r1.1.2.65 -r1.1.2.66 *** newcompile.c 27 Jan 2004 19:05:43 -0000 1.1.2.65 --- newcompile.c 27 Jan 2004 19:14:33 -0000 1.1.2.66 *************** *** 258,262 **** { int i, n; ! PyObject *v, *dict = PyDict_New(); n = PyList_Size(list); --- 258,262 ---- { int i, n; ! PyObject *v, *k, *dict = PyDict_New(); n = PyList_Size(list); *************** *** 267,271 **** return NULL; } ! if (PyDict_SetItem(dict, PyList_GET_ITEM(list, i), v) < 0) { Py_DECREF(v); Py_DECREF(dict); --- 267,274 ---- return NULL; } ! k = PyList_GET_ITEM(list, i); ! k = Py_BuildValue("(OO)", k, k->ob_type); ! if (k == NULL || PyDict_SetItem(dict, k, v) < 0) { ! Py_XDECREF(k); Py_DECREF(v); Py_DECREF(dict); *************** *** 603,616 **** PyObject *o) { ! PyObject *v; int arg; ! v = PyDict_GetItem(dict, o); if (!v) { arg = PyDict_Size(dict); v = PyInt_FromLong(arg); ! if (!v) return 0; ! if (PyDict_SetItem(dict, o, v) < 0) { Py_DECREF(v); return 0; --- 606,628 ---- PyObject *o) { ! PyObject *t, *v; int arg; ! /* necessary to make sure types aren't coerced (e.g., int and long) */ ! /* XXX should use: t = PyTuple_Pack(2, o, o->ob_type); */ ! t = Py_BuildValue("(OO)", o, o->ob_type); ! if (t == NULL) ! return 0; ! ! v = PyDict_GetItem(dict, t); if (!v) { arg = PyDict_Size(dict); v = PyInt_FromLong(arg); ! if (!v) { ! Py_DECREF(t); return 0; ! } ! if (PyDict_SetItem(dict, t, v) < 0) { ! Py_DECREF(t); Py_DECREF(v); return 0; *************** *** 620,623 **** --- 632,636 ---- else arg = PyInt_AsLong(v); + Py_DECREF(t); return compiler_addop_i(c, opcode, arg); } *************** *** 2594,2597 **** --- 2607,2611 ---- while (PyDict_Next(dict, &pos, &k, &v)) { i = PyInt_AS_LONG(v); + k = PyTuple_GET_ITEM(k, 0); Py_INCREF(k); assert((i - offset) < size);
participants (1)
-
nnorwitz@projects.sourceforge.net