#ifndef _JIT_MEMORY_H
#define _JIT_MEMORY_H
#include <jit/jit-defs.h>
#ifdef __cplusplus
extern "C" {
#endif
#define JIT_MEMORY_OK 0
#define JIT_MEMORY_RESTART 1
#define JIT_MEMORY_TOO_BIG 2
#define JIT_MEMORY_ERROR 3
typedef unsigned int jit_size_t;
typedef void *jit_memory_context_t;
typedef void *jit_function_info_t;
typedef struct jit_memory_manager const* jit_memory_manager_t;
struct jit_memory_manager
{
jit_memory_context_t (*create)(jit_context_t context);
void (*destroy)(jit_memory_context_t memctx);
jit_function_info_t (*find_function_info)(jit_memory_context_t memctx, void *pc);
jit_function_t (*get_function)(jit_memory_context_t memctx, jit_function_info_t info);
void * (*get_function_start)(jit_memory_context_t memctx, jit_function_info_t info);
void * (*get_function_end)(jit_memory_context_t memctx, jit_function_info_t info);
jit_function_t (*alloc_function)(jit_memory_context_t memctx);
void (*free_function)(jit_memory_context_t memctx, jit_function_t func);
int (*start_function)(jit_memory_context_t memctx, jit_function_t func);
int (*end_function)(jit_memory_context_t memctx, int result);
int (*extend_limit)(jit_memory_context_t memctx, int count);
void * (*get_limit)(jit_memory_context_t memctx);
void * (*get_break)(jit_memory_context_t memctx);
void (*set_break)(jit_memory_context_t memctx, void *brk);
void * (*alloc_trampoline)(jit_memory_context_t memctx);
void (*free_trampoline)(jit_memory_context_t memctx, void *ptr);
void * (*alloc_closure)(jit_memory_context_t memctx);
void (*free_closure)(jit_memory_context_t memctx, void *ptr);
void * (*alloc_data)(jit_memory_context_t memctx, jit_size_t size, jit_size_t align);
};
jit_memory_manager_t jit_default_memory_manager(void) JIT_NOTHROW;
#ifdef __cplusplus
}
#endif
#endif