summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-09-07 09:50:02 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2013-09-07 09:50:02 -0700
commit668a0466c551c5a04c1156f4597971f9e183d424 (patch)
treee98fb94d811819dc4be49a2f0affc41272328db2 /src
parent385e5d6e831e0de76a44e736340bcb867df1d1a6 (diff)
parentaf73a740cdf7099bb25204d394e51275ad90db2d (diff)
downloadmruby-668a0466c551c5a04c1156f4597971f9e183d424.tar.gz
mruby-668a0466c551c5a04c1156f4597971f9e183d424.zip
Merge pull request #1500 from take-cheeze/debug_info_file_updating
Fix insufficient preparation to call mrb_debug_info_append_file.
Diffstat (limited to 'src')
-rw-r--r--src/codegen.c11
-rw-r--r--src/debug.c4
2 files changed, 10 insertions, 5 deletions
diff --git a/src/codegen.c b/src/codegen.c
index b46ddf87e..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 = s->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->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index);
+ 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) {
@@ -2449,7 +2452,9 @@ 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) {
- mrb_debug_info_append_file(mrb, s->irep, s->debug_start_pos, s->pc);
+ s->irep->filename = mrb_parser_get_filename(s->parser, s->filename_index);
+ 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);
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