Previously, njs lexer decoded '/=' as an assignment token.
This closes #329 issue on Github.
/* RegularExpressionLiteral */
case NJS_TOKEN_DIVISION:
+ case NJS_TOKEN_DIVISION_ASSIGNMENT:
node = njs_parser_node_new(parser, NJS_TOKEN_REGEXP);
if (node == NULL) {
return NJS_ERROR;
value = &parser->node->u.value;
lexer = parser->lexer;
+ if (token->type == NJS_TOKEN_DIVISION_ASSIGNMENT) {
+ lexer->start--;
+ }
+
for (p = lexer->start; p < lexer->end; p++) {
switch (*p) {
{ njs_str("'abc'.replace(/f/, 'X')"),
njs_str("abc") },
+ { njs_str("'AB=C==='.replace(/=*$/, '')"),
+ njs_str("AB=C") },
+
{ njs_str("('a'.repeat(33) + 'bb').replace(/bb/, 'CC').slice(31)"),
njs_str("aaCC") },
{ njs_str("/]/"),
njs_str("/\\]/") },
+ { njs_str("/=/"),
+ njs_str("/=/") },
+
{ njs_str("/["),
njs_str("SyntaxError: Unterminated RegExp \"/[\" in 1") },