Commit b8fc484d authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto
parent 9206dcb0
...@@ -41,7 +41,7 @@ typedef int32_t mrb_code; ...@@ -41,7 +41,7 @@ typedef int32_t mrb_code;
struct mrb_state; struct mrb_state;
typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t); typedef void* (*mrb_allocf) (struct mrb_state *mrb, void*, size_t, void *ud);
#ifndef MRB_ARENA_SIZE #ifndef MRB_ARENA_SIZE
#define MRB_ARENA_SIZE 1024 #define MRB_ARENA_SIZE 1024
...@@ -205,7 +205,7 @@ mrb_value mrb_str_new_cstr(mrb_state*, const char*); ...@@ -205,7 +205,7 @@ mrb_value mrb_str_new_cstr(mrb_state*, const char*);
mrb_value mrb_str_new2(mrb_state *mrb, const char *p); mrb_value mrb_str_new2(mrb_state *mrb, const char *p);
mrb_state* mrb_open(void); mrb_state* mrb_open(void);
mrb_state* mrb_open_allocf(mrb_allocf); mrb_state* mrb_open_allocf(mrb_allocf, void *ud);
void mrb_close(mrb_state*); void mrb_close(mrb_state*);
int mrb_checkstack(mrb_state*,int); int mrb_checkstack(mrb_state*,int);
......
...@@ -153,11 +153,11 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len) ...@@ -153,11 +153,11 @@ mrb_realloc(mrb_state *mrb, void *p, size_t len)
{ {
void *p2; void *p2;
p2 = (mrb->allocf)(mrb, p, len); p2 = (mrb->allocf)(mrb, p, len, mrb->ud);
if (!p2 && len > 0 && mrb->heaps) { if (!p2 && len > 0 && mrb->heaps) {
mrb_garbage_collect(mrb); mrb_garbage_collect(mrb);
p2 = (mrb->allocf)(mrb, p, len); p2 = (mrb->allocf)(mrb, p, len, mrb->ud);
} }
return p2; return p2;
} }
...@@ -188,7 +188,7 @@ mrb_calloc(mrb_state *mrb, size_t nelem, size_t len) ...@@ -188,7 +188,7 @@ mrb_calloc(mrb_state *mrb, size_t nelem, size_t len)
void* void*
mrb_free(mrb_state *mrb, void *p) 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 #ifndef MRB_HEAP_PAGE_SIZE
......
...@@ -14,9 +14,9 @@ void mrb_init_core(mrb_state*); ...@@ -14,9 +14,9 @@ void mrb_init_core(mrb_state*);
void mrb_init_ext(mrb_state*); void mrb_init_ext(mrb_state*);
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; if (mrb == NULL) return NULL;
memset(mrb, 0, sizeof(mrb_state)); memset(mrb, 0, sizeof(mrb_state));
...@@ -30,7 +30,7 @@ mrb_open_allocf(mrb_allocf f) ...@@ -30,7 +30,7 @@ mrb_open_allocf(mrb_allocf f)
} }
static void* 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) { if (size == 0) {
free(p); free(p);
...@@ -44,7 +44,7 @@ allocf(mrb_state *mrb, void *p, size_t size) ...@@ -44,7 +44,7 @@ allocf(mrb_state *mrb, void *p, size_t size)
mrb_state* mrb_state*
mrb_open() mrb_open()
{ {
mrb_state *mrb = mrb_open_allocf(allocf); mrb_state *mrb = mrb_open_allocf(allocf, NULL);
return mrb; return mrb;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment