|
|
|
@ -70,74 +70,74 @@ static const char *LLVM_instruction = "LLVMinstruction";
|
|
|
|
|
static const char *LLVM_phinode = "LLVMphinode";
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_irbuilder(L, idx) \
|
|
|
|
|
((IRBuilderHolder *)raviL_testudata(L, idx, LLVM_irbuilder))
|
|
|
|
|
((IRBuilderHolder *)luaL_testudata(L, idx, LLVM_irbuilder))
|
|
|
|
|
#define check_LLVM_irbuilder(L, idx) \
|
|
|
|
|
((IRBuilderHolder *)raviL_checkudata(L, idx, LLVM_irbuilder))
|
|
|
|
|
((IRBuilderHolder *)luaL_checkudata(L, idx, LLVM_irbuilder))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_type(L, idx) \
|
|
|
|
|
((TypeHolder *)raviL_testudata(L, idx, LLVM_type))
|
|
|
|
|
((TypeHolder *)luaL_testudata(L, idx, LLVM_type))
|
|
|
|
|
#define check_LLVM_type(L, idx) \
|
|
|
|
|
((TypeHolder *)raviL_checkudata(L, idx, LLVM_type))
|
|
|
|
|
((TypeHolder *)luaL_checkudata(L, idx, LLVM_type))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_context(L, idx) \
|
|
|
|
|
((ContextHolder *)raviL_testudata(L, idx, LLVM_context))
|
|
|
|
|
((ContextHolder *)luaL_testudata(L, idx, LLVM_context))
|
|
|
|
|
#define check_LLVM_context(L, idx) \
|
|
|
|
|
((ContextHolder *)raviL_checkudata(L, idx, LLVM_context))
|
|
|
|
|
((ContextHolder *)luaL_checkudata(L, idx, LLVM_context))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_structtype(L, idx) \
|
|
|
|
|
((StructTypeHolder *)raviL_testudata(L, idx, LLVM_structtype))
|
|
|
|
|
((StructTypeHolder *)luaL_testudata(L, idx, LLVM_structtype))
|
|
|
|
|
#define check_LLVM_structtype(L, idx) \
|
|
|
|
|
((StructTypeHolder *)raviL_checkudata(L, idx, LLVM_structtype))
|
|
|
|
|
((StructTypeHolder *)luaL_checkudata(L, idx, LLVM_structtype))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_pointertype(L, idx) \
|
|
|
|
|
((PointerTypeHolder *)raviL_testudata(L, idx, LLVM_pointertype))
|
|
|
|
|
((PointerTypeHolder *)luaL_testudata(L, idx, LLVM_pointertype))
|
|
|
|
|
#define check_LLVM_pointertype(L, idx) \
|
|
|
|
|
((PointerTypeHolder *)raviL_checkudata(L, idx, LLVM_pointertype))
|
|
|
|
|
((PointerTypeHolder *)luaL_checkudata(L, idx, LLVM_pointertype))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_functiontype(L, idx) \
|
|
|
|
|
((FunctionTypeHolder *)raviL_testudata(L, idx, LLVM_functiontype))
|
|
|
|
|
((FunctionTypeHolder *)luaL_testudata(L, idx, LLVM_functiontype))
|
|
|
|
|
#define check_LLVM_functiontype(L, idx) \
|
|
|
|
|
((FunctionTypeHolder *)raviL_checkudata(L, idx, LLVM_functiontype))
|
|
|
|
|
((FunctionTypeHolder *)luaL_checkudata(L, idx, LLVM_functiontype))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_mainfunction(L, idx) \
|
|
|
|
|
((MainFunctionHolder *)raviL_testudata(L, idx, LLVM_mainfunction))
|
|
|
|
|
((MainFunctionHolder *)luaL_testudata(L, idx, LLVM_mainfunction))
|
|
|
|
|
#define check_LLVM_mainfunction(L, idx) \
|
|
|
|
|
((MainFunctionHolder *)raviL_checkudata(L, idx, LLVM_mainfunction))
|
|
|
|
|
((MainFunctionHolder *)luaL_checkudata(L, idx, LLVM_mainfunction))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_function(L, idx) \
|
|
|
|
|
((FunctionHolder *)raviL_testudata(L, idx, LLVM_function))
|
|
|
|
|
((FunctionHolder *)luaL_testudata(L, idx, LLVM_function))
|
|
|
|
|
#define check_LLVM_function(L, idx) \
|
|
|
|
|
((FunctionHolder *)raviL_checkudata(L, idx, LLVM_function))
|
|
|
|
|
((FunctionHolder *)luaL_checkudata(L, idx, LLVM_function))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_basicblock(L, idx) \
|
|
|
|
|
((BasicBlockHolder *)raviL_testudata(L, idx, LLVM_basicblock))
|
|
|
|
|
((BasicBlockHolder *)luaL_testudata(L, idx, LLVM_basicblock))
|
|
|
|
|
#define check_LLVM_basicblock(L, idx) \
|
|
|
|
|
((BasicBlockHolder *)raviL_checkudata(L, idx, LLVM_basicblock))
|
|
|
|
|
((BasicBlockHolder *)luaL_checkudata(L, idx, LLVM_basicblock))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_value(L, idx) \
|
|
|
|
|
((ValueHolder *)raviL_testudata(L, idx, LLVM_value))
|
|
|
|
|
((ValueHolder *)luaL_testudata(L, idx, LLVM_value))
|
|
|
|
|
#define check_LLVM_value(L, idx) \
|
|
|
|
|
((ValueHolder *)raviL_checkudata(L, idx, LLVM_value))
|
|
|
|
|
((ValueHolder *)luaL_checkudata(L, idx, LLVM_value))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_constant(L, idx) \
|
|
|
|
|
((ConstantHolder *)raviL_testudata(L, idx, LLVM_constant))
|
|
|
|
|
((ConstantHolder *)luaL_testudata(L, idx, LLVM_constant))
|
|
|
|
|
#define check_LLVM_constant(L, idx) \
|
|
|
|
|
((ConstantHolder *)raviL_checkudata(L, idx, LLVM_constant))
|
|
|
|
|
((ConstantHolder *)luaL_checkudata(L, idx, LLVM_constant))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_instruction(L, idx) \
|
|
|
|
|
((InstructionHolder *)raviL_testudata(L, idx, LLVM_instruction))
|
|
|
|
|
((InstructionHolder *)luaL_testudata(L, idx, LLVM_instruction))
|
|
|
|
|
#define check_LLVM_instruction(L, idx) \
|
|
|
|
|
((InstructionHolder *)raviL_checkudata(L, idx, LLVM_instruction))
|
|
|
|
|
((InstructionHolder *)luaL_checkudata(L, idx, LLVM_instruction))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_module(L, idx) \
|
|
|
|
|
((ModuleHolder *)raviL_testudata(L, idx, LLVM_module))
|
|
|
|
|
((ModuleHolder *)luaL_testudata(L, idx, LLVM_module))
|
|
|
|
|
#define check_LLVM_module(L, idx) \
|
|
|
|
|
((ModuleHolder *)raviL_checkudata(L, idx, LLVM_module))
|
|
|
|
|
((ModuleHolder *)luaL_checkudata(L, idx, LLVM_module))
|
|
|
|
|
|
|
|
|
|
#define test_LLVM_phinode(L, idx) \
|
|
|
|
|
((PhiNodeHolder *)raviL_testudata(L, idx, LLVM_phinode))
|
|
|
|
|
((PhiNodeHolder *)luaL_testudata(L, idx, LLVM_phinode))
|
|
|
|
|
#define check_LLVM_phinode(L, idx) \
|
|
|
|
|
((PhiNodeHolder *)raviL_checkudata(L, idx, LLVM_phinode))
|
|
|
|
|
((PhiNodeHolder *)luaL_checkudata(L, idx, LLVM_phinode))
|
|
|
|
|
|
|
|
|
|
struct ContextHolder {
|
|
|
|
|
/* Each Ravi instance (Lua instance) has its own
|
|
|
|
@ -218,7 +218,7 @@ static int context_new_LLVM_irbuilder(lua_State *L) {
|
|
|
|
|
IRBuilderHolder *builder =
|
|
|
|
|
(IRBuilderHolder *)lua_newuserdata(L, sizeof(IRBuilderHolder));
|
|
|
|
|
builder->builder = new llvm::IRBuilder<>(context->jitState->context());
|
|
|
|
|
raviL_getmetatable(L, LLVM_irbuilder);
|
|
|
|
|
luaL_getmetatable(L, LLVM_irbuilder);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
@ -236,7 +236,7 @@ static int collect_LLVM_irbuilder(lua_State *L) {
|
|
|
|
|
static void alloc_LLVM_module(lua_State *L,
|
|
|
|
|
const std::shared_ptr<ravi::RaviJITModule> &M) {
|
|
|
|
|
ModuleHolder *mh = (ModuleHolder *)lua_newuserdata(L, sizeof(ModuleHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_module);
|
|
|
|
|
luaL_getmetatable(L, LLVM_module);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
new (mh) ModuleHolder(M);
|
|
|
|
|
}
|
|
|
|
@ -251,21 +251,21 @@ static int collect_LLVM_module(lua_State *L) {
|
|
|
|
|
|
|
|
|
|
static void alloc_LLVM_type(lua_State *L, llvm::Type *t) {
|
|
|
|
|
TypeHolder *tt = (TypeHolder *)lua_newuserdata(L, sizeof(TypeHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_type);
|
|
|
|
|
luaL_getmetatable(L, LLVM_type);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
tt->type = t;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void alloc_LLVM_context(lua_State *L, ravi::RaviJITState *jit) {
|
|
|
|
|
ContextHolder *h = (ContextHolder *)lua_newuserdata(L, sizeof(ContextHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_context);
|
|
|
|
|
luaL_getmetatable(L, LLVM_context);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->jitState = jit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void alloc_LLVM_value(lua_State *L, llvm::Value *v) {
|
|
|
|
|
ValueHolder *h = (ValueHolder *)lua_newuserdata(L, sizeof(ValueHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_value);
|
|
|
|
|
luaL_getmetatable(L, LLVM_value);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->value = v;
|
|
|
|
|
}
|
|
|
|
@ -273,7 +273,7 @@ static void alloc_LLVM_value(lua_State *L, llvm::Value *v) {
|
|
|
|
|
static void alloc_LLVM_structtype(lua_State *L, llvm::StructType *type) {
|
|
|
|
|
StructTypeHolder *h =
|
|
|
|
|
(StructTypeHolder *)lua_newuserdata(L, sizeof(StructTypeHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_structtype);
|
|
|
|
|
luaL_getmetatable(L, LLVM_structtype);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->type = type;
|
|
|
|
|
}
|
|
|
|
@ -281,7 +281,7 @@ static void alloc_LLVM_structtype(lua_State *L, llvm::StructType *type) {
|
|
|
|
|
static void alloc_LLVM_pointertype(lua_State *L, llvm::PointerType *type) {
|
|
|
|
|
PointerTypeHolder *h =
|
|
|
|
|
(PointerTypeHolder *)lua_newuserdata(L, sizeof(PointerTypeHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_pointertype);
|
|
|
|
|
luaL_getmetatable(L, LLVM_pointertype);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->type = type;
|
|
|
|
|
}
|
|
|
|
@ -289,7 +289,7 @@ static void alloc_LLVM_pointertype(lua_State *L, llvm::PointerType *type) {
|
|
|
|
|
static void alloc_LLVM_functiontype(lua_State *L, llvm::FunctionType *type) {
|
|
|
|
|
FunctionTypeHolder *h =
|
|
|
|
|
(FunctionTypeHolder *)lua_newuserdata(L, sizeof(FunctionTypeHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_functiontype);
|
|
|
|
|
luaL_getmetatable(L, LLVM_functiontype);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->type = type;
|
|
|
|
|
}
|
|
|
|
@ -297,7 +297,7 @@ static void alloc_LLVM_functiontype(lua_State *L, llvm::FunctionType *type) {
|
|
|
|
|
static void alloc_LLVM_function(lua_State *L, llvm::Function *f) {
|
|
|
|
|
FunctionHolder *h =
|
|
|
|
|
(FunctionHolder *)lua_newuserdata(L, sizeof(FunctionHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_function);
|
|
|
|
|
luaL_getmetatable(L, LLVM_function);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->function = f;
|
|
|
|
|
}
|
|
|
|
@ -305,7 +305,7 @@ static void alloc_LLVM_function(lua_State *L, llvm::Function *f) {
|
|
|
|
|
static void alloc_LLVM_constant(lua_State *L, llvm::Constant *f) {
|
|
|
|
|
ConstantHolder *h =
|
|
|
|
|
(ConstantHolder *)lua_newuserdata(L, sizeof(ConstantHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_constant);
|
|
|
|
|
luaL_getmetatable(L, LLVM_constant);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->constant = f;
|
|
|
|
|
}
|
|
|
|
@ -313,14 +313,14 @@ static void alloc_LLVM_constant(lua_State *L, llvm::Constant *f) {
|
|
|
|
|
static void alloc_LLVM_instruction(lua_State *L, llvm::Instruction *i) {
|
|
|
|
|
InstructionHolder *h =
|
|
|
|
|
(InstructionHolder *)lua_newuserdata(L, sizeof(InstructionHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_instruction);
|
|
|
|
|
luaL_getmetatable(L, LLVM_instruction);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->i = i;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void alloc_LLVM_phinode(lua_State *L, llvm::PHINode *phi) {
|
|
|
|
|
PhiNodeHolder *h = (PhiNodeHolder *)lua_newuserdata(L, sizeof(PhiNodeHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_phinode);
|
|
|
|
|
luaL_getmetatable(L, LLVM_phinode);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->phi = phi;
|
|
|
|
|
}
|
|
|
|
@ -335,7 +335,7 @@ static MainFunctionHolder *alloc_LLVM_mainfunction(lua_State *L,
|
|
|
|
|
h->func = nullptr;
|
|
|
|
|
h->compiled_func = nullptr;
|
|
|
|
|
h->arg1 = nullptr;
|
|
|
|
|
raviL_getmetatable(L, LLVM_mainfunction);
|
|
|
|
|
luaL_getmetatable(L, LLVM_mainfunction);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
auto module = std::make_shared<ravi::RaviJITModule>(G(L)->ravi_state->jit);
|
|
|
|
|
h->func = new ravi::RaviJITFunction(&h->compiled_func, module, type,
|
|
|
|
@ -404,7 +404,7 @@ static MainFunctionHolder *alloc_LLVM_luaCfunction(
|
|
|
|
|
h->func = nullptr;
|
|
|
|
|
h->compiled_func = nullptr;
|
|
|
|
|
h->arg1 = nullptr;
|
|
|
|
|
raviL_getmetatable(L, LLVM_mainfunction);
|
|
|
|
|
luaL_getmetatable(L, LLVM_mainfunction);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->func = new ravi::RaviJITFunction(&h->compiled_func, module, name);
|
|
|
|
|
h->is_valid = validate_has_luaCFunction_signature(h, error_message, sizeof error_message);
|
|
|
|
@ -428,7 +428,7 @@ static int collect_LLVM_mainfunction(lua_State *L) {
|
|
|
|
|
static void alloc_LLVM_basicblock(lua_State *L, llvm::BasicBlock *b) {
|
|
|
|
|
BasicBlockHolder *h =
|
|
|
|
|
(BasicBlockHolder *)lua_newuserdata(L, sizeof(BasicBlockHolder));
|
|
|
|
|
raviL_getmetatable(L, LLVM_basicblock);
|
|
|
|
|
luaL_getmetatable(L, LLVM_basicblock);
|
|
|
|
|
lua_setmetatable(L, -2);
|
|
|
|
|
h->b = b;
|
|
|
|
|
}
|
|
|
|
@ -1512,7 +1512,7 @@ static const luaL_Reg irbuilder_methods[] = {
|
|
|
|
|
{NULL, NULL}};
|
|
|
|
|
|
|
|
|
|
LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
raviL_newmetatable(L, LLVM_context, LLVM_context);
|
|
|
|
|
luaL_newmetatable(L, LLVM_context);
|
|
|
|
|
lua_pushstring(L, LLVM_context);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushvalue(L, -1); /* push metatable */
|
|
|
|
@ -1520,7 +1520,7 @@ LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
luaL_setfuncs(L, context_methods, 0);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_module, LLVM_module);
|
|
|
|
|
luaL_newmetatable(L, LLVM_module);
|
|
|
|
|
lua_pushstring(L, LLVM_module);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushcfunction(L, collect_LLVM_module);
|
|
|
|
@ -1530,7 +1530,7 @@ LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
luaL_setfuncs(L, module_methods, 0);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_irbuilder, LLVM_irbuilder);
|
|
|
|
|
luaL_newmetatable(L, LLVM_irbuilder);
|
|
|
|
|
lua_pushstring(L, LLVM_irbuilder);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushcfunction(L, collect_LLVM_irbuilder);
|
|
|
|
@ -1540,7 +1540,7 @@ LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
luaL_setfuncs(L, irbuilder_methods, 0);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_mainfunction, LLVM_mainfunction);
|
|
|
|
|
luaL_newmetatable(L, LLVM_mainfunction);
|
|
|
|
|
lua_pushstring(L, LLVM_mainfunction);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushcfunction(L, collect_LLVM_mainfunction);
|
|
|
|
@ -1550,7 +1550,7 @@ LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
luaL_setfuncs(L, main_function_methods, 0);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_function, LLVM_function);
|
|
|
|
|
luaL_newmetatable(L, LLVM_function);
|
|
|
|
|
lua_pushstring(L, LLVM_function);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushvalue(L, -1); /* push metatable */
|
|
|
|
@ -1558,17 +1558,17 @@ LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
luaL_setfuncs(L, function_methods, 0);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_type, LLVM_type);
|
|
|
|
|
luaL_newmetatable(L, LLVM_type);
|
|
|
|
|
lua_pushstring(L, LLVM_type);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_value, LLVM_value);
|
|
|
|
|
luaL_newmetatable(L, LLVM_value);
|
|
|
|
|
lua_pushstring(L, LLVM_value);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_structtype, LLVM_structtype);
|
|
|
|
|
luaL_newmetatable(L, LLVM_structtype);
|
|
|
|
|
lua_pushstring(L, LLVM_structtype);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushvalue(L, -1); /* push metatable */
|
|
|
|
@ -1576,32 +1576,32 @@ LUAMOD_API int raviopen_llvmluaapi(lua_State *L) {
|
|
|
|
|
luaL_setfuncs(L, structtype_methods, 0);
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_pointertype, LLVM_pointertype);
|
|
|
|
|
luaL_newmetatable(L, LLVM_pointertype);
|
|
|
|
|
lua_pushstring(L, LLVM_pointertype);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_functiontype, LLVM_functiontype);
|
|
|
|
|
luaL_newmetatable(L, LLVM_functiontype);
|
|
|
|
|
lua_pushstring(L, LLVM_functiontype);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_basicblock, LLVM_basicblock);
|
|
|
|
|
luaL_newmetatable(L, LLVM_basicblock);
|
|
|
|
|
lua_pushstring(L, LLVM_basicblock);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_constant, LLVM_constant);
|
|
|
|
|
luaL_newmetatable(L, LLVM_constant);
|
|
|
|
|
lua_pushstring(L, LLVM_constant);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_instruction, LLVM_instruction);
|
|
|
|
|
luaL_newmetatable(L, LLVM_instruction);
|
|
|
|
|
lua_pushstring(L, LLVM_instruction);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pop(L, 1);
|
|
|
|
|
|
|
|
|
|
raviL_newmetatable(L, LLVM_phinode, LLVM_phinode);
|
|
|
|
|
luaL_newmetatable(L, LLVM_phinode);
|
|
|
|
|
lua_pushstring(L, LLVM_phinode);
|
|
|
|
|
lua_setfield(L, -2, "type");
|
|
|
|
|
lua_pushvalue(L, -1); /* push metatable */
|
|
|
|
|