lauxlib.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. ** $Id: lauxlib.c,v 1.1 1997/09/16 19:25:59 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_nonnullarg (int numArg)
  49. {
  50. lua_Object o = lua_getparam(numArg);
  51. luaL_arg_check(o != LUA_NOOBJECT, numArg, "value expected");
  52. return o;
  53. }
  54. void luaL_openlib (struct luaL_reg *l, int n)
  55. {
  56. int i;
  57. for (i=0; i<n; i++)
  58. lua_register(l[i].name, l[i].func);
  59. }
  60. void luaL_verror (char *fmt, ...)
  61. {
  62. char buff[500];
  63. va_list argp;
  64. va_start(argp, fmt);
  65. vsprintf(buff, fmt, argp);
  66. va_end(argp);
  67. lua_error(buff);
  68. }