Allow using long integers as slice indexes
diff --git a/Python/ceval.c b/Python/ceval.c
index 930b1bc..46a60f1 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2535,12 +2535,44 @@
 {
 	if (v != NULL) {
 		long x;
-		if (!PyInt_Check(v)) {
+		if (PyInt_Check(v)) {
+			x = PyInt_AsLong(v);
+		} else if (PyLong_Check(v)) {
+			x = PyLong_AsLong(v);
+			if (x==-1 && PyErr_Occurred()) {
+				PyObject *long_zero;
+
+				if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
+					/* It's not an overflow error, so just 
+					   signal an error */
+					return -1;
+				}
+
+				/* It's an overflow error, so we need to 
+				   check the sign of the long integer, 
+				   set the value to INT_MAX or 0, and clear 
+				   the error. */
+
+				/* Create a long integer with a value of 0 */
+				long_zero = PyLong_FromLong( 0L );
+				if (long_zero == NULL) return -1;
+
+				/* Check sign */
+				if (PyObject_Compare(long_zero, v) < 0)
+					x = INT_MAX;
+				else
+					x = 0;
+				
+				/* Free the long integer we created, and clear the
+				   OverflowError */
+				Py_DECREF(long_zero);
+				PyErr_Clear();
+			}
+		} else {
 			PyErr_SetString(PyExc_TypeError,
 					"slice index must be int");
 			return -1;
 		}
-		x = PyInt_AsLong(v);
 		/* Truncate -- very long indices are truncated anyway */
 		if (x > INT_MAX)
 			x = INT_MAX;