summaryrefslogtreecommitdiffhomepage
path: root/src/debug.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-11-15 20:15:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-11-15 21:01:56 +0900
commit61f49690e43cea3df6ebbdf424cf6777826056b0 (patch)
tree25d4f8e4ecec412c79ac4232fae00bfe93663cda /src/debug.c
parent1bea1e2050ee4c1b3e558a307c7d2731f6b52823 (diff)
downloadmruby-61f49690e43cea3df6ebbdf424cf6777826056b0.tar.gz
mruby-61f49690e43cea3df6ebbdf424cf6777826056b0.zip
Remove `filename`&`lines` from `mrb_irep` struct.
This patch slightly reduce memory consumption (2% for my test).
Diffstat (limited to 'src/debug.c')
-rw-r--r--src/debug.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/debug.c b/src/debug.c
index e55f11d4f..207065d9e 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -55,7 +55,7 @@ mrb_debug_get_filename(mrb_irep *irep, ptrdiff_t pc)
{
if (irep && pc >= 0 && pc < irep->ilen) {
mrb_irep_debug_info_file* f = NULL;
- if (!irep->debug_info) { return irep->filename; }
+ if (!irep->debug_info) return NULL;
else if ((f = get_file(irep->debug_info, (uint32_t)pc))) {
return f->filename;
}
@@ -69,7 +69,7 @@ mrb_debug_get_line(mrb_irep *irep, ptrdiff_t pc)
if (irep && pc >= 0 && pc < irep->ilen) {
mrb_irep_debug_info_file* f = NULL;
if (!irep->debug_info) {
- return irep->lines? irep->lines[pc] : -1;
+ return -1;
}
else if ((f = get_file(irep->debug_info, (uint32_t)pc))) {
switch (f->line_type) {
@@ -122,24 +122,22 @@ mrb_debug_info_alloc(mrb_state *mrb, mrb_irep *irep)
}
MRB_API mrb_irep_debug_info_file*
-mrb_debug_info_append_file(mrb_state *mrb, mrb_irep *irep,
+mrb_debug_info_append_file(mrb_state *mrb, mrb_irep_debug_info *info,
+ const char *filename, uint16_t *lines,
uint32_t start_pos, uint32_t end_pos)
{
- mrb_irep_debug_info *info;
mrb_irep_debug_info_file *ret;
uint32_t file_pc_count;
size_t fn_len;
mrb_int len;
uint32_t i;
- if (!irep->debug_info) { return NULL; }
+ if (!info) { return NULL; }
- mrb_assert(irep->filename);
- mrb_assert(irep->lines);
+ mrb_assert(filename);
+ mrb_assert(lines);
- info = irep->debug_info;
-
- if (info->flen > 0 && strcmp(irep->filename, info->files[info->flen - 1]->filename) == 0) {
+ if (info->flen > 0 && strcmp(filename, info->files[info->flen - 1]->filename) == 0) {
return NULL;
}
@@ -156,12 +154,12 @@ mrb_debug_info_append_file(mrb_state *mrb, mrb_irep *irep,
ret->start_pos = start_pos;
info->pc_count = end_pos;
- fn_len = strlen(irep->filename);
- ret->filename_sym = mrb_intern(mrb, irep->filename, fn_len);
+ fn_len = strlen(filename);
+ ret->filename_sym = mrb_intern(mrb, filename, fn_len);
len = 0;
ret->filename = mrb_sym2name_len(mrb, ret->filename_sym, &len);
- ret->line_type = select_line_type(irep->lines + start_pos, end_pos - start_pos);
+ ret->line_type = select_line_type(lines + start_pos, end_pos - start_pos);
ret->lines.ptr = NULL;
switch (ret->line_type) {
@@ -169,7 +167,7 @@ mrb_debug_info_append_file(mrb_state *mrb, mrb_irep *irep,
ret->line_entry_count = file_pc_count;
ret->lines.ary = (uint16_t*)mrb_malloc(mrb, sizeof(uint16_t) * file_pc_count);
for (i = 0; i < file_pc_count; ++i) {
- ret->lines.ary[i] = irep->lines[start_pos + i];
+ ret->lines.ary[i] = lines[start_pos + i];
}
break;
@@ -179,18 +177,18 @@ mrb_debug_info_append_file(mrb_state *mrb, mrb_irep *irep,
ret->lines.flat_map = (mrb_irep_debug_info_line*)mrb_malloc(mrb, sizeof(mrb_irep_debug_info_line) * 1);
ret->line_entry_count = 0;
for (i = 0; i < file_pc_count; ++i) {
- if (irep->lines[start_pos + i] == prev_line) { continue; }
+ if (lines[start_pos + i] == prev_line) { continue; }
ret->lines.flat_map = (mrb_irep_debug_info_line*)mrb_realloc(
mrb, ret->lines.flat_map,
sizeof(mrb_irep_debug_info_line) * (ret->line_entry_count + 1));
m.start_pos = start_pos + i;
- m.line = irep->lines[start_pos + i];
+ m.line = lines[start_pos + i];
ret->lines.flat_map[ret->line_entry_count] = m;
/* update */
++ret->line_entry_count;
- prev_line = irep->lines[start_pos + i];
+ prev_line = lines[start_pos + i];
}
} break;