]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: lua: merge function
authorThierry Fournier <tfournier@arpalert.org>
Wed, 27 Jan 2016 09:34:09 +0000 (10:34 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 12 Feb 2016 10:08:53 +0000 (11:08 +0100)
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.

src/hlua_fcn.c

index 7950038cef04192ee2ad11ed00a5af0988fb4310..f987bb054cbd96e51dbd8196abb122335c621181 100644 (file)
@@ -9,43 +9,40 @@
 
 #include <common/time.h>
 
-/* Return true if the data in stack[<ud>] is an object of
- * type <class_ref>.
- */
-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;
 }