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