From 10fecc237573b1d3ed81e8d355401dab4deb19bd Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Sat, 7 Sep 2013 20:17:39 +0900 Subject: fix line getting handler of line_ary --- src/debug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/debug.c b/src/debug.c index 7902c09ba..8e4311f6c 100644 --- a/src/debug.c +++ b/src/debug.c @@ -73,8 +73,8 @@ mrb_debug_get_line(mrb_irep *irep, uint32_t pc) else if ((f = get_file(irep->debug_info, pc))) { switch(f->line_type) { case mrb_debug_line_ary: - mrb_assert(pc < (f->start_pos + f->line_entry_count)); - return f->line_ary[pc]; + mrb_assert(f->start_pos <= pc && pc < (f->start_pos + f->line_entry_count)); + return f->line_ary[pc - f->start_pos]; case mrb_debug_line_flat_map: { // get upper bound -- cgit v1.2.3 From 4308932231e7042b28fda26c1535568b5b050d7e Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Sat, 7 Sep 2013 20:22:16 +0900 Subject: update filename before appending file debug info --- src/codegen.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/codegen.c b/src/codegen.c index b46ddf87e..763b7ad91 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2449,6 +2449,7 @@ scope_finish(codegen_scope *s) irep->pool = (mrb_value *)codegen_realloc(s, irep->pool, sizeof(mrb_value)*irep->plen); irep->syms = (mrb_sym *)codegen_realloc(s, irep->syms, sizeof(mrb_sym)*irep->slen); if (s->filename) { + s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index); mrb_debug_info_append_file(mrb, s->irep, s->debug_start_pos, s->pc); fname_len = strlen(s->filename); -- cgit v1.2.3 From 8c738e348f706b0763fad9133bb18281a08f598d Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Sat, 7 Sep 2013 20:23:18 +0900 Subject: remove unnecessary scope filename update --- src/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/codegen.c b/src/codegen.c index 763b7ad91..d7b68e687 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1115,7 +1115,7 @@ codegen(codegen_scope *s, node *tree, int val) if (!tree) return; if (s->irep && s->pc > 0 && s->filename_index != tree->filename) { - s->irep->filename = s->filename = mrb_parser_get_filename(s->parser, s->filename_index); + s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index); mrb_debug_info_append_file(s->mrb, s->irep, s->debug_start_pos, s->pc); s->debug_start_pos = s->pc; s->filename_index = tree->filename; -- cgit v1.2.3 From af73a740cdf7099bb25204d394e51275ad90db2d Mon Sep 17 00:00:00 2001 From: take_cheeze Date: Sat, 7 Sep 2013 20:25:53 +0900 Subject: check file debug info is appended correctly --- src/codegen.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/codegen.c b/src/codegen.c index d7b68e687..1efc44ba0 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1111,12 +1111,14 @@ static void codegen(codegen_scope *s, node *tree, int val) { int nt; + mrb_irep_debug_info_file const *finished_file; if (!tree) return; if (s->irep && s->pc > 0 && s->filename_index != tree->filename) { s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index); - mrb_debug_info_append_file(s->mrb, s->irep, s->debug_start_pos, s->pc); + finished_file = mrb_debug_info_append_file(s->mrb, s->irep, s->debug_start_pos, s->pc); + mrb_assert(finished_file); s->debug_start_pos = s->pc; s->filename_index = tree->filename; s->filename = mrb_parser_get_filename(s->parser, tree->filename); @@ -2434,6 +2436,7 @@ scope_finish(codegen_scope *s) mrb_irep *irep = s->irep; size_t fname_len; char *fname; + mrb_irep_debug_info_file const *finished_file; irep->flags = 0; if (s->iseq) { @@ -2450,7 +2453,8 @@ scope_finish(codegen_scope *s) irep->syms = (mrb_sym *)codegen_realloc(s, irep->syms, sizeof(mrb_sym)*irep->slen); if (s->filename) { s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index); - mrb_debug_info_append_file(mrb, s->irep, s->debug_start_pos, s->pc); + finished_file = mrb_debug_info_append_file(mrb, s->irep, s->debug_start_pos, s->pc); + mrb_assert(finished_file); fname_len = strlen(s->filename); fname = codegen_malloc(s, fname_len + 1); -- cgit v1.2.3