nxt_memzero(&generator, sizeof(njs_generator_t));
- ret = njs_generate_scope(vm, &generator, scope);
+ ret = njs_generate_scope(vm, &generator, scope, &njs_entry_main);
if (nxt_slow_path(ret != NXT_OK)) {
goto fail;
}
n = vm->code->items;
while (n != 0) {
+ printf("%.*s:%.*s\n", (int) code->file.length, code->file.start,
+ (int) code->name.length, code->name.start);
njs_disassemble(code->start, code->end);
code++;
n--;
static nxt_int_t njs_generate_function_declaration(njs_vm_t *vm,
njs_generator_t *generator, njs_parser_node_t *node);
static nxt_int_t njs_generate_function_scope(njs_vm_t *vm,
- njs_function_lambda_t *lambda, njs_parser_node_t *node);
+ njs_function_lambda_t *lambda, njs_parser_node_t *node,
+ const nxt_str_t *name);
static nxt_int_t njs_generate_argument_closures(njs_vm_t *vm,
njs_generator_t *generator, njs_parser_node_t *node);
static nxt_int_t njs_generate_return_statement(njs_vm_t *vm,
lambda = node->u.value.data.u.lambda;
- ret = njs_generate_function_scope(vm, lambda, node);
+ ret = njs_generate_function_scope(vm, lambda, node, &njs_entry_anonymous);
if (nxt_slow_path(ret != NXT_OK)) {
return ret;
lambda = var->value.data.u.function->u.lambda;
- ret = njs_generate_function_scope(vm, lambda, node);
+ ret = njs_generate_function_scope(vm, lambda, node,
+ &node->u.reference.name);
if (nxt_slow_path(ret != NXT_OK)) {
return ret;
}
static nxt_int_t
njs_generate_function_scope(njs_vm_t *vm, njs_function_lambda_t *lambda,
- njs_parser_node_t *node)
+ njs_parser_node_t *node, const nxt_str_t *name)
{
size_t size;
nxt_int_t ret;
nxt_memzero(&generator, sizeof(njs_generator_t));
- ret = njs_generate_scope(vm, &generator, node->scope);
+ ret = njs_generate_scope(vm, &generator, node->scope, name);
if (nxt_fast_path(ret == NXT_OK)) {
size = 0;
nxt_int_t
njs_generate_scope(njs_vm_t *vm, njs_generator_t *generator,
- njs_parser_scope_t *scope)
+ njs_parser_scope_t *scope, const nxt_str_t *name)
{
u_char *p;
size_t size;
code->start = generator->code_start;
code->end = generator->code_end;
+ code->file = scope->file;
+ code->name = *name;
return NXT_OK;
}
nxt_int_t njs_generate_scope(njs_vm_t *vm, njs_generator_t *generator,
- njs_parser_scope_t *scope);
+ njs_parser_scope_t *scope, const nxt_str_t *name);
#endif /* _NJS_GENERATOR_H_INCLUDED_ */
const njs_value_t njs_string_memory_error = njs_string("MemoryError");
+const nxt_str_t njs_entry_main = nxt_string("main");
+const nxt_str_t njs_entry_native = nxt_string("native");
+const nxt_str_t njs_entry_unknown = nxt_string("unknown");
+const nxt_str_t njs_entry_anonymous = nxt_string("anonymous");
+
+
/*
* The nJSVM is optimized for an ABIs where the first several arguments
* are passed in registers (AMD64, ARM32/64): two pointers to the operand
njs_function_lambda_t *lambda;
njs_backtrace_entry_t *be;
- static const nxt_str_t entry_main = nxt_string("main");
- static const nxt_str_t entry_native = nxt_string("native");
- static const nxt_str_t entry_unknown = nxt_string("unknown");
- static const nxt_str_t entry_anonymous = nxt_string("anonymous");
-
native_frame = &frame->native;
function = native_frame->function;
be->line = 0;
if (function == NULL) {
- be->name = entry_main;
+ be->name = njs_entry_main;
return NXT_OK;
}
return NXT_OK;
}
- be->name = entry_native;
+ be->name = njs_entry_native;
return NXT_OK;
}
be->name = debug_entry[i].name;
} else {
- be->name = entry_anonymous;
+ be->name = njs_entry_anonymous;
}
be->file = debug_entry[i].file;
}
}
- be->name = entry_unknown;
+ be->name = njs_entry_unknown;
return NXT_OK;
}
typedef struct {
u_char *start;
u_char *end;
+ nxt_str_t file;
+ nxt_str_t name;
} njs_vm_code_t;
extern const njs_value_t njs_string_internal_error;
extern const njs_value_t njs_string_memory_error;
+extern const nxt_str_t njs_entry_main;
+extern const nxt_str_t njs_entry_native;
+extern const nxt_str_t njs_entry_unknown;
+extern const nxt_str_t njs_entry_anonymous;
+
extern const nxt_mem_proto_t njs_array_mem_proto;
extern const nxt_lvlhsh_proto_t njs_object_hash_proto;