[ruby/prism] Regexp terminator escapes
https://github.com/ruby/prism/commit/42a48a2ba9
This commit is contained in:
parent
c65de63913
commit
4095e7d2be
@ -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;
|
||||
|
@ -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: "'"
|
||||
|
Loading…
x
Reference in New Issue
Block a user