1 // SPDX-License-Identifier: MIT 2 /* 3 ** $Id: lauxlib.h,v 1.120.1.1 2013/04/12 18:48:47 roberto Exp $ 4 ** Auxiliary functions for building Lua libraries 5 ** See Copyright Notice in lua.h 6 */ 7 8 9 #ifndef lauxlib_h 10 #define lauxlib_h 11 12 13 #include <sys/lua/lua.h> 14 15 16 17 /* extra error code for `luaL_load' */ 18 #define LUA_ERRFILE (LUA_ERRERR+1) 19 20 21 typedef struct luaL_Reg { 22 const char *name; 23 lua_CFunction func; 24 } luaL_Reg; 25 26 27 LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver); 28 #define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM) 29 30 LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); 31 LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); 32 LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len); 33 LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); 34 LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, 35 size_t *l); 36 LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, 37 const char *def, size_t *l); 38 LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); 39 LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); 40 41 LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); 42 LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, 43 lua_Integer def); 44 LUALIB_API lua_Unsigned (luaL_checkunsigned) (lua_State *L, int numArg); 45 LUALIB_API lua_Unsigned (luaL_optunsigned) (lua_State *L, int numArg, 46 lua_Unsigned def); 47 48 LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); 49 LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); 50 LUALIB_API void (luaL_checkany) (lua_State *L, int narg); 51 52 LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); 53 LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); 54 LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); 55 LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); 56 57 LUALIB_API void (luaL_where) (lua_State *L, int lvl); 58 LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); 59 60 LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, 61 const char *const lst[]); 62 63 /* pre-defined references */ 64 #define LUA_NOREF (-2) 65 #define LUA_REFNIL (-1) 66 67 LUALIB_API int (luaL_ref) (lua_State *L, int t); 68 LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); 69 70 LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, 71 const char *name, const char *mode); 72 LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); 73 74 LUALIB_API int (luaL_len) (lua_State *L, int idx); 75 76 LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, 77 const char *r); 78 79 LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); 80 81 LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname); 82 83 LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1, 84 const char *msg, int level); 85 86 LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname, 87 lua_CFunction openf, int glb); 88 89 /* 90 ** =============================================================== 91 ** some useful macros 92 ** =============================================================== 93 */ 94 95 96 #define luaL_newlibtable(L,l) \ 97 lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) 98 99 #define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) 100 101 #define luaL_argcheck(L, cond,numarg,extramsg) \ 102 ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) 103 #define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) 104 #define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) 105 #define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) 106 #define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) 107 #define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) 108 #define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) 109 110 #define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) 111 112 #define luaL_dofile(L, fn) \ 113 (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) 114 115 #define luaL_dostring(L, s) \ 116 (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) 117 118 #define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) 119 120 #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) 121 122 #define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL) 123 124 125 /* 126 ** {====================================================== 127 ** Generic Buffer manipulation 128 ** ======================================================= 129 */ 130 131 typedef struct luaL_Buffer { 132 char *b; /* buffer address */ 133 size_t size; /* buffer size */ 134 size_t n; /* number of characters in buffer */ 135 lua_State *L; 136 char initb[LUAL_BUFFERSIZE]; /* initial buffer */ 137 } luaL_Buffer; 138 139 140 #define luaL_addchar(B,c) \ 141 ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \ 142 ((B)->b[(B)->n++] = (c))) 143 144 #define luaL_addsize(B,s) ((B)->n += (s)) 145 146 LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); 147 LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz); 148 LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); 149 LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); 150 LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); 151 LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); 152 LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz); 153 LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz); 154 155 #define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE) 156 157 /* }====================================================== */ 158 159 160 /* compatibility with old module system */ 161 #if defined(LUA_COMPAT_MODULE) 162 163 LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, 164 int sizehint); 165 LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, 166 const luaL_Reg *l, int nup); 167 168 #define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0)) 169 170 #endif 171 172 173 #endif 174