diff options
author | Fredrik Lundh <fredrik@pythonware.com> | 2006-05-26 19:33:03 (GMT) |
---|---|---|
committer | Fredrik Lundh <fredrik@pythonware.com> | 2006-05-26 19:33:03 (GMT) |
commit | c816281304ab5e4a1d390521d3cc195fc90545cd (patch) | |
tree | 6aa42c9219efd20ffacbd193920f6c6a17c519a3 /Objects | |
parent | ce4eccb0c465c4814881ec7f4eb41dba685cabd0 (diff) | |
download | cpython-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.c | 70 |
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, |