1/*	$NetBSD$	*/
2
3/*
4** Id: lua.h,v 1.218.1.5 2008/08/06 13:30:12 roberto Exp
5** Lua - An Extensible Extension Language
6** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
7** See Copyright Notice at the end of this file
8*/
9
10
11#ifndef lua_h
12#define lua_h
13
14#include <stdarg.h>
15#include <stddef.h>
16
17
18#include "luaconf.h"
19
20
21#define LUA_VERSION	"Lua 5.1"
22#define LUA_RELEASE	"Lua 5.1.4"
23#define LUA_VERSION_NUM	501
24#define LUA_COPYRIGHT	"Copyright (C) 1994-2008 Lua.org, PUC-Rio"
25#define LUA_AUTHORS 	"R. Ierusalimschy, L. H. de Figueiredo & W. Celes"
26
27
28/* mark for precompiled code (`<esc>Lua') */
29#define	LUA_SIGNATURE	"\033Lua"
30
31/* option for multiple returns in `lua_pcall' and `lua_call' */
32#define LUA_MULTRET	(-1)
33
34
35/*
36** pseudo-indices
37*/
38#define LUA_REGISTRYINDEX	(-10000)
39#define LUA_ENVIRONINDEX	(-10001)
40#define LUA_GLOBALSINDEX	(-10002)
41#define lua_upvalueindex(i)	(LUA_GLOBALSINDEX-(i))
42
43
44/* thread status; 0 is OK */
45#define LUA_YIELD	1
46#define LUA_ERRRUN	2
47#define LUA_ERRSYNTAX	3
48#define LUA_ERRMEM	4
49#define LUA_ERRERR	5
50
51
52typedef struct lua_State lua_State;
53
54typedef int (*lua_CFunction) (lua_State *L);
55
56
57/*
58** functions that read/write blocks when loading/dumping Lua chunks
59*/
60typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
61
62typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);
63
64
65/*
66** prototype for memory-allocation functions
67*/
68typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
69
70
71/*
72** basic types
73*/
74#define LUA_TNONE		(-1)
75
76#define LUA_TNIL		0
77#define LUA_TBOOLEAN		1
78#define LUA_TLIGHTUSERDATA	2
79#define LUA_TNUMBER		3
80#define LUA_TSTRING		4
81#define LUA_TTABLE		5
82#define LUA_TFUNCTION		6
83#define LUA_TUSERDATA		7
84#define LUA_TTHREAD		8
85
86
87
88/* minimum Lua stack available to a C function */
89#define LUA_MINSTACK	20
90
91
92/*
93** generic extra include file
94*/
95#if defined(LUA_USER_H)
96#include LUA_USER_H
97#endif
98
99
100/* type of numbers in Lua */
101typedef LUA_NUMBER lua_Number;
102
103
104/* type for integer functions */
105typedef LUA_INTEGER lua_Integer;
106
107
108
109/*
110** state manipulation
111*/
112LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);
113LUA_API void       (lua_close) (lua_State *L);
114LUA_API lua_State *(lua_newthread) (lua_State *L);
115
116LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf);
117
118
119/*
120** basic stack manipulation
121*/
122LUA_API int   (lua_gettop) (lua_State *L);
123LUA_API void  (lua_settop) (lua_State *L, int idx);
124LUA_API void  (lua_pushvalue) (lua_State *L, int idx);
125LUA_API void  (lua_remove) (lua_State *L, int idx);
126LUA_API void  (lua_insert) (lua_State *L, int idx);
127LUA_API void  (lua_replace) (lua_State *L, int idx);
128LUA_API int   (lua_checkstack) (lua_State *L, int sz);
129
130LUA_API void  (lua_xmove) (lua_State *from, lua_State *to, int n);
131
132
133/*
134** access functions (stack -> C)
135*/
136
137LUA_API int             (lua_isnumber) (lua_State *L, int idx);
138LUA_API int             (lua_isstring) (lua_State *L, int idx);
139LUA_API int             (lua_iscfunction) (lua_State *L, int idx);
140LUA_API int             (lua_isuserdata) (lua_State *L, int idx);
141LUA_API int             (lua_type) (lua_State *L, int idx);
142LUA_API const char     *(lua_typename) (lua_State *L, int tp);
143
144LUA_API int            (lua_equal) (lua_State *L, int idx1, int idx2);
145LUA_API int            (lua_rawequal) (lua_State *L, int idx1, int idx2);
146LUA_API int            (lua_lessthan) (lua_State *L, int idx1, int idx2);
147
148LUA_API lua_Number      (lua_tonumber) (lua_State *L, int idx);
149LUA_API lua_Integer     (lua_tointeger) (lua_State *L, int idx);
150LUA_API int             (lua_toboolean) (lua_State *L, int idx);
151LUA_API const char     *(lua_tolstring) (lua_State *L, int idx, size_t *len);
152LUA_API size_t          (lua_objlen) (lua_State *L, int idx);
153LUA_API lua_CFunction   (lua_tocfunction) (lua_State *L, int idx);
154LUA_API void	       *(lua_touserdata) (lua_State *L, int idx);
155LUA_API lua_State      *(lua_tothread) (lua_State *L, int idx);
156LUA_API const void     *(lua_topointer) (lua_State *L, int idx);
157
158
159/*
160** push functions (C -> stack)
161*/
162LUA_API void  (lua_pushnil) (lua_State *L);
163LUA_API void  (lua_pushnumber) (lua_State *L, lua_Number n);
164LUA_API void  (lua_pushinteger) (lua_State *L, lua_Integer n);
165LUA_API void  (lua_pushlstring) (lua_State *L, const char *s, size_t l);
166LUA_API void  (lua_pushstring) (lua_State *L, const char *s);
167LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt,
168                                                      va_list argp);
169LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...);
170LUA_API void  (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n);
171LUA_API void  (lua_pushboolean) (lua_State *L, int b);
172LUA_API void  (lua_pushlightuserdata) (lua_State *L, void *p);
173LUA_API int   (lua_pushthread) (lua_State *L);
174
175
176/*
177** get functions (Lua -> stack)
178*/
179LUA_API void  (lua_gettable) (lua_State *L, int idx);
180LUA_API void  (lua_getfield) (lua_State *L, int idx, const char *k);
181LUA_API void  (lua_rawget) (lua_State *L, int idx);
182LUA_API void  (lua_rawgeti) (lua_State *L, int idx, int n);
183LUA_API void  (lua_createtable) (lua_State *L, int narr, int nrec);
184LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz);
185LUA_API int   (lua_getmetatable) (lua_State *L, int objindex);
186LUA_API void  (lua_getfenv) (lua_State *L, int idx);
187
188
189/*
190** set functions (stack -> Lua)
191*/
192LUA_API void  (lua_settable) (lua_State *L, int idx);
193LUA_API void  (lua_setfield) (lua_State *L, int idx, const char *k);
194LUA_API void  (lua_rawset) (lua_State *L, int idx);
195LUA_API void  (lua_rawseti) (lua_State *L, int idx, int n);
196LUA_API int   (lua_setmetatable) (lua_State *L, int objindex);
197LUA_API int   (lua_setfenv) (lua_State *L, int idx);
198
199
200/*
201** `load' and `call' functions (load and run Lua code)
202*/
203LUA_API void  (lua_call) (lua_State *L, int nargs, int nresults);
204LUA_API int   (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
205LUA_API int   (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud);
206LUA_API int   (lua_load) (lua_State *L, lua_Reader reader, void *dt,
207                                        const char *chunkname);
208
209LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data);
210
211
212/*
213** coroutine functions
214*/
215LUA_API int  (lua_yield) (lua_State *L, int nresults);
216LUA_API int  (lua_resume) (lua_State *L, int narg);
217LUA_API int  (lua_status) (lua_State *L);
218
219/*
220** garbage-collection function and options
221*/
222
223#define LUA_GCSTOP		0
224#define LUA_GCRESTART		1
225#define LUA_GCCOLLECT		2
226#define LUA_GCCOUNT		3
227#define LUA_GCCOUNTB		4
228#define LUA_GCSTEP		5
229#define LUA_GCSETPAUSE		6
230#define LUA_GCSETSTEPMUL	7
231
232LUA_API int (lua_gc) (lua_State *L, int what, int data);
233
234
235/*
236** miscellaneous functions
237*/
238
239LUA_API int   (lua_error) (lua_State *L);
240
241LUA_API int   (lua_next) (lua_State *L, int idx);
242
243LUA_API void  (lua_concat) (lua_State *L, int n);
244
245LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
246LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
247
248
249
250/*
251** ===============================================================
252** some useful macros
253** ===============================================================
254*/
255
256#define lua_pop(L,n)		lua_settop(L, -(n)-1)
257
258#define lua_newtable(L)		lua_createtable(L, 0, 0)
259
260#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
261
262#define lua_pushcfunction(L,f)	lua_pushcclosure(L, (f), 0)
263
264#define lua_strlen(L,i)		lua_objlen(L, (i))
265
266#define lua_isfunction(L,n)	(lua_type(L, (n)) == LUA_TFUNCTION)
267#define lua_istable(L,n)	(lua_type(L, (n)) == LUA_TTABLE)
268#define lua_islightuserdata(L,n)	(lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
269#define lua_isnil(L,n)		(lua_type(L, (n)) == LUA_TNIL)
270#define lua_isboolean(L,n)	(lua_type(L, (n)) == LUA_TBOOLEAN)
271#define lua_isthread(L,n)	(lua_type(L, (n)) == LUA_TTHREAD)
272#define lua_isnone(L,n)		(lua_type(L, (n)) == LUA_TNONE)
273#define lua_isnoneornil(L, n)	(lua_type(L, (n)) <= 0)
274
275#define lua_pushliteral(L, s)	\
276	lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
277
278#define lua_setglobal(L,s)	lua_setfield(L, LUA_GLOBALSINDEX, (s))
279#define lua_getglobal(L,s)	lua_getfield(L, LUA_GLOBALSINDEX, (s))
280
281#define lua_tostring(L,i)	lua_tolstring(L, (i), NULL)
282
283
284
285/*
286** compatibility macros and functions
287*/
288
289#define lua_open()	luaL_newstate()
290
291#define lua_getregistry(L)	lua_pushvalue(L, LUA_REGISTRYINDEX)
292
293#define lua_getgccount(L)	lua_gc(L, LUA_GCCOUNT, 0)
294
295#define lua_Chunkreader		lua_Reader
296#define lua_Chunkwriter		lua_Writer
297
298
299/* hack */
300LUA_API void lua_setlevel	(lua_State *from, lua_State *to);
301
302
303/*
304** {======================================================================
305** Debug API
306** =======================================================================
307*/
308
309
310/*
311** Event codes
312*/
313#define LUA_HOOKCALL	0
314#define LUA_HOOKRET	1
315#define LUA_HOOKLINE	2
316#define LUA_HOOKCOUNT	3
317#define LUA_HOOKTAILRET 4
318
319
320/*
321** Event masks
322*/
323#define LUA_MASKCALL	(1 << LUA_HOOKCALL)
324#define LUA_MASKRET	(1 << LUA_HOOKRET)
325#define LUA_MASKLINE	(1 << LUA_HOOKLINE)
326#define LUA_MASKCOUNT	(1 << LUA_HOOKCOUNT)
327
328typedef struct lua_Debug lua_Debug;  /* activation record */
329
330
331/* Functions to be called by the debuger in specific events */
332typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
333
334
335LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar);
336LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
337LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);
338LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);
339LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n);
340LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n);
341
342LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count);
343LUA_API lua_Hook lua_gethook (lua_State *L);
344LUA_API int lua_gethookmask (lua_State *L);
345LUA_API int lua_gethookcount (lua_State *L);
346
347
348struct lua_Debug {
349  int event;
350  const char *name;	/* (n) */
351  const char *namewhat;	/* (n) `global', `local', `field', `method' */
352  const char *what;	/* (S) `Lua', `C', `main', `tail' */
353  const char *source;	/* (S) */
354  int currentline;	/* (l) */
355  int nups;		/* (u) number of upvalues */
356  int linedefined;	/* (S) */
357  int lastlinedefined;	/* (S) */
358  char short_src[LUA_IDSIZE]; /* (S) */
359  /* private part */
360  int i_ci;  /* active function */
361};
362
363/* }====================================================================== */
364
365
366/******************************************************************************
367* Copyright (C) 1994-2008 Lua.org, PUC-Rio.  All rights reserved.
368*
369* Permission is hereby granted, free of charge, to any person obtaining
370* a copy of this software and associated documentation files (the
371* "Software"), to deal in the Software without restriction, including
372* without limitation the rights to use, copy, modify, merge, publish,
373* distribute, sublicense, and/or sell copies of the Software, and to
374* permit persons to whom the Software is furnished to do so, subject to
375* the following conditions:
376*
377* The above copyright notice and this permission notice shall be
378* included in all copies or substantial portions of the Software.
379*
380* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
381* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
382* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
383* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
384* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
385* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
386* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
387******************************************************************************/
388
389
390#endif
391