njs_generator_t *generator, njs_index_t index);
static nxt_int_t njs_generate_function_debug(njs_vm_t *vm, nxt_str_t *name,
- njs_function_lambda_t *lambda, uint32_t line);
-
+ njs_function_lambda_t *lambda, njs_parser_node_t *node);
static void njs_generate_syntax_error(njs_vm_t *vm, njs_parser_node_t *node,
const char *fmt, ...);
}
if (vm->debug != NULL) {
- ret = njs_generate_function_debug(vm, NULL, lambda, node->token_line);
+ ret = njs_generate_function_debug(vm, NULL, lambda, node);
if (nxt_slow_path(ret != NXT_OK)) {
return ret;
}
}
if (vm->debug != NULL) {
- ret = njs_generate_function_debug(vm, &var->name, lambda,
- node->token_line);
+ ret = njs_generate_function_debug(vm, &var->name, lambda, node);
}
return ret;
static nxt_int_t
njs_generate_function_debug(njs_vm_t *vm, nxt_str_t *name,
- njs_function_lambda_t *lambda, uint32_t line)
+ njs_function_lambda_t *lambda, njs_parser_node_t *node)
{
njs_function_debug_t *debug;
}
debug->lambda = lambda;
- debug->line = line;
+ debug->line = node->token_line;
+ debug->file = node->scope->file;
return NXT_OK;
}
be = backtrace->start;
for (i = 0; i < backtrace->items; i++) {
- if (i != 0 && prev->name.start == be[i].name.start
- && prev->line == be[i].line)
+ if (i != 0 && prev->name.start == be->name.start
+ && prev->line == be->line)
{
count++;
count = 0;
}
- if (be[i].line != 0) {
- len += nxt_length(" at (:)\n") + NXT_INT_T_LEN
- + be[i].name.length;
+ len += be->name.length + nxt_length(" at ()\n");
+
+ if (be->line != 0) {
+ len += be->file.length + NXT_INT_T_LEN + 1;
} else {
- len += nxt_length(" at (native)\n")
- + be[i].name.length;
+ len += nxt_length("native");
}
}
- prev = &be[i];
+ prev = be;
+ be++;
}
p = nxt_mp_alloc(vm->mem_pool, len);
count = 0;
prev = NULL;
+ be = backtrace->start;
+
for (i = 0; i < backtrace->items; i++) {
- if (i != 0 && prev->name.start == be[i].name.start
- && prev->line == be[i].line)
+ if (i != 0 && prev->name.start == be->name.start
+ && prev->line == be->line)
{
count++;
} else {
if (count != 0) {
- p = nxt_sprintf(p, end,
- " repeats %uz times\n", count);
+ p = nxt_sprintf(p, end, " repeats %uz times\n",
+ count);
count = 0;
}
- if (be[i].line != 0) {
- p = nxt_sprintf(p, end, " at %V (:%uD)\n",
- &be[i].name, be[i].line);
+ p = nxt_sprintf(p, end, " at %V ", &be->name);
+
+ if (be->line != 0) {
+ p = nxt_sprintf(p, end, "(%V:%uD)\n", &be->file,
+ be->line);
} else {
- p = nxt_sprintf(p, end, " at %V (native)\n",
- &be[i].name);
+ p = nxt_sprintf(p, end, "(native)\n");
}
}
- prev = &be[i];
+ prev = be;
+ be++;
}
dst->start = start;
be->name = entry_anonymous;
}
+ be->file = debug_entry[i].file;
be->line = debug_entry[i].line;
return NXT_OK;