summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-11-18 07:48:32 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-11-18 07:48:32 +0900
commit7ca2763f758fd540fe2233281bb4054966c2af29 (patch)
tree9350dd38ffcd3439d0cd56e429634e6af7fe6f2b /src
parent52070a98980f70877280e2d548987a149ae2bd50 (diff)
downloadmruby-7ca2763f758fd540fe2233281bb4054966c2af29.tar.gz
mruby-7ca2763f758fd540fe2233281bb4054966c2af29.zip
write_debug_record should dump info recursively; close #1581
Diffstat (limited to 'src')
-rw-r--r--src/dump.c27
1 files changed, 18 insertions, 9 deletions
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; i<irep->rlen; 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;
@@ -552,6 +551,22 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const*
}
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)
{
uint8_t *cur = *cp;
@@ -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; i<irep->rlen; 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);