lauxlib.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. ** $Id: $
  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. void luaL_openlib (struct luaL_reg *l, int n)
  49. {
  50. int i;
  51. for (i=0; i<n; i++)
  52. lua_register(l[i].name, l[i].func);
  53. }
  54. void luaL_verror (char *fmt, ...)
  55. {
  56. char buff[500];
  57. va_list argp;
  58. va_start(argp, fmt);
  59. vsprintf(buff, fmt, argp);
  60. va_end(argp);
  61. lua_error(buff);
  62. }