瀏覽代碼

[Minor] Add helper to alter metatables

tags/2.5
Vsevolod Stakhov 4 年之前
父節點
當前提交
c5836a23f9
共有 3 個文件被更改,包括 28 次插入0 次删除
  1. 18
    0
      src/lua/lua_common.c
  2. 9
    0
      src/lua/lua_common.h
  3. 1
    0
      src/lua/lua_worker.c

+ 18
- 0
src/lua/lua_common.c 查看文件

@@ -197,6 +197,24 @@ rspamd_lua_setclass (lua_State * L, const gchar *classname, gint objidx)
lua_setmetatable (L, objidx);
}

void
rspamd_lua_add_metamethod (lua_State *L, const gchar *classname,
luaL_Reg *meth)
{
khiter_t k;

k = kh_get (lua_class_set, lua_classes, classname);

g_assert (k != kh_end (lua_classes));
/* get metatable identified by pointer */
lua_rawgetp (L, LUA_REGISTRYINDEX,
RSPAMD_LIGHTUSERDATA_MASK (kh_key (lua_classes, k)));

lua_pushcfunction (L, meth->func);
lua_setfield (L, -2, meth->name);
lua_pop (L, 1); /* remove metatable */
}

/* assume that table is at the top */
void
rspamd_lua_table_set (lua_State * L, const gchar *index, const gchar *value)

+ 9
- 0
src/lua/lua_common.h 查看文件

@@ -161,6 +161,15 @@ void rspamd_lua_new_class (lua_State *L,
*/
void rspamd_lua_setclass (lua_State *L, const gchar *classname, gint objidx);

/**
* Adds a new field to the class (metatable) identified by `classname`
* @param L
* @param classname
* @param meth
*/
void rspamd_lua_add_metamethod (lua_State *L, const gchar *classname,
luaL_Reg *meth);

/**
* Set index of table to value (like t['index'] = value)
*/

+ 1
- 0
src/lua/lua_worker.c 查看文件

@@ -47,6 +47,7 @@ LUA_FUNCTION_DEF (worker, add_control_handler);

const luaL_reg worker_reg[] = {
LUA_INTERFACE_DEF (worker, get_name),
{"get_type", lua_worker_get_name},
LUA_INTERFACE_DEF (worker, get_stat),
LUA_INTERFACE_DEF (worker, get_index),
LUA_INTERFACE_DEF (worker, get_count),

Loading…
取消
儲存