lauxlib.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. ** $Id: lauxlib.c,v 1.3 1997/11/04 15:27:53 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. lua_open(); /* make sure lua is already open */
  58. for (i=0; i<n; i++)
  59. lua_register(l[i].name, l[i].func);
  60. }
  61. void luaL_verror (char *fmt, ...)
  62. {
  63. char buff[500];
  64. va_list argp;
  65. va_start(argp, fmt);
  66. vsprintf(buff, fmt, argp);
  67. va_end(argp);
  68. lua_error(buff);
  69. }