Convert from long to Py_ssize_t.
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index dfa738d..b1e412d 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -4,10 +4,10 @@
 
 typedef struct {
 	PyObject_HEAD
-	long      en_index;        /* current index of enumeration */
+	Py_ssize_t en_index;	   /* current index of enumeration */
 	PyObject* en_sit;          /* secondary iterator of enumeration */
 	PyObject* en_result;	   /* result tuple  */
-	PyObject* en_longindex;	   /* index for sequences >= LONG_MAX */
+	PyObject* en_longindex;	   /* index for sequences >= PY_SSIZE_T_MAX */
 } enumobject;
 
 static PyObject *
@@ -25,18 +25,19 @@
 	en = (enumobject *)type->tp_alloc(type, 0);
 	if (en == NULL)
 		return NULL;
-	if (start) {
+	if (start != NULL) {
 		start = PyNumber_Index(start);
 		if (start == NULL) {
 			Py_DECREF(en);
 			return NULL;
 		}
-		if (PyLong_Check(start)) {
-			en->en_index = LONG_MAX;
+		assert(PyInt_Check(start) || PyLong_Check(start));
+		en->en_index = PyInt_AsSsize_t(start);
+		if (en->en_index == -1 && PyErr_Occurred()) {
+			PyErr_Clear();
+			en->en_index = PY_SSIZE_T_MAX;
 			en->en_longindex = start;
 		} else {
-			assert(PyInt_Check(start));
-			en->en_index = PyInt_AsLong(start);
 			en->en_longindex = NULL;
 			Py_DECREF(start);
 		}
@@ -85,7 +86,7 @@
 	PyObject *stepped_up;
 
 	if (en->en_longindex == NULL) {
-		en->en_longindex = PyInt_FromLong(LONG_MAX);
+		en->en_longindex = PyInt_FromSsize_t(PY_SSIZE_T_MAX);
 		if (en->en_longindex == NULL)
 			return NULL;
 	}
@@ -130,10 +131,10 @@
 	if (next_item == NULL)
 		return NULL;
 
-	if (en->en_index == LONG_MAX)
+	if (en->en_index == PY_SSIZE_T_MAX)
 		return enum_next_long(en, next_item);
 
-	next_index = PyInt_FromLong(en->en_index);
+	next_index = PyInt_FromSsize_t(en->en_index);
 	if (next_index == NULL) {
 		Py_DECREF(next_item);
 		return NULL;