mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Simplified recursion logic. Modified variable name to match string.Formatter.
This commit is contained in:
		
							parent
							
								
									11529195ca
								
							
						
					
					
						commit
						45c078736e
					
				
					 1 changed files with 10 additions and 12 deletions
				
			
		|  | @ -29,7 +29,7 @@ typedef struct { | ||||||
| /* forward declaration for recursion */ | /* forward declaration for recursion */ | ||||||
| static PyObject * | static PyObject * | ||||||
| build_string(SubString *input, PyObject *args, PyObject *kwargs, | 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, | output_markup(SubString *field_name, SubString *format_spec, | ||||||
|               int format_spec_needs_expanding, STRINGLIB_CHAR conversion, |               int format_spec_needs_expanding, STRINGLIB_CHAR conversion, | ||||||
|               OutputString *output, PyObject *args, PyObject *kwargs, |               OutputString *output, PyObject *args, PyObject *kwargs, | ||||||
|               int *recursion_level) |               int recursion_depth) | ||||||
| { | { | ||||||
|     PyObject *tmp = NULL; |     PyObject *tmp = NULL; | ||||||
|     PyObject *fieldobj = NULL; |     PyObject *fieldobj = NULL; | ||||||
|  | @ -818,7 +818,7 @@ output_markup(SubString *field_name, SubString *format_spec, | ||||||
| 
 | 
 | ||||||
|     /* if needed, recurively compute the format_spec */ |     /* if needed, recurively compute the format_spec */ | ||||||
|     if (format_spec_needs_expanding) { |     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) |         if (tmp == NULL) | ||||||
|             goto done; |             goto done; | ||||||
| 
 | 
 | ||||||
|  | @ -852,7 +852,7 @@ output_markup(SubString *field_name, SubString *format_spec, | ||||||
| */ | */ | ||||||
| static int | static int | ||||||
| do_markup(SubString *input, PyObject *args, PyObject *kwargs, | do_markup(SubString *input, PyObject *args, PyObject *kwargs, | ||||||
|           OutputString *output, int *recursion_level) |           OutputString *output, int recursion_depth) | ||||||
| { | { | ||||||
|     MarkupIterator iter; |     MarkupIterator iter; | ||||||
|     int format_spec_needs_expanding; |     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 (field_name.ptr != field_name.end) | ||||||
|             if (!output_markup(&field_name, &format_spec, |             if (!output_markup(&field_name, &format_spec, | ||||||
|                                format_spec_needs_expanding, conversion, output, |                                format_spec_needs_expanding, conversion, output, | ||||||
|                                args, kwargs, recursion_level)) |                                args, kwargs, recursion_depth)) | ||||||
|                 return 0; |                 return 0; | ||||||
|     } |     } | ||||||
|     return result; |     return result; | ||||||
|  | @ -884,7 +884,7 @@ do_markup(SubString *input, PyObject *args, PyObject *kwargs, | ||||||
| */ | */ | ||||||
| static PyObject * | static PyObject * | ||||||
| build_string(SubString *input, PyObject *args, PyObject *kwargs, | build_string(SubString *input, PyObject *args, PyObject *kwargs, | ||||||
|              int *recursion_level) |              int recursion_depth) | ||||||
| { | { | ||||||
|     OutputString output; |     OutputString output; | ||||||
|     PyObject *result = NULL; |     PyObject *result = NULL; | ||||||
|  | @ -893,8 +893,7 @@ build_string(SubString *input, PyObject *args, PyObject *kwargs, | ||||||
|     output.obj = NULL; /* needed so cleanup code always works */ |     output.obj = NULL; /* needed so cleanup code always works */ | ||||||
| 
 | 
 | ||||||
|     /* check the recursion level */ |     /* check the recursion level */ | ||||||
|     (*recursion_level)--; |     if (recursion_depth <= 0) { | ||||||
|     if (*recursion_level < 0) { |  | ||||||
|         PyErr_SetString(PyExc_ValueError, |         PyErr_SetString(PyExc_ValueError, | ||||||
|                         "Max string recursion exceeded"); |                         "Max string recursion exceeded"); | ||||||
|         goto done; |         goto done; | ||||||
|  | @ -907,7 +906,7 @@ build_string(SubString *input, PyObject *args, PyObject *kwargs, | ||||||
|                            INITIAL_SIZE_INCREMENT)) |                            INITIAL_SIZE_INCREMENT)) | ||||||
|         goto done; |         goto done; | ||||||
| 
 | 
 | ||||||
|     if (!do_markup(input, args, kwargs, &output, recursion_level)) { |     if (!do_markup(input, args, kwargs, &output, recursion_depth)) { | ||||||
|         goto done; |         goto done; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -921,7 +920,6 @@ build_string(SubString *input, PyObject *args, PyObject *kwargs, | ||||||
|     output.obj = NULL; |     output.obj = NULL; | ||||||
| 
 | 
 | ||||||
| done: | done: | ||||||
|     (*recursion_level)++; |  | ||||||
|     Py_XDECREF(output.obj); |     Py_XDECREF(output.obj); | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
|  | @ -940,10 +938,10 @@ do_string_format(PyObject *self, PyObject *args, PyObject *kwargs) | ||||||
|        "{0:{1}}".format('abc', 's')            # works |        "{0:{1}}".format('abc', 's')            # works | ||||||
|        "{0:{1:{2}}}".format('abc', 's', '')    # fails |        "{0:{1:{2}}}".format('abc', 's', '')    # fails | ||||||
|     */ |     */ | ||||||
|     int recursion_level = 2; |     int recursion_depth = 2; | ||||||
| 
 | 
 | ||||||
|     SubString_init(&input, STRINGLIB_STR(self), STRINGLIB_LEN(self)); |     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); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Eric Smith
						Eric Smith