[py-svn] r37043 - py/dist/py/c-extension/greenlet

cfbolz at codespeak.net cfbolz at codespeak.net
Sat Jan 20 00:23:16 CET 2007


Author: cfbolz
Date: Sat Jan 20 00:23:15 2007
New Revision: 37043

Modified:
   py/dist/py/c-extension/greenlet/greenlet.c
Log:
try to make greenlets work with 2.5 (new style exceptions). armin, could you
take a look?


Modified: py/dist/py/c-extension/greenlet/greenlet.c
==============================================================================
--- py/dist/py/c-extension/greenlet/greenlet.c	(original)
+++ py/dist/py/c-extension/greenlet/greenlet.c	Sat Jan 20 00:23:15 2007
@@ -894,7 +894,9 @@
 {
 	PyObject* m;
 	PyObject* greenletexit_doc;
+	PyObject* greenletexit_dict;
 	PyObject* greenleterror_doc;
+	PyObject* greenleterror_dict;
 	int error;
 	char** p;
 	_PyGreen_switchstack = g_switchstack;
@@ -908,30 +910,50 @@
 		return;
 	if (PyType_Ready(&PyGreen_Type) < 0)
 		return;
-	PyExc_GreenletError = PyErr_NewException("py.magic.greenlet.error", NULL, NULL);
-	if (PyExc_GreenletError == NULL)
+
+        greenleterror_dict = PyDict_New();
+	if (greenleterror_dict == NULL)
 		return;
 	greenleterror_doc = PyString_FromString("internal greenlet error");
-	if (greenleterror_doc == NULL)
+	if (greenleterror_doc == NULL) {
+                Py_DECREF(greenleterror_dict);
 		return;
-	error = PyObject_SetAttrString(
-		PyExc_GreenletError, "__doc__", greenleterror_doc);
+        }
+
+        error = PyDict_SetItemString(greenleterror_dict, "__doc__", greenleterror_doc);
 	Py_DECREF(greenleterror_doc);
-	if (error == -1)
+	if (error == -1) {
+                Py_DECREF(greenleterror_dict);
 		return;
-	PyExc_GreenletExit = PyErr_NewException("py.magic.greenlet.GreenletExit",
-						NULL, NULL);
-	if (PyExc_GreenletExit == NULL)
+        }
+
+	PyExc_GreenletError = PyErr_NewException("py.magic.greenlet.error", NULL, greenleterror_dict);
+        Py_DECREF(greenleterror_dict);
+	if (PyExc_GreenletError == NULL)
+		return;
+
+        greenletexit_dict = PyDict_New();
+	if (greenletexit_dict == NULL)
 		return;
 	greenletexit_doc = PyString_FromString("greenlet.GreenletExit\n\
 This special exception does not propagate to the parent greenlet; it\n\
 can be used to kill a single greenlet.\n");
-	if (greenletexit_doc == NULL)
+	if (greenletexit_doc == NULL) {
+                Py_DECREF(greenletexit_dict);
 		return;
-	error = PyObject_SetAttrString(
-		PyExc_GreenletExit, "__doc__", greenletexit_doc);
+        }
+
+        error = PyDict_SetItemString(greenletexit_dict, "__doc__", greenletexit_doc);
 	Py_DECREF(greenletexit_doc);
-	if (error == -1)
+	if (error == -1) {
+                Py_DECREF(greenletexit_dict);
+		return;
+        }
+
+	PyExc_GreenletExit = PyErr_NewException("py.magic.greenlet.GreenletExit",
+						NULL, greenletexit_dict);
+        Py_DECREF(greenletexit_dict);
+	if (PyExc_GreenletExit == NULL)
 		return;
 
 	ts_current = green_create_main();


More information about the py-svn mailing list