summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/gc.c b/src/gc.c
index 8e982de6d..bdcbc5208 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -16,6 +16,7 @@
#include "mruby/string.h"
#include "mruby/variable.h"
#include "mruby/gc.h"
+#include "mruby/error.h"
/*
= Tri-color Incremental Garbage Collection
@@ -107,6 +108,7 @@ typedef struct {
struct RRange range;
struct RData data;
struct RProc proc;
+ struct RException exc;
#ifdef MRB_WORD_BOXING
struct RFloat floatv;
struct RCptr cptr;
@@ -171,10 +173,10 @@ mrb_realloc_simple(mrb_state *mrb, void *p, size_t len)
{
void *p2;
- p2 = (mrb->allocf)(mrb, p, len, mrb->ud);
+ p2 = (mrb->allocf)(mrb, p, len, mrb->allocf_ud);
if (!p2 && len > 0 && mrb->heaps) {
mrb_full_gc(mrb);
- p2 = (mrb->allocf)(mrb, p, len, mrb->ud);
+ p2 = (mrb->allocf)(mrb, p, len, mrb->allocf_ud);
}
return p2;
@@ -240,7 +242,7 @@ mrb_calloc(mrb_state *mrb, size_t nelem, size_t len)
void
mrb_free(mrb_state *mrb, void *p)
{
- (mrb->allocf)(mrb, p, 0, mrb->ud);
+ (mrb->allocf)(mrb, p, 0, mrb->allocf_ud);
}
#ifndef MRB_HEAP_PAGE_SIZE
@@ -513,6 +515,7 @@ gc_mark_children(mrb_state *mrb, struct RBasic *obj)
case MRB_TT_OBJECT:
case MRB_TT_DATA:
+ case MRB_TT_EXCEPTION:
mrb_gc_mark_iv(mrb, (struct RObject*)obj);
break;
@@ -612,6 +615,7 @@ obj_free(mrb_state *mrb, struct RBasic *obj)
#endif
case MRB_TT_OBJECT:
+ case MRB_TT_EXCEPTION:
mrb_gc_free_iv(mrb, (struct RObject*)obj);
break;
@@ -747,6 +751,7 @@ gc_gray_mark(mrb_state *mrb, struct RBasic *obj)
case MRB_TT_OBJECT:
case MRB_TT_DATA:
+ case MRB_TT_EXCEPTION:
children += mrb_gc_mark_iv_size(mrb, (struct RObject*)obj);
break;