lauxlib.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /*
  2. ** $Id: lauxlib.c,v 1.4 1997/11/21 19:00:46 roberto Exp roberto $
  3. ** Auxiliar functions for building Lua libraries
  4. ** See Copyright Notice in lua.h
  5. */
  6. #include <stdarg.h>
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include "lauxlib.h"
  10. #include "lua.h"
  11. #include "luadebug.h"
  12. void luaL_arg_check (int cond, int numarg, char *extramsg)
  13. {
  14. if (!cond) {
  15. char *funcname;
  16. lua_getobjname(lua_stackedfunction(0), &funcname);
  17. if (funcname == NULL)
  18. funcname = "???";
  19. if (extramsg == NULL)
  20. luaL_verror("bad argument #%d to function `%.50s'", numarg, funcname);
  21. else
  22. luaL_verror("bad argument #%d to function `%.50s' (%.100s)",
  23. numarg, funcname, extramsg);
  24. }
  25. }
  26. char *luaL_check_string (int numArg)
  27. {
  28. lua_Object o = lua_getparam(numArg);
  29. luaL_arg_check(lua_isstring(o), numArg, "string expected");
  30. return lua_getstring(o);
  31. }
  32. char *luaL_opt_string (int numArg, char *def)
  33. {
  34. return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
  35. luaL_check_string(numArg);
  36. }
  37. double luaL_check_number (int numArg)
  38. {
  39. lua_Object o = lua_getparam(numArg);
  40. luaL_arg_check(lua_isnumber(o), numArg, "number expected");
  41. return lua_getnumber(o);
  42. }
  43. double luaL_opt_number (int numArg, double def)
  44. {
  45. return (lua_getparam(numArg) == LUA_NOOBJECT) ? def :
  46. luaL_check_number(numArg);
  47. }
  48. lua_Object luaL_tablearg (int arg)
  49. {
  50. lua_Object o = lua_getparam(arg);
  51. luaL_arg_check(lua_istable(o), arg, "table expected");
  52. return o;
  53. }
  54. lua_Object luaL_functionarg (int arg)
  55. {
  56. lua_Object o = lua_getparam(arg);
  57. luaL_arg_check(lua_isfunction(o), arg, "function expected");
  58. return o;
  59. }
  60. lua_Object luaL_nonnullarg (int numArg)
  61. {
  62. lua_Object o = lua_getparam(numArg);
  63. luaL_arg_check(o != LUA_NOOBJECT, numArg, "value expected");
  64. return o;
  65. }
  66. void luaL_openlib (struct luaL_reg *l, int n)
  67. {
  68. int i;
  69. lua_open(); /* make sure lua is already open */
  70. for (i=0; i<n; i++)
  71. lua_register(l[i].name, l[i].func);
  72. }
  73. void luaL_verror (char *fmt, ...)
  74. {
  75. char buff[500];
  76. va_list argp;
  77. va_start(argp, fmt);
  78. vsprintf(buff, fmt, argp);
  79. va_end(argp);
  80. lua_error(buff);
  81. }