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