<dqstr,unesc_dqstr>\\{CR}{LF} { /* skip */ }
<dqstr,unesc_dqstr>\\{LF} { /* skip */ }
<dqstr,unesc_dqstr>\\{CR} { /* skip */ }
-<dqstr,unesc_dqstr>{LINE_TERMINATORS} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<dqstr,unesc_dqstr>{CR} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<dqstr,unesc_dqstr>{LF} { BEGIN(regst); RETURN(BAD_TOKEN) }
<dqstr,unesc_dqstr><<EOF>> { RETURN(SCRIPT_CONTINUE) }
<dqstr>{UNICODE_ESCAPE_SEQUENCE} |
<dqstr>{HEX_ESCAPE_SEQUENCE} { escaped_unicode_utf_8(); }
<sqstr,unesc_sqstr>\\{CR}{LF} { /* skip */ }
<sqstr,unesc_sqstr>\\{LF} { /* skip */ }
<sqstr,unesc_sqstr>\\{CR} { /* skip */ }
-<sqstr,unesc_sqstr>{LINE_TERMINATORS} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<sqstr,unesc_sqstr>{CR} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<sqstr,unesc_sqstr>{LF} { BEGIN(regst); RETURN(BAD_TOKEN) }
<sqstr,unesc_sqstr><<EOF>> { RETURN(SCRIPT_CONTINUE) }
<sqstr>{UNICODE_ESCAPE_SEQUENCE} |
<sqstr>{HEX_ESCAPE_SEQUENCE} { escaped_unicode_utf_8(); }
<regst>{LITERAL_REGEX_START} { EXEC(literal_regex_start()) }
<regex>{LITERAL_REGEX_END} { EXEC(literal_regex_end()) }
<regex>{HTML_TAG_SCRIPT_CLOSE} { BEGIN(regst); RETURN(CLOSING_TAG) }
-<regex>\\{LF} |
-<regex>\\{CR} |
-<regex>{LINE_TERMINATORS} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<regex>\\{CR} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<regex>\\{LF} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<regex>{CR} { BEGIN(regst); RETURN(BAD_TOKEN) }
+<regex>{LF} { BEGIN(regst); RETURN(BAD_TOKEN) }
<regex>{LITERAL_REGEX_G_OPEN} { EXEC(literal_regex_g_open()) }
<regex>{LITERAL_REGEX_G_CLOSE} { EXEC(literal_regex_g_close()) }
<regex>{UNICODE_ESCAPE_SEQUENCE} |
"var invalid_str = 'abc\u2028 def' ;\n";
static const char syntax_cases_expected15[] =
- "var invalid_str='abc";
+ "var invalid_str='abc\u2028 def';";
static const char syntax_cases_buf16[] =
"var invalid_str = \"abc\n def\"";
"var invalid_str = 'abc\u2029 def' ;\n\r";
static const char syntax_cases_expected21[] =
- "var invalid_str='abc";
+ "var invalid_str='abc\u2029 def';";
static const char syntax_cases_buf22[] =
"tag`template\n \\\\\\${ } \\\\${ a + ` template ${ 1 + c }` }`";
"return /regex0/.var_0000+/regex1/.var_0001;"
"return /regex2/.var_0002*/regex3/.var_0003;";
+static const char syntax_cases_buf26[] =
+ "var invalid_re = /abc \n def/ ;";
+
+static const char syntax_cases_expected26[] =
+ "var invalid_re=/abc ";
+
TEST_CASE("syntax cases", "[JSNormalizer]")
{
SECTION("variables")
NORMALIZE(syntax_cases_buf14);
VALIDATE(syntax_cases_buf14, syntax_cases_expected14);
}
+ SECTION("LS within literal")
+ {
+ NORMALIZE(syntax_cases_buf15);
+ VALIDATE(syntax_cases_buf15, syntax_cases_expected15);
+ }
+ SECTION("PS within literal")
+ {
+ NORMALIZE(syntax_cases_buf21);
+ VALIDATE(syntax_cases_buf21, syntax_cases_expected21);
+ }
SECTION("template literals")
{
NORMALIZE(syntax_cases_buf22);
TEST_CASE("bad tokens", "[JSNormalizer]")
{
- SECTION("LS chars within literal")
- {
- NORMALIZE(syntax_cases_buf15);
- VALIDATE_FAIL(syntax_cases_buf15, syntax_cases_expected15, JSTokenizer::BAD_TOKEN, 25);
- }
- SECTION("PS chars within literal")
- {
- NORMALIZE(syntax_cases_buf21);
- VALIDATE_FAIL(syntax_cases_buf21, syntax_cases_expected21, JSTokenizer::BAD_TOKEN, 25);
- }
SECTION("explicit LF within literal")
{
NORMALIZE(syntax_cases_buf16);
NORMALIZE(syntax_cases_buf20);
VALIDATE_FAIL(syntax_cases_buf20, syntax_cases_expected20, JSTokenizer::BAD_TOKEN, 23);
}
+ SECTION("explicit LF within regex literal")
+ {
+ NORMALIZE(syntax_cases_buf26);
+ VALIDATE_FAIL(syntax_cases_buf26, syntax_cases_expected26, JSTokenizer::BAD_TOKEN, 23);
+ }
}
TEST_CASE("braces overflow", "[JSNormalizer]")