lauxlib.c 2.1 KB

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