parent
e83aab12b0
commit
e9aae2dcc5
|
@ -13,10 +13,10 @@ const char *_Py_PackageContext = NULL;
|
|||
|
||||
/* Helper for mkvalue() to scan the length of a format */
|
||||
|
||||
static int
|
||||
static Py_ssize_t
|
||||
countformat(const char *format, int endchar)
|
||||
{
|
||||
int count = 0;
|
||||
Py_ssize_t count = 0;
|
||||
int level = 0;
|
||||
while (level > 0 || *format != endchar) {
|
||||
switch (*format) {
|
||||
|
@ -28,8 +28,9 @@ countformat(const char *format, int endchar)
|
|||
case '(':
|
||||
case '[':
|
||||
case '{':
|
||||
if (level == 0)
|
||||
if (level == 0) {
|
||||
count++;
|
||||
}
|
||||
level++;
|
||||
break;
|
||||
case ')':
|
||||
|
@ -45,8 +46,9 @@ countformat(const char *format, int endchar)
|
|||
case '\t':
|
||||
break;
|
||||
default:
|
||||
if (level == 0)
|
||||
if (level == 0) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
format++;
|
||||
}
|
||||
|
@ -57,17 +59,17 @@ countformat(const char *format, int endchar)
|
|||
/* Generic function to create a value -- the inverse of getargs() */
|
||||
/* After an original idea and first implementation by Steven Miale */
|
||||
|
||||
static PyObject *do_mktuple(const char**, va_list *, int, int, int);
|
||||
static PyObject *do_mklist(const char**, va_list *, int, int, int);
|
||||
static PyObject *do_mkdict(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, Py_ssize_t, int);
|
||||
static PyObject *do_mkdict(const char**, va_list *, int, Py_ssize_t, int);
|
||||
static PyObject *do_mkvalue(const char**, va_list *, int);
|
||||
|
||||
|
||||
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;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
assert(PyErr_Occurred());
|
||||
v = PyTuple_New(n);
|
||||
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");
|
||||
return;
|
||||
}
|
||||
if (endchar)
|
||||
if (endchar) {
|
||||
++*p_format;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
if (n < 0)
|
||||
return NULL;
|
||||
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 *
|
||||
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;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
if (n < 0)
|
||||
return NULL;
|
||||
/* 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 *
|
||||
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;
|
||||
int i;
|
||||
Py_ssize_t i;
|
||||
if (n < 0)
|
||||
return NULL;
|
||||
/* 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)
|
||||
{
|
||||
const char *f = format;
|
||||
int n = countformat(f, '\0');
|
||||
Py_ssize_t n = countformat(f, '\0');
|
||||
va_list lva;
|
||||
PyObject *retval;
|
||||
|
||||
|
|
Loading…
Reference in New Issue