[Zope3-checkins] CVS: ZODB/src/persistent - cPersistence.c:1.78

Jeremy Hylton jeremy at zope.com
Fri Feb 20 12:20:17 EST 2004


Update of /cvs-repository/ZODB/src/persistent
In directory cvs.zope.org:/tmp/cvs-serv27939/persistent

Modified Files:
	cPersistence.c 
Log Message:
Reformat recent code for consistency with rest of file.


=== ZODB/src/persistent/cPersistence.c 1.77 => 1.78 ===
--- ZODB/src/persistent/cPersistence.c:1.77	Thu Feb 19 13:13:35 2004
+++ ZODB/src/persistent/cPersistence.c	Fri Feb 20 12:20:16 2004
@@ -31,6 +31,9 @@
 static PyObject *py__p_changed, *py__p_deactivate;
 static PyObject *py___getattr__, *py___setattr__, *py___delattr__;
 static PyObject *py___getstate__;
+static PyObject *py___slotnames__, *copy_reg_slotnames, *__newobj__;
+static PyObject *py___getnewargs__, *py___getstate__;
+
 
 static int
 init_strings(void)
@@ -48,6 +51,9 @@
     INIT_STRING(__setattr__);
     INIT_STRING(__delattr__);
     INIT_STRING(__getstate__);
+    INIT_STRING(__slotnames__);
+    INIT_STRING(__getnewargs__);
+    INIT_STRING(__getstate__);
 #undef INIT_STRING
     return 0;
 }
@@ -232,104 +238,61 @@
 }
 
 
-
-/* It's a dang shame we can't inherit __get/setstate__ from object :( */
-
-static PyObject *str__slotnames__, *copy_reg_slotnames, *__newobj__;
-static PyObject *str__getnewargs__, *str__getstate__;
-
-static int
-pickle_setup(void)
-{
-  PyObject *copy_reg;
-  int r = -1;
-
-#define DEFINE_STRING(S) \
-  if(! (str ## S = PyString_FromString(# S))) return -1
-  DEFINE_STRING(__slotnames__);
-  DEFINE_STRING(__getnewargs__);
-  DEFINE_STRING(__getstate__);
-#undef DEFINE_STRING
-
-  copy_reg = PyImport_ImportModule("copy_reg");
-  if (copy_reg == NULL)
-    return -1;
-
-  copy_reg_slotnames = PyObject_GetAttrString(copy_reg, "_slotnames");
-  if (copy_reg_slotnames == NULL)
-    goto end;
-
-  __newobj__ = PyObject_GetAttrString(copy_reg, "__newobj__");
-  if (__newobj__ == NULL)
-    goto end;
-
-  r = 0;
- end:
-  Py_DECREF(copy_reg);
-  return r;
-}
-
 static PyObject *
 pickle_slotnames(PyTypeObject *cls)
 {
-  PyObject *slotnames;
+    PyObject *slotnames;
 
-  slotnames = PyDict_GetItem(cls->tp_dict, str__slotnames__);
-  if (slotnames != NULL) 
-    {
-      Py_INCREF(slotnames);
-      return slotnames;
+    slotnames = PyDict_GetItem(cls->tp_dict, py___slotnames__);
+    if (slotnames) {
+	Py_INCREF(slotnames);
+	return slotnames;
     }
 
-  slotnames = PyObject_CallFunctionObjArgs(copy_reg_slotnames, (PyObject*)cls, 
-                                           NULL);
-  if (slotnames != NULL &&
-      slotnames != Py_None &&
-      ! PyList_Check(slotnames))
-    {
-      PyErr_SetString(PyExc_TypeError,
-                      "copy_reg._slotnames didn't return a list or None");
-      Py_DECREF(slotnames);
-      slotnames = NULL;
+    slotnames = PyObject_CallFunctionObjArgs(copy_reg_slotnames, 
+					     (PyObject*)cls, NULL);
+    if (slotnames && !(slotnames == Py_None || PyList_Check(slotnames))) {
+	PyErr_SetString(PyExc_TypeError,
+			"copy_reg._slotnames didn't return a list or None");
+	Py_DECREF(slotnames);
+	return NULL;
     }
   
-  return slotnames;
+    return slotnames;
 }
 
 static PyObject *
 pickle_copy_dict(PyObject *state)
 {
-  PyObject *copy, *key, *value;
-  char *ckey;
-  int pos = 0;
+    PyObject *copy, *key, *value;
+    char *ckey;
+    int pos = 0;
 
-  copy = PyDict_New();
-  if (copy == NULL)
-    return NULL;
+    copy = PyDict_New();
+    if (!copy)
+	return NULL;
 
-  if (state == NULL)
-    return copy;
+    if (!state)
+	return copy;
 
-  while (PyDict_Next(state, &pos, &key, &value))
-    {
-      if (key && PyString_Check(key))
-        {
-          ckey = PyString_AS_STRING(key);
-          if (*ckey == '_' &&
-              (ckey[1] == 'v' || ckey[1] == 'p') &&
-              ckey[2] == '_')
-            /* skip volatile and persistent */
-            continue;
+    while (PyDict_Next(state, &pos, &key, &value)) {
+	if (key && PyString_Check(key)) {
+	    ckey = PyString_AS_STRING(key);
+	    if (*ckey == '_' &&
+		(ckey[1] == 'v' || ckey[1] == 'p') &&
+		ckey[2] == '_')
+		/* skip volatile and persistent */
+		continue;
         }
 
-      if (PyObject_SetItem(copy, key, value) < 0)
-        goto err;
+	if (PyObject_SetItem(copy, key, value) < 0)
+	    goto err;
     }
   
-  return copy;
+    return copy;
  err:
-  Py_DECREF(copy);
-  return NULL;
+    Py_DECREF(copy);
+    return NULL;
 }
 
 
@@ -352,163 +315,140 @@
 static PyObject *
 pickle___getstate__(PyObject *self)
 {
-  PyObject *slotnames=NULL, *slots=NULL, *state=NULL;
-  PyObject **dictp;
-  int n=0;
-
-  slotnames = pickle_slotnames(self->ob_type);
-  if (slotnames == NULL)
-    return NULL;
+    PyObject *slotnames=NULL, *slots=NULL, *state=NULL;
+    PyObject **dictp;
+    int n=0;
 
-  dictp = _PyObject_GetDictPtr(self);
-  if (dictp)
-    state = pickle_copy_dict(*dictp);
-  else 
-    {
-      state = Py_None;
-      Py_INCREF(state);
-    }
-
-  if (slotnames != Py_None)
-    {
-      int i;
+    slotnames = pickle_slotnames(self->ob_type);
+    if (!slotnames)
+	return NULL;
 
-      slots = PyDict_New();
-      if (slots == NULL)
-        goto end;
-
-      for (i = 0; i < PyList_GET_SIZE(slotnames); i++) 
-        {
-          PyObject *name, *value;
-          char *cname;
-
-          name = PyList_GET_ITEM(slotnames, i);
-          if (PyString_Check(name))
-            {
-              cname = PyString_AS_STRING(name);
-              if (*cname == '_' &&
-                  (cname[1] == 'v' || cname[1] == 'p') &&
-                  cname[2] == '_')
-                /* skip volatile and persistent */
-                continue;
+    dictp = _PyObject_GetDictPtr(self);
+    if (dictp)
+	state = pickle_copy_dict(*dictp);
+    else {
+	state = Py_None;
+	Py_INCREF(state);
+    }
+
+    if (slotnames != Py_None) {
+	int i;
+
+	slots = PyDict_New();
+	if (!slots)
+	    goto end;
+
+	for (i = 0; i < PyList_GET_SIZE(slotnames); i++) {
+	    PyObject *name, *value;
+	    char *cname;
+
+	    name = PyList_GET_ITEM(slotnames, i);
+	    if (PyString_Check(name)) {
+		cname = PyString_AS_STRING(name);
+		if (*cname == '_' &&
+		    (cname[1] == 'v' || cname[1] == 'p') &&
+		    cname[2] == '_')
+		    /* skip volatile and persistent */
+		    continue;
             }
 
-	  /* XXX will this go through our getattr hook? */
-          value = PyObject_GetAttr(self, name);
-          if (value == NULL)
-            PyErr_Clear();
-          else 
-            {
-              int err = PyDict_SetItem(slots, name, value);
-              Py_DECREF(value);
-              if (err < 0)
-                goto end;
-              n++;
+	    /* XXX will this go through our getattr hook? */
+	    value = PyObject_GetAttr(self, name);
+	    if (value == NULL)
+		PyErr_Clear();
+	    else {
+		int err = PyDict_SetItem(slots, name, value);
+		Py_DECREF(value);
+		if (err < 0)
+		    goto end;
+		n++;
             }
         }
     }
 
-  if (n) 
-    state = Py_BuildValue("(NO)", state, slots);
+    if (n) 
+	state = Py_BuildValue("(NO)", state, slots);
 
  end:
-  Py_XDECREF(slotnames);
-  Py_XDECREF(slots);
+    Py_XDECREF(slotnames);
+    Py_XDECREF(slots);
   
-  return state;
+    return state;
 }
 
 static int
 pickle_setattrs_from_dict(PyObject *self, PyObject *dict)
 {
-  PyObject *key, *value;
-  int pos = 0;
+    PyObject *key, *value;
+    int pos = 0;
   
-  if (! PyDict_Check(dict))
-    {
-      PyErr_SetString(PyExc_TypeError, "Expected dictionary");
-      return -1;
+    if (!PyDict_Check(dict)) {
+	PyErr_SetString(PyExc_TypeError, "Expected dictionary");
+	return -1;
     }
   
-  while (PyDict_Next(dict, &pos, &key, &value)) 
-    {
-      if (PyObject_SetAttr(self, key, value) < 0)
-        return -1;
+    while (PyDict_Next(dict, &pos, &key, &value)) {
+	if (PyObject_SetAttr(self, key, value) < 0)
+	    return -1;
     }
-  return 0;
+    return 0;
 }
 
 static char pickle___setstate__doc[] =
-"Set the object serialization state\n"
-"\n"
-"The state should be in one of 3 forms:\n"
-"\n"
-"- None\n"
-"\n"
-"  Ignored\n"
-"\n"
-"- A dictionary\n"
-"\n"
+"Set the object serialization state\n\n"
+"The state should be in one of 3 forms:\n\n"
+"- None\n\n"
+"  Ignored\n\n"
+"- A dictionary\n\n"
 "  In this case, the object's instance dictionary will be cleared and \n"
-"  updated with the new state.\n"
-"\n"
-"- A two-tuple with a string as the first element.  \n"
-"\n"
+"  updated with the new state.\n\n"
+"- A two-tuple with a string as the first element. \n\n"
 "  In this case, the method named by the string in the first element will be\n"
-"  called with the second element.\n"
-"\n"
-"  This form supports migration of data formats.\n"
-"\n"
+"  called with the second element.\n\n"
+"  This form supports migration of data formats.\n\n"
 "- A two-tuple with None or a Dictionary as the first element and\n"
-"  with a dictionary as the second element.\n"
-"\n"
+"  with a dictionary as the second element.\n\n"
 "  If the first element is not None, then the object's instance dictionary \n"
-"  will be cleared and updated with the value.\n"
-"\n"
+"  will be cleared and updated with the value.\n\n"
 "  The items in the second element will be assigned as attributes.\n"
 ;
 
 static PyObject *
 pickle___setstate__(PyObject *self, PyObject *state)
 {
-  PyObject *slots=NULL;
-
-  if (PyTuple_Check(state))
-    {
-      if (! PyArg_ParseTuple(state, "OO", &state, &slots))
-        return NULL;
-    }
+    PyObject *slots=NULL;
 
-  if (state != Py_None)
-    {
-      PyObject **dict;
-
-      dict = _PyObject_GetDictPtr(self);
-      if (dict)
-        {
-          if (*dict == NULL)
-            {
-              *dict = PyDict_New();
-              if (*dict == NULL)
-                return NULL;
+    if (PyTuple_Check(state)) {
+	if (!PyArg_ParseTuple(state, "OO:__setstate__", &state, &slots))
+	    return NULL;
+    }
+
+    if (state != Py_None) {
+	PyObject **dict;
+
+	dict = _PyObject_GetDictPtr(self);
+	if (dict) {
+	    if (!*dict) {
+		*dict = PyDict_New();
+		if (!*dict)
+		    return NULL;
             }
         }
 
-      if (*dict != NULL)
-        {
-          PyDict_Clear(*dict);
-          if (PyDict_Update(*dict, state) < 0)
-            return NULL;
+	if (*dict) {
+	    PyDict_Clear(*dict);
+	    if (PyDict_Update(*dict, state) < 0)
+		return NULL;
         }
-      else if (pickle_setattrs_from_dict(self, state) < 0)
-        return NULL;
+	else if (pickle_setattrs_from_dict(self, state) < 0)
+	    return NULL;
     }
 
-  if (slots != NULL && pickle_setattrs_from_dict(self, slots) < 0)
-    return NULL;
+    if (slots && pickle_setattrs_from_dict(self, slots) < 0)
+	return NULL;
 
-  Py_INCREF(Py_None);
-  return Py_None;
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
 static char pickle___reduce__doc[] = 
@@ -518,52 +458,49 @@
 static PyObject *
 pickle___reduce__(PyObject *self)
 {
-  PyObject *args=NULL, *bargs=NULL, *state=NULL, *getnewargs=NULL;
-  int l, i;
+    PyObject *args=NULL, *bargs=NULL, *state=NULL, *getnewargs=NULL;
+    int l, i;
 
-  getnewargs = PyObject_GetAttr(self, str__getnewargs__);
-  if (getnewargs != NULL) {
-      bargs = PyObject_CallFunctionObjArgs(getnewargs, NULL);
-      Py_DECREF(getnewargs);
-      if (bargs == NULL)
-          return NULL;
-      l = PyTuple_Size(bargs);
-      if (l < 0)
-          goto end;
-  }
-  else {
-      PyErr_Clear();
-      l = 0;
-  }
+    getnewargs = PyObject_GetAttr(self, py___getnewargs__);
+    if (getnewargs) {
+	bargs = PyObject_CallFunctionObjArgs(getnewargs, NULL);
+	Py_DECREF(getnewargs);
+	if (!bargs)
+	    return NULL;
+	l = PyTuple_Size(bargs);
+	if (l < 0)
+	    goto end;
+    }
+    else {
+	PyErr_Clear();
+	l = 0;
+    }
   
-  args = PyTuple_New(l+1);
-  if (args == NULL)
-    goto end;
+    args = PyTuple_New(l+1);
+    if (args == NULL)
+	goto end;
   
-  Py_INCREF(self->ob_type);
-  PyTuple_SET_ITEM(args, 0, (PyObject*)(self->ob_type));
-  for (i = 0; i < l; i++)
-    {
-      Py_INCREF(PyTuple_GET_ITEM(bargs, i));
-      PyTuple_SET_ITEM(args, i+1, PyTuple_GET_ITEM(bargs, i));
+    Py_INCREF(self->ob_type);
+    PyTuple_SET_ITEM(args, 0, (PyObject*)(self->ob_type));
+    for (i = 0; i < l; i++) {
+	Py_INCREF(PyTuple_GET_ITEM(bargs, i));
+	PyTuple_SET_ITEM(args, i+1, PyTuple_GET_ITEM(bargs, i));
     }
   
-  state = PyObject_CallMethodObjArgs(self, str__getstate__, NULL);
-  if (state == NULL)
-    goto end;
+    state = PyObject_CallMethodObjArgs(self, py___getstate__, NULL);
+    if (!state)
+	goto end;
 
-  state = Py_BuildValue("(OON)", __newobj__, args, state);
+    state = Py_BuildValue("(OON)", __newobj__, args, state);
 
  end:
-  Py_XDECREF(bargs);
-  Py_XDECREF(args);
+    Py_XDECREF(bargs);
+    Py_XDECREF(args);
 
-  return state;
+    return state;
 }
 
 
-
-
 /* Return the object's state, a dict or None.
 
    If the object has no dict, it's state is None.
@@ -1176,9 +1113,7 @@
 initcPersistence(void)
 {
     PyObject *m, *s;
-
-    if (pickle_setup() < 0)
-      return;
+    PyObject *copy_reg;
 
     if (init_strings() < 0)
       return;
@@ -1216,7 +1151,23 @@
     if (!py_simple_new)
         return;
 
-    if (TimeStamp == NULL) {
+    copy_reg = PyImport_ImportModule("copy_reg");
+    if (!copy_reg)
+	return;
+
+    copy_reg_slotnames = PyObject_GetAttrString(copy_reg, "_slotnames");
+    if (!copy_reg_slotnames) {
+	Py_DECREF(copy_reg);
+	return;
+    }
+
+    __newobj__ = PyObject_GetAttrString(copy_reg, "__newobj__");
+    if (!__newobj__) {
+	Py_DECREF(copy_reg);
+	return;
+    }
+
+    if (!TimeStamp) {
         m = PyImport_ImportModule("persistent.TimeStamp");
         if (!m)
 	    return;




More information about the Zope3-Checkins mailing list