summaryrefslogtreecommitdiffstats
path: root/Parser
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2023-05-21 21:32:39 (GMT)
committerGitHub <noreply@github.com>2023-05-21 21:32:39 (GMT)
commitf3466bc04008660c4a5c3ed6f70144f138ae2e7f (patch)
tree3aada373c1a064f47e8273f30439c5fcea1d7e3a /Parser
parent6ba8406cb6e656e47e908f8c7354e07ed0f2d774 (diff)
downloadcpython-f3466bc04008660c4a5c3ed6f70144f138ae2e7f.zip
cpython-f3466bc04008660c4a5c3ed6f70144f138ae2e7f.tar.gz
cpython-f3466bc04008660c4a5c3ed6f70144f138ae2e7f.tar.bz2
gh-98836: Extend PyUnicode_FromFormat() (GH-98838)
* Support for conversion specifiers o (octal) and X (uppercase hexadecimal). * Support for length modifiers j (intmax_t) and t (ptrdiff_t). * Length modifiers are now applied to all integer conversions. * Support for wchar_t C strings (%ls and %lV). * Support for variable width and precision (*). * Support for flag - (left alignment).
Diffstat (limited to 'Parser')
-rw-r--r--Parser/tokenizer.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index fb94fbe..fc4afcc 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1556,14 +1556,11 @@ verify_identifier(struct tok_state *tok)
tok->cur = (char *)tok->start + PyBytes_GET_SIZE(s);
}
Py_DECREF(s);
- // PyUnicode_FromFormatV() does not support %X
- char hex[9];
- (void)PyOS_snprintf(hex, sizeof(hex), "%04X", ch);
if (Py_UNICODE_ISPRINTABLE(ch)) {
- syntaxerror(tok, "invalid character '%c' (U+%s)", ch, hex);
+ syntaxerror(tok, "invalid character '%c' (U+%04X)", ch, ch);
}
else {
- syntaxerror(tok, "invalid non-printable character U+%s", hex);
+ syntaxerror(tok, "invalid non-printable character U+%04X", ch);
}
return 0;
}
@@ -2541,9 +2538,7 @@ tok_get_normal_mode(struct tok_state *tok, tokenizer_mode* current_tok, struct t
}
if (!Py_UNICODE_ISPRINTABLE(c)) {
- char hex[9];
- (void)PyOS_snprintf(hex, sizeof(hex), "%04X", c);
- return MAKE_TOKEN(syntaxerror(tok, "invalid non-printable character U+%s", hex));
+ return MAKE_TOKEN(syntaxerror(tok, "invalid non-printable character U+%04X", c));
}
if( c == '=' && INSIDE_FSTRING_EXPR(current_tok)) {