[Python-checkins] python/dist/src/Objects structseq.c,1.9,1.10

loewis@users.sourceforge.net loewis@users.sourceforge.net
Wed, 16 Oct 2002 12:10:08 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv6052

Modified Files:
	structseq.c 
Log Message:
Add n_unnamed_fields into the type.


Index: structseq.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/structseq.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** structseq.c	16 Oct 2002 18:27:39 -0000	1.9
--- structseq.c	16 Oct 2002 19:10:03 -0000	1.10
***************
*** 8,11 ****
--- 8,12 ----
  static char visible_length_key[] = "n_sequence_fields";
  static char real_length_key[] = "n_fields";
+ static char unnamed_fields_key[] = "n_unnamed_fields";
  
  /* Fields with this name have only a field index, not a field name. 
***************
*** 21,24 ****
--- 22,29 ----
  #define REAL_SIZE(op) REAL_SIZE_TP((op)->ob_type)
  
+ #define UNNAMED_FIELDS_TP(tp) PyInt_AsLong( \
+                       PyDict_GetItemString((tp)->tp_dict, unnamed_fields_key))
+ #define UNNAMED_FIELDS(op) UNNAMED_FIELDS_TP((op)->ob_type)
+ 
  
  PyObject *
***************
*** 92,96 ****
  	PyObject *ob;
  	PyStructSequence *res = NULL;
! 	int len, min_len, max_len, i;
  	static char *kwlist[] = {"sequence", "dict", 0};
  
--- 97,101 ----
  	PyObject *ob;
  	PyStructSequence *res = NULL;
! 	int len, min_len, max_len, i, n_unnamed_fields;
  	static char *kwlist[] = {"sequence", "dict", 0};
  
***************
*** 116,119 ****
--- 121,125 ----
  	min_len = VISIBLE_SIZE_TP(type);
  	max_len = REAL_SIZE_TP(type);
+ 	n_unnamed_fields = UNNAMED_FIELDS_TP(type);
  
  	if (min_len != max_len) {
***************
*** 152,156 ****
  	for (; i < max_len; ++i) {
  		if (dict && (ob = PyDict_GetItemString(
! 			dict, type->tp_members[i].name))) {
  		}
  		else {
--- 158,162 ----
  	for (; i < max_len; ++i) {
  		if (dict && (ob = PyDict_GetItemString(
! 			dict, type->tp_members[i-n_unnamed_fields].name))) {
  		}
  		else {
***************
*** 239,247 ****
  	PyObject* dict;
  	PyObject* result;
! 	long n_fields, n_visible_fields;
  	int i;
  	
  	n_fields = REAL_SIZE(self);
  	n_visible_fields = VISIBLE_SIZE(self);
  	tup = PyTuple_New(n_visible_fields);
  	if (!tup) {
--- 245,254 ----
  	PyObject* dict;
  	PyObject* result;
! 	long n_fields, n_visible_fields, n_unnamed_fields;
  	int i;
  	
  	n_fields = REAL_SIZE(self);
  	n_visible_fields = VISIBLE_SIZE(self);
+ 	n_unnamed_fields = UNNAMED_FIELDS(self);
  	tup = PyTuple_New(n_visible_fields);
  	if (!tup) {
***************
*** 261,265 ****
  	
  	for (; i < n_fields; i++) {
! 		PyDict_SetItemString(dict, self->ob_type->tp_members[i].name,
  				     self->ob_item[i]);
  	}
--- 268,273 ----
  	
  	for (; i < n_fields; i++) {
! 		char *n = self->ob_type->tp_members[i-n_unnamed_fields].name;
! 		PyDict_SetItemString(dict, n,
  				     self->ob_item[i]);
  	}
***************
*** 341,345 ****
  	n_unnamed_members = 0;
  	for (i = 0; desc->fields[i].name != NULL; ++i)
! 		if (desc->fields[0].name == PyStructSequence_UnnamedField)
  			n_unnamed_members++;
  	n_members = i;
--- 349,353 ----
  	n_unnamed_members = 0;
  	for (i = 0; desc->fields[i].name != NULL; ++i)
! 		if (desc->fields[i].name == PyStructSequence_UnnamedField)
  			n_unnamed_members++;
  	n_members = i;
***************
*** 378,381 ****
--- 386,391 ----
  	PyDict_SetItemString(dict, real_length_key, 
  		       PyInt_FromLong((long) n_members));
+ 	PyDict_SetItemString(dict, unnamed_fields_key, 
+ 		       PyInt_FromLong((long) n_unnamed_members));
  	PyDict_SetItemString(dict, "__safe_for_unpickling__", 
  		       PyInt_FromLong(1));