diff options
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/object.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Objects/object.c b/Objects/object.c index c4adf9a..29269d0 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 */ |