summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorFredrik Lundh <fredrik@pythonware.com>2006-05-26 19:33:03 (GMT)
committerFredrik Lundh <fredrik@pythonware.com>2006-05-26 19:33:03 (GMT)
commitc816281304ab5e4a1d390521d3cc195fc90545cd (patch)
tree6aa42c9219efd20ffacbd193920f6c6a17c519a3 /Objects
parentce4eccb0c465c4814881ec7f4eb41dba685cabd0 (diff)
downloadcpython-c816281304ab5e4a1d390521d3cc195fc90545cd.zip
cpython-c816281304ab5e4a1d390521d3cc195fc90545cd.tar.gz
cpython-c816281304ab5e4a1d390521d3cc195fc90545cd.tar.bz2
needforspeed: use a macro to fix slice indexes
Diffstat (limited to 'Objects')
-rw-r--r--Objects/unicodeobject.c70
1 files changed, 18 insertions, 52 deletions
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 @@ STRINGLIB_CMP(const Py_UNICODE* str, const Py_UNICODE* other, Py_ssize_t len)
#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 @@ Py_ssize_t PyUnicode_Count(PyObject *str,
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 @@ static Py_ssize_t findstring(PyUnicodeObject *self,
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 @@ Py_ssize_t PyUnicode_Find(PyObject *str,
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 @@ int tailmatch(PyUnicodeObject *self,
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 @@ unicode_count(PyUnicodeObject *self, PyObject *args)
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,