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