njs_parser_node_t *node);
-#define njs_generate_code(generator, type, _code, _operation, nargs, _retval) \
+#define njs_generate_code(generator, type, _code, _op, nargs) \
do { \
_code = (type *) njs_generate_reserve(vm, generator, sizeof(type)); \
if (nxt_slow_path(_code == NULL)) { \
\
generator->code_end += sizeof(type); \
\
- _code->code.operation = _operation; \
+ _code->code.operation = _op; \
_code->code.operands = 3 - nargs; \
- _code->code.retval = _retval; \
} while (0)
#define njs_generate_code_jump(generator, _code, _offset) \
do { \
njs_generate_code(generator, njs_vmcode_jump_t, _code, \
- NJS_VMCODE_JUMP, 0, 0); \
+ NJS_VMCODE_JUMP, 0); \
_code->offset = _offset; \
} while (0)
#define njs_generate_code_move(generator, _code, _dst, _src) \
do { \
njs_generate_code(generator, njs_vmcode_move_t, _code, \
- NJS_VMCODE_MOVE, 2, 1); \
+ NJS_VMCODE_MOVE, 2); \
_code->dst = _dst; \
_code->src = _src; \
} while (0)
}
njs_generate_code(generator, njs_vmcode_object_copy_t, copy,
- NJS_VMCODE_OBJECT_COPY, 2, 1);
+ NJS_VMCODE_OBJECT_COPY, 2);
copy->retval = node->index;
copy->object = var->index;
}
njs_generate_code(generator, njs_vmcode_object_copy_t, copy,
- NJS_VMCODE_OBJECT_COPY, 2, 1);
+ NJS_VMCODE_OBJECT_COPY, 2);
copy->retval = node->index;
copy->object = index;
}
njs_generate_code(generator, njs_vmcode_cond_jump_t, cond_jump,
- NJS_VMCODE_IF_FALSE_JUMP, 2, 0);
+ NJS_VMCODE_IF_FALSE_JUMP, 2);
cond_jump->cond = node->left->index;
ret = njs_generate_node_index_release(vm, generator, node->left);
}
njs_generate_code(generator, njs_vmcode_cond_jump_t, cond_jump,
- NJS_VMCODE_IF_FALSE_JUMP, 2, 0);
+ NJS_VMCODE_IF_FALSE_JUMP, 2);
cond_jump_offset = njs_code_offset(generator, cond_jump);
cond_jump->cond = node->left->index;
}
njs_generate_code(generator, njs_vmcode_equal_jump_t, equal,
- NJS_VMCODE_IF_EQUAL_JUMP, 3, 0);
+ NJS_VMCODE_IF_EQUAL_JUMP, 3);
equal->offset = offsetof(njs_vmcode_equal_jump_t, offset);
equal->value1 = index;
equal->value2 = node->left->index;
}
njs_generate_code(generator, njs_vmcode_cond_jump_t, cond_jump,
- NJS_VMCODE_IF_TRUE_JUMP, 2, 0);
+ NJS_VMCODE_IF_TRUE_JUMP, 2);
cond_jump->offset = loop_offset - njs_code_offset(generator, cond_jump);
cond_jump->cond = condition->index;
}
njs_generate_code(generator, njs_vmcode_cond_jump_t, cond_jump,
- NJS_VMCODE_IF_TRUE_JUMP, 2, 0);
+ NJS_VMCODE_IF_TRUE_JUMP, 2);
cond_jump->offset = loop_offset - njs_code_offset(generator, cond_jump);
cond_jump->cond = condition->index;
}
njs_generate_code(generator, njs_vmcode_cond_jump_t, cond_jump,
- NJS_VMCODE_IF_TRUE_JUMP, 2, 0);
+ NJS_VMCODE_IF_TRUE_JUMP, 2);
cond_jump->offset = loop_offset - njs_code_offset(generator, cond_jump);
cond_jump->cond = condition->index;
}
njs_generate_code(generator, njs_vmcode_prop_foreach_t, prop_foreach,
- NJS_VMCODE_PROPERTY_FOREACH, 2, 1);
+ NJS_VMCODE_PROPERTY_FOREACH, 2);
prop_offset = njs_code_offset(generator, prop_foreach);
prop_foreach->object = foreach->right->index;
}
njs_generate_code(generator, njs_vmcode_prop_next_t, prop_next,
- NJS_VMCODE_PROPERTY_NEXT, 3, 0);
+ NJS_VMCODE_PROPERTY_NEXT, 3);
prop_offset = njs_code_offset(generator, prop_next);
prop_next->retval = foreach->left->index;
prop_next->object = foreach->right->index;
if (nxt_fast_path(ret == NXT_OK)) {
njs_generate_code(generator, njs_vmcode_stop_t, stop,
- NJS_VMCODE_STOP, 1, 0);
+ NJS_VMCODE_STOP, 1);
index = NJS_INDEX_NONE;
node = node->right;
if (lvalue->token == NJS_TOKEN_PROPERTY_INIT) {
njs_generate_code(generator, njs_vmcode_prop_set_t, prop_set,
- NJS_VMCODE_PROPERTY_INIT, 3, 0);
+ NJS_VMCODE_PROPERTY_INIT, 3);
} else {
njs_generate_code(generator, njs_vmcode_prop_set_t, prop_set,
- NJS_VMCODE_PROPERTY_SET, 3, 0);
+ NJS_VMCODE_PROPERTY_SET, 3);
}
prop_set->value = expr->index;
/* Preserve variable value if it may be changed by expression. */
njs_generate_code(generator, njs_vmcode_move_t, move,
- NJS_VMCODE_MOVE, 2, 1);
+ NJS_VMCODE_MOVE, 2);
move->src = lvalue->index;
index = njs_generate_temp_index_get(vm, generator, expr);
}
njs_generate_code(generator, njs_vmcode_3addr_t, code,
- node->u.operation, 3, 1);
+ node->u.operation, 3);
code->dst = lvalue->index;
code->src1 = index;
code->src2 = expr->index;
}
njs_generate_code(generator, njs_vmcode_prop_get_t, prop_get,
- NJS_VMCODE_PROPERTY_GET, 3, 1);
+ NJS_VMCODE_PROPERTY_GET, 3);
prop_get->value = index;
prop_get->object = object->index;
prop_get->property = property->index;
}
njs_generate_code(generator, njs_vmcode_3addr_t, code,
- node->u.operation, 3, 1);
+ node->u.operation, 3);
code->dst = node->index;
code->src1 = node->index;
code->src2 = expr->index;
njs_generate_code(generator, njs_vmcode_prop_set_t, prop_set,
- NJS_VMCODE_PROPERTY_SET, 3, 0);
+ NJS_VMCODE_PROPERTY_SET, 3);
prop_set->value = node->index;
prop_set->object = object->index;
prop_set->property = property->index;
}
njs_generate_code(generator, njs_vmcode_object_t, object,
- NJS_VMCODE_OBJECT, 1, 1);
+ NJS_VMCODE_OBJECT, 1);
object->retval = node->index;
/* Initialize object. */
}
njs_generate_code(generator, njs_vmcode_array_t, array,
- NJS_VMCODE_ARRAY, 1, 1);
+ NJS_VMCODE_ARRAY, 1);
array->ctor = node->ctor;
array->retval = node->index;
array->length = node->u.length;
}
njs_generate_code(generator, njs_vmcode_function_t, function,
- NJS_VMCODE_FUNCTION, 1, 1);
+ NJS_VMCODE_FUNCTION, 1);
function->lambda = lambda;
node->index = njs_generate_object_dest_index(vm, generator, node);
}
njs_generate_code(generator, njs_vmcode_regexp_t, regexp,
- NJS_VMCODE_REGEXP, 1, 1);
+ NJS_VMCODE_REGEXP, 1);
regexp->retval = node->index;
regexp->pattern = node->u.value.data.u.data;
}
njs_generate_code(generator, njs_vmcode_template_literal_t, code,
- NJS_VMCODE_TEMPLATE_LITERAL, 1, 1);
+ NJS_VMCODE_TEMPLATE_LITERAL, 1);
code->retval = node->left->index;
node->index = node->left->index;
}
njs_generate_code(generator, njs_vmcode_test_jump_t, test_jump,
- node->u.operation, 2, 1);
+ node->u.operation, 2);
jump_offset = njs_code_offset(generator, test_jump);
test_jump->value = node->left->index;
if (nxt_slow_path(njs_parser_has_side_effect(right))) {
njs_generate_code(generator, njs_vmcode_move_t, move,
- NJS_VMCODE_MOVE, 2, 1);
+ NJS_VMCODE_MOVE, 2);
move->src = left->index;
index = njs_generate_node_temp_index_get(vm, generator, left);
}
njs_generate_code(generator, njs_vmcode_3addr_t, code,
- node->u.operation, 3, 1);
+ node->u.operation, 3);
if (!swap) {
code->src1 = left->index;
}
njs_generate_code(generator, njs_vmcode_2addr_t, code,
- node->u.operation, 2, 1);
+ node->u.operation, 2);
code->src = node->left->index;
node->index = njs_generate_dest_index(vm, generator, node);
}
njs_generate_code(generator, njs_vmcode_2addr_t, code,
- node->u.operation, 2, 1);
+ node->u.operation, 2);
code->src = node->left->index;
node->index = njs_generate_dest_index(vm, generator, node);
node->index = index;
njs_generate_code(generator, njs_vmcode_3addr_t, code,
- node->u.operation, 3, 1);
+ node->u.operation, 3);
code->dst = index;
code->src1 = lvalue->index;
code->src2 = lvalue->index;
}
njs_generate_code(generator, njs_vmcode_prop_get_t, prop_get,
- NJS_VMCODE_PROPERTY_GET, 3, 1);
+ NJS_VMCODE_PROPERTY_GET, 3);
prop_get->value = index;
prop_get->object = lvalue->left->index;
prop_get->property = lvalue->right->index;
njs_generate_code(generator, njs_vmcode_3addr_t, code,
- node->u.operation, 3, 1);
+ node->u.operation, 3);
code->dst = dest_index;
code->src1 = index;
code->src2 = index;
njs_generate_code(generator, njs_vmcode_prop_set_t, prop_set,
- NJS_VMCODE_PROPERTY_SET, 3, 0);
+ NJS_VMCODE_PROPERTY_SET, 3);
prop_set->value = index;
prop_set->object = lvalue->left->index;
prop_set->property = lvalue->right->index;
if (var->this_object) {
njs_generate_code(generator, njs_vmcode_this_t, this,
- NJS_VMCODE_THIS, 1, 0);
+ NJS_VMCODE_THIS, 1);
this->dst = var->index;
}
if (var->arguments_object) {
njs_generate_code(generator, njs_vmcode_arguments_t, arguments,
- NJS_VMCODE_ARGUMENTS, 1, 0);
+ NJS_VMCODE_ARGUMENTS, 1);
arguments->dst = var->index;
}
}
if (nxt_fast_path(immediate == NULL)) {
njs_generate_code(generator, njs_vmcode_return_t, code,
- NJS_VMCODE_RETURN, 1, 0);
+ NJS_VMCODE_RETURN, 1);
code->retval = index;
node->index = index;
}
njs_generate_code(generator, njs_vmcode_try_return_t, try_return,
- NJS_VMCODE_TRY_RETURN, 2, 1);
+ NJS_VMCODE_TRY_RETURN, 2);
try_return->retval = index;
try_return->save = top->index;
try_return->offset = offsetof(njs_vmcode_try_return_t, offset);
}
njs_generate_code(generator, njs_vmcode_function_frame_t, func,
- NJS_VMCODE_FUNCTION_FRAME, 2, 0);
+ NJS_VMCODE_FUNCTION_FRAME, 2);
func_offset = njs_code_offset(generator, func);
func->ctor = node->ctor;
func->name = name->index;
}
njs_generate_code(generator, njs_vmcode_method_frame_t, method,
- NJS_VMCODE_METHOD_FRAME, 3, 0);
+ NJS_VMCODE_METHOD_FRAME, 3);
method_offset = njs_code_offset(generator, method);
method->ctor = node->ctor;
method->object = prop->left->index;
node->index = retval;
njs_generate_code(generator, njs_vmcode_function_call_t, call,
- NJS_VMCODE_FUNCTION_CALL, 1, 0);
+ NJS_VMCODE_FUNCTION_CALL, 1);
call->retval = retval;
return nargs;
#define njs_generate_code_catch(generator, _code, _exception) \
do { \
njs_generate_code(generator, njs_vmcode_catch_t, _code, \
- NJS_VMCODE_CATCH, 2, 0); \
+ NJS_VMCODE_CATCH, 2); \
_code->offset = sizeof(njs_vmcode_catch_t); \
_code->exception = _exception; \
} while (0)
#define njs_generate_code_finally(generator, _code, _retval, _exit) \
do { \
njs_generate_code(generator, njs_vmcode_finally_t, _code, \
- NJS_VMCODE_FINALLY, 2, 0); \
+ NJS_VMCODE_FINALLY, 2); \
_code->retval = _retval; \
_code->exit_value = _exit; \
_code->continue_offset = offsetof(njs_vmcode_finally_t, \
njs_vmcode_try_trampoline_t *try_break, *try_continue;
njs_generate_code(generator, njs_vmcode_try_start_t, try_start,
- NJS_VMCODE_TRY_START, 2, 0);
+ NJS_VMCODE_TRY_START, 2);
try_offset = njs_code_offset(generator, try_start);
exception_index = njs_generate_temp_index_get(vm, generator, node);
try_cont_label = undef_label;
njs_generate_code(generator, njs_vmcode_try_end_t, try_end,
- NJS_VMCODE_TRY_END, 0, 0);
+ NJS_VMCODE_TRY_END, 0);
try_end_offset = njs_code_offset(generator, try_end);
if (try_block->exit != NULL) {
njs_generate_patch_block(vm, generator, try_block->exit);
njs_generate_code(generator, njs_vmcode_try_trampoline_t, try_break,
- NJS_VMCODE_TRY_BREAK, 2, 0);
+ NJS_VMCODE_TRY_BREAK, 2);
try_break->exit_value = exit_index;
try_break->offset = -sizeof(njs_vmcode_try_end_t);
njs_generate_patch_block(vm, generator, try_block->continuation);
njs_generate_code(generator, njs_vmcode_try_trampoline_t, try_continue,
- NJS_VMCODE_TRY_CONTINUE, 2, 0);
+ NJS_VMCODE_TRY_CONTINUE, 2);
try_continue->exit_value = exit_index;
try_continue->offset = -sizeof(njs_vmcode_try_end_t);
}
njs_generate_code(generator, njs_vmcode_try_end_t, catch_end,
- NJS_VMCODE_TRY_END, 0, 0);
+ NJS_VMCODE_TRY_END, 0);
catch_end_offset = njs_code_offset(generator, catch_end);
if (catch_block->exit != NULL) {
njs_generate_patch_block(vm, generator, catch_block->exit);
njs_generate_code(generator, njs_vmcode_try_trampoline_t,
- try_break, NJS_VMCODE_TRY_BREAK, 2, 0);
+ try_break, NJS_VMCODE_TRY_BREAK, 2);
try_break->exit_value = exit_index;
catch_block->continuation);
njs_generate_code(generator, njs_vmcode_try_trampoline_t,
- try_continue, NJS_VMCODE_TRY_CONTINUE, 2, 0);
+ try_continue, NJS_VMCODE_TRY_CONTINUE, 2);
try_continue->exit_value = exit_index;
if (nxt_fast_path(ret == NXT_OK)) {
njs_generate_code(generator, njs_vmcode_throw_t, throw,
- NJS_VMCODE_THROW, 1, 0);
+ NJS_VMCODE_THROW, 1);
node->index = node->right->index;
throw->retval = node->index;
module = (njs_module_t *) expr->index;
njs_generate_code(generator, njs_vmcode_object_copy_t, copy,
- NJS_VMCODE_OBJECT_COPY, 2, 1);
+ NJS_VMCODE_OBJECT_COPY, 2);
copy->retval = index;
copy->object = module->index;
}
njs_generate_code(generator, njs_vmcode_return_t, code,
- NJS_VMCODE_RETURN, 1, 0);
+ NJS_VMCODE_RETURN, 1);
code->retval = obj->index;
node->index = obj->index;
}
njs_generate_code(generator, njs_vmcode_reference_error_t, ref_err,
- NJS_VMCODE_REFERENCE_ERROR, 0, 0);
+ NJS_VMCODE_REFERENCE_ERROR, 0);
ref_err->token_line = node->token_line;