2 Copyright (c) 2003-2011 Alberto Demichelis
\r
4 This software is provided 'as-is', without any
\r
5 express or implied warranty. In no event will the
\r
6 authors be held liable for any damages arising from
\r
7 the use of this software.
\r
9 Permission is granted to anyone to use this software
\r
10 for any purpose, including commercial applications,
\r
11 and to alter it and redistribute it freely, subject
\r
12 to the following restrictions:
\r
14 1. The origin of this software must not be
\r
15 misrepresented; you must not claim that
\r
16 you wrote the original software. If you
\r
17 use this software in a product, an
\r
18 acknowledgment in the product
\r
19 documentation would be appreciated but is
\r
22 2. Altered source versions must be plainly
\r
23 marked as such, and must not be
\r
24 misrepresented as being the original
\r
27 3. This notice may not be removed or
\r
28 altered from any source distribution.
\r
31 #ifndef _SQUIRREL_H_
\r
32 #define _SQUIRREL_H_
\r
38 #ifndef SQUIRREL_API
\r
39 #define SQUIRREL_API extern
\r
42 #if (defined(_WIN64) || defined(_LP64))
\r
51 typedef __int64 SQInteger;
\r
52 typedef unsigned __int64 SQUnsignedInteger;
\r
53 typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
\r
55 typedef long SQInteger;
\r
56 typedef unsigned long SQUnsignedInteger;
\r
57 typedef unsigned long SQHash; /*should be the same size of a pointer*/
\r
59 typedef int SQInt32;
\r
61 typedef int SQInteger;
\r
62 typedef int SQInt32; /*must be 32 bits(also on 64bits processors)*/
\r
63 typedef unsigned int SQUnsignedInteger;
\r
64 typedef unsigned int SQHash; /*should be the same size of a pointer*/
\r
69 typedef double SQFloat;
\r
71 typedef float SQFloat;
\r
74 #if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)
\r
76 typedef __int64 SQRawObjectVal; //must be 64bits
\r
78 typedef long long SQRawObjectVal; //must be 64bits
\r
80 #define SQ_OBJECT_RAWINIT() { _unVal.raw = 0; }
\r
82 typedef SQUnsignedInteger SQRawObjectVal; //is 32 bits on 32 bits builds and 64 bits otherwise
\r
83 #define SQ_OBJECT_RAWINIT()
\r
86 typedef void* SQUserPointer;
\r
87 typedef SQUnsignedInteger SQBool;
\r
88 typedef SQInteger SQRESULT;
\r
99 struct SQNativeClosure;
\r
101 struct SQFunctionProto;
\r
102 struct SQRefCounted;
\r
105 struct SQDelegable;
\r
112 #if (defined(_MSC_VER) && _MSC_VER >= 1400) // 1400 = VS8
\r
114 #if defined(wchar_t) //this is if the compiler considers wchar_t as native type
\r
115 #define wchar_t unsigned short
\r
119 typedef unsigned short wchar_t;
\r
122 typedef wchar_t SQChar;
\r
123 #define _SC(a) L##a
\r
124 #define scstrcmp wcscmp
\r
125 #define scsprintf swprintf
\r
126 #define scstrlen wcslen
\r
127 #define scstrtod wcstod
\r
128 #define scstrtol wcstol
\r
129 #define scatoi _wtoi
\r
130 #define scstrtoul wcstoul
\r
131 #define scvsprintf vswprintf
\r
132 #define scstrstr wcsstr
\r
133 #define scisspace iswspace
\r
134 #define scisdigit iswdigit
\r
135 #define scisxdigit iswxdigit
\r
136 #define scisalpha iswalpha
\r
137 #define sciscntrl iswcntrl
\r
138 #define scisalnum iswalnum
\r
139 #define scprintf wprintf
\r
140 #define MAX_CHAR 0xFFFF
\r
142 typedef char SQChar;
\r
144 #define scstrcmp strcmp
\r
145 #define scsprintf sprintf
\r
146 #define scstrlen strlen
\r
147 #define scstrtod strtod
\r
148 #define scstrtol strtol
\r
149 #define scatoi atoi
\r
150 #define scstrtoul strtoul
\r
151 #define scvsprintf vsprintf
\r
152 #define scstrstr strstr
\r
153 #define scisspace isspace
\r
154 #define scisdigit isdigit
\r
155 #define scisxdigit isxdigit
\r
156 #define sciscntrl iscntrl
\r
157 #define scisalpha isalpha
\r
158 #define scisalnum isalnum
\r
159 #define scprintf printf
\r
160 #define MAX_CHAR 0xFF
\r
163 #define SQUIRREL_VERSION _SC("Squirrel 2.2.5 stable")
\r
164 #define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2010 Alberto Demichelis")
\r
165 #define SQUIRREL_AUTHOR _SC("Alberto Demichelis")
\r
166 #define SQUIRREL_VERSION_NUMBER 225
\r
168 #define SQ_VMSTATE_IDLE 0
\r
169 #define SQ_VMSTATE_RUNNING 1
\r
170 #define SQ_VMSTATE_SUSPENDED 2
\r
172 #define SQUIRREL_EOB 0
\r
173 #define SQ_BYTECODE_STREAM_TAG 0xFAFA
\r
175 #define SQOBJECT_REF_COUNTED 0x08000000
\r
176 #define SQOBJECT_NUMERIC 0x04000000
\r
177 #define SQOBJECT_DELEGABLE 0x02000000
\r
178 #define SQOBJECT_CANBEFALSE 0x01000000
\r
180 #define SQ_MATCHTYPEMASKSTRING (-99999)
\r
182 #define _RT_MASK 0x00FFFFFF
\r
183 #define _RAW_TYPE(type) (type&_RT_MASK)
\r
185 #define _RT_NULL 0x00000001
\r
186 #define _RT_INTEGER 0x00000002
\r
187 #define _RT_FLOAT 0x00000004
\r
188 #define _RT_BOOL 0x00000008
\r
189 #define _RT_STRING 0x00000010
\r
190 #define _RT_TABLE 0x00000020
\r
191 #define _RT_ARRAY 0x00000040
\r
192 #define _RT_USERDATA 0x00000080
\r
193 #define _RT_CLOSURE 0x00000100
\r
194 #define _RT_NATIVECLOSURE 0x00000200
\r
195 #define _RT_GENERATOR 0x00000400
\r
196 #define _RT_USERPOINTER 0x00000800
\r
197 #define _RT_THREAD 0x00001000
\r
198 #define _RT_FUNCPROTO 0x00002000
\r
199 #define _RT_CLASS 0x00004000
\r
200 #define _RT_INSTANCE 0x00008000
\r
201 #define _RT_WEAKREF 0x00010000
\r
203 typedef enum tagSQObjectType{
\r
204 OT_NULL = (_RT_NULL|SQOBJECT_CANBEFALSE),
\r
205 OT_INTEGER = (_RT_INTEGER|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
\r
206 OT_FLOAT = (_RT_FLOAT|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
\r
207 OT_BOOL = (_RT_BOOL|SQOBJECT_CANBEFALSE),
\r
208 OT_STRING = (_RT_STRING|SQOBJECT_REF_COUNTED),
\r
209 OT_TABLE = (_RT_TABLE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
\r
210 OT_ARRAY = (_RT_ARRAY|SQOBJECT_REF_COUNTED),
\r
211 OT_USERDATA = (_RT_USERDATA|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
\r
212 OT_CLOSURE = (_RT_CLOSURE|SQOBJECT_REF_COUNTED),
\r
213 OT_NATIVECLOSURE = (_RT_NATIVECLOSURE|SQOBJECT_REF_COUNTED),
\r
214 OT_GENERATOR = (_RT_GENERATOR|SQOBJECT_REF_COUNTED),
\r
215 OT_USERPOINTER = _RT_USERPOINTER,
\r
216 OT_THREAD = (_RT_THREAD|SQOBJECT_REF_COUNTED) ,
\r
217 OT_FUNCPROTO = (_RT_FUNCPROTO|SQOBJECT_REF_COUNTED), //internal usage only
\r
218 OT_CLASS = (_RT_CLASS|SQOBJECT_REF_COUNTED),
\r
219 OT_INSTANCE = (_RT_INSTANCE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
\r
220 OT_WEAKREF = (_RT_WEAKREF|SQOBJECT_REF_COUNTED)
\r
223 #define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)
\r
226 typedef union tagSQObjectValue
\r
228 struct SQTable *pTable;
\r
229 struct SQArray *pArray;
\r
230 struct SQClosure *pClosure;
\r
231 struct SQGenerator *pGenerator;
\r
232 struct SQNativeClosure *pNativeClosure;
\r
233 struct SQString *pString;
\r
234 struct SQUserData *pUserData;
\r
235 SQInteger nInteger;
\r
237 SQUserPointer pUserPointer;
\r
238 struct SQFunctionProto *pFunctionProto;
\r
239 struct SQRefCounted *pRefCounted;
\r
240 struct SQDelegable *pDelegable;
\r
241 struct SQVM *pThread;
\r
242 struct SQClass *pClass;
\r
243 struct SQInstance *pInstance;
\r
244 struct SQWeakRef *pWeakRef;
\r
245 SQRawObjectVal raw;
\r
249 typedef struct tagSQObject
\r
251 SQObjectType _type;
\r
252 SQObjectValue _unVal;
\r
255 typedef struct tagSQStackInfos{
\r
256 const SQChar* funcname;
\r
257 const SQChar* source;
\r
261 typedef struct SQVM* HSQUIRRELVM;
\r
262 typedef SQObject HSQOBJECT;
\r
263 typedef SQInteger (*SQFUNCTION)(HSQUIRRELVM);
\r
264 typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);
\r
265 typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);
\r
266 typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);
\r
268 typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
\r
269 typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
\r
271 typedef SQInteger (*SQLEXREADFUNC)(SQUserPointer);
\r
273 typedef struct tagSQRegFunction{
\r
274 const SQChar *name;
\r
276 SQInteger nparamscheck;
\r
277 const SQChar *typemask;
\r
280 typedef struct tagSQFunctionInfo {
\r
281 SQUserPointer funcid;
\r
282 const SQChar *name;
\r
283 const SQChar *source;
\r
288 SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
\r
289 SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
\r
290 SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
\r
291 SQUIRREL_API void sq_close(HSQUIRRELVM v);
\r
292 SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);
\r
293 SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);
\r
294 SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc);
\r
295 SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);
\r
296 SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);
\r
297 SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
\r
298 SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);
\r
301 SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
\r
302 SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
\r
303 SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
\r
304 SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
\r
305 SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);
\r
307 /*stack operations*/
\r
308 SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);
\r
309 SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
\r
310 SQUIRREL_API void sq_poptop(HSQUIRRELVM v);
\r
311 SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);
\r
312 SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);
\r
313 SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);
\r
314 SQUIRREL_API void sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
\r
315 SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);
\r
316 SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
\r
318 /*object creation handling*/
\r
319 SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);
\r
320 SQUIRREL_API void sq_newtable(HSQUIRRELVM v);
\r
321 SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);
\r
322 SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
\r
323 SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
\r
324 SQUIRREL_API SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);
\r
325 SQUIRREL_API void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);
\r
326 SQUIRREL_API void sq_pushfloat(HSQUIRRELVM v,SQFloat f);
\r
327 SQUIRREL_API void sq_pushinteger(HSQUIRRELVM v,SQInteger n);
\r
328 SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);
\r
329 SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
\r
330 SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);
\r
331 SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
\r
332 SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
\r
333 SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
\r
334 SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);
\r
335 SQUIRREL_API void sq_tostring(HSQUIRRELVM v,SQInteger idx);
\r
336 SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
\r
337 SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
\r
338 SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
\r
339 SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
\r
340 SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
\r
341 SQUIRREL_API SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
\r
342 SQUIRREL_API SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
\r
343 SQUIRREL_API SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
\r
344 SQUIRREL_API SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
\r
345 SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
\r
346 SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
\r
347 SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
\r
348 SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger idx,SQFunctionInfo *fi);
\r
349 SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
\r
350 SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
\r
351 SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
\r
352 SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
\r
353 SQUIRREL_API SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
\r
354 SQUIRREL_API SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);
\r
355 SQUIRREL_API SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);
\r
356 SQUIRREL_API SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);
\r
357 SQUIRREL_API SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);
\r
358 SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);
\r
359 SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);
\r
360 SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);
\r
362 /*object manipulation*/
\r
363 SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);
\r
364 SQUIRREL_API void sq_pushregistrytable(HSQUIRRELVM v);
\r
365 SQUIRREL_API void sq_pushconsttable(HSQUIRRELVM v);
\r
366 SQUIRREL_API SQRESULT sq_setroottable(HSQUIRRELVM v);
\r
367 SQUIRREL_API SQRESULT sq_setconsttable(HSQUIRRELVM v);
\r
368 SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
\r
369 SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
\r
370 SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
\r
371 SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
\r
372 SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
\r
373 SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
\r
374 SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
\r
375 SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);
\r
376 SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
\r
377 SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
\r
378 SQUIRREL_API SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx);
\r
379 SQUIRREL_API SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
\r
380 SQUIRREL_API SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
\r
381 SQUIRREL_API SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);
\r
382 SQUIRREL_API SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);
\r
383 SQUIRREL_API SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);
\r
384 SQUIRREL_API SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
\r
385 SQUIRREL_API SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);
\r
386 SQUIRREL_API SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);
\r
387 SQUIRREL_API SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);
\r
390 SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror);
\r
391 SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
\r
392 SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
\r
393 SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
\r
394 SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);
\r
395 SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);
\r
396 SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);
\r
398 /*raw object handling*/
\r
399 SQUIRREL_API SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
\r
400 SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);
\r
401 SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);
\r
402 SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);
\r
403 SQUIRREL_API void sq_resetobject(HSQOBJECT *po);
\r
404 SQUIRREL_API const SQChar *sq_objtostring(HSQOBJECT *o);
\r
405 SQUIRREL_API SQBool sq_objtobool(HSQOBJECT *o);
\r
406 SQUIRREL_API SQInteger sq_objtointeger(HSQOBJECT *o);
\r
407 SQUIRREL_API SQFloat sq_objtofloat(HSQOBJECT *o);
\r
408 SQUIRREL_API SQRESULT sq_getobjtypetag(HSQOBJECT *o,SQUserPointer * typetag);
\r
411 SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);
\r
414 SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
\r
415 SQUIRREL_API SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
\r
418 SQUIRREL_API void *sq_malloc(SQUnsignedInteger size);
\r
419 SQUIRREL_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
\r
420 SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);
\r
423 SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
\r
424 SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
\r
427 #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
\r
428 #define sq_istable(o) ((o)._type==OT_TABLE)
\r
429 #define sq_isarray(o) ((o)._type==OT_ARRAY)
\r
430 #define sq_isfunction(o) ((o)._type==OT_FUNCPROTO)
\r
431 #define sq_isclosure(o) ((o)._type==OT_CLOSURE)
\r
432 #define sq_isgenerator(o) ((o)._type==OT_GENERATOR)
\r
433 #define sq_isnativeclosure(o) ((o)._type==OT_NATIVECLOSURE)
\r
434 #define sq_isstring(o) ((o)._type==OT_STRING)
\r
435 #define sq_isinteger(o) ((o)._type==OT_INTEGER)
\r
436 #define sq_isfloat(o) ((o)._type==OT_FLOAT)
\r
437 #define sq_isuserpointer(o) ((o)._type==OT_USERPOINTER)
\r
438 #define sq_isuserdata(o) ((o)._type==OT_USERDATA)
\r
439 #define sq_isthread(o) ((o)._type==OT_THREAD)
\r
440 #define sq_isnull(o) ((o)._type==OT_NULL)
\r
441 #define sq_isclass(o) ((o)._type==OT_CLASS)
\r
442 #define sq_isinstance(o) ((o)._type==OT_INSTANCE)
\r
443 #define sq_isbool(o) ((o)._type==OT_BOOL)
\r
444 #define sq_isweakref(o) ((o)._type==OT_WEAKREF)
\r
445 #define sq_type(o) ((o)._type)
\r
448 #define sq_createslot(v,n) sq_newslot(v,n,SQFalse)
\r
451 #define SQ_ERROR (-1)
\r
453 #define SQ_FAILED(res) (res<0)
\r
454 #define SQ_SUCCEEDED(res) (res>=0)
\r
460 #endif /*_SQUIRREL_H_*/
\r