mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
							parent
							
								
									e83aab12b0
								
							
						
					
					
						commit
						e9aae2dcc5
					
				
					 1 changed files with 20 additions and 17 deletions
				
			
		|  | @ -13,10 +13,10 @@ const char *_Py_PackageContext = NULL; | ||||||
| 
 | 
 | ||||||
| /* Helper for mkvalue() to scan the length of a format */ | /* Helper for mkvalue() to scan the length of a format */ | ||||||
| 
 | 
 | ||||||
| static int | static Py_ssize_t | ||||||
| countformat(const char *format, int endchar) | countformat(const char *format, int endchar) | ||||||
| { | { | ||||||
|     int count = 0; |     Py_ssize_t count = 0; | ||||||
|     int level = 0; |     int level = 0; | ||||||
|     while (level > 0 || *format != endchar) { |     while (level > 0 || *format != endchar) { | ||||||
|         switch (*format) { |         switch (*format) { | ||||||
|  | @ -28,8 +28,9 @@ countformat(const char *format, int endchar) | ||||||
|         case '(': |         case '(': | ||||||
|         case '[': |         case '[': | ||||||
|         case '{': |         case '{': | ||||||
|             if (level == 0) |             if (level == 0) { | ||||||
|                 count++; |                 count++; | ||||||
|  |             } | ||||||
|             level++; |             level++; | ||||||
|             break; |             break; | ||||||
|         case ')': |         case ')': | ||||||
|  | @ -45,9 +46,10 @@ countformat(const char *format, int endchar) | ||||||
|         case '\t': |         case '\t': | ||||||
|             break; |             break; | ||||||
|         default: |         default: | ||||||
|             if (level == 0) |             if (level == 0) { | ||||||
|                 count++; |                 count++; | ||||||
|             } |             } | ||||||
|  |         } | ||||||
|         format++; |         format++; | ||||||
|     } |     } | ||||||
|     return count; |     return count; | ||||||
|  | @ -57,17 +59,17 @@ countformat(const char *format, int endchar) | ||||||
| /* Generic function to create a value -- the inverse of getargs() */ | /* Generic function to create a value -- the inverse of getargs() */ | ||||||
| /* After an original idea and first implementation by Steven Miale */ | /* After an original idea and first implementation by Steven Miale */ | ||||||
| 
 | 
 | ||||||
| static PyObject *do_mktuple(const char**, va_list *, int, int, int); | static PyObject *do_mktuple(const char**, va_list *, int, Py_ssize_t, int); | ||||||
| static PyObject *do_mklist(const char**, va_list *, int, int, int); | static PyObject *do_mklist(const char**, va_list *, int, Py_ssize_t, int); | ||||||
| static PyObject *do_mkdict(const char**, va_list *, int, int, int); | static PyObject *do_mkdict(const char**, va_list *, int, Py_ssize_t, int); | ||||||
| static PyObject *do_mkvalue(const char**, va_list *, int); | static PyObject *do_mkvalue(const char**, va_list *, int); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| do_ignore(const char **p_format, va_list *p_va, int endchar, int n, int flags) | do_ignore(const char **p_format, va_list *p_va, int endchar, Py_ssize_t n, int flags) | ||||||
| { | { | ||||||
|     PyObject *v; |     PyObject *v; | ||||||
|     int i; |     Py_ssize_t i; | ||||||
|     assert(PyErr_Occurred()); |     assert(PyErr_Occurred()); | ||||||
|     v = PyTuple_New(n); |     v = PyTuple_New(n); | ||||||
|     for (i = 0; i < n; i++) { |     for (i = 0; i < n; i++) { | ||||||
|  | @ -91,15 +93,16 @@ do_ignore(const char **p_format, va_list *p_va, int endchar, int n, int flags) | ||||||
|                         "Unmatched paren in format"); |                         "Unmatched paren in format"); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     if (endchar) |     if (endchar) { | ||||||
|         ++*p_format; |         ++*p_format; | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static PyObject * | static PyObject * | ||||||
| do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags) | do_mkdict(const char **p_format, va_list *p_va, int endchar, Py_ssize_t n, int flags) | ||||||
| { | { | ||||||
|     PyObject *d; |     PyObject *d; | ||||||
|     int i; |     Py_ssize_t i; | ||||||
|     if (n < 0) |     if (n < 0) | ||||||
|         return NULL; |         return NULL; | ||||||
|     if (n % 2) { |     if (n % 2) { | ||||||
|  | @ -146,10 +149,10 @@ do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static PyObject * | static PyObject * | ||||||
| do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags) | do_mklist(const char **p_format, va_list *p_va, int endchar, Py_ssize_t n, int flags) | ||||||
| { | { | ||||||
|     PyObject *v; |     PyObject *v; | ||||||
|     int i; |     Py_ssize_t i; | ||||||
|     if (n < 0) |     if (n < 0) | ||||||
|         return NULL; |         return NULL; | ||||||
|     /* Note that we can't bail immediately on error as this will leak
 |     /* Note that we can't bail immediately on error as this will leak
 | ||||||
|  | @ -180,10 +183,10 @@ do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static PyObject * | static PyObject * | ||||||
| do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags) | do_mktuple(const char **p_format, va_list *p_va, int endchar, Py_ssize_t n, int flags) | ||||||
| { | { | ||||||
|     PyObject *v; |     PyObject *v; | ||||||
|     int i; |     Py_ssize_t i; | ||||||
|     if (n < 0) |     if (n < 0) | ||||||
|         return NULL; |         return NULL; | ||||||
|     /* Note that we can't bail immediately on error as this will leak
 |     /* Note that we can't bail immediately on error as this will leak
 | ||||||
|  | @ -465,7 +468,7 @@ static PyObject * | ||||||
| va_build_value(const char *format, va_list va, int flags) | va_build_value(const char *format, va_list va, int flags) | ||||||
| { | { | ||||||
|     const char *f = format; |     const char *f = format; | ||||||
|     int n = countformat(f, '\0'); |     Py_ssize_t n = countformat(f, '\0'); | ||||||
|     va_list lva; |     va_list lva; | ||||||
|     PyObject *retval; |     PyObject *retval; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner