njs_token_t token;
njs_parser_node_t *node;
- token = njs_parser_token(parser);
- if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
- return token;
- }
-
node = njs_parser_node_alloc(vm);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
node->token = NJS_TOKEN_THROW;
- token = njs_parser_expression(vm, parser, token);
+ token = njs_lexer_token(parser->lexer);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
- node->right = parser->node;
- parser->node = node;
-
- parser->code_size += sizeof(njs_vmcode_throw_t);
-
switch (token) {
- case NJS_TOKEN_SEMICOLON:
case NJS_TOKEN_LINE_END:
- return njs_parser_token(parser);
-
- case NJS_TOKEN_CLOSE_BRACE:
- case NJS_TOKEN_END:
- return token;
+ njs_parser_syntax_error(vm, parser, "Illegal newline after throw");
+ return NJS_TOKEN_ILLEGAL;
default:
- if (parser->lexer->prev_token == NJS_TOKEN_LINE_END) {
+ token = njs_parser_expression(vm, parser, token);
+ if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
- return NJS_TOKEN_ILLEGAL;
+ node->right = parser->node;
+ parser->node = node;
+
+ parser->code_size += sizeof(njs_vmcode_throw_t);
+
+ return token;
}
}
" catch(x) { a += x } a"),
nxt_string("8") },
+ { nxt_string("throw\nnull"),
+ nxt_string("SyntaxError: Illegal newline after throw in 2") },
+
{ nxt_string("var o = { valueOf: function() { return '3' } }; --o"),
nxt_string("2") },