use static symbols for debug filename info

parent c70e2f70
...@@ -354,7 +354,7 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, uint32_t ...@@ -354,7 +354,7 @@ read_debug_record(mrb_state *mrb, const uint8_t *start, mrb_irep* irep, uint32_t
} }
static int static int
read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep) read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep, mrb_bool alloc)
{ {
const uint8_t *bin; const uint8_t *bin;
struct rite_section_debug_header *header; struct rite_section_debug_header *header;
...@@ -374,7 +374,12 @@ read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep) ...@@ -374,7 +374,12 @@ read_section_debug(mrb_state *mrb, const uint8_t *start, mrb_irep *irep)
for(i = 0; i < filenames_len; ++i) { for(i = 0; i < filenames_len; ++i) {
uint16_t f_len = bin_to_uint16(bin); uint16_t f_len = bin_to_uint16(bin);
bin += sizeof(uint16_t); bin += sizeof(uint16_t);
filenames[i] = mrb_intern(mrb, (const char *)bin, f_len); if (alloc) {
filenames[i] = mrb_intern(mrb, (const char *)bin, f_len);
}
else {
filenames[i] = mrb_intern_static(mrb, (const char *)bin, f_len);
}
bin += f_len; bin += f_len;
} }
...@@ -452,7 +457,7 @@ mrb_read_irep(mrb_state *mrb, const uint8_t *bin) ...@@ -452,7 +457,7 @@ mrb_read_irep(mrb_state *mrb, const uint8_t *bin)
} }
else if (memcmp(section_header->section_identify, RITE_SECTION_DEBUG_IDENTIFIER, sizeof(section_header->section_identify)) == 0) { else if (memcmp(section_header->section_identify, RITE_SECTION_DEBUG_IDENTIFIER, sizeof(section_header->section_identify)) == 0) {
if (!irep) return NULL; /* corrupted data */ if (!irep) return NULL; /* corrupted data */
result = read_section_debug(mrb, bin, irep); result = read_section_debug(mrb, bin, irep, FALSE);
if (result < MRB_DUMP_OK) { if (result < MRB_DUMP_OK) {
return NULL; return NULL;
} }
...@@ -679,7 +684,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp) ...@@ -679,7 +684,7 @@ mrb_read_irep_file(mrb_state *mrb, FILE* fp)
mrb_free(mrb, bin); mrb_free(mrb, bin);
return NULL; return NULL;
} }
result = read_section_debug(mrb, bin, irep); result = read_section_debug(mrb, bin, irep, TRUE);
mrb_free(mrb, bin); mrb_free(mrb, bin);
} }
if (result < MRB_DUMP_OK) return NULL; if (result < MRB_DUMP_OK) return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment