needforspeed: use a macro to fix slice indexes
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 0f791c0..2732c2c 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -3874,6 +3874,19 @@
 #include "stringlib/find.h"
 #include "stringlib/partition.h"
 
+/* helper macro to fixup start/end slice values */
+#define FIX_START_END(obj)                      \
+    if (start < 0)                              \
+        start += (obj)->length;                 \
+    if (start < 0)                              \
+        start = 0;                              \
+    if (end > (obj)->length)                    \
+        end = (obj)->length;                    \
+    if (end < 0)                                \
+        end += (obj)->length;                   \
+    if (end < 0)                                \
+        end = 0;
+
 Py_ssize_t PyUnicode_Count(PyObject *str,
                            PyObject *substr,
                            Py_ssize_t start,
@@ -3892,16 +3905,7 @@
 	return -1;
     }
 
-    if (start < 0)
-        start += str_obj->length;
-    if (start < 0)
-        start = 0;
-    if (end > str_obj->length)
-        end = str_obj->length;
-    if (end < 0)
-        end += str_obj->length;
-    if (end < 0)
-        end = 0;
+    FIX_START_END(str_obj);
 
     result = stringlib_count(
         str_obj->str + start, end - start, sub_obj->str, sub_obj->length
@@ -3919,17 +3923,7 @@
 	       Py_ssize_t end,
 	       int direction)
 {
-    if (start < 0)
-        start += self->length;
-    if (start < 0)
-        start = 0;
-
-    if (end > self->length)
-        end = self->length;
-    if (end < 0)
-        end += self->length;
-    if (end < 0)
-        end = 0;
+    FIX_START_END(self);
 
     if (substring->length == 0)
 	return (direction > 0) ? start : end;
@@ -3969,16 +3963,7 @@
 	return -2;
     }
 
-    if (start < 0)
-        start += str_obj->length;
-    if (start < 0)
-        start = 0;
-    if (end > str_obj->length)
-        end = str_obj->length;
-    if (end < 0)
-        end += str_obj->length;
-    if (end < 0)
-        end = 0;
+    FIX_START_END(str_obj);
 
     if (direction > 0)
         result = stringlib_find(
@@ -4004,20 +3989,10 @@
 	      Py_ssize_t end,
 	      int direction)
 {
-    if (start < 0)
-        start += self->length;
-    if (start < 0)
-        start = 0;
-
     if (substring->length == 0)
         return 1;
 
-    if (end > self->length)
-        end = self->length;
-    if (end < 0)
-        end += self->length;
-    if (end < 0)
-        end = 0;
+    FIX_START_END(self);
 
     end -= substring->length;
     if (end < start)
@@ -5172,16 +5147,7 @@
     if (substring == NULL)
 	return NULL;
 
-    if (start < 0)
-        start += self->length;
-    if (start < 0)
-        start = 0;
-    if (end > self->length)
-        end = self->length;
-    if (end < 0)
-        end += self->length;
-    if (end < 0)
-        end = 0;
+    FIX_START_END(self);
 
     result = PyInt_FromSsize_t(
         stringlib_count(self->str + start, end - start,