summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby.h2
-rw-r--r--src/load.c6
-rw-r--r--src/state.c25
3 files changed, 4 insertions, 29 deletions
diff --git a/include/mruby.h b/include/mruby.h
index 6f2f12320..bf42b76fd 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -105,8 +105,6 @@ typedef struct mrb_state {
struct RObject *exc; /* exception */
struct iv_tbl *globals; /* global variable table */
- struct mrb_irep **irep; /* program data array */
- size_t irep_len, irep_capa;
struct RObject *top_self;
struct RClass *object_class; /* Object class */
diff --git a/src/load.c b/src/load.c
index cb698dfe6..2b222b6c1 100644
--- a/src/load.c
+++ b/src/load.c
@@ -234,9 +234,9 @@ read_lineno_record_1(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, uint32_
}
static int
-read_lineno_record(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, uint32_t *len)
+read_lineno_record(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, uint32_t *lenp)
{
- int result = read_lineno_record_1(mrb, bin, irep, len);
+ int result = read_lineno_record_1(mrb, bin, irep, lenp);
size_t i;
if (result != MRB_DUMP_OK) return result;
@@ -246,7 +246,9 @@ read_lineno_record(mrb_state *mrb, const uint8_t *bin, mrb_irep *irep, uint32_t
result = read_lineno_record(mrb, bin, irep->reps[i], &len);
if (result != MRB_DUMP_OK) break;
bin += len;
+ *lenp += len;
}
+ return result;
}
static int
diff --git a/src/state.c b/src/state.c
index 82ae58d18..6e6394c9c 100644
--- a/src/state.c
+++ b/src/state.c
@@ -140,16 +140,10 @@ mrb_free_context(mrb_state *mrb, struct mrb_context *c)
void
mrb_close(mrb_state *mrb)
{
- size_t i;
-
mrb_final_core(mrb);
/* free */
mrb_gc_free_gv(mrb);
- for (i=0; i<mrb->irep_len; i++) {
- mrb_irep_free(mrb, mrb->irep[i]);
- }
- mrb_free(mrb, mrb->irep);
mrb_free_context(mrb, mrb->root_c);
mrb_free_symtbl(mrb);
mrb_free_heap(mrb);
@@ -167,27 +161,8 @@ mrb_add_irep(mrb_state *mrb)
static const mrb_irep mrb_irep_zero = { 0 };
mrb_irep *irep;
- if (!mrb->irep) {
- size_t max = MRB_IREP_ARRAY_INIT_SIZE;
-
- if (mrb->irep_len > max) max = mrb->irep_len+1;
- mrb->irep = (mrb_irep **)mrb_calloc(mrb, max, sizeof(mrb_irep*));
- mrb->irep_capa = max;
- }
- else if (mrb->irep_capa <= mrb->irep_len) {
- size_t i;
- size_t old_capa = mrb->irep_capa;
- while (mrb->irep_capa <= mrb->irep_len) {
- mrb->irep_capa *= 2;
- }
- mrb->irep = (mrb_irep **)mrb_realloc(mrb, mrb->irep, sizeof(mrb_irep*)*mrb->irep_capa);
- for (i = old_capa; i < mrb->irep_capa; i++) {
- mrb->irep[i] = NULL;
- }
- }
irep = (mrb_irep *)mrb_malloc(mrb, sizeof(mrb_irep));
*irep = mrb_irep_zero;
- mrb->irep[mrb->irep_len++] = irep;
return irep;
}