| Check Args | 
 | 
int luac_checkargs(lua_State *L, int count, ...)
{
  va_list ap;
  int i, t, u;
  va_start(ap, count);
  for (i = 1; i <= count; i++)
  {
    t = va_arg(ap, int);
    if (t<=LUA_TNIL) continue;
    u = lua_type(L, i);
    if (t!=u)
    {
      va_end(ap);
      return luaL_typerror(L, i, lua_typename(L, t));
    }
  }
  va_end(ap);
  if (lua_gettop(L)>count)
    return luaL_argerror (L, count+1, "too many arguments");
  return 0;
}
An example usage of this function would be as such:
static int luac_testcheckargs(lua_State *L)
{
  luac_checkargs(L, 3, LUA_TNUMBER, LUA_TNIL, LUA_TBOOLEAN);
  return 0;
}
It would be useful for overloaded functions to be able to specifically test a single argument against several types. LUA_TNIL and LUA_TNONE are used as an escape, so that this function doesn't check the type of that argument.
comments appreciated.