[Checkins] SVN: persistent/trunk/persistent/cPickleCache.c Get cPickleCache extension compilable under Py3k.

Tres Seaver cvs-admin at zope.org
Wed Dec 12 02:26:23 UTC 2012


Log message for revision 128592:
  Get cPickleCache extension compilable under Py3k.

Changed:
  U   persistent/trunk/persistent/cPickleCache.c

-=-
Modified: persistent/trunk/persistent/cPickleCache.c
===================================================================
--- persistent/trunk/persistent/cPickleCache.c	2012-12-12 02:26:02 UTC (rev 128591)
+++ persistent/trunk/persistent/cPickleCache.c	2012-12-12 02:26:23 UTC (rev 128592)
@@ -363,7 +363,7 @@
 
   if (_p_invalidate == NULL)
     {
-      _p_invalidate = PyString_InternFromString("_p_invalidate");
+      _p_invalidate = INTERN("_p_invalidate");
       if (_p_invalidate == NULL)
         {
           /* It doesn't make any sense to ignore this error, but
@@ -416,7 +416,7 @@
     }
   else
     {
-      if (PyString_Check(inv))
+      if (PyBytes_Check(inv))
         {
           if (_invalidate(self, inv) < 0)
             return NULL;
@@ -664,7 +664,7 @@
   for (here = self->ring_home.r_next; here != &self->ring_home;
        here = here->r_next)
     c++;
-  return PyInt_FromLong(c);
+  return INT_FROM_LONG(c);
 }
 
 static PyObject *
@@ -1041,7 +1041,7 @@
   oid = PyObject_GetAttr(v, py__p_oid);
   if (oid == NULL)
     return -1;
-  if (! PyString_Check(oid))
+  if (! PyBytes_Check(oid))
     {
       Py_DECREF(oid);
       PyErr_Format(PyExc_TypeError,
@@ -1054,13 +1054,12 @@
   /*  we know they are both strings.
    *  now check if they are the same string.
    */
-  result = PyObject_Compare(key, oid);
-  if (PyErr_Occurred())
+  result = PyObject_RichCompareBool(key, oid, Py_NE);
+  Py_DECREF(oid);
+  if (result < 0)
     {
-      Py_DECREF(oid);
       return -1;
     }
-  Py_DECREF(oid);
   if (result)
     {
       PyErr_SetString(PyExc_ValueError, "Cache key does not match oid");
@@ -1199,7 +1198,7 @@
 static int
 cc_ass_sub(ccobject *self, PyObject *key, PyObject *v)
 {
-  if (!PyString_Check(key))
+  if (!PyBytes_Check(key))
     {
       PyErr_Format(PyExc_TypeError,
                    "cPickleCache key must be a string, not a %s",
@@ -1236,11 +1235,11 @@
   {"cache_size", T_INT, offsetof(ccobject, cache_size)},
   {"cache_size_bytes", T_LONG, offsetof(ccobject, cache_size_bytes)},
   {"total_estimated_size", T_LONG, offsetof(ccobject, total_estimated_size),
-   RO},
+   READONLY},
   {"cache_drain_resistance", T_INT,
    offsetof(ccobject, cache_drain_resistance)},
-  {"cache_non_ghost_count", T_INT, offsetof(ccobject, non_ghost_count), RO},
-  {"cache_klass_count", T_INT, offsetof(ccobject, klass_count), RO},
+  {"cache_non_ghost_count", T_INT, offsetof(ccobject, non_ghost_count), READONLY},
+  {"cache_klass_count", T_INT, offsetof(ccobject, klass_count), READONLY},
   {NULL}
 };
 
@@ -1254,8 +1253,7 @@
 #define DEFERRED_ADDRESS(ADDR) 0
 
 static PyTypeObject Cctype = {
-  PyObject_HEAD_INIT(DEFERRED_ADDRESS(&PyType_Type))
-  0,					/* ob_size */
+  PyVarObject_HEAD_INIT(DEFERRED_ADDRESS(&PyType_Type), 0)
   "persistent.PickleCache",		/* tp_name */
   sizeof(ccobject),			/* tp_basicsize */
   0,					/* tp_itemsize */
@@ -1294,36 +1292,66 @@
   (initproc)cc_init,			/* tp_init */
 };
 
+#ifdef PY3K
+static struct PyModuleDef moduledef = {
+        PyModuleDef_HEAD_INIT,
+        "cPickleCache",     /* m_name */
+        cPickleCache_doc_string,  /* m_doc */
+        -1,                  /* m_size */
+        NULL,                /* m_methods */
+        NULL,                /* m_reload */
+        NULL,                /* m_traverse */
+        NULL,                /* m_clear */
+        NULL,                /* m_free */
+    };
+
+#endif
+
 void
 initcPickleCache(void)
 {
   PyObject *m;
 
+
+#ifdef PY3K
+  ((PyObject*)&Cctype)->ob_type = &PyType_Type;
+#else
   Cctype.ob_type = &PyType_Type;
+#endif
   Cctype.tp_new = &PyType_GenericNew;
   if (PyType_Ready(&Cctype) < 0)
     {
       return;
     }
 
+
+#ifdef PY3K
+  m = PyModule_Create(&moduledef);
+#else
   m = Py_InitModule3("cPickleCache", NULL, cPickleCache_doc_string);
+#endif
 
+#ifdef PY3K
+  capi = (cPersistenceCAPIstruct *)PyCapsule_Import(
+                "persistent.cPersistence.CAPI", 0);
+#else
   capi = (cPersistenceCAPIstruct *)PyCObject_Import(
                 "persistent.cPersistence", "CAPI");
+#endif
   if (!capi)
     return;
   capi->percachedel = (percachedelfunc)cc_oid_unreferenced;
 
-  py__p_changed = PyString_InternFromString("_p_changed");
+  py__p_changed = INTERN("_p_changed");
   if (!py__p_changed)
     return;
-  py__p_deactivate = PyString_InternFromString("_p_deactivate");
+  py__p_deactivate = INTERN("_p_deactivate");
   if (!py__p_deactivate)
     return;
-  py__p_jar = PyString_InternFromString("_p_jar");
+  py__p_jar = INTERN("_p_jar");
   if (!py__p_jar)
     return;
-  py__p_oid = PyString_InternFromString("_p_oid");
+  py__p_oid = INTERN("_p_oid");
   if (!py__p_oid)
     return;
 



More information about the checkins mailing list