Add support for some missing escape sequences

This commit is contained in:
Daniel Saier 2025-10-08 15:35:51 +02:00
parent 0251f924c3
commit 79ed42fb32
2 changed files with 13 additions and 0 deletions

View File

@ -269,13 +269,20 @@ static Error* _eat_string(Lexer* self, c11_sbuf* buff, char quote, enum StringTy
}
if(!is_raw && c == '\\') {
switch(eatchar_include_newline(self)) {
// For the list of available escape sequences see
// https://docs.python.org/3/reference/lexical_analysis.html#escape-sequences
case '"': c11_sbuf__write_char(buff, '"'); break;
case '\'': c11_sbuf__write_char(buff, '\''); break;
case '\\': c11_sbuf__write_char(buff, '\\'); break;
case 'n': c11_sbuf__write_char(buff, '\n'); break;
case 'r': c11_sbuf__write_char(buff, '\r'); break;
case 't': c11_sbuf__write_char(buff, '\t'); break;
case 'a': c11_sbuf__write_char(buff, '\a'); break;
case 'b': c11_sbuf__write_char(buff, '\b'); break;
case 'f': c11_sbuf__write_char(buff, '\f'); break;
case 'v': c11_sbuf__write_char(buff, '\v'); break;
// Special case for the often used \0 while we don't have full support for octal literals.
case '0': c11_sbuf__write_char(buff, '\0'); break;
case 'x': {
char hex[3] = {eatchar(self), eatchar(self), '\0'};
int code;

View File

@ -155,6 +155,12 @@ assert '\x30\x31\x32' == '012'
assert '\b\b\b' == '\x08\x08\x08'
assert repr('\x1f\x1e\x1f') == '\'\\x1f\\x1e\\x1f\''
assert '\a' == '\x07'
assert '\b' == '\x08'
assert '\f' == '\x0c'
assert '\v' == '\x0b'
assert '\0' == '\x00'
a = '123'
assert a.index('2') == 1
assert a.index('1') == 0