[Python-checkins] cpython: closes #14259 re.finditer() now takes keyword arguments: pos, endpos.

sean.reifschneider python-checkins at python.org
Tue Mar 13 01:22:54 CET 2012


http://hg.python.org/cpython/rev/1adb114343f9
changeset: 75568:1adb114343f9
user: Sean Reifschneider <jafo at tummy.com>
date: Mon Mar 12 18:22:38 2012 -0600
summary:
 closes #14259 re.finditer() now takes keyword arguments: pos, endpos.
Contrary to the documentation, finditer() did not take pos and endpos
keyword arguments.
files:
 Lib/test/test_re.py | 20 ++++++++++++++++++++
 Misc/NEWS | 3 +++
 Modules/_sre.c | 16 +++++++++-------
 3 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -652,6 +652,26 @@
 self.assertEqual([item.group(0) for item in iter],
 [":", "::", ":::"])
 
+ pat = re.compile(r":+")
+ iter = pat.finditer("a:b::c:::d", 1, 10)
+ self.assertEqual([item.group(0) for item in iter],
+ [":", "::", ":::"])
+
+ pat = re.compile(r":+")
+ iter = pat.finditer("a:b::c:::d", pos=1, endpos=10)
+ self.assertEqual([item.group(0) for item in iter],
+ [":", "::", ":::"])
+
+ pat = re.compile(r":+")
+ iter = pat.finditer("a:b::c:::d", endpos=10, pos=1)
+ self.assertEqual([item.group(0) for item in iter],
+ [":", "::", ":::"])
+
+ pat = re.compile(r":+")
+ iter = pat.finditer("a:b::c:::d", pos=3, endpos=8)
+ self.assertEqual([item.group(0) for item in iter],
+ ["::", "::"])
+
 def test_bug_926075(self):
 self.assertTrue(re.compile('bug_926075') is not
 re.compile(b'bug_926075'))
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -56,6 +56,9 @@
 - Issue #14212: The re module didn't retain a reference to buffers it was
 scanning, resulting in segfaults.
 
+- Issue #14259: The finditer() method of re objects did not take any
+ keyword arguments, contrary to the documentation.
+
 
 What's New in Python 3.3.0 Alpha 1?
 ===================================
diff --git a/Modules/_sre.c b/Modules/_sre.c
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -1596,7 +1596,7 @@
 
 /* see sre.h for object declarations */
 static PyObject*pattern_new_match(PatternObject*, SRE_STATE*, int);
-static PyObject*pattern_scanner(PatternObject*, PyObject*);
+static PyObject*pattern_scanner(PatternObject*, PyObject*, PyObject* kw);
 
 static int
 sre_literal_template(int charsize, char* ptr, Py_ssize_t len)
@@ -2132,13 +2132,13 @@
 
 #if PY_VERSION_HEX >= 0x02020000
 static PyObject*
-pattern_finditer(PatternObject* pattern, PyObject* args)
+pattern_finditer(PatternObject* pattern, PyObject* args, PyObject* kw)
 {
 PyObject* scanner;
 PyObject* search;
 PyObject* iterator;
 
- scanner = pattern_scanner(pattern, args);
+ scanner = pattern_scanner(pattern, args, kw);
 if (!scanner)
 return NULL;
 
@@ -2576,10 +2576,10 @@
 {"findall", (PyCFunction) pattern_findall, METH_VARARGS|METH_KEYWORDS,
 pattern_findall_doc},
 #if PY_VERSION_HEX >= 0x02020000
- {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS,
+ {"finditer", (PyCFunction) pattern_finditer, METH_VARARGS|METH_KEYWORDS,
 pattern_finditer_doc},
 #endif
- {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS},
+ {"scanner", (PyCFunction) pattern_scanner, METH_VARARGS|METH_KEYWORDS},
 {"__copy__", (PyCFunction) pattern_copy, METH_NOARGS},
 {"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_O},
 {NULL, NULL}
@@ -3822,7 +3822,7 @@
 };
 
 static PyObject*
-pattern_scanner(PatternObject* pattern, PyObject* args)
+pattern_scanner(PatternObject* pattern, PyObject* args, PyObject* kw)
 {
 /* create search state object */
 
@@ -3831,7 +3831,9 @@
 PyObject* string;
 Py_ssize_t start = 0;
 Py_ssize_t end = PY_SSIZE_T_MAX;
- if (!PyArg_ParseTuple(args, "O|nn:scanner", &string, &start, &end))
+ static char* kwlist[] = { "source", "pos", "endpos", NULL };
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "O|nn:scanner", kwlist,
+ &string, &start, &end))
 return NULL;
 
 /* create scanner object */
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /