src/lauxlib.h - luajit-2.0-src

Data types defined

Macros defined

Source code

  1. /*
  2. ** $Id: lauxlib.h,v 1.88.1.1 2007/12/27 13:02:25 roberto Exp $
  3. ** Auxiliary functions for building Lua libraries
  4. ** See Copyright Notice in lua.h
  5. */


  6. #ifndef lauxlib_h
  7. #define lauxlib_h


  8. #include <stddef.h>
  9. #include <stdio.h>

  10. #include "lua.h"


  11. #define luaL_getn(L,i)          ((int)lua_objlen(L, i))
  12. #define luaL_setn(L,i,j)        ((void)0/* no op! */

  13. /* extra error code for `luaL_load' */
  14. #define LUA_ERRFILE     (LUA_ERRERR+1)

  15. typedef struct luaL_Reg {
  16.   const char *name;
  17.   lua_CFunction func;
  18. } luaL_Reg;

  19. LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname,
  20.                                 const luaL_Reg *l, int nup);
  21. LUALIB_API void (luaL_register) (lua_State *L, const char *libname,
  22.                                 const luaL_Reg *l);
  23. LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e);
  24. LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e);
  25. LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname);
  26. LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
  27. LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg,
  28.                                                           size_t *l);
  29. LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg,
  30.                                           const char *def, size_t *l);
  31. LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg);
  32. LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def);

  33. LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg);
  34. LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg,
  35.                                           lua_Integer def);

  36. LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg);
  37. LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t);
  38. LUALIB_API void (luaL_checkany) (lua_State *L, int narg);

  39. LUALIB_API int   (luaL_newmetatable) (lua_State *L, const char *tname);
  40. LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname);

  41. LUALIB_API void (luaL_where) (lua_State *L, int lvl);
  42. LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...);

  43. LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def,
  44.                                    const char *const lst[]);

  45. LUALIB_API int (luaL_ref) (lua_State *L, int t);
  46. LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref);

  47. LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename);
  48. LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz,
  49.                                   const char *name);
  50. LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s);

  51. LUALIB_API lua_State *(luaL_newstate) (void);


  52. LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p,
  53.                                                   const char *r);

  54. LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx,
  55.                                          const char *fname, int szhint);

  56. /* From Lua 5.2. */
  57. LUALIB_API int luaL_fileresult(lua_State *L, int stat, const char *fname);
  58. LUALIB_API int luaL_execresult(lua_State *L, int stat);
  59. LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename,
  60.                                  const char *mode);
  61. LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz,
  62.                                    const char *name, const char *mode);
  63. LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
  64.                                 int level);


  65. /*
  66. ** ===============================================================
  67. ** some useful macros
  68. ** ===============================================================
  69. */

  70. #define luaL_argcheck(L, cond,numarg,extramsg)        \
  71.                 ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
  72. #define luaL_checkstring(L,n)        (luaL_checklstring(L, (n), NULL))
  73. #define luaL_optstring(L,n,d)        (luaL_optlstring(L, (n), (d), NULL))
  74. #define luaL_checkint(L,n)        ((int)luaL_checkinteger(L, (n)))
  75. #define luaL_optint(L,n,d)        ((int)luaL_optinteger(L, (n), (d)))
  76. #define luaL_checklong(L,n)        ((long)luaL_checkinteger(L, (n)))
  77. #define luaL_optlong(L,n,d)        ((long)luaL_optinteger(L, (n), (d)))

  78. #define luaL_typename(L,i)        lua_typename(L, lua_type(L,(i)))

  79. #define luaL_dofile(L, fn) \
  80.         (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))

  81. #define luaL_dostring(L, s) \
  82.         (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))

  83. #define luaL_getmetatable(L,n)        (lua_getfield(L, LUA_REGISTRYINDEX, (n)))

  84. #define luaL_opt(L,f,n,d)        (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))

  85. /*
  86. ** {======================================================
  87. ** Generic Buffer manipulation
  88. ** =======================================================
  89. */



  90. typedef struct luaL_Buffer {
  91.   char *p;                        /* current position in buffer */
  92.   int lvl;  /* number of strings in the stack (level) */
  93.   lua_State *L;
  94.   char buffer[LUAL_BUFFERSIZE];
  95. } luaL_Buffer;

  96. #define luaL_addchar(B,c) \
  97.   ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \
  98.    (*(B)->p++ = (char)(c)))

  99. /* compatibility only */
  100. #define luaL_putchar(B,c)        luaL_addchar(B,c)

  101. #define luaL_addsize(B,n)        ((B)->p += (n))

  102. LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B);
  103. LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B);
  104. LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
  105. LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s);
  106. LUALIB_API void (luaL_addvalue) (luaL_Buffer *B);
  107. LUALIB_API void (luaL_pushresult) (luaL_Buffer *B);


  108. /* }====================================================== */


  109. /* compatibility with ref system */

  110. /* pre-defined references */
  111. #define LUA_NOREF       (-2)
  112. #define LUA_REFNIL      (-1)

  113. #define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \
  114.       (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0))

  115. #define lua_unref(L,ref)        luaL_unref(L, LUA_REGISTRYINDEX, (ref))

  116. #define lua_getref(L,ref)       lua_rawgeti(L, LUA_REGISTRYINDEX, (ref))


  117. #define luaL_reg        luaL_Reg

  118. #endif