#define E_LINECONT 25 /* Unexpected characters after a line continuation */
#define E_IDENTIFIER 26 /* Invalid characters in identifier */
#define E_BADSINGLE 27 /* Ill-formed single statement input */
+#define E_BADPREFIX 28 /* Bad string prefixes */
#ifdef __cplusplus
}
self.assertEqual(f'{f"{y}"*3}', '555')
def test_invalid_string_prefixes(self):
- self.assertAllRaise(SyntaxError, 'unexpected EOF while parsing',
+ self.assertAllRaise(SyntaxError, 'invalid string prefix',
["fu''",
"uf''",
"Fu''",
--- /dev/null
+Report a specialized error message, `invalid string prefix`, when the tokenizer encounters a string with an invalid prefix.
\ No newline at end of file
if (nonascii && !verify_identifier(tok)) {
return ERRORTOKEN;
}
+ if (c == '"' || c == '\'') {
+ tok->done = E_BADPREFIX;
+ return ERRORTOKEN;
+ }
*p_start = tok->start;
*p_end = tok->cur;
case E_BADSINGLE:
msg = "multiple statements found while compiling a single statement";
break;
+ case E_BADPREFIX:
+ msg = "invalid string prefix";
+ break;
default:
fprintf(stderr, "error=%d\n", err->error);
msg = "unknown parsing error";