]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add helper to alter metatables
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 4 Mar 2020 12:47:45 +0000 (12:47 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 4 Mar 2020 20:03:59 +0000 (20:03 +0000)
src/lua/lua_common.c
src/lua/lua_common.h
src/lua/lua_worker.c

index 2087fe592cff34e294d4af7507b67afc86aca4ba..ce5fff6c5d4d89bf80b87cd99691a9de38aaba27 100644 (file)
@@ -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)
index 53e925832dfdee179f83e7d6d658c55c7eac441a..aea6ebf26014291d57f90b8ea090f2058b347282 100644 (file)
@@ -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)
  */
index f7f4b3c68450dbf9a564975a565fd3adc73457f5..a286069cb7ecb65890ff7f6ad2789ac44e9c88db 100644 (file)
@@ -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),