From: Thierry Fournier Date: Wed, 27 Jan 2016 09:34:09 +0000 (+0100) Subject: MINOR: lua: merge function X-Git-Tag: v1.7-dev2~99 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=53518275603aa40b6ee3bc1fafb6f6751d8ce0cf;p=thirdparty%2Fhaproxy.git MINOR: lua: merge function This patch merges the last imported functions in one, because the function hlua_metatype is only used by hlua_checudata. This patch fix also the compilation error became by the copy of the code. --- diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c index 7950038cef..f987bb054c 100644 --- a/src/hlua_fcn.c +++ b/src/hlua_fcn.c @@ -9,43 +9,40 @@ #include -/* Return true if the data in stack[] is an object of - * type . - */ -static int hlua_metaistype(lua_State *L, int ud, int class_ref) -{ - if (!lua_getmetatable(L, ud)) - return 0; - - lua_rawgeti(L, LUA_REGISTRYINDEX, class_ref); - if (!lua_rawequal(L, -1, -2)) { - lua_pop(L, 2); - return 0; - } - - lua_pop(L, 2); - return 1; -} - /* Return an object of the expected type, or throws an error. */ void *hlua_checkudata(lua_State *L, int ud, int class_ref) { void *p; + int ret; /* Check if the stack entry is an array. */ if (!lua_istable(L, ud)) - WILL_LJMP(luaL_argerror(L, ud, NULL)); + luaL_argerror(L, ud, NULL); + + /* pop the metatable of the referencecd object. */ + if (!lua_getmetatable(L, ud)) + luaL_argerror(L, ud, NULL); + + /* pop the expected metatable. */ + lua_rawgeti(L, LUA_REGISTRYINDEX, class_ref); + /* Check if the metadata have the expected type. */ - if (!hlua_metaistype(L, ud, class_ref)) - WILL_LJMP(luaL_argerror(L, ud, NULL)); + ret = lua_rawequal(L, -1, -2); + lua_pop(L, 2); + if (!ret) + luaL_argerror(L, ud, NULL); + /* Push on the stack at the entry [0] of the table. */ lua_rawgeti(L, ud, 0); + /* Check if this entry is userdata. */ p = lua_touserdata(L, -1); if (!p) - WILL_LJMP(luaL_argerror(L, ud, NULL)); + luaL_argerror(L, ud, NULL); + /* Remove the entry returned by lua_rawgeti(). */ lua_pop(L, 1); + /* Return the associated struct. */ return p; }