| 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 |  | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef lauxlib_h | 
|---|
| 9 | #define lauxlib_h | 
|---|
| 10 |  | 
|---|
| 11 |  | 
|---|
| 12 | #include <stddef.h> | 
|---|
| 13 | #include <stdio.h> | 
|---|
| 14 |  | 
|---|
| 15 | #include "lua.h" | 
|---|
| 16 |  | 
|---|
| 17 |  | 
|---|
| 18 | #if defined(LUA_COMPAT_GETN) | 
|---|
| 19 | LUALIB_API int (luaL_getn) (lua_State *L, int t); | 
|---|
| 20 | LUALIB_API void (luaL_setn) (lua_State *L, int t, int n); | 
|---|
| 21 | #else | 
|---|
| 22 | #define luaL_getn(L,i)          ((int)lua_objlen(L, i)) | 
|---|
| 23 | #define luaL_setn(L,i,j)        ((void)0)  /* no op! */ | 
|---|
| 24 | #endif | 
|---|
| 25 |  | 
|---|
| 26 | #if defined(LUA_COMPAT_OPENLIB) | 
|---|
| 27 | #define luaI_openlib    luaL_openlib | 
|---|
| 28 | #endif | 
|---|
| 29 |  | 
|---|
| 30 |  | 
|---|
| 31 | /* extra error code for `luaL_load' */ | 
|---|
| 32 | #define LUA_ERRFILE     (LUA_ERRERR+1) | 
|---|
| 33 |  | 
|---|
| 34 |  | 
|---|
| 35 | typedef struct luaL_Reg { | 
|---|
| 36 | const char *name; | 
|---|
| 37 | lua_CFunction func; | 
|---|
| 38 | } luaL_Reg; | 
|---|
| 39 |  | 
|---|
| 40 |  | 
|---|
| 41 |  | 
|---|
| 42 | LUALIB_API void (luaI_openlib) (lua_State *L, const char *libname, | 
|---|
| 43 | const luaL_Reg *l, int nup); | 
|---|
| 44 | LUALIB_API void (luaL_register) (lua_State *L, const char *libname, | 
|---|
| 45 | const luaL_Reg *l); | 
|---|
| 46 | LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); | 
|---|
| 47 | LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); | 
|---|
| 48 | LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); | 
|---|
| 49 | LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); | 
|---|
| 50 | LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, | 
|---|
| 51 | size_t *l); | 
|---|
| 52 | LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, | 
|---|
| 53 | const char *def, size_t *l); | 
|---|
| 54 | LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); | 
|---|
| 55 | LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); | 
|---|
| 56 |  | 
|---|
| 57 | LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); | 
|---|
| 58 | LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, | 
|---|
| 59 | lua_Integer def); | 
|---|
| 60 |  | 
|---|
| 61 | LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); | 
|---|
| 62 | LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); | 
|---|
| 63 | LUALIB_API void (luaL_checkany) (lua_State *L, int narg); | 
|---|
| 64 |  | 
|---|
| 65 | LUALIB_API int   (luaL_newmetatable) (lua_State *L, const char *tname); | 
|---|
| 66 | LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); | 
|---|
| 67 |  | 
|---|
| 68 | LUALIB_API void (luaL_where) (lua_State *L, int lvl); | 
|---|
| 69 | LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); | 
|---|
| 70 |  | 
|---|
| 71 | LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, | 
|---|
| 72 | const char *const lst[]); | 
|---|
| 73 |  | 
|---|
| 74 | LUALIB_API int (luaL_ref) (lua_State *L, int t); | 
|---|
| 75 | LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); | 
|---|
| 76 |  | 
|---|
| 77 | LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); | 
|---|
| 78 | LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, | 
|---|
| 79 | const char *name); | 
|---|
| 80 | LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); | 
|---|
| 81 |  | 
|---|
| 82 | LUALIB_API lua_State *(luaL_newstate) (void); | 
|---|
| 83 |  | 
|---|
| 84 |  | 
|---|
| 85 | LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, | 
|---|
| 86 | const char *r); | 
|---|
| 87 |  | 
|---|
| 88 | LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, | 
|---|
| 89 | const char *fname, int szhint); | 
|---|
| 90 |  | 
|---|
| 91 |  | 
|---|
| 92 |  | 
|---|
| 93 |  | 
|---|
| 94 | /* | 
|---|
| 95 | ** =============================================================== | 
|---|
| 96 | ** some useful macros | 
|---|
| 97 | ** =============================================================== | 
|---|
| 98 | */ | 
|---|
| 99 |  | 
|---|
| 100 | #define luaL_argcheck(L, cond,numarg,extramsg)  \ | 
|---|
| 101 | ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) | 
|---|
| 102 | #define luaL_checkstring(L,n)   (luaL_checklstring(L, (n), NULL)) | 
|---|
| 103 | #define luaL_optstring(L,n,d)   (luaL_optlstring(L, (n), (d), NULL)) | 
|---|
| 104 | #define luaL_checkint(L,n)      ((int)luaL_checkinteger(L, (n))) | 
|---|
| 105 | #define luaL_optint(L,n,d)      ((int)luaL_optinteger(L, (n), (d))) | 
|---|
| 106 | #define luaL_checklong(L,n)     ((long)luaL_checkinteger(L, (n))) | 
|---|
| 107 | #define luaL_optlong(L,n,d)     ((long)luaL_optinteger(L, (n), (d))) | 
|---|
| 108 |  | 
|---|
| 109 | #define luaL_typename(L,i)      lua_typename(L, lua_type(L,(i))) | 
|---|
| 110 |  | 
|---|
| 111 | #define luaL_dofile(L, fn) \ | 
|---|
| 112 | (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) | 
|---|
| 113 |  | 
|---|
| 114 | #define luaL_dostring(L, s) \ | 
|---|
| 115 | (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) | 
|---|
| 116 |  | 
|---|
| 117 | #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n))) | 
|---|
| 118 |  | 
|---|
| 119 | #define luaL_opt(L,f,n,d)       (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) | 
|---|
| 120 |  | 
|---|
| 121 | /* | 
|---|
| 122 | ** {====================================================== | 
|---|
| 123 | ** Generic Buffer manipulation | 
|---|
| 124 | ** ======================================================= | 
|---|
| 125 | */ | 
|---|
| 126 |  | 
|---|
| 127 |  | 
|---|
| 128 |  | 
|---|
| 129 | typedef struct luaL_Buffer { | 
|---|
| 130 | char *p;                      /* current position in buffer */ | 
|---|
| 131 | int lvl;  /* number of strings in the stack (level) */ | 
|---|
| 132 | lua_State *L; | 
|---|
| 133 | char buffer[LUAL_BUFFERSIZE]; | 
|---|
| 134 | } luaL_Buffer; | 
|---|
| 135 |  | 
|---|
| 136 | #define luaL_addchar(B,c) \ | 
|---|
| 137 | ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ | 
|---|
| 138 | (*(B)->p++ = (char)(c))) | 
|---|
| 139 |  | 
|---|
| 140 | /* compatibility only */ | 
|---|
| 141 | #define luaL_putchar(B,c)       luaL_addchar(B,c) | 
|---|
| 142 |  | 
|---|
| 143 | #define luaL_addsize(B,n)       ((B)->p += (n)) | 
|---|
| 144 |  | 
|---|
| 145 | LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); | 
|---|
| 146 | LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); | 
|---|
| 147 | LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); | 
|---|
| 148 | LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); | 
|---|
| 149 | LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); | 
|---|
| 150 | LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); | 
|---|
| 151 |  | 
|---|
| 152 |  | 
|---|
| 153 | /* }====================================================== */ | 
|---|
| 154 |  | 
|---|
| 155 |  | 
|---|
| 156 | /* compatibility with ref system */ | 
|---|
| 157 |  | 
|---|
| 158 | /* pre-defined references */ | 
|---|
| 159 | #define LUA_NOREF       (-2) | 
|---|
| 160 | #define LUA_REFNIL      (-1) | 
|---|
| 161 |  | 
|---|
| 162 | #define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ | 
|---|
| 163 | (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) | 
|---|
| 164 |  | 
|---|
| 165 | #define lua_unref(L,ref)        luaL_unref(L, LUA_REGISTRYINDEX, (ref)) | 
|---|
| 166 |  | 
|---|
| 167 | #define lua_getref(L,ref)       lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) | 
|---|
| 168 |  | 
|---|
| 169 |  | 
|---|
| 170 | #define luaL_reg        luaL_Reg | 
|---|
| 171 |  | 
|---|
| 172 | #endif | 
|---|
| 173 |  | 
|---|
| 174 |  | 
|---|