summaryrefslogtreecommitdiffhomepage
path: root/src/state.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-05 07:43:40 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:03 +0900
commit5a3e014e4914dbd6421dbbd81e889cd6952e924b (patch)
tree0975df1e1554c177d1b7adb1081d70d74c5bf505 /src/state.c
parent744ba809198d79198246dbd6936a53fa98269ccb (diff)
downloadmruby-5a3e014e4914dbd6421dbbd81e889cd6952e924b.tar.gz
mruby-5a3e014e4914dbd6421dbbd81e889cd6952e924b.zip
Constify `irep` members.
- `pool` - `syms` - `reps`
Diffstat (limited to 'src/state.c')
-rw-r--r--src/state.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/state.c b/src/state.c
index 790f7ca13..323532363 100644
--- a/src/state.c
+++ b/src/state.c
@@ -107,12 +107,14 @@ void mrb_free_symtbl(mrb_state *mrb);
void
mrb_irep_incref(mrb_state *mrb, mrb_irep *irep)
{
+ if (irep->flags & MRB_IREP_NO_FREE) return;
irep->refcnt++;
}
void
mrb_irep_decref(mrb_state *mrb, mrb_irep *irep)
{
+ if (irep->flags & MRB_IREP_NO_FREE) return;
irep->refcnt--;
if (irep->refcnt == 0) {
mrb_irep_free(mrb, irep);
@@ -122,12 +124,14 @@ mrb_irep_decref(mrb_state *mrb, mrb_irep *irep)
void
mrb_irep_cutref(mrb_state *mrb, mrb_irep *irep)
{
- mrb_irep *tmp;
+ mrb_irep **reps;
int i;
+ if (irep->flags & MRB_IREP_NO_FREE) return;
+ reps = (mrb_irep**)irep->reps;
for (i=0; i<irep->rlen; i++) {
- tmp = irep->reps[i];
- irep->reps[i] = NULL;
+ mrb_irep *tmp = reps[i];
+ reps[i] = NULL;
if (tmp) mrb_irep_decref(mrb, tmp);
}
}
@@ -137,6 +141,7 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep)
{
int i;
+ if (irep->flags & MRB_IREP_NO_FREE) return;
if (!(irep->flags & MRB_ISEQ_NO_FREE))
mrb_free(mrb, (void*)irep->iseq);
if (irep->pool) for (i=0; i<irep->plen; i++) {
@@ -150,16 +155,16 @@ mrb_irep_free(mrb_state *mrb, mrb_irep *irep)
}
#endif
}
- mrb_free(mrb, irep->pool);
- mrb_free(mrb, irep->syms);
+ mrb_free(mrb, (void*)irep->pool);
+ mrb_free(mrb, (void*)irep->syms);
if (irep->reps) {
for (i=0; i<irep->rlen; i++) {
if (irep->reps[i])
- mrb_irep_decref(mrb, irep->reps[i]);
+ mrb_irep_decref(mrb, (mrb_irep*)irep->reps[i]);
}
+ mrb_free(mrb, (void*)irep->reps);
}
- mrb_free(mrb, irep->reps);
- mrb_free(mrb, irep->lv);
+ mrb_free(mrb, (void*)irep->lv);
mrb_debug_info_free(mrb, irep->debug_info);
mrb_free(mrb, irep);
}