[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