diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/gc.c | 12 | ||||
| -rw-r--r-- | src/state.c | 11 | ||||
| -rw-r--r-- | src/vm.c | 2 |
3 files changed, 13 insertions, 12 deletions
@@ -1,5 +1,5 @@ /* -** gc.c - garbage collector for RiteVM +** gc.c - garbage collector for mruby ** ** See Copyright Notice in mruby.h */ @@ -24,7 +24,7 @@ /* = Tri-color Incremental Garbage Collection - RiteVM's GC is Tri-color Incremental GC with Mark & Sweep. + mruby's GC is Tri-color Incremental GC with Mark & Sweep. Algorithm details are omitted. Instead, the part about the implementation described below. @@ -61,7 +61,7 @@ = Write Barrier - RiteVM implementer, C extension library writer must write a write + mruby implementer, C extension library writer must write a write barrier when writing a pointer to an object on object's field. Two different write barrier: @@ -153,11 +153,11 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) { void *p2; - p2 = (mrb->allocf)(mrb, p, len); + p2 = (mrb->allocf)(mrb, p, len, mrb->ud); if (!p2 && len > 0 && mrb->heaps) { mrb_garbage_collect(mrb); - p2 = (mrb->allocf)(mrb, p, len); + p2 = (mrb->allocf)(mrb, p, len, mrb->ud); } return p2; } @@ -188,7 +188,7 @@ mrb_calloc(mrb_state *mrb, size_t nelem, size_t len) void* mrb_free(mrb_state *mrb, void *p) { - return (mrb->allocf)(mrb, p, 0); + return (mrb->allocf)(mrb, p, 0, mrb->ud); } #ifndef MRB_HEAP_PAGE_SIZE diff --git a/src/state.c b/src/state.c index 181cd00e0..6d34381ba 100644 --- a/src/state.c +++ b/src/state.c @@ -1,5 +1,5 @@ /* -** state.c - RiteVM open/close functions +** state.c - mrb_state open/close functions ** ** See Copyright Notice in mruby.h */ @@ -14,12 +14,13 @@ void mrb_init_core(mrb_state*); void mrb_init_ext(mrb_state*); mrb_state* -mrb_open_allocf(mrb_allocf f) +mrb_open_allocf(mrb_allocf f, void *ud) { - mrb_state *mrb = (mrb_state *)(f)(NULL, NULL, sizeof(mrb_state)); + mrb_state *mrb = (mrb_state *)(f)(NULL, NULL, sizeof(mrb_state), ud); if (mrb == NULL) return NULL; memset(mrb, 0, sizeof(mrb_state)); + mrb->ud = ud; mrb->allocf = f; mrb->current_white_part = MRB_GC_WHITE_A; @@ -30,7 +31,7 @@ mrb_open_allocf(mrb_allocf f) } static void* -allocf(mrb_state *mrb, void *p, size_t size) +allocf(mrb_state *mrb, void *p, size_t size, void *ud) { if (size == 0) { free(p); @@ -44,7 +45,7 @@ allocf(mrb_state *mrb, void *p, size_t size) mrb_state* mrb_open() { - mrb_state *mrb = mrb_open_allocf(allocf); + mrb_state *mrb = mrb_open_allocf(allocf, NULL); return mrb; } @@ -1,5 +1,5 @@ /* -** vm.c - virtual machine for mruby (RiteVM) +** vm.c - virtual machine for mruby ** ** See Copyright Notice in mruby.h */ |
