nxt_int_t
njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end)
{
- nxt_int_t ret;
+ nxt_int_t ret;
njs_lexer_t *lexer;
njs_parser_t *parser, *prev;
- njs_generator_t *generator;
+ njs_generator_t generator;
- parser = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_parser_t));
- if (nxt_slow_path(parser == NULL)) {
+ if (vm->parser != NULL && !vm->options.accumulative) {
return NJS_ERROR;
}
- if (vm->parser != NULL && !vm->options.accumulative) {
+ parser = nxt_mp_zalloc(vm->mem_pool, sizeof(njs_parser_t));
+ if (nxt_slow_path(parser == NULL)) {
return NJS_ERROR;
}
*/
vm->code = NULL;
- generator = nxt_mp_align(vm->mem_pool, sizeof(njs_value_t),
- sizeof(njs_generator_t));
-
- if (nxt_slow_path(generator == NULL)) {
- goto fail;
- }
-
- nxt_memzero(generator, sizeof(njs_generator_t));
+ nxt_memzero(&generator, sizeof(njs_generator_t));
- ret = njs_generate_scope(vm, generator, parser->scope);
+ ret = njs_generate_scope(vm, &generator, parser->scope);
if (nxt_slow_path(ret != NXT_OK)) {
goto fail;
}
- vm->current = generator->code_start;
-
- vm->global_scope = generator->local_scope;
- vm->scope_size = generator->scope_size;
+ vm->current = generator.code_start;
+ vm->global_scope = generator.local_scope;
+ vm->scope_size = generator.scope_size;
vm->variables_hash = parser->scope->variables;
size_t size;
nxt_int_t ret;
nxt_array_t *closure;
- njs_generator_t *generator;
-
- generator = nxt_mp_align(vm->mem_pool, sizeof(njs_value_t),
- sizeof(njs_generator_t));
- if (nxt_slow_path(generator == NULL)) {
- return NXT_ERROR;
- }
-
- nxt_memzero(generator, sizeof(njs_generator_t));
+ njs_generator_t generator;
node = node->right;
- ret = njs_generate_scope(vm, generator, node->scope);
+ nxt_memzero(&generator, sizeof(njs_generator_t));
+
+ ret = njs_generate_scope(vm, &generator, node->scope);
if (nxt_fast_path(ret == NXT_OK)) {
size = 0;
lambda->closure_size = size;
lambda->nesting = node->scope->nesting;
- lambda->arguments_object = generator->arguments_object;
-
- lambda->local_size = generator->scope_size;
- lambda->local_scope = generator->local_scope;
+ lambda->arguments_object = generator.arguments_object;
- lambda->start = generator->code_start;
+ lambda->start = generator.code_start;
+ lambda->local_size = generator.scope_size;
+ lambda->local_scope = generator.local_scope;
}
- nxt_mp_free(vm->mem_pool, generator);
-
return ret;
}