From: Christopher Faulet Date: Tue, 25 Feb 2020 09:20:04 +0000 (+0100) Subject: MINOR: lua: Add a function to get a reference on a table in the stack X-Git-Tag: v2.5-dev4~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba9e21dc68044e2ce5ffce317e8786f1079f6fee;p=thirdparty%2Fhaproxy.git MINOR: lua: Add a function to get a reference on a table in the stack The hlua_checktable() function may now be used to create and return a reference on a table in stack, given its position. This function ensures it is really a table and throws an exception if not. This patch is mandatory to allow the support of the filters written in lua. --- diff --git a/src/hlua.c b/src/hlua.c index 21786a1d1e..e7bb223b45 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -350,6 +350,20 @@ __LJMP unsigned int hlua_checkfunction(lua_State *L, int argno) return luaL_ref(L, LUA_REGISTRYINDEX); } +/* Used to check an Lua table type in the stack. It creates and + * returns a reference of the table. This function throws an + * error if the rgument is not a "table". + */ +__LJMP unsigned int hlua_checktable(lua_State *L, int argno) +{ + if (!lua_istable(L, argno)) { + const char *msg = lua_pushfstring(L, "table expected, got %s", luaL_typename(L, argno)); + WILL_LJMP(luaL_argerror(L, argno, msg)); + } + lua_pushvalue(L, argno); + return luaL_ref(L, LUA_REGISTRYINDEX); +} + /* Return the string that is of the top of the stack. */ const char *hlua_get_top_error_string(lua_State *L) {