Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: Changeset: r54276:b1e988d5a3f5 Date: 2012-04-10 21:58 +0200 http://bitbucket.org/pypy/pypy/changeset/b1e988d5a3f5/
Log: cpyext: Add PyUnicode_Count diff --git a/pypy/module/cpyext/stubs.py b/pypy/module/cpyext/stubs.py --- a/pypy/module/cpyext/stubs.py +++ b/pypy/module/cpyext/stubs.py @@ -2300,16 +2300,6 @@ systems.""" raise NotImplementedError -@cpython_api([PyObject, PyObject, Py_ssize_t, Py_ssize_t], Py_ssize_t, error=-1) -def PyUnicode_Count(space, str, substr, start, end): - """Return the number of non-overlapping occurrences of substr in - str[start:end]. Return -1 if an error occurred. - - This function returned an int type and used an int - type for start and end. This might require changes in your code for - properly supporting 64-bit systems.""" - raise NotImplementedError - @cpython_api([PyObject, PyObject, rffi.INT_real], PyObject) def PyUnicode_RichCompare(space, left, right, op): """Rich compare two unicode strings and return one of the following: diff --git a/pypy/module/cpyext/test/test_unicodeobject.py b/pypy/module/cpyext/test/test_unicodeobject.py --- a/pypy/module/cpyext/test/test_unicodeobject.py +++ b/pypy/module/cpyext/test/test_unicodeobject.py @@ -457,3 +457,9 @@ assert api.PyUnicode_Tailmatch(w_str, space.wrap("cde"), 1, 5, -1) == 1 self.raises(space, api, TypeError, api.PyUnicode_Tailmatch, w_str, space.wrap(3), 2, 10, 1) + + def test_count(self, space, api): + w_str = space.wrap(u"abcabdab") + assert api.PyUnicode_Count(w_str, space.wrap("ab"), 0, -1) == 2 + assert api.PyUnicode_Count(w_str, space.wrap("ab"), 0, 2) == 1 + assert api.PyUnicode_Count(w_str, space.wrap("ab"), -5, 30) == 2 diff --git a/pypy/module/cpyext/unicodeobject.py b/pypy/module/cpyext/unicodeobject.py --- a/pypy/module/cpyext/unicodeobject.py +++ b/pypy/module/cpyext/unicodeobject.py @@ -598,3 +598,10 @@ else: return stringtype.stringendswith(str, substr, start, end) +@cpython_api([PyObject, PyObject, Py_ssize_t, Py_ssize_t], Py_ssize_t, error=-1) +def PyUnicode_Count(space, w_str, w_substr, start, end): + """Return the number of non-overlapping occurrences of substr in + str[start:end]. Return -1 if an error occurred.""" + w_count = space.call_method(w_str, "count", w_substr, + space.wrap(start), space.wrap(end)) + return space.int_w(w_count) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit