njs_function_frame_alloc(njs_vm_t *vm, size_t size)
{
size_t spare_size;
+ uint8_t first;
njs_native_frame_t *frame;
spare_size = vm->frame->free_size;
if (nxt_fast_path(size <= spare_size)) {
frame = (njs_native_frame_t *) vm->frame->free;
- frame->first = 0;
- frame->skip = 0;
+ first = 0;
} else {
spare_size = size + NJS_FRAME_SPARE_SIZE;
return NULL;
}
- frame->first = 1;
- frame->skip = 0;
+ first = 1;
}
+ memset(frame, 0, sizeof(njs_native_frame_t));
+
+ frame->first = first;
frame->free_size = spare_size - size;
frame->free = (u_char *) frame + size;
- frame->continuation = NULL;
- frame->trap_restart = NULL;
- frame->ctor = 0;
- frame->reentrant = 0;
- frame->trap_frame = 0;
- frame->trap_tries = 0;
- frame->trap_reference = 0;
-
- frame->exception.next = NULL;
- frame->exception.catch = NULL;
-
frame->previous = vm->frame;
vm->frame = frame;
size = NJS_GLOBAL_FRAME_SIZE + scope_size + NJS_FRAME_SPARE_SIZE;
size = nxt_align_size(size, NJS_FRAME_SPARE_SIZE);
- frame = nxt_mem_cache_zalign(nmcp, sizeof(njs_value_t), size);
+ frame = nxt_mem_cache_align(nmcp, sizeof(njs_value_t), size);
if (nxt_slow_path(frame == NULL)) {
goto fail;
}
- nvm->frame = &frame->native;
-
- frame->native.trap_restart = NULL;
- frame->native.continuation = NULL;
- frame->native.previous = NULL;
- frame->native.arguments = NULL;
- frame->native.first = 1;
- frame->native.skip = 0;
- frame->native.reentrant = 0;
- frame->native.trap_frame = 0;
- frame->native.trap_tries = 0;
+ memset(frame, 0, NJS_GLOBAL_FRAME_SIZE);
- frame->native.exception.next = NULL;
- frame->native.exception.catch = NULL;
-
- frame->prev_arguments = NULL;
- frame->local = NULL;
- frame->closure = NULL;
+ nvm->frame = &frame->native;
frame->native.free_size = size - (NJS_GLOBAL_FRAME_SIZE + scope_size);
values = (u_char *) frame + NJS_GLOBAL_FRAME_SIZE;
frame->native.free = values + scope_size;
+ frame->native.first = 1;
nvm->scopes[NJS_SCOPE_GLOBAL] = (njs_value_t *) values;
memcpy(values + NJS_INDEX_GLOBAL_OFFSET, vm->global_scope,