Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d8eb1b3

Browse files
committed
Support for tp_getattro, tp_setattro (Sjoerd)
1 parent 929f1b8 commit d8eb1b3

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

Objects/dictobject.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,9 @@ getattro(v, name)
769769
object *v;
770770
object *name;
771771
{
772+
if (v->ob_type->tp_getattro != NULL)
773+
return (*v->ob_type->tp_getattro)(v, name);
774+
772775
if (name != last_name_object) {
773776
XDECREF(last_name_object);
774777
INCREF(name);
@@ -784,6 +787,9 @@ setattro(v, name, value)
784787
object *name;
785788
object *value;
786789
{
790+
if (v->ob_type->tp_setattro != NULL)
791+
return (*v->ob_type->tp_setattro)(v, name, value);
792+
787793
if (name != last_name_object) {
788794
XDECREF(last_name_object);
789795
INCREF(name);

Objects/mappingobject.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,9 @@ getattro(v, name)
769769
object *v;
770770
object *name;
771771
{
772+
if (v->ob_type->tp_getattro != NULL)
773+
return (*v->ob_type->tp_getattro)(v, name);
774+
772775
if (name != last_name_object) {
773776
XDECREF(last_name_object);
774777
INCREF(name);
@@ -784,6 +787,9 @@ setattro(v, name, value)
784787
object *name;
785788
object *value;
786789
{
790+
if (v->ob_type->tp_setattro != NULL)
791+
return (*v->ob_type->tp_setattro)(v, name, value);
792+
787793
if (name != last_name_object) {
788794
XDECREF(last_name_object);
789795
INCREF(name);

Objects/object.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,16 @@ getattr(v, name)
326326
object *v;
327327
char *name;
328328
{
329+
if (v->ob_type->tp_getattro != NULL) {
330+
object *w, *res;
331+
w = newstringobject(name);
332+
if (w == NULL)
333+
return NULL;
334+
res = (*v->ob_type->tp_getattro)(v, w);
335+
XDECREF(w);
336+
return res;
337+
}
338+
329339
if (v->ob_type->tp_getattr == NULL) {
330340
err_setstr(AttributeError, "attribute-less object");
331341
return NULL;
@@ -355,6 +365,17 @@ setattr(v, name, w)
355365
char *name;
356366
object *w;
357367
{
368+
if (v->ob_type->tp_setattro != NULL) {
369+
object *s;
370+
int res;
371+
s = newstringobject(name);
372+
if (s == NULL)
373+
return NULL;
374+
res = (*v->ob_type->tp_setattro)(v, s, w);
375+
XDECREF(s);
376+
return res;
377+
}
378+
358379
if (v->ob_type->tp_setattr == NULL) {
359380
if (v->ob_type->tp_getattr == NULL)
360381
err_setstr(TypeError,

0 commit comments

Comments
 (0)