Skip to content

Commit

Permalink
Add support for the iterator protocol to weakref proxy objects.
Browse files Browse the repository at this point in the history
Part of fixing SF bug #591704.
  • Loading branch information
freddrake committed Aug 9, 2002
1 parent ca3ac7f commit f16c3dc
Showing 1 changed file with 64 additions and 38 deletions.
102 changes: 64 additions & 38 deletions Objects/weakrefobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,24 @@ proxy_setitem(PyWeakReference *proxy, PyObject *key, PyObject *value)
return PyObject_SetItem(PyWeakref_GET_OBJECT(proxy), key, value);
}

/* iterator slots */

static PyObject *
proxy_iter(PyWeakReference *proxy)
{
if (!proxy_checkref(proxy))
return NULL;
return PyObject_GetIter(PyWeakref_GET_OBJECT(proxy));
}

static PyObject *
proxy_iternext(PyWeakReference *proxy)
{
if (!proxy_checkref(proxy))
return NULL;
return PyIter_Next(PyWeakref_GET_OBJECT(proxy));
}


static PyNumberMethods proxy_as_number = {
(binaryfunc)proxy_add, /*nb_add*/
Expand Down Expand Up @@ -447,26 +465,30 @@ _PyWeakref_ProxyType = {
sizeof(PyWeakReference),
0,
/* methods */
(destructor)weakref_dealloc,/*tp_dealloc*/
(printfunc)proxy_print, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
proxy_compare, /*tp_compare*/
(unaryfunc)proxy_repr, /*tp_repr*/
&proxy_as_number, /*tp_as_number*/
&proxy_as_sequence, /*tp_as_sequence*/
&proxy_as_mapping, /*tp_as_mapping*/
0, /*tp_hash*/
(ternaryfunc)0, /*tp_call*/
(unaryfunc)proxy_str, /*tp_str*/
(getattrofunc)proxy_getattr,/*tp_getattro*/
(setattrofunc)proxy_setattr,/*tp_setattro*/
0, /*tp_as_buffer*/
(destructor)weakref_dealloc, /* tp_dealloc */
(printfunc)proxy_print, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
proxy_compare, /* tp_compare */
(unaryfunc)proxy_repr, /* tp_repr */
&proxy_as_number, /* tp_as_number */
&proxy_as_sequence, /* tp_as_sequence */
&proxy_as_mapping, /* tp_as_mapping */
0, /* tp_hash */
(ternaryfunc)0, /* tp_call */
(unaryfunc)proxy_str, /* tp_str */
(getattrofunc)proxy_getattr, /* tp_getattro */
(setattrofunc)proxy_setattr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC
|Py_TPFLAGS_CHECKTYPES, /*tp_flags*/
0, /*tp_doc*/
(traverseproc)gc_traverse, /*tp_traverse*/
(inquiry)gc_clear, /*tp_clear*/
| Py_TPFLAGS_CHECKTYPES, /* tp_flags */
0, /* tp_doc */
(traverseproc)gc_traverse, /* tp_traverse */
(inquiry)gc_clear, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
(getiterfunc)proxy_iter, /* tp_iter */
(iternextfunc)proxy_iternext, /* tp_iternext */
};


Expand All @@ -478,26 +500,30 @@ _PyWeakref_CallableProxyType = {
sizeof(PyWeakReference),
0,
/* methods */
(destructor)weakref_dealloc,/*tp_dealloc*/
(printfunc)proxy_print, /*tp_print*/
0, /*tp_getattr*/
0, /*tp_setattr*/
proxy_compare, /*tp_compare*/
(unaryfunc)proxy_repr, /*tp_repr*/
&proxy_as_number, /*tp_as_number*/
&proxy_as_sequence, /*tp_as_sequence*/
&proxy_as_mapping, /*tp_as_mapping*/
0, /*tp_hash*/
(ternaryfunc)proxy_call, /*tp_call*/
(unaryfunc)proxy_str, /*tp_str*/
(getattrofunc)proxy_getattr,/*tp_getattro*/
(setattrofunc)proxy_setattr,/*tp_setattro*/
0, /*tp_as_buffer*/
(destructor)weakref_dealloc, /* tp_dealloc */
(printfunc)proxy_print, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
proxy_compare, /* tp_compare */
(unaryfunc)proxy_repr, /* tp_repr */
&proxy_as_number, /* tp_as_number */
&proxy_as_sequence, /* tp_as_sequence */
&proxy_as_mapping, /* tp_as_mapping */
0, /* tp_hash */
(ternaryfunc)proxy_call, /* tp_call */
(unaryfunc)proxy_str, /* tp_str */
(getattrofunc)proxy_getattr, /* tp_getattro */
(setattrofunc)proxy_setattr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC
|Py_TPFLAGS_CHECKTYPES, /*tp_flags*/
0, /*tp_doc*/
(traverseproc)gc_traverse, /*tp_traverse*/
(inquiry)gc_clear, /*tp_clear*/
| Py_TPFLAGS_CHECKTYPES, /* tp_flags */
0, /* tp_doc */
(traverseproc)gc_traverse, /* tp_traverse */
(inquiry)gc_clear, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
(getiterfunc)proxy_iter, /* tp_iter */
(iternextfunc)proxy_iternext, /* tp_iternext */
};


Expand Down

0 comments on commit f16c3dc

Please sign in to comment.