Commit b37f3f6e authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #29195: Removed support of deprecated undocumented keyword arguments

in methods of regular expression objects.
parent 8cbc51ab
...@@ -212,6 +212,9 @@ Core and Builtins ...@@ -212,6 +212,9 @@ Core and Builtins
Library Library
------- -------
- Issue #29195: Removed support of deprecated undocumented keyword arguments
in methods of regular expression objects.
- Issue #28969: Fixed race condition in C implementation of functools.lru_cache. - Issue #28969: Fixed race condition in C implementation of functools.lru_cache.
KeyError could be raised when cached function with full cache was KeyError could be raised when cached function with full cache was
simultaneously called from differen threads with the same uncached arguments. simultaneously called from differen threads with the same uncached arguments.
......
...@@ -551,55 +551,25 @@ sre_search(SRE_STATE* state, SRE_CODE* pattern) ...@@ -551,55 +551,25 @@ sre_search(SRE_STATE* state, SRE_CODE* pattern)
return sre_ucs4_search(state, pattern); return sre_ucs4_search(state, pattern);
} }
static PyObject *
fix_string_param(PyObject *string, PyObject *string2, const char *oldname)
{
if (string2 != NULL) {
if (string != NULL) {
PyErr_Format(PyExc_TypeError,
"Argument given by name ('%s') and position (1)",
oldname);
return NULL;
}
if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
"The '%s' keyword parameter name is deprecated. "
"Use 'string' instead.", oldname) < 0)
return NULL;
return string2;
}
if (string == NULL) {
PyErr_SetString(PyExc_TypeError,
"Required argument 'string' (pos 1) not found");
return NULL;
}
return string;
}
/*[clinic input] /*[clinic input]
_sre.SRE_Pattern.match _sre.SRE_Pattern.match
string: object = NULL string: object
pos: Py_ssize_t = 0 pos: Py_ssize_t = 0
endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize
*
pattern: object = NULL
Matches zero or more characters at the beginning of the string. Matches zero or more characters at the beginning of the string.
[clinic start generated code]*/ [clinic start generated code]*/
static PyObject * static PyObject *
_sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos)
PyObject *pattern) /*[clinic end generated code: output=ea2d838888510661 input=a2ba191647abebe5]*/
/*[clinic end generated code: output=74b4b1da3bb2d84e input=3d079aa99979b81d]*/
{ {
SRE_STATE state; SRE_STATE state;
Py_ssize_t status; Py_ssize_t status;
PyObject *match; PyObject *match;
string = fix_string_param(string, pattern, "pattern");
if (!string)
return NULL;
if (!state_init(&state, (PatternObject *)self, string, pos, endpos)) if (!state_init(&state, (PatternObject *)self, string, pos, endpos))
return NULL; return NULL;
...@@ -623,29 +593,22 @@ _sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, ...@@ -623,29 +593,22 @@ _sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string,
/*[clinic input] /*[clinic input]
_sre.SRE_Pattern.fullmatch _sre.SRE_Pattern.fullmatch
string: object = NULL string: object
pos: Py_ssize_t = 0 pos: Py_ssize_t = 0
endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize
*
pattern: object = NULL
Matches against all of the string Matches against all of the string
[clinic start generated code]*/ [clinic start generated code]*/
static PyObject * static PyObject *
_sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos)
PyObject *pattern) /*[clinic end generated code: output=5833c47782a35f4a input=a6f640614aaefceb]*/
/*[clinic end generated code: output=1c98bc5da744ea94 input=d4228606cc12580f]*/
{ {
SRE_STATE state; SRE_STATE state;
Py_ssize_t status; Py_ssize_t status;
PyObject *match; PyObject *match;
string = fix_string_param(string, pattern, "pattern");
if (!string)
return NULL;
if (!state_init(&state, self, string, pos, endpos)) if (!state_init(&state, self, string, pos, endpos))
return NULL; return NULL;
...@@ -669,11 +632,9 @@ _sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, ...@@ -669,11 +632,9 @@ _sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string,
/*[clinic input] /*[clinic input]
_sre.SRE_Pattern.search _sre.SRE_Pattern.search
string: object = NULL string: object
pos: Py_ssize_t = 0 pos: Py_ssize_t = 0
endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize
*
pattern: object = NULL
Scan through string looking for a match, and return a corresponding match object instance. Scan through string looking for a match, and return a corresponding match object instance.
...@@ -682,18 +643,13 @@ Return None if no position in the string matches. ...@@ -682,18 +643,13 @@ Return None if no position in the string matches.
static PyObject * static PyObject *
_sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos)
PyObject *pattern) /*[clinic end generated code: output=25f302a644e951e8 input=4ae5cb7dc38fed1b]*/
/*[clinic end generated code: output=3839394a18e5ea4f input=dab42720f4be3a4b]*/
{ {
SRE_STATE state; SRE_STATE state;
Py_ssize_t status; Py_ssize_t status;
PyObject *match; PyObject *match;
string = fix_string_param(string, pattern, "pattern");
if (!string)
return NULL;
if (!state_init(&state, self, string, pos, endpos)) if (!state_init(&state, self, string, pos, endpos))
return NULL; return NULL;
...@@ -762,30 +718,23 @@ deepcopy(PyObject** object, PyObject* memo) ...@@ -762,30 +718,23 @@ deepcopy(PyObject** object, PyObject* memo)
/*[clinic input] /*[clinic input]
_sre.SRE_Pattern.findall _sre.SRE_Pattern.findall
string: object = NULL string: object
pos: Py_ssize_t = 0 pos: Py_ssize_t = 0
endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize endpos: Py_ssize_t(c_default="PY_SSIZE_T_MAX") = sys.maxsize
*
source: object = NULL
Return a list of all non-overlapping matches of pattern in string. Return a list of all non-overlapping matches of pattern in string.
[clinic start generated code]*/ [clinic start generated code]*/
static PyObject * static PyObject *
_sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos)
PyObject *source) /*[clinic end generated code: output=f4966baceea60aca input=5b6a4ee799741563]*/
/*[clinic end generated code: output=51295498b300639d input=df688355c056b9de]*/
{ {
SRE_STATE state; SRE_STATE state;
PyObject* list; PyObject* list;
Py_ssize_t status; Py_ssize_t status;
Py_ssize_t i, b, e; Py_ssize_t i, b, e;
string = fix_string_param(string, source, "source");
if (!string)
return NULL;
if (!state_init(&state, self, string, pos, endpos)) if (!state_init(&state, self, string, pos, endpos))
return NULL; return NULL;
...@@ -922,18 +871,16 @@ _sre_SRE_Pattern_scanner_impl(PatternObject *self, PyObject *string, ...@@ -922,18 +871,16 @@ _sre_SRE_Pattern_scanner_impl(PatternObject *self, PyObject *string,
/*[clinic input] /*[clinic input]
_sre.SRE_Pattern.split _sre.SRE_Pattern.split
string: object = NULL string: object
maxsplit: Py_ssize_t = 0 maxsplit: Py_ssize_t = 0
*
source: object = NULL
Split string by the occurrences of pattern. Split string by the occurrences of pattern.
[clinic start generated code]*/ [clinic start generated code]*/
static PyObject * static PyObject *
_sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string,
Py_ssize_t maxsplit, PyObject *source) Py_ssize_t maxsplit)
/*[clinic end generated code: output=20bac2ff55b9f84c input=41e0b2e35e599d7b]*/ /*[clinic end generated code: output=7ac66f381c45e0be input=1eeeb10dafc9947a]*/
{ {
SRE_STATE state; SRE_STATE state;
PyObject* list; PyObject* list;
...@@ -943,10 +890,6 @@ _sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string, ...@@ -943,10 +890,6 @@ _sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string,
Py_ssize_t i; Py_ssize_t i;
void* last; void* last;
string = fix_string_param(string, source, "source");
if (!string)
return NULL;
assert(self->codesize != 0); assert(self->codesize != 0);
if (self->code[0] != SRE_OP_INFO || self->code[3] == 0) { if (self->code[0] != SRE_OP_INFO || self->code[3] == 0) {
if (self->code[0] == SRE_OP_INFO && self->code[4] == 0) { if (self->code[0] == SRE_OP_INFO && self->code[4] == 0) {
......
...@@ -63,7 +63,7 @@ exit: ...@@ -63,7 +63,7 @@ exit:
} }
PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__, PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__,
"match($self, /, string=None, pos=0, endpos=sys.maxsize, *, pattern=None)\n" "match($self, /, string, pos=0, endpos=sys.maxsize)\n"
"--\n" "--\n"
"\n" "\n"
"Matches zero or more characters at the beginning of the string."); "Matches zero or more characters at the beginning of the string.");
...@@ -73,33 +73,30 @@ PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__, ...@@ -73,33 +73,30 @@ PyDoc_STRVAR(_sre_SRE_Pattern_match__doc__,
static PyObject * static PyObject *
_sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_match_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos);
PyObject *pattern);
static PyObject * static PyObject *
_sre_SRE_Pattern_match(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) _sre_SRE_Pattern_match(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
static _PyArg_Parser _parser = {"|Onn$O:match", _keywords, 0}; static _PyArg_Parser _parser = {"O|nn:match", _keywords, 0};
PyObject *string = NULL; PyObject *string;
Py_ssize_t pos = 0; Py_ssize_t pos = 0;
Py_ssize_t endpos = PY_SSIZE_T_MAX; Py_ssize_t endpos = PY_SSIZE_T_MAX;
PyObject *pattern = NULL;
if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
&string, &pos, &endpos, &pattern)) { &string, &pos, &endpos)) {
goto exit; goto exit;
} }
return_value = _sre_SRE_Pattern_match_impl(self, string, pos, endpos, pattern); return_value = _sre_SRE_Pattern_match_impl(self, string, pos, endpos);
exit: exit:
return return_value; return return_value;
} }
PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__, PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__,
"fullmatch($self, /, string=None, pos=0, endpos=sys.maxsize, *,\n" "fullmatch($self, /, string, pos=0, endpos=sys.maxsize)\n"
" pattern=None)\n"
"--\n" "--\n"
"\n" "\n"
"Matches against all of the string"); "Matches against all of the string");
...@@ -109,33 +106,30 @@ PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__, ...@@ -109,33 +106,30 @@ PyDoc_STRVAR(_sre_SRE_Pattern_fullmatch__doc__,
static PyObject * static PyObject *
_sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_fullmatch_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos);
PyObject *pattern);
static PyObject * static PyObject *
_sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) _sre_SRE_Pattern_fullmatch(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
static _PyArg_Parser _parser = {"|Onn$O:fullmatch", _keywords, 0}; static _PyArg_Parser _parser = {"O|nn:fullmatch", _keywords, 0};
PyObject *string = NULL; PyObject *string;
Py_ssize_t pos = 0; Py_ssize_t pos = 0;
Py_ssize_t endpos = PY_SSIZE_T_MAX; Py_ssize_t endpos = PY_SSIZE_T_MAX;
PyObject *pattern = NULL;
if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
&string, &pos, &endpos, &pattern)) { &string, &pos, &endpos)) {
goto exit; goto exit;
} }
return_value = _sre_SRE_Pattern_fullmatch_impl(self, string, pos, endpos, pattern); return_value = _sre_SRE_Pattern_fullmatch_impl(self, string, pos, endpos);
exit: exit:
return return_value; return return_value;
} }
PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__, PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__,
"search($self, /, string=None, pos=0, endpos=sys.maxsize, *,\n" "search($self, /, string, pos=0, endpos=sys.maxsize)\n"
" pattern=None)\n"
"--\n" "--\n"
"\n" "\n"
"Scan through string looking for a match, and return a corresponding match object instance.\n" "Scan through string looking for a match, and return a corresponding match object instance.\n"
...@@ -147,33 +141,30 @@ PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__, ...@@ -147,33 +141,30 @@ PyDoc_STRVAR(_sre_SRE_Pattern_search__doc__,
static PyObject * static PyObject *
_sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_search_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos);
PyObject *pattern);
static PyObject * static PyObject *
_sre_SRE_Pattern_search(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) _sre_SRE_Pattern_search(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
static const char * const _keywords[] = {"string", "pos", "endpos", "pattern", NULL}; static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
static _PyArg_Parser _parser = {"|Onn$O:search", _keywords, 0}; static _PyArg_Parser _parser = {"O|nn:search", _keywords, 0};
PyObject *string = NULL; PyObject *string;
Py_ssize_t pos = 0; Py_ssize_t pos = 0;
Py_ssize_t endpos = PY_SSIZE_T_MAX; Py_ssize_t endpos = PY_SSIZE_T_MAX;
PyObject *pattern = NULL;
if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
&string, &pos, &endpos, &pattern)) { &string, &pos, &endpos)) {
goto exit; goto exit;
} }
return_value = _sre_SRE_Pattern_search_impl(self, string, pos, endpos, pattern); return_value = _sre_SRE_Pattern_search_impl(self, string, pos, endpos);
exit: exit:
return return_value; return return_value;
} }
PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__, PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__,
"findall($self, /, string=None, pos=0, endpos=sys.maxsize, *,\n" "findall($self, /, string, pos=0, endpos=sys.maxsize)\n"
" source=None)\n"
"--\n" "--\n"
"\n" "\n"
"Return a list of all non-overlapping matches of pattern in string."); "Return a list of all non-overlapping matches of pattern in string.");
...@@ -183,25 +174,23 @@ PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__, ...@@ -183,25 +174,23 @@ PyDoc_STRVAR(_sre_SRE_Pattern_findall__doc__,
static PyObject * static PyObject *
_sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_findall_impl(PatternObject *self, PyObject *string,
Py_ssize_t pos, Py_ssize_t endpos, Py_ssize_t pos, Py_ssize_t endpos);
PyObject *source);
static PyObject * static PyObject *
_sre_SRE_Pattern_findall(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) _sre_SRE_Pattern_findall(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
static const char * const _keywords[] = {"string", "pos", "endpos", "source", NULL}; static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
static _PyArg_Parser _parser = {"|Onn$O:findall", _keywords, 0}; static _PyArg_Parser _parser = {"O|nn:findall", _keywords, 0};
PyObject *string = NULL; PyObject *string;
Py_ssize_t pos = 0; Py_ssize_t pos = 0;
Py_ssize_t endpos = PY_SSIZE_T_MAX; Py_ssize_t endpos = PY_SSIZE_T_MAX;
PyObject *source = NULL;
if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
&string, &pos, &endpos, &source)) { &string, &pos, &endpos)) {
goto exit; goto exit;
} }
return_value = _sre_SRE_Pattern_findall_impl(self, string, pos, endpos, source); return_value = _sre_SRE_Pattern_findall_impl(self, string, pos, endpos);
exit: exit:
return return_value; return return_value;
...@@ -275,7 +264,7 @@ exit: ...@@ -275,7 +264,7 @@ exit:
} }
PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__, PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__,
"split($self, /, string=None, maxsplit=0, *, source=None)\n" "split($self, /, string, maxsplit=0)\n"
"--\n" "--\n"
"\n" "\n"
"Split string by the occurrences of pattern."); "Split string by the occurrences of pattern.");
...@@ -285,23 +274,22 @@ PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__, ...@@ -285,23 +274,22 @@ PyDoc_STRVAR(_sre_SRE_Pattern_split__doc__,
static PyObject * static PyObject *
_sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string, _sre_SRE_Pattern_split_impl(PatternObject *self, PyObject *string,
Py_ssize_t maxsplit, PyObject *source); Py_ssize_t maxsplit);
static PyObject * static PyObject *
_sre_SRE_Pattern_split(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) _sre_SRE_Pattern_split(PatternObject *self, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
static const char * const _keywords[] = {"string", "maxsplit", "source", NULL}; static const char * const _keywords[] = {"string", "maxsplit", NULL};
static _PyArg_Parser _parser = {"|On$O:split", _keywords, 0}; static _PyArg_Parser _parser = {"O|n:split", _keywords, 0};
PyObject *string = NULL; PyObject *string;
Py_ssize_t maxsplit = 0; Py_ssize_t maxsplit = 0;
PyObject *source = NULL;
if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser, if (!_PyArg_ParseStack(args, nargs, kwnames, &_parser,
&string, &maxsplit, &source)) { &string, &maxsplit)) {
goto exit; goto exit;
} }
return_value = _sre_SRE_Pattern_split_impl(self, string, maxsplit, source); return_value = _sre_SRE_Pattern_split_impl(self, string, maxsplit);
exit: exit:
return return_value; return return_value;
...@@ -728,4 +716,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored)) ...@@ -728,4 +716,4 @@ _sre_SRE_Scanner_search(ScannerObject *self, PyObject *Py_UNUSED(ignored))
{ {
return _sre_SRE_Scanner_search_impl(self); return _sre_SRE_Scanner_search_impl(self);
} }
/*[clinic end generated code: output=b74b16d90f207358 input=a9049054013a1b77]*/ /*[clinic end generated code: output=586a4132fbe8c6a7 input=a9049054013a1b77]*/
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment