From d8eb1b340f47bdac2141c996b113ad665c0343f2 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 9 Aug 1996 20:52:03 +0000 Subject: [PATCH] Support for tp_getattro, tp_setattro (Sjoerd) --- Objects/dictobject.c | 6 ++++++ Objects/mappingobject.c | 6 ++++++ Objects/object.c | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index f6558283ed..605c6db744 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -769,6 +769,9 @@ getattro(v, name) object *v; object *name; { + if (v->ob_type->tp_getattro != NULL) + return (*v->ob_type->tp_getattro)(v, name); + if (name != last_name_object) { XDECREF(last_name_object); INCREF(name); @@ -784,6 +787,9 @@ setattro(v, name, value) object *name; object *value; { + if (v->ob_type->tp_setattro != NULL) + return (*v->ob_type->tp_setattro)(v, name, value); + if (name != last_name_object) { XDECREF(last_name_object); INCREF(name); diff --git a/Objects/mappingobject.c b/Objects/mappingobject.c index f6558283ed..605c6db744 100644 --- a/Objects/mappingobject.c +++ b/Objects/mappingobject.c @@ -769,6 +769,9 @@ getattro(v, name) object *v; object *name; { + if (v->ob_type->tp_getattro != NULL) + return (*v->ob_type->tp_getattro)(v, name); + if (name != last_name_object) { XDECREF(last_name_object); INCREF(name); @@ -784,6 +787,9 @@ setattro(v, name, value) object *name; object *value; { + if (v->ob_type->tp_setattro != NULL) + return (*v->ob_type->tp_setattro)(v, name, value); + if (name != last_name_object) { XDECREF(last_name_object); INCREF(name); diff --git a/Objects/object.c b/Objects/object.c index be40c40ed3..9d8a16bc89 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -326,6 +326,16 @@ getattr(v, name) object *v; char *name; { + if (v->ob_type->tp_getattro != NULL) { + object *w, *res; + w = newstringobject(name); + if (w == NULL) + return NULL; + res = (*v->ob_type->tp_getattro)(v, w); + XDECREF(w); + return res; + } + if (v->ob_type->tp_getattr == NULL) { err_setstr(AttributeError, "attribute-less object"); return NULL; @@ -355,6 +365,17 @@ setattr(v, name, w) char *name; object *w; { + if (v->ob_type->tp_setattro != NULL) { + object *s; + int res; + s = newstringobject(name); + if (s == NULL) + return NULL; + res = (*v->ob_type->tp_setattro)(v, s, w); + XDECREF(s); + return res; + } + if (v->ob_type->tp_setattr == NULL) { if (v->ob_type->tp_getattr == NULL) err_setstr(TypeError, -- 2.50.1