Moved PyObject_{Get,Set}Attr here (from dictobject) and add PyObject_HasAttr.
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 *
+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 */