From: Eric Smith Date: Wed, 5 Sep 2007 02:02:43 +0000 (+0000) Subject: Simplified recursion logic. Modified variable name to match string.Formatter. X-Git-Tag: v3.0a2~443 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=45c078736e0fd64f21c90efd61d2cba9540a3d30;p=python Simplified recursion logic. Modified variable name to match string.Formatter. --- diff --git a/Objects/stringlib/string_format.h b/Objects/stringlib/string_format.h index ea8b0e72f6..6c3c1e606a 100644 --- a/Objects/stringlib/string_format.h +++ b/Objects/stringlib/string_format.h @@ -29,7 +29,7 @@ typedef struct { /* forward declaration for recursion */ static PyObject * build_string(SubString *input, PyObject *args, PyObject *kwargs, - int *recursion_level); + int recursion_depth); @@ -792,7 +792,7 @@ static int output_markup(SubString *field_name, SubString *format_spec, int format_spec_needs_expanding, STRINGLIB_CHAR conversion, OutputString *output, PyObject *args, PyObject *kwargs, - int *recursion_level) + int recursion_depth) { PyObject *tmp = NULL; PyObject *fieldobj = NULL; @@ -818,7 +818,7 @@ output_markup(SubString *field_name, SubString *format_spec, /* if needed, recurively compute the format_spec */ if (format_spec_needs_expanding) { - tmp = build_string(format_spec, args, kwargs, recursion_level); + tmp = build_string(format_spec, args, kwargs, recursion_depth-1); if (tmp == NULL) goto done; @@ -852,7 +852,7 @@ done: */ static int do_markup(SubString *input, PyObject *args, PyObject *kwargs, - OutputString *output, int *recursion_level) + OutputString *output, int recursion_depth) { MarkupIterator iter; int format_spec_needs_expanding; @@ -871,7 +871,7 @@ do_markup(SubString *input, PyObject *args, PyObject *kwargs, if (field_name.ptr != field_name.end) if (!output_markup(&field_name, &format_spec, format_spec_needs_expanding, conversion, output, - args, kwargs, recursion_level)) + args, kwargs, recursion_depth)) return 0; } return result; @@ -884,7 +884,7 @@ do_markup(SubString *input, PyObject *args, PyObject *kwargs, */ static PyObject * build_string(SubString *input, PyObject *args, PyObject *kwargs, - int *recursion_level) + int recursion_depth) { OutputString output; PyObject *result = NULL; @@ -893,8 +893,7 @@ build_string(SubString *input, PyObject *args, PyObject *kwargs, output.obj = NULL; /* needed so cleanup code always works */ /* check the recursion level */ - (*recursion_level)--; - if (*recursion_level < 0) { + if (recursion_depth <= 0) { PyErr_SetString(PyExc_ValueError, "Max string recursion exceeded"); goto done; @@ -907,7 +906,7 @@ build_string(SubString *input, PyObject *args, PyObject *kwargs, INITIAL_SIZE_INCREMENT)) goto done; - if (!do_markup(input, args, kwargs, &output, recursion_level)) { + if (!do_markup(input, args, kwargs, &output, recursion_depth)) { goto done; } @@ -921,7 +920,6 @@ build_string(SubString *input, PyObject *args, PyObject *kwargs, output.obj = NULL; done: - (*recursion_level)++; Py_XDECREF(output.obj); return result; } @@ -940,10 +938,10 @@ do_string_format(PyObject *self, PyObject *args, PyObject *kwargs) "{0:{1}}".format('abc', 's') # works "{0:{1:{2}}}".format('abc', 's', '') # fails */ - int recursion_level = 2; + int recursion_depth = 2; SubString_init(&input, STRINGLIB_STR(self), STRINGLIB_LEN(self)); - return build_string(&input, args, kwargs, &recursion_level); + return build_string(&input, args, kwargs, recursion_depth); }