ScummVM API documentation
squirrel.h
1/*
2Copyright (c) 2003-2017 Alberto Demichelis
3
4Permission is hereby granted, free of charge, to any person obtaining a copy
5of this software and associated documentation files (the "Software"), to deal
6in the Software without restriction, including without limitation the rights
7to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8copies of the Software, and to permit persons to whom the Software is
9furnished to do so, subject to the following conditions:
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20THE SOFTWARE.
21*/
22#ifndef _SQUIRREL_H_
23#define _SQUIRREL_H_
24
25#ifdef _SQ_CONFIG_INCLUDE
26#include _SQ_CONFIG_INCLUDE
27#endif
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#ifndef SQUIRREL_API
34#define SQUIRREL_API extern
35#endif
36
37#if (defined(_WIN64) || defined(_LP64))
38#ifndef _SQ64
39#define _SQ64
40#endif
41#endif
42
43
44#define SQTrue (1)
45#define SQFalse (0)
46
47struct SQVM;
48struct SQTable;
49struct SQArray;
50struct SQString;
51struct SQClosure;
52struct SQGenerator;
53struct SQNativeClosure;
54struct SQUserData;
55struct SQFunctionProto;
56struct SQRefCounted;
57struct SQClass;
58struct SQInstance;
59struct SQDelegable;
60struct SQOuter;
61
62#include "sqconfig.h"
63
64#define SQUIRREL_VERSION _SC("Squirrel 3.1 stable")
65#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2017 Alberto Demichelis")
66#define SQUIRREL_AUTHOR _SC("Alberto Demichelis")
67#define SQUIRREL_VERSION_NUMBER 310
68
69#define SQ_VMSTATE_IDLE 0
70#define SQ_VMSTATE_RUNNING 1
71#define SQ_VMSTATE_SUSPENDED 2
72
73#define SQUIRREL_EOB 0
74#define SQ_BYTECODE_STREAM_TAG 0xFAFA
75
76#define SQOBJECT_REF_COUNTED 0x08000000
77#define SQOBJECT_NUMERIC 0x04000000
78#define SQOBJECT_DELEGABLE 0x02000000
79#define SQOBJECT_CANBEFALSE 0x01000000
80
81#define SQ_MATCHTYPEMASKSTRING (-99999)
82
83#define _RT_MASK 0x00FFFFFF
84#define _RAW_TYPE(type) (type&_RT_MASK)
85
86#define _RT_NULL 0x00000001
87#define _RT_INTEGER 0x00000002
88#define _RT_FLOAT 0x00000004
89#define _RT_BOOL 0x00000008
90#define _RT_STRING 0x00000010
91#define _RT_TABLE 0x00000020
92#define _RT_ARRAY 0x00000040
93#define _RT_USERDATA 0x00000080
94#define _RT_CLOSURE 0x00000100
95#define _RT_NATIVECLOSURE 0x00000200
96#define _RT_GENERATOR 0x00000400
97#define _RT_USERPOINTER 0x00000800
98#define _RT_THREAD 0x00001000
99#define _RT_FUNCPROTO 0x00002000
100#define _RT_CLASS 0x00004000
101#define _RT_INSTANCE 0x00008000
102#define _RT_WEAKREF 0x00010000
103#define _RT_OUTER 0x00020000
104
105typedef enum tagSQObjectType{
106 OT_NULL = (_RT_NULL|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
107 OT_INTEGER = (_RT_INTEGER|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
108 OT_FLOAT = (_RT_FLOAT|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
109 OT_BOOL = (_RT_BOOL|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
110 OT_STRING = (_RT_STRING|SQOBJECT_REF_COUNTED),
111 OT_TABLE = (_RT_TABLE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
112 OT_ARRAY = (_RT_ARRAY|SQOBJECT_REF_COUNTED),
113 OT_USERDATA = (_RT_USERDATA|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
114 OT_CLOSURE = (_RT_CLOSURE|SQOBJECT_REF_COUNTED),
115 OT_NATIVECLOSURE = (_RT_NATIVECLOSURE|SQOBJECT_REF_COUNTED),
116 OT_GENERATOR = (_RT_GENERATOR|SQOBJECT_REF_COUNTED),
117 OT_USERPOINTER = _RT_USERPOINTER,
118 OT_THREAD = (_RT_THREAD|SQOBJECT_REF_COUNTED) ,
119 OT_FUNCPROTO = (_RT_FUNCPROTO|SQOBJECT_REF_COUNTED), //internal usage only
120 OT_CLASS = (_RT_CLASS|SQOBJECT_REF_COUNTED),
121 OT_INSTANCE = (_RT_INSTANCE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
122 OT_WEAKREF = (_RT_WEAKREF|SQOBJECT_REF_COUNTED),
123 OT_OUTER = (_RT_OUTER|SQOBJECT_REF_COUNTED) //internal usage only
124}SQObjectType;
125
126#define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)
127
128
129typedef union tagSQObjectValue
130{
131 struct SQTable *pTable;
132 struct SQArray *pArray;
133 struct SQClosure *pClosure;
134 struct SQOuter *pOuter;
135 struct SQGenerator *pGenerator;
136 struct SQNativeClosure *pNativeClosure;
137 struct SQString *pString;
138 struct SQUserData *pUserData;
139 SQInteger nInteger;
140 SQFloat fFloat;
141 SQUserPointer pUserPointer;
142 struct SQFunctionProto *pFunctionProto;
143 struct SQRefCounted *pRefCounted;
144 struct SQDelegable *pDelegable;
145 struct SQVM *pThread;
146 struct SQClass *pClass;
147 struct SQInstance *pInstance;
148 struct SQWeakRef *pWeakRef;
149 SQRawObjectVal raw;
151
152
153typedef struct tagSQObject
154{
155 SQObjectType _type;
156 SQObjectValue _unVal;
157}SQObject;
158
159typedef struct tagSQMemberHandle{
160 SQBool _static;
161 SQInteger _index;
163
164typedef struct tagSQStackInfos{
165 const SQChar* funcname;
166 const SQChar* source;
167 SQInteger line;
169
170typedef struct SQVM* HSQUIRRELVM;
171typedef SQObject HSQOBJECT;
173typedef SQInteger (*SQFUNCTION)(HSQUIRRELVM);
174typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);
175typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);
176typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);
177typedef void (*SQDEBUGHOOK)(HSQUIRRELVM /*v*/, SQInteger /*type*/, const SQChar * /*sourcename*/, SQInteger /*line*/, const SQChar * /*funcname*/);
178typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
179typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
180
181typedef SQInteger (*SQLEXREADFUNC)(SQUserPointer);
182
183typedef struct tagSQRegFunction{
184 const SQChar *name;
185 SQFUNCTION f;
186 SQInteger nparamscheck;
187 const SQChar *typemask;
189
190typedef struct tagSQFunctionInfo {
191 SQUserPointer funcid;
192 const SQChar *name;
193 const SQChar *source;
194 SQInteger line;
196
197/*vm*/
198SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
199SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
200SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
201SQUIRREL_API void sq_close(HSQUIRRELVM v);
202SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);
203SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);
204SQUIRREL_API void sq_setsharedforeignptr(HSQUIRRELVM v,SQUserPointer p);
205SQUIRREL_API SQUserPointer sq_getsharedforeignptr(HSQUIRRELVM v);
206SQUIRREL_API void sq_setvmreleasehook(HSQUIRRELVM v,SQRELEASEHOOK hook);
207SQUIRREL_API SQRELEASEHOOK sq_getvmreleasehook(HSQUIRRELVM v);
208SQUIRREL_API void sq_setsharedreleasehook(HSQUIRRELVM v,SQRELEASEHOOK hook);
209SQUIRREL_API SQRELEASEHOOK sq_getsharedreleasehook(HSQUIRRELVM v);
210SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc,SQPRINTFUNCTION errfunc);
211SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);
212SQUIRREL_API SQPRINTFUNCTION sq_geterrorfunc(HSQUIRRELVM v);
213SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);
214SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
215SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);
216SQUIRREL_API SQInteger sq_getversion();
217
218/*compiler*/
219SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
220SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
221SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
222SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
223SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);
224
225/*stack operations*/
226SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);
227SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
228SQUIRREL_API void sq_poptop(HSQUIRRELVM v);
229SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);
230SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);
231SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);
232SQUIRREL_API SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
233SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);
234SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
235
236/*object creation handling*/
237SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);
238SQUIRREL_API void sq_newtable(HSQUIRRELVM v);
239SQUIRREL_API void sq_newtableex(HSQUIRRELVM v,SQInteger initialcapacity);
240SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);
241SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
242SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
243SQUIRREL_API SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);
244SQUIRREL_API SQRESULT sq_setclosureroot(HSQUIRRELVM v,SQInteger idx);
245SQUIRREL_API SQRESULT sq_getclosureroot(HSQUIRRELVM v,SQInteger idx);
246SQUIRREL_API void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);
247SQUIRREL_API void sq_pushfloat(HSQUIRRELVM v,SQFloat f);
248SQUIRREL_API void sq_pushinteger(HSQUIRRELVM v,SQInteger n);
249SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);
250SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
251SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);
252SQUIRREL_API void sq_pushthread(HSQUIRRELVM v, HSQUIRRELVM thread);
253SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
254SQUIRREL_API SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx);
255SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
256SQUIRREL_API SQHash sq_gethash(HSQUIRRELVM v, SQInteger idx);
257SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
258SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);
259SQUIRREL_API SQRESULT sq_tostring(HSQUIRRELVM v,SQInteger idx);
260SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
261SQUIRREL_API SQRESULT sq_getstringandsize(HSQUIRRELVM v,SQInteger idx,const SQChar **c,SQInteger *size);
262SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
263SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
264SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
265SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
266SQUIRREL_API SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
267SQUIRREL_API SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
268SQUIRREL_API SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
269SQUIRREL_API SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
270SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
271SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
272SQUIRREL_API SQRELEASEHOOK sq_getreleasehook(HSQUIRRELVM v,SQInteger idx);
273SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
274SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi);
275SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQInteger *nparams,SQInteger *nfreevars);
276SQUIRREL_API SQRESULT sq_getclosurename(HSQUIRRELVM v,SQInteger idx);
277SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
278SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
279SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
280SQUIRREL_API SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
281SQUIRREL_API SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);
282SQUIRREL_API SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);
283SQUIRREL_API SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);
284SQUIRREL_API SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);
285SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);
286SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);
287SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);
288SQUIRREL_API SQRESULT sq_getmemberhandle(HSQUIRRELVM v,SQInteger idx,HSQMEMBERHANDLE *handle);
289SQUIRREL_API SQRESULT sq_getbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);
290SQUIRREL_API SQRESULT sq_setbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);
291
292/*object manipulation*/
293SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);
294SQUIRREL_API void sq_pushregistrytable(HSQUIRRELVM v);
295SQUIRREL_API void sq_pushconsttable(HSQUIRRELVM v);
296SQUIRREL_API SQRESULT sq_setroottable(HSQUIRRELVM v);
297SQUIRREL_API SQRESULT sq_setconsttable(HSQUIRRELVM v);
298SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
299SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
300SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
301SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
302SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
303SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
304SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
305SQUIRREL_API SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);
306SQUIRREL_API SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);
307SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);
308SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
309SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
310SQUIRREL_API SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx);
311SQUIRREL_API SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
312SQUIRREL_API SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
313SQUIRREL_API SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);
314SQUIRREL_API SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);
315SQUIRREL_API SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);
316SQUIRREL_API SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
317SQUIRREL_API SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);
318SQUIRREL_API SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);
319SQUIRREL_API SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);
320
321/*calls*/
322SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror);
323SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
324SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
325SQUIRREL_API SQRESULT sq_getcallee(HSQUIRRELVM v);
326SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
327SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);
328SQUIRREL_API SQRESULT sq_throwobject(HSQUIRRELVM v);
329SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);
330SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);
331SQUIRREL_API SQRESULT sq_tailcall(HSQUIRRELVM v, SQInteger nparams);
332
333/*raw object handling*/
334SQUIRREL_API SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
335SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);
336SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);
337SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);
338SQUIRREL_API SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po);
339SQUIRREL_API void sq_resetobject(HSQOBJECT *po);
340SQUIRREL_API const SQChar *sq_objtostring(const HSQOBJECT *o);
341SQUIRREL_API SQBool sq_objtobool(const HSQOBJECT *o);
342SQUIRREL_API SQInteger sq_objtointeger(const HSQOBJECT *o);
343SQUIRREL_API SQFloat sq_objtofloat(const HSQOBJECT *o);
344SQUIRREL_API SQUserPointer sq_objtouserpointer(const HSQOBJECT *o);
345SQUIRREL_API SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag);
346SQUIRREL_API SQUnsignedInteger sq_getvmrefcount(HSQUIRRELVM v, const HSQOBJECT *po);
347
348
349/*GC*/
350SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);
351SQUIRREL_API SQRESULT sq_resurrectunreachable(HSQUIRRELVM v);
352
353/*serialization*/
354SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
355SQUIRREL_API SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
356
357/*mem allocation*/
358SQUIRREL_API void *sq_malloc(SQUnsignedInteger size);
359SQUIRREL_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
360SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);
361
362/*debug*/
363SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
364SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
365SQUIRREL_API void sq_setnativedebughook(HSQUIRRELVM v,SQDEBUGHOOK hook);
366
367/*UTILITY MACRO*/
368#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
369#define sq_istable(o) ((o)._type==OT_TABLE)
370#define sq_isarray(o) ((o)._type==OT_ARRAY)
371#define sq_isfunction(o) ((o)._type==OT_FUNCPROTO)
372#define sq_isclosure(o) ((o)._type==OT_CLOSURE)
373#define sq_isgenerator(o) ((o)._type==OT_GENERATOR)
374#define sq_isnativeclosure(o) ((o)._type==OT_NATIVECLOSURE)
375#define sq_isstring(o) ((o)._type==OT_STRING)
376#define sq_isinteger(o) ((o)._type==OT_INTEGER)
377#define sq_isfloat(o) ((o)._type==OT_FLOAT)
378#define sq_isuserpointer(o) ((o)._type==OT_USERPOINTER)
379#define sq_isuserdata(o) ((o)._type==OT_USERDATA)
380#define sq_isthread(o) ((o)._type==OT_THREAD)
381#define sq_isnull(o) ((o)._type==OT_NULL)
382#define sq_isclass(o) ((o)._type==OT_CLASS)
383#define sq_isinstance(o) ((o)._type==OT_INSTANCE)
384#define sq_isbool(o) ((o)._type==OT_BOOL)
385#define sq_isweakref(o) ((o)._type==OT_WEAKREF)
386#define sq_type(o) ((o)._type)
387
388/* deprecated */
389#define sq_createslot(v,n) sq_newslot(v,n,SQFalse)
390
391#define SQ_OK (0)
392#define SQ_ERROR (-1)
393
394#define SQ_FAILED(res) (res<0)
395#define SQ_SUCCEEDED(res) (res>=0)
396
397#ifdef __GNUC__
398# define SQ_UNUSED_ARG(x) x __attribute__((__unused__))
399#else
400# define SQ_UNUSED_ARG(x) x
401#endif
402
403#ifdef __cplusplus
404} /*extern "C"*/
405#endif
406
407#endif /*_SQUIRREL_H_*/
Definition: sqarray.h:6
Definition: sqclass.h:29
Definition: sqclosure.h:11
Definition: sqobject.h:339
Definition: sqfuncproto.h:50
Definition: sqclosure.h:109
Definition: sqclass.h:92
Definition: sqclosure.h:148
Definition: sqclosure.h:75
Definition: sqobject.h:88
Definition: sqstring.h:15
Definition: sqtable.h:26
Definition: squserdata.h:6
Definition: sqvm.h:34
Definition: sqobject.h:99
Definition: squirrel.h:190
Definition: squirrel.h:159
Definition: squirrel.h:154
Definition: squirrel.h:183
Definition: squirrel.h:164
Definition: squirrel.h:130