@@ -6387,53 +6387,89 @@ parser_lex(yp_parser_t *parser) {
6387
6387
switch (*parser->current.end) {
6388
6388
case 'i': {
6389
6389
parser->current.end++;
6390
- lex_mode_push_list(parser, false, *parser->current.end++);
6390
+
6391
+ if (parser->current.end < parser->end) {
6392
+ lex_mode_push_list(parser, false, *parser->current.end++);
6393
+ }
6394
+
6391
6395
LEX(YP_TOKEN_PERCENT_LOWER_I);
6392
6396
}
6393
6397
case 'I': {
6394
6398
parser->current.end++;
6395
- lex_mode_push_list(parser, true, *parser->current.end++);
6399
+
6400
+ if (parser->current.end < parser->end) {
6401
+ lex_mode_push_list(parser, true, *parser->current.end++);
6402
+ }
6403
+
6396
6404
LEX(YP_TOKEN_PERCENT_UPPER_I);
6397
6405
}
6398
6406
case 'r': {
6399
6407
parser->current.end++;
6400
- lex_mode_push_regexp(parser, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6401
- parser->current.end++;
6408
+
6409
+ if (parser->current.end < parser->end) {
6410
+ lex_mode_push_regexp(parser, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6411
+ parser->current.end++;
6412
+ }
6413
+
6402
6414
LEX(YP_TOKEN_REGEXP_BEGIN);
6403
6415
}
6404
6416
case 'q': {
6405
6417
parser->current.end++;
6406
- lex_mode_push_string(parser, false, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6407
- parser->current.end++;
6418
+
6419
+ if (parser->current.end < parser->end) {
6420
+ lex_mode_push_string(parser, false, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6421
+ parser->current.end++;
6422
+ }
6423
+
6408
6424
LEX(YP_TOKEN_STRING_BEGIN);
6409
6425
}
6410
6426
case 'Q': {
6411
6427
parser->current.end++;
6412
- lex_mode_push_string(parser, true, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6413
- parser->current.end++;
6428
+
6429
+ if (parser->current.end < parser->end) {
6430
+ lex_mode_push_string(parser, true, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6431
+ parser->current.end++;
6432
+ }
6433
+
6414
6434
LEX(YP_TOKEN_STRING_BEGIN);
6415
6435
}
6416
6436
case 's': {
6417
6437
parser->current.end++;
6418
- lex_mode_push_string(parser, false, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6419
- lex_state_set(parser, YP_LEX_STATE_FNAME | YP_LEX_STATE_FITEM);
6420
- parser->current.end++;
6438
+
6439
+ if (parser->current.end < parser->end) {
6440
+ lex_mode_push_string(parser, false, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6441
+ lex_state_set(parser, YP_LEX_STATE_FNAME | YP_LEX_STATE_FITEM);
6442
+ parser->current.end++;
6443
+ }
6444
+
6421
6445
LEX(YP_TOKEN_SYMBOL_BEGIN);
6422
6446
}
6423
6447
case 'w': {
6424
6448
parser->current.end++;
6425
- lex_mode_push_list(parser, false, *parser->current.end++);
6449
+
6450
+ if (parser->current.end < parser->end) {
6451
+ lex_mode_push_list(parser, false, *parser->current.end++);
6452
+ }
6453
+
6426
6454
LEX(YP_TOKEN_PERCENT_LOWER_W);
6427
6455
}
6428
6456
case 'W': {
6429
6457
parser->current.end++;
6430
- lex_mode_push_list(parser, true, *parser->current.end++);
6458
+
6459
+ if (parser->current.end < parser->end) {
6460
+ lex_mode_push_list(parser, true, *parser->current.end++);
6461
+ }
6462
+
6431
6463
LEX(YP_TOKEN_PERCENT_UPPER_W);
6432
6464
}
6433
6465
case 'x': {
6434
6466
parser->current.end++;
6435
- lex_mode_push_string(parser, true, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6436
- parser->current.end++;
6467
+
6468
+ if (parser->current.end < parser->end) {
6469
+ lex_mode_push_string(parser, true, false, lex_mode_incrementor(*parser->current.end), lex_mode_terminator(*parser->current.end));
6470
+ parser->current.end++;
6471
+ }
6472
+
6437
6473
LEX(YP_TOKEN_PERCENT_LOWER_X);
6438
6474
}
6439
6475
default:
0 commit comments