Oops, forgot that there are modules outside the win32 world.
This commit is contained in:
parent
ba4105c133
commit
55b69e794c
|
@ -43,6 +43,8 @@ struct PyMethodDef {
|
||||||
};
|
};
|
||||||
typedef struct PyMethodDef PyMethodDef;
|
typedef struct PyMethodDef PyMethodDef;
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *);
|
||||||
|
|
||||||
#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL)
|
#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL)
|
||||||
PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
|
PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
|
||||||
PyObject *);
|
PyObject *);
|
||||||
|
@ -68,6 +70,14 @@ PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
|
||||||
|
|
||||||
#define METH_COEXIST 0x0040
|
#define METH_COEXIST 0x0040
|
||||||
|
|
||||||
|
typedef struct PyMethodChain {
|
||||||
|
PyMethodDef *methods; /* Methods of this type */
|
||||||
|
struct PyMethodChain *link; /* NULL or base type */
|
||||||
|
} PyMethodChain;
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *,
|
||||||
|
const char *);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
PyMethodDef *m_ml; /* Description of the C function to call */
|
PyMethodDef *m_ml; /* Description of the C function to call */
|
||||||
|
|
|
@ -280,6 +280,43 @@ PyTypeObject PyCFunction_Type = {
|
||||||
0, /* tp_dict */
|
0, /* tp_dict */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Find a method in a method chain */
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
Py_FindMethodInChain(PyMethodChain *chain, PyObject *self, const char *name)
|
||||||
|
{
|
||||||
|
if (name[0] == '_' && name[1] == '_') {
|
||||||
|
if (strcmp(name, "__doc__") == 0) {
|
||||||
|
const char *doc = self->ob_type->tp_doc;
|
||||||
|
if (doc != NULL)
|
||||||
|
return PyUnicode_FromString(doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (chain != NULL) {
|
||||||
|
PyMethodDef *ml = chain->methods;
|
||||||
|
for (; ml->ml_name != NULL; ml++) {
|
||||||
|
if (name[0] == ml->ml_name[0] &&
|
||||||
|
strcmp(name+1, ml->ml_name+1) == 0)
|
||||||
|
/* XXX */
|
||||||
|
return PyCFunction_New(ml, self);
|
||||||
|
}
|
||||||
|
chain = chain->link;
|
||||||
|
}
|
||||||
|
PyErr_SetString(PyExc_AttributeError, name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find a method in a single method list */
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
Py_FindMethod(PyMethodDef *methods, PyObject *self, const char *name)
|
||||||
|
{
|
||||||
|
PyMethodChain chain;
|
||||||
|
chain.methods = methods;
|
||||||
|
chain.link = NULL;
|
||||||
|
return Py_FindMethodInChain(&chain, self, name);
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear out the free list */
|
/* Clear out the free list */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in New Issue