summaryrefslogtreecommitdiffstats
path: root/Objects/descrobject.c
diff options
context:
space:
mode:
authorThomas Wouters <thomas@python.org>2006-04-15 21:47:09 (GMT)
committerThomas Wouters <thomas@python.org>2006-04-15 21:47:09 (GMT)
commitc6e55068cad6f2178981eec4f0a0a583b8bba21a (patch)
tree19a89bbe082dadc70c1413030e5a5b8dacac757c /Objects/descrobject.c
parent447d095976fd532bf1882bf7afeb52473ff8673c (diff)
downloadcpython-c6e55068cad6f2178981eec4f0a0a583b8bba21a.zip
cpython-c6e55068cad6f2178981eec4f0a0a583b8bba21a.tar.gz
cpython-c6e55068cad6f2178981eec4f0a0a583b8bba21a.tar.bz2
Use Py_VISIT in all tp_traverse methods, instead of traversing manually or
using a custom, nearly-identical macro. This probably changes how some of these functions are compiled, which may result in fractionally slower (or faster) execution. Considering the nature of traversal, visiting much of the address space in unpredictable patterns, I'd argue the code readability and maintainability is well worth it ;P
Diffstat (limited to 'Objects/descrobject.c')
-rw-r--r--Objects/descrobject.c48
1 files changed, 8 insertions, 40 deletions
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index bfa25e9..561ba4a5 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -377,13 +377,7 @@ static int
descr_traverse(PyObject *self, visitproc visit, void *arg)
{
PyDescrObject *descr = (PyDescrObject *)self;
- int err;
-
- if (descr->d_type) {
- err = visit((PyObject *)(descr->d_type), arg);
- if (err)
- return err;
- }
+ Py_VISIT(descr->d_type);
return 0;
}
@@ -814,13 +808,7 @@ static int
proxy_traverse(PyObject *self, visitproc visit, void *arg)
{
proxyobject *pp = (proxyobject *)self;
- int err;
-
- if (pp->dict) {
- err = visit(pp->dict, arg);
- if (err)
- return err;
- }
+ Py_VISIT(pp->dict);
return 0;
}
@@ -999,18 +987,8 @@ static int
wrapper_traverse(PyObject *self, visitproc visit, void *arg)
{
wrapperobject *wp = (wrapperobject *)self;
- int err;
-
- if (wp->descr) {
- err = visit((PyObject *)(wp->descr), arg);
- if (err)
- return err;
- }
- if (wp->self) {
- err = visit(wp->self, arg);
- if (err)
- return err;
- }
+ Py_VISIT(wp->descr);
+ Py_VISIT(wp->self);
return 0;
}
@@ -1237,20 +1215,10 @@ static int
property_traverse(PyObject *self, visitproc visit, void *arg)
{
propertyobject *pp = (propertyobject *)self;
- int err;
-
-#define VISIT(SLOT) \
- if (pp->SLOT) { \
- err = visit((PyObject *)(pp->SLOT), arg); \
- if (err) \
- return err; \
- }
-
- VISIT(prop_get);
- VISIT(prop_set);
- VISIT(prop_del);
- VISIT(prop_doc);
-
+ Py_VISIT(pp->prop_get);
+ Py_VISIT(pp->prop_set);
+ Py_VISIT(pp->prop_del);
+ Py_VISIT(pp->prop_doc);
return 0;
}