PyObject_GetItem(), PyObject_SetItem(), PyObject_DelItem(): Fix a few
confusing error messages.  If a new-style class has no sequence or
mapping behavior, attempting to use the indexing notation with a
non-integer key would complain that the sequence index must be an
integer, rather than complaining that the operation is not supported.
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 0856f19..5931449 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -103,7 +103,8 @@
 				return NULL;
 			return PySequence_GetItem(o, key_value);
 		}
-		return type_error("sequence index must be integer");
+		else if (o->ob_type->tp_as_sequence->sq_item)
+			return type_error("sequence index must be integer");
 	}
 
 	return type_error("unsubscriptable object");
@@ -131,8 +132,10 @@
 				return -1;
 			return PySequence_SetItem(o, key_value, value);
 		}
-		type_error("sequence index must be integer");
-		return -1;
+		else if (o->ob_type->tp_as_sequence->sq_ass_item) {
+			type_error("sequence index must be integer");
+			return -1;
+		}
 	}
 
 	type_error("object does not support item assignment");
@@ -161,8 +164,10 @@
 				return -1;
 			return PySequence_DelItem(o, key_value);
 		}
-		type_error("sequence index must be integer");
-		return -1;
+		else if (o->ob_type->tp_as_sequence->sq_ass_item) {
+			type_error("sequence index must be integer");
+			return -1;
+		}
 	}
 
 	type_error("object does not support item deletion");