[Python-checkins] python/dist/src/Python newcompile.c, 1.1.2.65, 1.1.2.66

nnorwitz at projects.sourceforge.net nnorwitz at projects.sourceforge.net
Tue Jan 27 14:14:36 EST 2004


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);




More information about the Python-checkins mailing list