return ret;
}
- njs_memzero(&generator, sizeof(njs_generator_t));
- generator.runtime = 1;
+ ret = njs_generator_init(&generator, 0, 1);
+ if (njs_slow_path(ret != NJS_OK)) {
+ njs_internal_error(vm, "njs_generator_init() failed");
+ return NJS_ERROR;
+ }
code = njs_generate_scope(vm, &generator, scope, &njs_entry_anonymous);
if (njs_slow_path(code == NULL)) {
static const njs_str_t undef_label = { 0xffffffff, (u_char *) "" };
+njs_int_t
+njs_generator_init(njs_generator_t *generator, njs_int_t depth,
+ njs_bool_t runtime)
+{
+ njs_memzero(generator, sizeof(njs_generator_t));
+
+ njs_queue_init(&generator->stack);
+
+ generator->depth = depth;
+ generator->runtime = runtime;
+
+ return NJS_OK;
+}
+
+
njs_inline void
njs_generator_next(njs_generator_t *generator, njs_generator_state_func_t state,
njs_parser_node_t *node)
njs_function_lambda_t *lambda, njs_parser_node_t *node,
const njs_str_t *name)
{
+ njs_int_t ret;
njs_arr_t *arr;
njs_bool_t module;
njs_uint_t depth;
return NJS_ERROR;
}
- njs_memzero(&generator, sizeof(njs_generator_t));
- generator.depth = depth;
- generator.runtime = prev->runtime;
+ ret = njs_generator_init(&generator, depth, prev->runtime);
+ if (njs_slow_path(ret != NJS_OK)) {
+ njs_internal_error(vm, "njs_generator_init() failed");
+ return NJS_ERROR;
+ }
node = node->right;
};
+njs_int_t njs_generator_init(njs_generator_t *generator, njs_int_t depth,
+ njs_bool_t runtime);
njs_vm_code_t *njs_generate_scope(njs_vm_t *vm, njs_generator_t *generator,
njs_parser_scope_t *scope, const njs_str_t *name);
uint32_t njs_lookup_line(njs_vm_code_t *code, uint32_t offset);
*start = lexer.start;
scope = parser.scope;
- njs_memzero(&generator, sizeof(njs_generator_t));
+ ret = njs_generator_init(&generator, 0, 0);
+ if (njs_slow_path(ret != NJS_OK)) {
+ njs_internal_error(vm, "njs_generator_init() failed");
+ return NJS_ERROR;
+ }
code = njs_generate_scope(vm, &generator, scope, &njs_entry_main);
if (njs_slow_path(code == NULL)) {