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,