[ruby/prism] Regexp terminator escapes

https://github.com/ruby/prism/commit/42a48a2ba9
This commit is contained in:
Kevin Newton 2023-12-11 09:30:24 -05:00 committed by git
parent c65de63913
commit 4095e7d2be
2 changed files with 18 additions and 3 deletions

View File

@ -9535,7 +9535,9 @@ parser_lex(pm_parser_t *parser) {
case '\r':
parser->current.end++;
if (peek(parser) != '\n') {
if (lex_mode->as.regexp.terminator != '\r') {
pm_token_buffer_push(&token_buffer, '\\');
}
pm_token_buffer_push(&token_buffer, '\r');
break;
}
@ -9563,7 +9565,20 @@ parser_lex(pm_parser_t *parser) {
escape_read(parser, &token_buffer.buffer, PM_ESCAPE_FLAG_REGEXP);
break;
default:
if (lex_mode->as.regexp.terminator == '/' && peeked == '/') {
if (lex_mode->as.regexp.terminator == peeked) {
// Some characters when they are used as the
// terminator also receive an escape. They are
// enumerated here.
switch (peeked) {
case '$': case ')': case '*': case '+':
case '.': case '>': case '?': case ']':
case '^': case '|': case '}':
pm_token_buffer_push(&token_buffer, '\\');
break;
default:
break;
}
pm_token_buffer_push(&token_buffer, peeked);
parser->current.end++;
break;

View File

@ -8,4 +8,4 @@
├── opening_loc: (1,0)-(1,3) = "%r'"
├── content_loc: (1,3)-(1,5) = "\\'"
├── closing_loc: (1,5)-(1,6) = "'"
└── unescaped: "\\'"
└── unescaped: "'"