mirror of
https://github.com/python/cpython.git
synced 2025-12-10 11:00:14 +00:00
Issue #20948: Inline makefmt() in unicode_fromformat_arg()
This commit is contained in:
parent
1eba04663e
commit
3aa979e0cd
1 changed files with 9 additions and 44 deletions
|
|
@ -2313,35 +2313,6 @@ PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size)
|
||||||
|
|
||||||
#endif /* HAVE_WCHAR_H */
|
#endif /* HAVE_WCHAR_H */
|
||||||
|
|
||||||
static void
|
|
||||||
makefmt(char *fmt, int longflag, int longlongflag, int size_tflag,
|
|
||||||
char c)
|
|
||||||
{
|
|
||||||
*fmt++ = '%';
|
|
||||||
if (longflag)
|
|
||||||
*fmt++ = 'l';
|
|
||||||
else if (longlongflag) {
|
|
||||||
/* longlongflag should only ever be nonzero on machines with
|
|
||||||
HAVE_LONG_LONG defined */
|
|
||||||
#ifdef HAVE_LONG_LONG
|
|
||||||
char *f = PY_FORMAT_LONG_LONG;
|
|
||||||
while (*f)
|
|
||||||
*fmt++ = *f++;
|
|
||||||
#else
|
|
||||||
/* we shouldn't ever get here */
|
|
||||||
assert(0);
|
|
||||||
*fmt++ = 'l';
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if (size_tflag) {
|
|
||||||
char *f = PY_FORMAT_SIZE_T;
|
|
||||||
while (*f)
|
|
||||||
*fmt++ = *f++;
|
|
||||||
}
|
|
||||||
*fmt++ = c;
|
|
||||||
*fmt = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* maximum number of characters required for output of %lld or %p.
|
/* maximum number of characters required for output of %lld or %p.
|
||||||
We need at most ceil(log10(256)*SIZEOF_LONG_LONG) digits,
|
We need at most ceil(log10(256)*SIZEOF_LONG_LONG) digits,
|
||||||
plus 1 for the sign. 53/22 is an upper bound for log10(256). */
|
plus 1 for the sign. 53/22 is an upper bound for log10(256). */
|
||||||
|
|
@ -2517,48 +2488,42 @@ unicode_fromformat_arg(_PyUnicodeWriter *writer,
|
||||||
case 'x':
|
case 'x':
|
||||||
{
|
{
|
||||||
/* used by sprintf */
|
/* used by sprintf */
|
||||||
char fmt[10]; /* should be enough for "%0lld\0" */
|
|
||||||
char buffer[MAX_LONG_LONG_CHARS];
|
char buffer[MAX_LONG_LONG_CHARS];
|
||||||
Py_ssize_t arglen;
|
Py_ssize_t arglen;
|
||||||
|
|
||||||
if (*f == 'u') {
|
if (*f == 'u') {
|
||||||
makefmt(fmt, longflag, longlongflag, size_tflag, *f);
|
|
||||||
|
|
||||||
if (longflag)
|
if (longflag)
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%lu",
|
||||||
va_arg(*vargs, unsigned long));
|
va_arg(*vargs, unsigned long));
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
else if (longlongflag)
|
else if (longlongflag)
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%" PY_FORMAT_LONG_LONG "u",
|
||||||
va_arg(*vargs, unsigned PY_LONG_LONG));
|
va_arg(*vargs, unsigned PY_LONG_LONG));
|
||||||
#endif
|
#endif
|
||||||
else if (size_tflag)
|
else if (size_tflag)
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%" PY_FORMAT_SIZE_T "u",
|
||||||
va_arg(*vargs, size_t));
|
va_arg(*vargs, size_t));
|
||||||
else
|
else
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%u",
|
||||||
va_arg(*vargs, unsigned int));
|
va_arg(*vargs, unsigned int));
|
||||||
}
|
}
|
||||||
else if (*f == 'x') {
|
else if (*f == 'x') {
|
||||||
makefmt(fmt, 0, 0, 0, 'x');
|
len = sprintf(buffer, "%x", va_arg(*vargs, int));
|
||||||
len = sprintf(buffer, fmt, va_arg(*vargs, int));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
makefmt(fmt, longflag, longlongflag, size_tflag, *f);
|
|
||||||
|
|
||||||
if (longflag)
|
if (longflag)
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%li",
|
||||||
va_arg(*vargs, long));
|
va_arg(*vargs, long));
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
else if (longlongflag)
|
else if (longlongflag)
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%" PY_FORMAT_LONG_LONG "i",
|
||||||
va_arg(*vargs, PY_LONG_LONG));
|
va_arg(*vargs, PY_LONG_LONG));
|
||||||
#endif
|
#endif
|
||||||
else if (size_tflag)
|
else if (size_tflag)
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%" PY_FORMAT_SIZE_T "i",
|
||||||
va_arg(*vargs, Py_ssize_t));
|
va_arg(*vargs, Py_ssize_t));
|
||||||
else
|
else
|
||||||
len = sprintf(buffer, fmt,
|
len = sprintf(buffer, "%i",
|
||||||
va_arg(*vargs, int));
|
va_arg(*vargs, int));
|
||||||
}
|
}
|
||||||
assert(len >= 0);
|
assert(len >= 0);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue