if (node == NULL) {
/* Empty string, just semicolons or variables declarations. */
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, 0);
if (nxt_slow_path(node == NULL)) {
return NXT_ERROR;
}
}
node->token = NJS_TOKEN_END;
- node->scope = parser->scope;
parser->scope->node = node;
if (parser->node != NULL) {
/* The statement is not empty block or just semicolon. */
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_STATEMENT;
node->left = last;
node->right = parser->node;
parser->node = node;
if (parser->node != NULL) {
/* The statement is not empty block or just semicolon. */
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_BLOCK);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_BLOCK;
node->left = parser->node;
node->right = NULL;
parser->node = node;
njs_function_t *function;
njs_parser_node_t *node;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_FUNCTION);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_FUNCTION;
node->token_line = parser->lexer->token_line;
token = njs_parser_token(parser);
njs_parser_node_t *node;
njs_function_lambda_t *lambda;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_FUNCTION_EXPRESSION);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_FUNCTION_EXPRESSION;
node->token_line = parser->lexer->token_line;
- node->scope = parser->scope;
parser->node = node;
token = njs_parser_token(parser);
* There is no function body or the last function body
* body statement is not "return" statement.
*/
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_STATEMENT;
node->left = parser->node;
- parser->node = node;
-
- node->right = njs_parser_node_alloc(vm);
+ node->right = njs_parser_node_new(vm, parser, NJS_TOKEN_RETURN);
if (nxt_slow_path(node->right == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->right->token = NJS_TOKEN_RETURN;
+ parser->node = node;
}
parent->right = parser->node;
- parser->node->scope = parser->scope;
parser->scope->node = parser->node;
parser->node = parent;
}
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_RETURN);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_RETURN;
parser->node = node;
token = njs_lexer_token(parser->lexer);
return NJS_TOKEN_ERROR;
}
- name = njs_parser_node_alloc(vm);
+ name = njs_parser_node_new(vm, parser, NJS_TOKEN_NAME);
if (nxt_slow_path(name == NULL)) {
return NJS_TOKEN_ERROR;
}
- name->token = NJS_TOKEN_NAME;
-
ret = njs_parser_variable_reference(vm, parser, name, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
expr = parser->node;
}
- assign = njs_parser_node_alloc(vm);
+ assign = njs_parser_node_new(vm, parser, NJS_TOKEN_VAR);
if (nxt_slow_path(assign == NULL)) {
return NJS_TOKEN_ERROR;
}
- assign->token = NJS_TOKEN_VAR;
assign->u.operation = njs_vmcode_move;
assign->left = name;
assign->right = expr;
- stmt = njs_parser_node_alloc(vm);
+ stmt = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
if (nxt_slow_path(stmt == NULL)) {
return NJS_TOKEN_ERROR;
}
- stmt->token = NJS_TOKEN_STATEMENT;
stmt->left = left;
stmt->right = assign;
parser->node = stmt;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_BRANCHING);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_BRANCHING;
node->left = stmt;
node->right = parser->node;
parser->node = node;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_IF);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_IF;
node->left = cond;
node->right = parser->node;
parser->node = node;
return token;
}
- swtch = njs_parser_node_alloc(vm);
+ swtch = njs_parser_node_new(vm, parser, NJS_TOKEN_SWITCH);
if (nxt_slow_path(swtch == NULL)) {
return NJS_TOKEN_ERROR;
}
- swtch->token = NJS_TOKEN_SWITCH;
- swtch->scope = parser->scope;
swtch->left = parser->node;
last = &swtch->right;
if (token == NJS_TOKEN_CASE || token == NJS_TOKEN_DEFAULT) {
do {
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, 0);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
node->left = parser->node;
- branch = njs_parser_node_alloc(vm);
+ branch = njs_parser_node_new(vm, parser, 0);
if (nxt_slow_path(branch == NULL)) {
return NJS_TOKEN_ERROR;
}
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_WHILE);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_WHILE;
node->left = parser->node;
node->right = cond;
parser->node = node;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_DO);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_DO;
node->left = stmt;
node->right = parser->node;
parser->node = node;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_FOR);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- cond = njs_parser_node_alloc(vm);
+ cond = njs_parser_node_new(vm, parser, 0);
if (nxt_slow_path(cond == NULL)) {
return NJS_TOKEN_ERROR;
}
- body = njs_parser_node_alloc(vm);
+ body = njs_parser_node_new(vm, parser, 0);
if (nxt_slow_path(body == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_FOR;
node->left = init;
node->right = cond;
return NJS_TOKEN_ERROR;
}
- name = njs_parser_node_alloc(vm);
+ name = njs_parser_node_new(vm, parser, NJS_TOKEN_NAME);
if (nxt_slow_path(name == NULL)) {
return NJS_TOKEN_ERROR;
}
- name->token = NJS_TOKEN_NAME;
-
ret = njs_parser_variable_reference(vm, parser, name, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
expr = parser->node;
}
- assign = njs_parser_node_alloc(vm);
+ assign = njs_parser_node_new(vm, parser, NJS_TOKEN_VAR);
if (nxt_slow_path(assign == NULL)) {
return NJS_TOKEN_ERROR;
}
- assign->token = NJS_TOKEN_VAR;
assign->u.operation = njs_vmcode_move;
assign->left = name;
assign->right = expr;
- stmt = njs_parser_node_alloc(vm);
+ stmt = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
if (nxt_slow_path(stmt == NULL)) {
return NJS_TOKEN_ERROR;
}
- stmt->token = NJS_TOKEN_STATEMENT;
stmt->left = left;
stmt->right = assign;
parser->node = stmt;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_IN);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_IN;
node->left = name;
node->right = parser->node;
return token;
}
- foreach = njs_parser_node_alloc(vm);
+ foreach = njs_parser_node_new(vm, parser, NJS_TOKEN_FOR_IN);
if (nxt_slow_path(foreach == NULL)) {
return NJS_TOKEN_ERROR;
}
- foreach->token = NJS_TOKEN_FOR_IN;
foreach->left = node;
foreach->right = parser->node;
return NJS_TOKEN_ILLEGAL;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_FOR_IN);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_FOR_IN;
node->left = parser->node;
token = njs_parser_match(vm, parser, token, NJS_TOKEN_CLOSE_PARENTHESIS);
njs_token_t token;
njs_parser_node_t *node;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_CONTINUE);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_CONTINUE;
node->token_line = parser->lexer->token_line;
parser->node = node;
njs_token_t token;
njs_parser_node_t *node;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_BREAK);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_BREAK;
node->token_line = parser->lexer->token_line;
parser->node = node;
return token;
}
- try = njs_parser_node_alloc(vm);
+ try = njs_parser_node_new(vm, parser, NJS_TOKEN_TRY);
if (nxt_slow_path(try == NULL)) {
return NJS_TOKEN_ERROR;
}
- try->token = NJS_TOKEN_TRY;
- try->scope = parser->scope;
try->left = parser->node;
if (token == NJS_TOKEN_CATCH) {
return NJS_TOKEN_ILLEGAL;
}
- catch = njs_parser_node_alloc(vm);
+ catch = njs_parser_node_new(vm, parser, NJS_TOKEN_CATCH);
if (nxt_slow_path(catch == NULL)) {
return NJS_TOKEN_ERROR;
}
- catch->token = NJS_TOKEN_CATCH;
try->right = catch;
/*
return NJS_TOKEN_ERROR;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_NAME);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_NAME;
-
ret = njs_parser_variable_reference(vm, parser, node, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_FINALLY);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_FINALLY;
node->right = parser->node;
if (try->right != NULL) {
njs_token_t token;
njs_parser_node_t *node;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_THROW);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_THROW;
-
token = njs_lexer_token(parser->lexer);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
return njs_parser_function_expression(vm, parser);
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
- node->scope = parser->scope;
-
switch (token) {
case NJS_TOKEN_NAME:
case NJS_TOKEN_OPEN_BRACE:
node->token = NJS_TOKEN_OBJECT;
- node->scope = parser->scope;
nxt_thread_log_debug("JS: OBJECT");
case NJS_TOKEN_OPEN_BRACKET:
node->token = NJS_TOKEN_ARRAY;
- node->scope = parser->scope;
nxt_thread_log_debug("JS: ARRAY");
nxt_thread_log_debug("REGEX: '%V'", &parser->lexer->text);
node->token = NJS_TOKEN_REGEXP;
- node->scope = parser->scope;
break;
return NJS_TOKEN_ILLEGAL;
}
- node->token = NJS_TOKEN_ARGUMENTS;
-
break;
case NJS_TOKEN_OBJECT_CONSTRUCTOR:
break;
}
- object = njs_parser_node_alloc(vm);
+ object = njs_parser_node_new(vm, parser, NJS_TOKEN_OBJECT_VALUE);
if (nxt_slow_path(object == NULL)) {
return NJS_TOKEN_ERROR;
}
- object->token = NJS_TOKEN_OBJECT_VALUE;
object->u.object = obj;
- propref = njs_parser_node_alloc(vm);
+ propref = njs_parser_node_new(vm, parser, NJS_TOKEN_PROPERTY);
if (nxt_slow_path(propref == NULL)) {
return NJS_TOKEN_ERROR;
}
- propref->token = NJS_TOKEN_PROPERTY;
propref->left = object;
propref->right = parser->node;
return token;
}
- assign = njs_parser_node_alloc(vm);
+ assign = njs_parser_node_new(vm, parser, NJS_TOKEN_ASSIGNMENT);
if (nxt_slow_path(assign == NULL)) {
return NJS_TOKEN_ERROR;
}
- assign->token = NJS_TOKEN_ASSIGNMENT;
assign->u.operation = njs_vmcode_move;
assign->left = propref;
assign->right = parser->node;
- stmt = njs_parser_node_alloc(vm);
+ stmt = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
if (nxt_slow_path(stmt == NULL)) {
return NJS_TOKEN_ERROR;
}
- stmt->token = NJS_TOKEN_STATEMENT;
stmt->left = left;
stmt->right = assign;
continue;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_NUMBER);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_NUMBER;
node->u.value.data.u.number = index;
node->u.value.type = NJS_NUMBER;
node->u.value.data.truth = (index != 0);
index++;
- object = njs_parser_node_alloc(vm);
+ object = njs_parser_node_new(vm, parser, NJS_TOKEN_OBJECT_VALUE);
if (nxt_slow_path(object == NULL)) {
return NJS_TOKEN_ERROR;
}
- object->token = NJS_TOKEN_OBJECT_VALUE;
object->u.object = obj;
- propref = njs_parser_node_alloc(vm);
+ propref = njs_parser_node_new(vm, parser, NJS_TOKEN_PROPERTY);
if (nxt_slow_path(propref == NULL)) {
return NJS_TOKEN_ERROR;
}
- propref->token = NJS_TOKEN_PROPERTY;
propref->left = object;
propref->right = node;
return token;
}
- assign = njs_parser_node_alloc(vm);
+ assign = njs_parser_node_new(vm, parser, NJS_TOKEN_ASSIGNMENT);
if (nxt_slow_path(assign == NULL)) {
return NJS_TOKEN_ERROR;
}
- assign->token = NJS_TOKEN_ASSIGNMENT;
assign->u.operation = njs_vmcode_move;
assign->left = propref;
assign->right = parser->node;
- stmt = njs_parser_node_alloc(vm);
+ stmt = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT);
if (nxt_slow_path(stmt == NULL)) {
return NJS_TOKEN_ERROR;
}
- stmt->token = NJS_TOKEN_STATEMENT;
stmt->left = left;
stmt->right = assign;
return NJS_TOKEN_ILLEGAL;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = operation;
- node->scope = parser->scope;
node->left = parser->node;
token = njs_parser_token(parser);
return NJS_TOKEN_ILLEGAL;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = operation;
- node->scope = parser->scope;
node->left = parser->node;
token = njs_parser_token(parser);
return token;
}
- cond = njs_parser_node_alloc(vm);
+ cond = njs_parser_node_new(vm, parser, NJS_TOKEN_CONDITIONAL);
if (nxt_slow_path(cond == NULL)) {
return NJS_TOKEN_ERROR;
}
- cond->token = NJS_TOKEN_CONDITIONAL;
- cond->scope = parser->scope;
cond->left = parser->node;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_BRANCHING);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
cond->right = node;
- node->token = NJS_TOKEN_BRANCHING;
token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
found:
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = op->operation;
- node->scope = parser->scope;
node->left = parser->node;
node->left->dest = node;
if (token == NJS_TOKEN_EXPONENTIATION) {
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = njs_vmcode_exponentiation;
- node->scope = parser->scope;
node->left = parser->node;
node->left->dest = node;
node->u.reference.type = NJS_TYPEOF;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = operation;
- node->scope = parser->scope;
node->left = parser->node;
node->left->dest = node;
parser->node = node;
return NJS_TOKEN_ILLEGAL;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = operation;
- node->scope = parser->scope;
node->left = parser->node;
parser->node = node;
return NJS_TOKEN_ILLEGAL;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, token);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = token;
node->u.operation = operation;
- node->scope = parser->scope;
node->left = parser->node;
parser->node = node;
break;
case NJS_TOKEN_PROPERTY:
- func = njs_parser_node_alloc(vm);
+ func = njs_parser_node_new(vm, parser, NJS_TOKEN_METHOD_CALL);
if (nxt_slow_path(func == NULL)) {
return NJS_TOKEN_ERROR;
}
- func->token = NJS_TOKEN_METHOD_CALL;
- func->scope = parser->scope;
func->left = node;
break;
* NJS_TOKEN_REGEXP_CONSTRUCTOR,
* NJS_TOKEN_EVAL.
*/
- func = njs_parser_node_alloc(vm);
+ func = njs_parser_node_new(vm, parser, NJS_TOKEN_FUNCTION_CALL);
if (nxt_slow_path(func == NULL)) {
return NJS_TOKEN_ERROR;
}
- func->token = NJS_TOKEN_FUNCTION_CALL;
- func->scope = parser->scope;
func->left = node;
break;
break;
case NJS_TOKEN_PROPERTY:
- func = njs_parser_node_alloc(vm);
+ func = njs_parser_node_new(vm, parser, NJS_TOKEN_METHOD_CALL);
if (nxt_slow_path(func == NULL)) {
return NJS_TOKEN_ERROR;
}
- func->token = NJS_TOKEN_METHOD_CALL;
- func->scope = parser->scope;
func->left = node;
break;
* NJS_TOKEN_REGEXP_CONSTRUCTOR,
* NJS_TOKEN_EVAL.
*/
- func = njs_parser_node_alloc(vm);
+ func = njs_parser_node_new(vm, parser, NJS_TOKEN_FUNCTION_CALL);
if (nxt_slow_path(func == NULL)) {
return NJS_TOKEN_ERROR;
}
- func->token = NJS_TOKEN_FUNCTION_CALL;
- func->scope = parser->scope;
func->left = node;
break;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_PROPERTY);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_PROPERTY;
node->u.operation = njs_vmcode_property_get;
- node->scope = parser->scope;
node->left = parser->node;
if (token == NJS_TOKEN_DOT) {
nxt_int_t ret;
njs_parser_node_t *node;
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_STRING);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_STRING;
-
ret = njs_parser_string_create(vm, &node->u.value);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
return token;
}
- node = njs_parser_node_alloc(vm);
+ node = njs_parser_node_new(vm, parser, NJS_TOKEN_ARGUMENT);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
}
- node->token = NJS_TOKEN_ARGUMENT;
node->index = index;
index += sizeof(njs_value_t);