From 7ca2763f758fd540fe2233281bb4054966c2af29 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 18 Nov 2013 07:48:32 +0900 Subject: write_debug_record should dump info recursively; close #1581 --- src/dump.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/dump.c b/src/dump.c index 8e89b7a32..3256e2043 100644 --- a/src/dump.c +++ b/src/dump.c @@ -384,7 +384,7 @@ write_lineno_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin) bin += rlen; size += rlen; for (i=0; irlen; i++) { - rlen = write_lineno_record_1(mrb, irep, bin); + rlen = write_lineno_record(mrb, irep, bin); bin += rlen; size += rlen; } @@ -405,7 +405,6 @@ write_section_lineno(mrb_state *mrb, mrb_irep *irep, uint8_t *bin) section_size += sizeof(struct rite_section_lineno_header); rlen = write_lineno_record(mrb, irep, cur); - cur += rlen; section_size += rlen; write_section_lineno_header(mrb, section_size, bin); @@ -498,7 +497,7 @@ get_filename_table_size(mrb_state *mrb, mrb_irep *irep, mrb_sym **fp, size_t *lp } static int -write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, size_t filenames_len) +write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, size_t filenames_len) { uint8_t *cur; uint32_t f_idx; @@ -551,6 +550,22 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* return ret; } +static int +write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, size_t filenames_len) +{ + uint32_t size, len; + size_t irep_no; + + size = len = write_debug_record_1(mrb, irep, bin, filenames, filenames_len); + bin += len; + for (irep_no = 0; irep_no < irep->rlen; irep_no++) { + len = write_debug_record(mrb, irep->reps[irep_no], bin, filenames, filenames_len); + bin += len; + size += len; + } + return size; +} + static int write_filename_table(mrb_state *mrb, mrb_irep *irep, uint8_t **cp, mrb_sym **fp, size_t *lp) { @@ -614,13 +629,7 @@ write_section_debug(mrb_state *mrb, mrb_irep *irep, uint8_t *cur) // debug records dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len); - cur += dlen; section_size += dlen; - for (i=0; irlen; i++) { - dlen = write_debug_record(mrb, irep->reps[i], cur, filenames, filenames_len); - cur += dlen; - section_size += dlen; - } memcpy(header->section_identify, RITE_SECTION_DEBUG_IDENTIFIER, sizeof(header->section_identify)); uint32_to_bin(section_size, header->section_size); -- cgit v1.2.3