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 7950038..f987bb0 100644
--- a/src/hlua_fcn.c
+++ b/src/hlua_fcn.c
@@ -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;
}