Skip to content

Commit 42a48a2

Browse files
committed
Regexp terminator escapes
1 parent 9a343b9 commit 42a48a2

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/prism.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9478,7 +9478,9 @@ parser_lex(pm_parser_t *parser) {
94789478
case '\r':
94799479
parser->current.end++;
94809480
if (peek(parser) != '\n') {
9481-
pm_token_buffer_push(&token_buffer, '\\');
9481+
if (lex_mode->as.regexp.terminator != '\r') {
9482+
pm_token_buffer_push(&token_buffer, '\\');
9483+
}
94829484
pm_token_buffer_push(&token_buffer, '\r');
94839485
break;
94849486
}
@@ -9506,7 +9508,20 @@ parser_lex(pm_parser_t *parser) {
95069508
escape_read(parser, &token_buffer.buffer, PM_ESCAPE_FLAG_REGEXP);
95079509
break;
95089510
default:
9509-
if (lex_mode->as.regexp.terminator == '/' && peeked == '/') {
9511+
if (lex_mode->as.regexp.terminator == peeked) {
9512+
// Some characters when they are used as the
9513+
// terminator also receive an escape. They are
9514+
// enumerated here.
9515+
switch (peeked) {
9516+
case '$': case ')': case '*': case '+':
9517+
case '.': case '>': case '?': case ']':
9518+
case '^': case '|': case '}':
9519+
pm_token_buffer_push(&token_buffer, '\\');
9520+
break;
9521+
default:
9522+
break;
9523+
}
9524+
95109525
pm_token_buffer_push(&token_buffer, peeked);
95119526
parser->current.end++;
95129527
break;

test/prism/snapshots/seattlerb/bug190.txt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)