Copyright update to 2015
[supertux.git] / external / squirrel / include / squirrel.h
1 /*\r
2 Copyright (c) 2003-2014 Alberto Demichelis\r
3 \r
4 Permission is hereby granted, free of charge, to any person obtaining a copy\r
5 of this software and associated documentation files (the "Software"), to deal\r
6 in the Software without restriction, including without limitation the rights\r
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
8 copies of the Software, and to permit persons to whom the Software is\r
9 furnished to do so, subject to the following conditions:\r
10 \r
11 The above copyright notice and this permission notice shall be included in\r
12 all copies or substantial portions of the Software.\r
13 \r
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
20 THE SOFTWARE.\r
21 */\r
22 #ifndef _SQUIRREL_H_\r
23 #define _SQUIRREL_H_\r
24 \r
25 #ifdef __cplusplus\r
26 extern "C" {\r
27 #endif\r
28 \r
29 #ifndef SQUIRREL_API\r
30 #define SQUIRREL_API extern\r
31 #endif\r
32 \r
33 #if (defined(_WIN64) || defined(_LP64))\r
34 #ifndef _SQ64\r
35 #define _SQ64\r
36 #endif\r
37 #endif\r
38 \r
39 #ifdef _SQ64\r
40 \r
41 #ifdef _MSC_VER\r
42 typedef __int64 SQInteger;\r
43 typedef unsigned __int64 SQUnsignedInteger;\r
44 typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/\r
45 #else\r
46 typedef long long SQInteger;\r
47 typedef unsigned long long SQUnsignedInteger;\r
48 typedef unsigned long long SQHash; /*should be the same size of a pointer*/\r
49 #endif\r
50 typedef int SQInt32; \r
51 typedef unsigned int SQUnsignedInteger32;\r
52 #else \r
53 typedef int SQInteger;\r
54 typedef int SQInt32; /*must be 32 bits(also on 64bits processors)*/\r
55 typedef unsigned int SQUnsignedInteger32; /*must be 32 bits(also on 64bits processors)*/\r
56 typedef unsigned int SQUnsignedInteger;\r
57 typedef unsigned int SQHash; /*should be the same size of a pointer*/\r
58 #endif\r
59 \r
60 \r
61 #ifdef SQUSEDOUBLE\r
62 typedef double SQFloat;\r
63 #else\r
64 typedef float SQFloat;\r
65 #endif\r
66 \r
67 #if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)\r
68 #ifdef _MSC_VER\r
69 typedef __int64 SQRawObjectVal; //must be 64bits\r
70 #else\r
71 typedef long long SQRawObjectVal; //must be 64bits\r
72 #endif\r
73 #define SQ_OBJECT_RAWINIT() { _unVal.raw = 0; }\r
74 #else\r
75 typedef SQUnsignedInteger SQRawObjectVal; //is 32 bits on 32 bits builds and 64 bits otherwise\r
76 #define SQ_OBJECT_RAWINIT()\r
77 #endif\r
78 \r
79 #ifndef SQ_ALIGNMENT // SQ_ALIGNMENT shall be less than or equal to SQ_MALLOC alignments, and its value shall be power of 2.\r
80 #if defined(SQUSEDOUBLE) || defined(_SQ64)\r
81 #define SQ_ALIGNMENT 8\r
82 #else\r
83 #define SQ_ALIGNMENT 4\r
84 #endif\r
85 #endif\r
86 \r
87 typedef void* SQUserPointer;\r
88 typedef SQUnsignedInteger SQBool;\r
89 typedef SQInteger SQRESULT;\r
90 \r
91 #define SQTrue  (1)\r
92 #define SQFalse (0)\r
93 \r
94 struct SQVM;\r
95 struct SQTable;\r
96 struct SQArray;\r
97 struct SQString;\r
98 struct SQClosure;\r
99 struct SQGenerator;\r
100 struct SQNativeClosure;\r
101 struct SQUserData;\r
102 struct SQFunctionProto;\r
103 struct SQRefCounted;\r
104 struct SQClass;\r
105 struct SQInstance;\r
106 struct SQDelegable;\r
107 struct SQOuter;\r
108 \r
109 #ifdef _UNICODE\r
110 #define SQUNICODE\r
111 #endif\r
112 \r
113 #ifdef SQUNICODE\r
114 #if (defined(_MSC_VER) && _MSC_VER >= 1400) // 1400 = VS8\r
115 \r
116 #if !defined(_NATIVE_WCHAR_T_DEFINED) //this is if the compiler considers wchar_t as native type\r
117 #define wchar_t unsigned short\r
118 #endif\r
119 \r
120 #else\r
121 typedef unsigned short wchar_t;\r
122 #endif\r
123 \r
124 typedef wchar_t SQChar;\r
125 #define _SC(a) L##a\r
126 #define scstrcmp        wcscmp\r
127 #define scsprintf       swprintf\r
128 #define scstrlen        wcslen\r
129 #define scstrtod        wcstod\r
130 #ifdef _SQ64\r
131 #define scstrtol        _wcstoi64\r
132 #else\r
133 #define scstrtol        wcstol\r
134 #endif\r
135 #define scatoi          _wtoi\r
136 #define scstrtoul       wcstoul\r
137 #define scvsprintf      vswprintf\r
138 #define scstrstr        wcsstr\r
139 #define scisspace       iswspace\r
140 #define scisdigit       iswdigit\r
141 #define scisxdigit      iswxdigit\r
142 #define scisalpha       iswalpha\r
143 #define sciscntrl       iswcntrl\r
144 #define scisalnum       iswalnum\r
145 #define scprintf        wprintf\r
146 #define MAX_CHAR 0xFFFF\r
147 #else\r
148 typedef char SQChar;\r
149 #define _SC(a) a\r
150 #define scstrcmp        strcmp\r
151 #define scsprintf       sprintf\r
152 #define scstrlen        strlen\r
153 #define scstrtod        strtod\r
154 #ifdef _SQ64\r
155 #ifdef _MSC_VER\r
156 #define scstrtol        _strtoi64\r
157 #else\r
158 #define scstrtol        strtoll\r
159 #endif\r
160 #else\r
161 #define scstrtol        strtol\r
162 #endif\r
163 #define scatoi          atoi\r
164 #define scstrtoul       strtoul\r
165 #define scvsprintf      vsprintf\r
166 #define scstrstr        strstr\r
167 #define scisspace       isspace\r
168 #define scisdigit       isdigit\r
169 #define scisxdigit      isxdigit\r
170 #define sciscntrl       iscntrl\r
171 #define scisalpha       isalpha\r
172 #define scisalnum       isalnum\r
173 #define scprintf        printf\r
174 #define MAX_CHAR 0xFF\r
175 #endif\r
176 \r
177 #ifdef _SQ64\r
178 #define _PRINT_INT_PREC _SC("ll")\r
179 #define _PRINT_INT_FMT _SC("%lld")\r
180 #else\r
181 #define _PRINT_INT_FMT _SC("%d")\r
182 #endif\r
183 \r
184 #define SQUIRREL_VERSION        _SC("Squirrel 3.0.6 stable")\r
185 #define SQUIRREL_COPYRIGHT      _SC("Copyright (C) 2003-2014 Alberto Demichelis")\r
186 #define SQUIRREL_AUTHOR         _SC("Alberto Demichelis")\r
187 #define SQUIRREL_VERSION_NUMBER 306\r
188 \r
189 #define SQ_VMSTATE_IDLE                 0\r
190 #define SQ_VMSTATE_RUNNING              1\r
191 #define SQ_VMSTATE_SUSPENDED    2\r
192 \r
193 #define SQUIRREL_EOB 0\r
194 #define SQ_BYTECODE_STREAM_TAG  0xFAFA\r
195 \r
196 #define SQOBJECT_REF_COUNTED    0x08000000\r
197 #define SQOBJECT_NUMERIC                0x04000000\r
198 #define SQOBJECT_DELEGABLE              0x02000000\r
199 #define SQOBJECT_CANBEFALSE             0x01000000\r
200 \r
201 #define SQ_MATCHTYPEMASKSTRING (-99999)\r
202 \r
203 #define _RT_MASK 0x00FFFFFF\r
204 #define _RAW_TYPE(type) (type&_RT_MASK)\r
205 \r
206 #define _RT_NULL                        0x00000001\r
207 #define _RT_INTEGER                     0x00000002\r
208 #define _RT_FLOAT                       0x00000004\r
209 #define _RT_BOOL                        0x00000008\r
210 #define _RT_STRING                      0x00000010\r
211 #define _RT_TABLE                       0x00000020\r
212 #define _RT_ARRAY                       0x00000040\r
213 #define _RT_USERDATA            0x00000080\r
214 #define _RT_CLOSURE                     0x00000100\r
215 #define _RT_NATIVECLOSURE       0x00000200\r
216 #define _RT_GENERATOR           0x00000400\r
217 #define _RT_USERPOINTER         0x00000800\r
218 #define _RT_THREAD                      0x00001000\r
219 #define _RT_FUNCPROTO           0x00002000\r
220 #define _RT_CLASS                       0x00004000\r
221 #define _RT_INSTANCE            0x00008000\r
222 #define _RT_WEAKREF                     0x00010000\r
223 #define _RT_OUTER                       0x00020000\r
224 \r
225 typedef enum tagSQObjectType{\r
226         OT_NULL =                       (_RT_NULL|SQOBJECT_CANBEFALSE),\r
227         OT_INTEGER =            (_RT_INTEGER|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),\r
228         OT_FLOAT =                      (_RT_FLOAT|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),\r
229         OT_BOOL =                       (_RT_BOOL|SQOBJECT_CANBEFALSE),\r
230         OT_STRING =                     (_RT_STRING|SQOBJECT_REF_COUNTED),\r
231         OT_TABLE =                      (_RT_TABLE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),\r
232         OT_ARRAY =                      (_RT_ARRAY|SQOBJECT_REF_COUNTED),\r
233         OT_USERDATA =           (_RT_USERDATA|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),\r
234         OT_CLOSURE =            (_RT_CLOSURE|SQOBJECT_REF_COUNTED),\r
235         OT_NATIVECLOSURE =      (_RT_NATIVECLOSURE|SQOBJECT_REF_COUNTED),\r
236         OT_GENERATOR =          (_RT_GENERATOR|SQOBJECT_REF_COUNTED),\r
237         OT_USERPOINTER =        _RT_USERPOINTER,\r
238         OT_THREAD =                     (_RT_THREAD|SQOBJECT_REF_COUNTED) ,\r
239         OT_FUNCPROTO =          (_RT_FUNCPROTO|SQOBJECT_REF_COUNTED), //internal usage only\r
240         OT_CLASS =                      (_RT_CLASS|SQOBJECT_REF_COUNTED),\r
241         OT_INSTANCE =           (_RT_INSTANCE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),\r
242         OT_WEAKREF =            (_RT_WEAKREF|SQOBJECT_REF_COUNTED),\r
243         OT_OUTER =                      (_RT_OUTER|SQOBJECT_REF_COUNTED) //internal usage only\r
244 }SQObjectType;\r
245 \r
246 #define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)\r
247 \r
248 \r
249 typedef union tagSQObjectValue\r
250 {\r
251         struct SQTable *pTable;\r
252         struct SQArray *pArray;\r
253         struct SQClosure *pClosure;\r
254         struct SQOuter *pOuter;\r
255         struct SQGenerator *pGenerator;\r
256         struct SQNativeClosure *pNativeClosure;\r
257         struct SQString *pString;\r
258         struct SQUserData *pUserData;\r
259         SQInteger nInteger;\r
260         SQFloat fFloat;\r
261         SQUserPointer pUserPointer;\r
262         struct SQFunctionProto *pFunctionProto;\r
263         struct SQRefCounted *pRefCounted;\r
264         struct SQDelegable *pDelegable;\r
265         struct SQVM *pThread;\r
266         struct SQClass *pClass;\r
267         struct SQInstance *pInstance;\r
268         struct SQWeakRef *pWeakRef;\r
269         SQRawObjectVal raw;\r
270 }SQObjectValue;\r
271 \r
272 \r
273 typedef struct tagSQObject\r
274 {\r
275         SQObjectType _type;\r
276         SQObjectValue _unVal;\r
277 }SQObject;\r
278 \r
279 typedef struct  tagSQMemberHandle{\r
280         SQBool _static;\r
281         SQInteger _index;\r
282 }SQMemberHandle;\r
283 \r
284 typedef struct tagSQStackInfos{\r
285         const SQChar* funcname;\r
286         const SQChar* source;\r
287         SQInteger line;\r
288 }SQStackInfos;\r
289 \r
290 typedef struct SQVM* HSQUIRRELVM;\r
291 typedef SQObject HSQOBJECT;\r
292 typedef SQMemberHandle HSQMEMBERHANDLE;\r
293 typedef SQInteger (*SQFUNCTION)(HSQUIRRELVM);\r
294 typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);\r
295 typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);\r
296 typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);\r
297 typedef void (*SQDEBUGHOOK)(HSQUIRRELVM /*v*/, SQInteger /*type*/, const SQChar * /*sourcename*/, SQInteger /*line*/, const SQChar * /*funcname*/);\r
298 typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);\r
299 typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);\r
300 \r
301 typedef SQInteger (*SQLEXREADFUNC)(SQUserPointer);\r
302 \r
303 typedef struct tagSQRegFunction{\r
304         const SQChar *name;\r
305         SQFUNCTION f;\r
306         SQInteger nparamscheck;\r
307         const SQChar *typemask;\r
308 }SQRegFunction;\r
309 \r
310 typedef struct tagSQFunctionInfo {\r
311         SQUserPointer funcid;\r
312         const SQChar *name;\r
313         const SQChar *source;\r
314 }SQFunctionInfo;\r
315 \r
316 /*vm*/\r
317 SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);\r
318 SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);\r
319 SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);\r
320 SQUIRREL_API void sq_close(HSQUIRRELVM v);\r
321 SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);\r
322 SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);\r
323 SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc,SQPRINTFUNCTION errfunc);\r
324 SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);\r
325 SQUIRREL_API SQPRINTFUNCTION sq_geterrorfunc(HSQUIRRELVM v);\r
326 SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);\r
327 SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);\r
328 SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);\r
329 SQUIRREL_API SQInteger sq_getversion();\r
330 \r
331 /*compiler*/\r
332 SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);\r
333 SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);\r
334 SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);\r
335 SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);\r
336 SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);\r
337 \r
338 /*stack operations*/\r
339 SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);\r
340 SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);\r
341 SQUIRREL_API void sq_poptop(HSQUIRRELVM v);\r
342 SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);\r
343 SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);\r
344 SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);\r
345 SQUIRREL_API SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize);\r
346 SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);\r
347 SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);\r
348 \r
349 /*object creation handling*/\r
350 SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);\r
351 SQUIRREL_API void sq_newtable(HSQUIRRELVM v);\r
352 SQUIRREL_API void sq_newtableex(HSQUIRRELVM v,SQInteger initialcapacity);\r
353 SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);\r
354 SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);\r
355 SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);\r
356 SQUIRREL_API SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);\r
357 SQUIRREL_API void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);\r
358 SQUIRREL_API void sq_pushfloat(HSQUIRRELVM v,SQFloat f);\r
359 SQUIRREL_API void sq_pushinteger(HSQUIRRELVM v,SQInteger n);\r
360 SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);\r
361 SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);\r
362 SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);\r
363 SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);\r
364 SQUIRREL_API SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx);\r
365 SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);\r
366 SQUIRREL_API SQHash sq_gethash(HSQUIRRELVM v, SQInteger idx);\r
367 SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);\r
368 SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);\r
369 SQUIRREL_API SQRESULT sq_tostring(HSQUIRRELVM v,SQInteger idx);\r
370 SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);\r
371 SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);\r
372 SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);\r
373 SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);\r
374 SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);\r
375 SQUIRREL_API SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);\r
376 SQUIRREL_API SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);\r
377 SQUIRREL_API SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);\r
378 SQUIRREL_API SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);\r
379 SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);\r
380 SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);\r
381 SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);\r
382 SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi);\r
383 SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);\r
384 SQUIRREL_API SQRESULT sq_getclosurename(HSQUIRRELVM v,SQInteger idx);\r
385 SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);\r
386 SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);\r
387 SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);\r
388 SQUIRREL_API SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);\r
389 SQUIRREL_API SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);\r
390 SQUIRREL_API SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);\r
391 SQUIRREL_API SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);\r
392 SQUIRREL_API SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);\r
393 SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);\r
394 SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);\r
395 SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);\r
396 SQUIRREL_API SQRESULT sq_getmemberhandle(HSQUIRRELVM v,SQInteger idx,HSQMEMBERHANDLE *handle);\r
397 SQUIRREL_API SQRESULT sq_getbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);\r
398 SQUIRREL_API SQRESULT sq_setbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);\r
399 \r
400 /*object manipulation*/\r
401 SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);\r
402 SQUIRREL_API void sq_pushregistrytable(HSQUIRRELVM v);\r
403 SQUIRREL_API void sq_pushconsttable(HSQUIRRELVM v);\r
404 SQUIRREL_API SQRESULT sq_setroottable(HSQUIRRELVM v);\r
405 SQUIRREL_API SQRESULT sq_setconsttable(HSQUIRRELVM v);\r
406 SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);\r
407 SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);\r
408 SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);\r
409 SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);\r
410 SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);\r
411 SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);\r
412 SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);\r
413 SQUIRREL_API SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);\r
414 SQUIRREL_API SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);\r
415 SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);\r
416 SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval); \r
417 SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize); \r
418 SQUIRREL_API SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx); \r
419 SQUIRREL_API SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);\r
420 SQUIRREL_API SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);\r
421 SQUIRREL_API SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);\r
422 SQUIRREL_API SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);\r
423 SQUIRREL_API SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);\r
424 SQUIRREL_API SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);\r
425 SQUIRREL_API SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);\r
426 SQUIRREL_API SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);\r
427 SQUIRREL_API SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);\r
428 \r
429 /*calls*/\r
430 SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror);\r
431 SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);\r
432 SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);\r
433 SQUIRREL_API SQRESULT sq_getcallee(HSQUIRRELVM v);\r
434 SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);\r
435 SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);\r
436 SQUIRREL_API SQRESULT sq_throwobject(HSQUIRRELVM v);\r
437 SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);\r
438 SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);\r
439 \r
440 /*raw object handling*/\r
441 SQUIRREL_API SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);\r
442 SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);\r
443 SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);\r
444 SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);\r
445 SQUIRREL_API SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po);\r
446 SQUIRREL_API void sq_resetobject(HSQOBJECT *po);\r
447 SQUIRREL_API const SQChar *sq_objtostring(const HSQOBJECT *o);\r
448 SQUIRREL_API SQBool sq_objtobool(const HSQOBJECT *o);\r
449 SQUIRREL_API SQInteger sq_objtointeger(const HSQOBJECT *o);\r
450 SQUIRREL_API SQFloat sq_objtofloat(const HSQOBJECT *o);\r
451 SQUIRREL_API SQUserPointer sq_objtouserpointer(const HSQOBJECT *o);\r
452 SQUIRREL_API SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag);\r
453 \r
454 /*GC*/\r
455 SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);\r
456 SQUIRREL_API SQRESULT sq_resurrectunreachable(HSQUIRRELVM v);\r
457 \r
458 /*serialization*/\r
459 SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);\r
460 SQUIRREL_API SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);\r
461 \r
462 /*mem allocation*/\r
463 SQUIRREL_API void *sq_malloc(SQUnsignedInteger size);\r
464 SQUIRREL_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);\r
465 SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);\r
466 \r
467 /*debug*/\r
468 SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);\r
469 SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);\r
470 SQUIRREL_API void sq_setnativedebughook(HSQUIRRELVM v,SQDEBUGHOOK hook);\r
471 \r
472 /*UTILITY MACRO*/\r
473 #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)\r
474 #define sq_istable(o) ((o)._type==OT_TABLE)\r
475 #define sq_isarray(o) ((o)._type==OT_ARRAY)\r
476 #define sq_isfunction(o) ((o)._type==OT_FUNCPROTO)\r
477 #define sq_isclosure(o) ((o)._type==OT_CLOSURE)\r
478 #define sq_isgenerator(o) ((o)._type==OT_GENERATOR)\r
479 #define sq_isnativeclosure(o) ((o)._type==OT_NATIVECLOSURE)\r
480 #define sq_isstring(o) ((o)._type==OT_STRING)\r
481 #define sq_isinteger(o) ((o)._type==OT_INTEGER)\r
482 #define sq_isfloat(o) ((o)._type==OT_FLOAT)\r
483 #define sq_isuserpointer(o) ((o)._type==OT_USERPOINTER)\r
484 #define sq_isuserdata(o) ((o)._type==OT_USERDATA)\r
485 #define sq_isthread(o) ((o)._type==OT_THREAD)\r
486 #define sq_isnull(o) ((o)._type==OT_NULL)\r
487 #define sq_isclass(o) ((o)._type==OT_CLASS)\r
488 #define sq_isinstance(o) ((o)._type==OT_INSTANCE)\r
489 #define sq_isbool(o) ((o)._type==OT_BOOL)\r
490 #define sq_isweakref(o) ((o)._type==OT_WEAKREF)\r
491 #define sq_type(o) ((o)._type)\r
492 \r
493 /* deprecated */\r
494 #define sq_createslot(v,n) sq_newslot(v,n,SQFalse)\r
495 \r
496 #define SQ_OK (0)\r
497 #define SQ_ERROR (-1)\r
498 \r
499 #define SQ_FAILED(res) (res<0)\r
500 #define SQ_SUCCEEDED(res) (res>=0)\r
501 \r
502 #ifdef __cplusplus\r
503 } /*extern "C"*/\r
504 #endif\r
505 \r
506 #endif /*_SQUIRREL_H_*/\r