diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-22 06:00:32 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-04-22 06:00:32 -0700 |
| commit | 12cc55fcfa19b211a49e280313638dd9225033a8 (patch) | |
| tree | 2c501037fc8e3f3b51b008e7d201aeea77575234 /src/load.c | |
| parent | c2f3a494ea3473d2e42884545ee23e532eb83bd3 (diff) | |
| parent | 5801773f6463766f244c7a31a8ec4eda45ac0c3a (diff) | |
| download | mruby-12cc55fcfa19b211a49e280313638dd9225033a8.tar.gz mruby-12cc55fcfa19b211a49e280313638dd9225033a8.zip | |
Merge pull request #1201 from monaka/pr-simplify-load.c
Simplify load.c.
Diffstat (limited to 'src/load.c')
| -rw-r--r-- | src/load.c | 96 |
1 files changed, 38 insertions, 58 deletions
diff --git a/src/load.c b/src/load.c index 27feea37f..bc2f07af5 100644 --- a/src/load.c +++ b/src/load.c @@ -27,6 +27,31 @@ # error This code assumes CHAR_BIT == 8 #endif +static void +irep_free(size_t sirep, mrb_state *mrb) +{ + size_t i; + void *p; + + for (i = sirep; i < mrb->irep_len; i++) { + if (mrb->irep[i]) { + p = mrb->irep[i]->iseq; + if (p) + mrb_free(mrb, p); + + p = mrb->irep[i]->pool; + if (p) + mrb_free(mrb, p); + + p = mrb->irep[i]->syms; + if (p) + mrb_free(mrb, p); + + mrb_free(mrb, mrb->irep[i]); + } + } +} + static size_t offset_crc_body() { @@ -168,26 +193,12 @@ read_rite_section_irep(mrb_state *mrb, const uint8_t *bin) bin += len; } - result = MRB_DUMP_OK; + result = sirep + bin_to_uint16(header->sirep); error_exit: - if (result != MRB_DUMP_OK) { - for (i = sirep; i < mrb->irep_len; i++) { - if (mrb->irep[i]) { - if (mrb->irep[i]->iseq) - mrb_free(mrb, mrb->irep[i]->iseq); - - if (mrb->irep[i]->pool) - mrb_free(mrb, mrb->irep[i]->pool); - - if (mrb->irep[i]->syms) - mrb_free(mrb, mrb->irep[i]->syms); - - mrb_free(mrb, mrb->irep[i]); - } - } - return result; + if (result < MRB_DUMP_OK) { + irep_free(sirep, mrb); } - return sirep + bin_to_uint16(header->sirep); + return result; } static int @@ -257,12 +268,9 @@ read_rite_section_lineno(mrb_state *mrb, const uint8_t *bin, size_t sirep) bin += len; } - result = MRB_DUMP_OK; + result = sirep + bin_to_uint16(header->sirep); error_exit: - if (result != MRB_DUMP_OK) { - return result; - } - return sirep + bin_to_uint16(header->sirep); + return result; } @@ -397,27 +405,13 @@ read_rite_section_lineno_file(mrb_state *mrb, FILE *fp, size_t sirep) goto error_exit; } - result = MRB_DUMP_OK; + result = sirep + bin_to_uint16(header.sirep); error_exit: mrb_free(mrb, buf); - if (result != MRB_DUMP_OK) { - for (i = sirep; i < mrb->irep_len; i++) { - if (mrb->irep[i]) { - if (mrb->irep[i]->iseq) - mrb_free(mrb, mrb->irep[i]->iseq); - - if (mrb->irep[i]->pool) - mrb_free(mrb, mrb->irep[i]->pool); - - if (mrb->irep[i]->syms) - mrb_free(mrb, mrb->irep[i]->syms); - - mrb_free(mrb, mrb->irep[i]); - } - } - return result; + if (result < MRB_DUMP_OK) { + irep_free(sirep, mrb); } - return sirep + bin_to_uint16(header.sirep); + return result; } static int32_t @@ -460,27 +454,13 @@ read_rite_section_irep_file(mrb_state *mrb, FILE *fp) goto error_exit; } - result = MRB_DUMP_OK; + result = sirep + bin_to_uint16(header.sirep); error_exit: mrb_free(mrb, buf); if (result != MRB_DUMP_OK) { - for (i = sirep; i < mrb->irep_len; i++) { - if (mrb->irep[i]) { - if (mrb->irep[i]->iseq) - mrb_free(mrb, mrb->irep[i]->iseq); - - if (mrb->irep[i]->pool) - mrb_free(mrb, mrb->irep[i]->pool); - - if (mrb->irep[i]->syms) - mrb_free(mrb, mrb->irep[i]->syms); - - mrb_free(mrb, mrb->irep[i]); - } - } - return result; + irep_free(sirep, mrb); } - return sirep + bin_to_uint16(header.sirep); + return result; } int32_t |
