(Adding this to the trunk as well.)

Fix a very old flaw in PyObject_Print().  Amazing!  When an object
type defines tp_str but not tp_repr, 'print x' to a real file
object would not call the tp_str slot but rather print a default style
representation: <foo object at 0x....>.  This even though 'print x' to
a file-like-object would correctly call the tp_str slot.
diff --git a/Objects/object.c b/Objects/object.c
index 47907bc..1ace8f5 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -196,7 +196,10 @@
 			fprintf(fp, "<refcnt %u at %p>",
 				op->ob_refcnt, op);
 		else if (op->ob_type->tp_print == NULL) {
-			if (op->ob_type->tp_repr == NULL) {
+			if ((flags & Py_PRINT_RAW)
+			    ? (op->ob_type->tp_str == NULL)
+			    : (op->ob_type->tp_repr == NULL))
+			{
 				fprintf(fp, "<%s object at %p>",
 					op->ob_type->tp_name, op);
 			}