[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':
|
case '\r':
|
||||||
parser->current.end++;
|
parser->current.end++;
|
||||||
if (peek(parser) != '\n') {
|
if (peek(parser) != '\n') {
|
||||||
pm_token_buffer_push(&token_buffer, '\\');
|
if (lex_mode->as.regexp.terminator != '\r') {
|
||||||
|
pm_token_buffer_push(&token_buffer, '\\');
|
||||||
|
}
|
||||||
pm_token_buffer_push(&token_buffer, '\r');
|
pm_token_buffer_push(&token_buffer, '\r');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -9563,7 +9565,20 @@ parser_lex(pm_parser_t *parser) {
|
|||||||
escape_read(parser, &token_buffer.buffer, PM_ESCAPE_FLAG_REGEXP);
|
escape_read(parser, &token_buffer.buffer, PM_ESCAPE_FLAG_REGEXP);
|
||||||
break;
|
break;
|
||||||
default:
|
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);
|
pm_token_buffer_push(&token_buffer, peeked);
|
||||||
parser->current.end++;
|
parser->current.end++;
|
||||||
break;
|
break;
|
||||||
|
@ -8,4 +8,4 @@
|
|||||||
├── opening_loc: (1,0)-(1,3) = "%r'"
|
├── opening_loc: (1,0)-(1,3) = "%r'"
|
||||||
├── content_loc: (1,3)-(1,5) = "\\'"
|
├── content_loc: (1,3)-(1,5) = "\\'"
|
||||||
├── closing_loc: (1,5)-(1,6) = "'"
|
├── closing_loc: (1,5)-(1,6) = "'"
|
||||||
└── unescaped: "\\'"
|
└── unescaped: "'"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user