mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
Remove support for __members__ and __methods__. There still might be
some cleanup to do on this. Particularly in Python/traceback.c with getting rid of the getattr if possible and Demo/*metaclasses/Enum.py.
This commit is contained in:
parent
32ca442b13
commit
8dfc4a9bac
14 changed files with 83 additions and 195 deletions
|
@ -5,51 +5,6 @@
|
|||
|
||||
#include "structmember.h"
|
||||
|
||||
static PyObject *
|
||||
listmembers(struct memberlist *mlist)
|
||||
{
|
||||
int i, n;
|
||||
PyObject *v;
|
||||
for (n = 0; mlist[n].name != NULL; n++)
|
||||
;
|
||||
v = PyList_New(n);
|
||||
if (v != NULL) {
|
||||
for (i = 0; i < n; i++)
|
||||
PyList_SetItem(v, i,
|
||||
PyString_FromString(mlist[i].name));
|
||||
if (PyErr_Occurred()) {
|
||||
Py_DECREF(v);
|
||||
v = NULL;
|
||||
}
|
||||
else {
|
||||
PyList_Sort(v);
|
||||
}
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyMember_Get(const char *addr, struct memberlist *mlist, const char *name)
|
||||
{
|
||||
struct memberlist *l;
|
||||
|
||||
if (strcmp(name, "__members__") == 0)
|
||||
return listmembers(mlist);
|
||||
for (l = mlist; l->name != NULL; l++) {
|
||||
if (strcmp(l->name, name) == 0) {
|
||||
PyMemberDef copy;
|
||||
copy.name = l->name;
|
||||
copy.type = l->type;
|
||||
copy.offset = l->offset;
|
||||
copy.flags = l->flags;
|
||||
copy.doc = NULL;
|
||||
return PyMember_GetOne(addr, ©);
|
||||
}
|
||||
}
|
||||
PyErr_SetString(PyExc_AttributeError, name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyMember_GetOne(const char *addr, PyMemberDef *l)
|
||||
{
|
||||
|
@ -135,27 +90,6 @@ PyMember_GetOne(const char *addr, PyMemberDef *l)
|
|||
return v;
|
||||
}
|
||||
|
||||
int
|
||||
PyMember_Set(char *addr, struct memberlist *mlist, const char *name, PyObject *v)
|
||||
{
|
||||
struct memberlist *l;
|
||||
|
||||
for (l = mlist; l->name != NULL; l++) {
|
||||
if (strcmp(l->name, name) == 0) {
|
||||
PyMemberDef copy;
|
||||
copy.name = l->name;
|
||||
copy.type = l->type;
|
||||
copy.offset = l->offset;
|
||||
copy.flags = l->flags;
|
||||
copy.doc = NULL;
|
||||
return PyMember_SetOne(addr, ©, v);
|
||||
}
|
||||
}
|
||||
|
||||
PyErr_SetString(PyExc_AttributeError, name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#define WARN(msg) \
|
||||
do { \
|
||||
if (PyErr_Warn(PyExc_RuntimeWarning, msg) < 0) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue