@@ -378,18 +378,22 @@ re_parse_char_class (re_parser_ctx_t *parser_ctx_p, /**< number of classes */
378378 }
379379 else if (ch == LIT_CHAR_LOWERCASE_C)
380380 {
381- if (lit_utf8_iterator_is_eos (iter_p))
381+ if (! lit_utf8_iterator_is_eos (iter_p))
382382 {
383- return ecma_raise_syntax_error (" invalid character class, end of string after '\\ c'" );
384- }
385-
386- ch = lit_utf8_iterator_read_next (iter_p);
383+ ch = lit_utf8_iterator_peek_next (iter_p);
387384
388- if ((ch >= LIT_CHAR_ASCII_UPPERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_UPPERCASE_LETTERS_END)
389- || (ch >= LIT_CHAR_ASCII_LOWERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_LOWERCASE_LETTERS_END))
390- {
391- /* See ECMA-262 v5, 15.10.2.10 (Point 3) */
392- ch = (ch % 32 );
385+ if ((ch >= LIT_CHAR_ASCII_UPPERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_UPPERCASE_LETTERS_END)
386+ || (ch >= LIT_CHAR_ASCII_LOWERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_LOWERCASE_LETTERS_END)
387+ || (ch >= LIT_CHAR_0 && ch <= LIT_CHAR_9))
388+ {
389+ /* See ECMA-262 v5, 15.10.2.10 (Point 3) */
390+ ch = (ch % 32 );
391+ lit_utf8_iterator_incr (iter_p);
392+ }
393+ else
394+ {
395+ ch = LIT_CHAR_LOWERCASE_C;
396+ }
393397 }
394398 }
395399 else if (ch == LIT_CHAR_LOWERCASE_X)
@@ -627,19 +631,26 @@ re_parse_next_token (re_parser_ctx_t *parser_ctx_p, /**< RegExp parser context *
627631 }
628632 else if (ch == LIT_CHAR_LOWERCASE_C)
629633 {
630- if (lit_utf8_iterator_is_eos (iter_p))
634+ if (! lit_utf8_iterator_is_eos (iter_p))
631635 {
632- out_token_p->value = ch;
633- break ;
634- }
635-
636- ch = lit_utf8_iterator_peek_next (iter_p);
636+ ch = lit_utf8_iterator_peek_next (iter_p);
637637
638- if ((ch >= LIT_CHAR_ASCII_UPPERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_UPPERCASE_LETTERS_END)
639- || (ch >= LIT_CHAR_ASCII_LOWERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_LOWERCASE_LETTERS_END))
638+ if ((ch >= LIT_CHAR_ASCII_UPPERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_UPPERCASE_LETTERS_END)
639+ || (ch >= LIT_CHAR_ASCII_LOWERCASE_LETTERS_BEGIN && ch <= LIT_CHAR_ASCII_LOWERCASE_LETTERS_END))
640+ {
641+ out_token_p->value = (ch % 32 );
642+ lit_utf8_iterator_incr (iter_p);
643+ }
644+ else
645+ {
646+ out_token_p->value = LIT_CHAR_BACKSLASH;
647+ lit_utf8_iterator_decr (iter_p);
648+ }
649+ }
650+ else
640651 {
641- out_token_p->value = (ch % 32 ) ;
642- lit_utf8_iterator_advance (iter_p, 1 );
652+ out_token_p->value = LIT_CHAR_BACKSLASH ;
653+ lit_utf8_iterator_decr (iter_p);
643654 }
644655 }
645656 else if (ch == LIT_CHAR_LOWERCASE_X
0 commit comments