From 98ff96adbadb88f2ff05ffa0388d1568aa45ebf1 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 20 May 1997 18:34:44 +0000 Subject: [PATCH] Moved PyObject_{Get,Set}Attr here (from dictobject) and add PyObject_HasAttr. --- Objects/object.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Objects/object.c b/Objects/object.c index c4adf9ab633..29269d052e3 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -398,6 +398,49 @@ PyObject_SetAttrString(v, name, w) } } +PyObject * +PyObject_GetAttr(v, name) + PyObject *v; + PyObject *name; +{ + if (v->ob_type->tp_getattro != NULL) + return (*v->ob_type->tp_getattro)(v, name); + else + return PyObject_GetAttrString(v, PyString_AsString(name)); +} + +int +PyObject_HasAttr(v, name) + PyObject *v; + PyObject *name; +{ + PyObject *res = PyObject_GetAttr(v, name); + if (res != NULL) { + Py_DECREF(res); + return 1; + } + PyErr_Clear(); + return 0; +} + +int +PyObject_SetAttr(v, name, value) + PyObject *v; + PyObject *name; + PyObject *value; +{ + int err; + Py_INCREF(name); + PyString_InternInPlace(&name); + if (v->ob_type->tp_setattro != NULL) + err = (*v->ob_type->tp_setattro)(v, name, value); + else + err = PyObject_SetAttrString( + v, PyString_AsString(name), value); + Py_DECREF(name); + return err; +} + /* Test a value used as condition, e.g., in a for or if statement. Return -1 if an error occurred */