74 lines
2.6 KiB
C
74 lines
2.6 KiB
C
#ifndef PRISM_CUSTOM_ALLOCATOR_H
|
|
#define PRISM_CUSTOM_ALLOCATOR_H
|
|
|
|
#if defined(MRC_TARGET_MRUBY)
|
|
#include "mruby.h"
|
|
extern mrb_state *global_mrb;
|
|
|
|
#define xmalloc(size) mrb_malloc(global_mrb, size)
|
|
#define xcalloc(nmemb,size) mrb_calloc(global_mrb, nmemb, size)
|
|
#define xrealloc(ptr,size) mrb_realloc(global_mrb, ptr, size)
|
|
#define xfree(ptr) mrb_free(global_mrb, ptr)
|
|
|
|
#define mrc_malloc(c,size) mrb_malloc(c->mrb, size)
|
|
#define mrc_calloc(c,nmemb,size) mrb_calloc(c->mrb, nmemb, size)
|
|
#define mrc_realloc(c,ptr,size) mrb_realloc(c->mrb, ptr, size)
|
|
#define mrc_free(c,ptr) mrb_free(c->mrb, ptr)
|
|
#elif defined(MRC_TARGET_MRUBYC)
|
|
#include "mrubyc.h"
|
|
#if defined(MRBC_ALLOC_LIBC)
|
|
#define xmalloc(size) malloc(size)
|
|
#define xcalloc(nmemb,size) calloc(nmemb, size)
|
|
#define xrealloc(nmemb,size) realloc(nmemb, size)
|
|
#define xfree(ptr) free(ptr)
|
|
|
|
#define mrc_malloc(c,size) malloc(size)
|
|
#define mrc_calloc(c,nmemb,size) calloc(nmemb, size)
|
|
#define mrc_realloc(c,ptr,size) realloc(ptr, size)
|
|
#define mrc_free(c,ptr) free(ptr)
|
|
#else
|
|
#define xmalloc(size) mrbc_raw_alloc(size)
|
|
#define xcalloc(nmemb,size) mrbc_raw_calloc(nmemb, size)
|
|
#define xrealloc(nmemb,size) mrc_raw_realloc(nmemb, size)
|
|
#define xfree(ptr) mrc_raw_free(ptr)
|
|
|
|
#define mrc_malloc(c,size) mrbc_raw_alloc(size)
|
|
#define mrc_calloc(c,nmemb,size) mrbc_raw_calloc(nmemb, size)
|
|
#define mrc_realloc(c,ptr,size) mrc_raw_realloc(ptr, size)
|
|
#define mrc_free(c,ptr) mrc_raw_free(ptr)
|
|
|
|
static inline void mrc_raw_free(void *ptr)
|
|
{
|
|
/* mrbc_raw_free() warns when ptr=NULL but it should be allowed in C99 */
|
|
if (ptr == NULL) return;
|
|
mrbc_raw_free(ptr);
|
|
}
|
|
|
|
static inline void*
|
|
mrc_raw_realloc(void *ptr, unsigned int size)
|
|
{
|
|
/* mrbc_raw_realloc() fails when ptr=NULL but it should be allowed in C99 */
|
|
if (ptr == NULL) {
|
|
return mrbc_raw_alloc(size);
|
|
} else {
|
|
return mrbc_raw_realloc(ptr, size);
|
|
}
|
|
}
|
|
#endif
|
|
#else
|
|
|
|
// for picorbc
|
|
#define mrc_malloc(c,size) malloc(size)
|
|
#define mrc_calloc(c,nmemb,size) calloc(nmemb, size)
|
|
#define mrc_realloc(c,ptr,size) realloc(ptr, size)
|
|
#define mrc_free(c,ptr) free(ptr)
|
|
#define xmalloc(size) malloc(size)
|
|
#define xcalloc(nmemb,size) calloc(nmemb, size)
|
|
#define xrealloc(ptr,size) realloc(ptr, size)
|
|
#define xfree(ptr) free(ptr)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|