void box_lua_tuple_init(struct lua_State *L) { /* export C functions to Lua */ luaL_findtable(L, LUA_GLOBALSINDEX, "box.internal", 1); luaL_newmetatable(L, tuplelib_name); luaL_register(L, NULL, lbox_tuple_meta); lua_setfield(L, -2, "tuple"); lua_pop(L, 1); /* box.internal */ luaL_register_type(L, tuple_iteratorlib_name, lbox_tuple_iterator_meta); luaL_register_module(L, tuplelib_name, lbox_tuplelib); lua_pop(L, 1); luamp_set_encode_extension(luamp_encode_extension_box); /* * Create special serializer for box.tuple.new(). * Disable storage optimization for excessively * sparse arrays as a tuple always must be regular * MP_ARRAY. */ luaL_serializer_create(&tuple_serializer); tuple_serializer.encode_sparse_ratio = 0; /* Get CTypeID for `struct tuple' */ int rc = luaL_cdef(L, "struct tuple;"); assert(rc == 0); (void) rc; CTID_STRUCT_TUPLE_REF = luaL_ctypeid(L, "struct tuple &"); assert(CTID_STRUCT_TUPLE_REF != 0); }
void box_lua_call_init(struct lua_State *L) { luaL_register(L, "box.internal", boxlib_internal); lua_pop(L, 1); #if 0 /* Get CTypeID for `struct port *' */ int rc = luaL_cdef(L, "struct port;"); assert(rc == 0); (void) rc; CTID_STRUCT_PORT_PTR = luaL_ctypeid(L, "struct port *"); assert(CTID_CONST_STRUCT_TUPLE_REF != 0); #endif }
int tarantool_lua_utils_init(struct lua_State *L) { static const struct luaL_reg serializermeta[] = { {NULL, NULL}, }; /* Get CTypeID for `struct error *' */ int rc = luaL_cdef(L, "struct error;"); assert(rc == 0); (void) rc; CTID_CONST_STRUCT_ERROR_REF = luaL_ctypeid(L, "const struct error &"); assert(CTID_CONST_STRUCT_ERROR_REF != 0); luaL_register_type(L, LUAL_SERIALIZER, serializermeta); /* Create NULL constant */ *(void **) luaL_pushcdata(L, CTID_P_VOID) = NULL; luaL_nil_ref = luaL_ref(L, LUA_REGISTRYINDEX); lua_createtable(L, 0, 1); lua_pushliteral(L, "map"); /* YAML will use flow mode */ lua_setfield(L, -2, LUAL_SERIALIZE); /* automatically reset hints on table change */ luaL_loadstring(L, "setmetatable((...), nil); return rawset(...)"); lua_setfield(L, -2, "__newindex"); luaL_map_metatable_ref = luaL_ref(L, LUA_REGISTRYINDEX); lua_createtable(L, 0, 1); lua_pushliteral(L, "seq"); /* YAML will use flow mode */ lua_setfield(L, -2, LUAL_SERIALIZE); /* automatically reset hints on table change */ luaL_loadstring(L, "setmetatable((...), nil); return rawset(...)"); lua_setfield(L, -2, "__newindex"); luaL_array_metatable_ref = luaL_ref(L, LUA_REGISTRYINDEX); fpconv_init(); return 0; }