summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
Diffstat (limited to 'Objects')
-rw-r--r--Objects/object.c43
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 */