Commit e9f08e79 authored by Guido van Rossum's avatar Guido van Rossum

Support for tp_getattro, tp_setattro (Sjoerd)

parent 5b58c57a
...@@ -769,6 +769,9 @@ getattro(v, name) ...@@ -769,6 +769,9 @@ getattro(v, name)
object *v; object *v;
object *name; object *name;
{ {
if (v->ob_type->tp_getattro != NULL)
return (*v->ob_type->tp_getattro)(v, name);
if (name != last_name_object) { if (name != last_name_object) {
XDECREF(last_name_object); XDECREF(last_name_object);
INCREF(name); INCREF(name);
...@@ -784,6 +787,9 @@ setattro(v, name, value) ...@@ -784,6 +787,9 @@ setattro(v, name, value)
object *name; object *name;
object *value; object *value;
{ {
if (v->ob_type->tp_setattro != NULL)
return (*v->ob_type->tp_setattro)(v, name, value);
if (name != last_name_object) { if (name != last_name_object) {
XDECREF(last_name_object); XDECREF(last_name_object);
INCREF(name); INCREF(name);
......
...@@ -769,6 +769,9 @@ getattro(v, name) ...@@ -769,6 +769,9 @@ getattro(v, name)
object *v; object *v;
object *name; object *name;
{ {
if (v->ob_type->tp_getattro != NULL)
return (*v->ob_type->tp_getattro)(v, name);
if (name != last_name_object) { if (name != last_name_object) {
XDECREF(last_name_object); XDECREF(last_name_object);
INCREF(name); INCREF(name);
...@@ -784,6 +787,9 @@ setattro(v, name, value) ...@@ -784,6 +787,9 @@ setattro(v, name, value)
object *name; object *name;
object *value; object *value;
{ {
if (v->ob_type->tp_setattro != NULL)
return (*v->ob_type->tp_setattro)(v, name, value);
if (name != last_name_object) { if (name != last_name_object) {
XDECREF(last_name_object); XDECREF(last_name_object);
INCREF(name); INCREF(name);
......
...@@ -326,6 +326,16 @@ getattr(v, name) ...@@ -326,6 +326,16 @@ getattr(v, name)
object *v; object *v;
char *name; 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) { if (v->ob_type->tp_getattr == NULL) {
err_setstr(AttributeError, "attribute-less object"); err_setstr(AttributeError, "attribute-less object");
return NULL; return NULL;
...@@ -355,6 +365,17 @@ setattr(v, name, w) ...@@ -355,6 +365,17 @@ setattr(v, name, w)
char *name; char *name;
object *w; 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_setattr == NULL) {
if (v->ob_type->tp_getattr == NULL) if (v->ob_type->tp_getattr == NULL)
err_setstr(TypeError, err_setstr(TypeError,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment