squirrel.h

00001 /*
00002 Copyright (c) 2003-2008 Alberto Demichelis
00003 
00004 This software is provided 'as-is', without any
00005 express or implied warranty. In no event will the
00006 authors be held liable for any damages arising from
00007 the use of this software.
00008 
00009 Permission is granted to anyone to use this software
00010 for any purpose, including commercial applications,
00011 and to alter it and redistribute it freely, subject
00012 to the following restrictions:
00013 
00014     1. The origin of this software must not be
00015     misrepresented; you must not claim that
00016     you wrote the original software. If you
00017     use this software in a product, an
00018     acknowledgment in the product
00019     documentation would be appreciated but is
00020     not required.
00021 
00022     2. Altered source versions must be plainly
00023     marked as such, and must not be
00024     misrepresented as being the original
00025     software.
00026 
00027     3. This notice may not be removed or
00028     altered from any source distribution.
00029 
00030 */
00031 #ifndef _SQUIRREL_H_
00032 #define _SQUIRREL_H_
00033 
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037 
00038 #if defined(_MSC_VER) && _MSC_VER >= 1400 // MSVC 2005 safety checks
00039 # pragma warning(disable: 4996)   // '_wfopen' was declared deprecated
00040 # define _CRT_SECURE_NO_DEPRECATE // all deprecated 'unsafe string functions
00041 # define _CRT_NON_CONFORMING_SWPRINTFS // another deprecated stuff
00042 #endif /* _MSC_VER >= 1400 */
00043 
00044 #ifndef SQUIRREL_API
00045 #define SQUIRREL_API extern
00046 #endif
00047 
00048 #if (defined(_WIN64) || defined(_LP64)) && !defined(_SQ64)
00049 #define _SQ64
00050 #endif
00051 
00052 #ifdef _SQ64
00053 #ifdef _MSC_VER
00054 typedef __int64 SQInteger;
00055 typedef unsigned __int64 SQUnsignedInteger;
00056 typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
00057 #else
00058 typedef long SQInteger;
00059 typedef unsigned long SQUnsignedInteger;
00060 typedef unsigned long SQHash; /*should be the same size of a pointer*/
00061 #endif
00062 typedef int SQInt32;
00063 #else
00064 typedef int SQInteger;
00065 typedef int SQInt32; /*must be 32 bits(also on 64bits processors)*/
00066 typedef unsigned int SQUnsignedInteger;
00067 typedef unsigned int SQHash; /*should be the same size of a pointer*/
00068 #endif
00069 
00070 
00071 typedef float SQFloat;
00072 typedef void* SQUserPointer;
00073 typedef SQUnsignedInteger SQBool;
00074 typedef SQInteger SQRESULT;
00075 
00076 #define SQTrue  (1)
00077 #define SQFalse (0)
00078 
00079 struct SQVM;
00080 struct SQTable;
00081 struct SQArray;
00082 struct SQString;
00083 struct SQClosure;
00084 struct SQGenerator;
00085 struct SQNativeClosure;
00086 struct SQUserData;
00087 struct SQFunctionProto;
00088 struct SQRefCounted;
00089 struct SQClass;
00090 struct SQInstance;
00091 struct SQDelegable;
00092 
00093 #ifdef _UNICODE
00094 #define SQUNICODE
00095 #endif
00096 
00097 #ifdef SQUNICODE
00098 #if (defined(_MSC_VER) && _MSC_VER >= 1400) // 1400 = VS8
00099 
00100 #ifndef _WCHAR_T_DEFINED //this is if the compiler considers wchar_t as native type
00101 typedef unsigned short wchar_t;
00102 #endif
00103 #endif
00104 
00105 typedef wchar_t SQChar;
00106 #define _SC(a) L##a
00107 #define scstrcmp  wcscmp
00108 #define scsprintf swprintf
00109 #define scsnprintf  _snwprintf
00110 #define scstrlen  wcslen
00111 #define scstrtod  wcstod
00112 #define scstrtol  wcstol
00113 #define scatoi    _wtoi
00114 #define scstrtoul wcstoul
00115 #define scvsprintf  vswprintf
00116 #define scstrstr  wcsstr
00117 #define scisspace iswspace
00118 #define scisdigit iswdigit
00119 #define scisxdigit  iswxdigit
00120 #define scisalpha iswalpha
00121 #define sciscntrl iswcntrl
00122 #define scisalnum iswalnum
00123 #define scprintf  wprintf
00124 #define scfprintf fwprintf
00125 #define scvprintf vwprintf
00126 #define scvfprintf  vfwprintf
00127 #define scvsnprintf _vsnwprintf
00128 #define scstrdup  _wcsdup
00129 #define scstrrchr wcsrchr
00130 #define scstrcat  wcscat
00131 #define MAX_CHAR 0xFFFF
00132 #else
00133 typedef char SQChar;
00134 #define _SC(a) a
00135 #define scstrcmp  strcmp
00136 #define scsprintf sprintf
00137 #define scsnprintf  snprintf
00138 #define scstrlen  strlen
00139 #define scstrtod  strtod
00140 #define scstrtol  strtol
00141 #define scatoi    atoi
00142 #define scstrtoul strtoul
00143 #define scvsprintf  vsprintf
00144 #define scstrstr  strstr
00145 #define scisspace isspace
00146 #define scisdigit isdigit
00147 #define scisxdigit  isxdigit
00148 #define sciscntrl iscntrl
00149 #define scisalpha isalpha
00150 #define scisalnum isalnum
00151 #define scprintf  printf
00152 #define scfprintf fprintf
00153 #define scvprintf vprintf
00154 #define scvfprintf  vfprintf
00155 #define scvsnprintf vsnprintf
00156 #define scstrdup  strdup
00157 #define scstrrchr strrchr
00158 #define scstrcat  strcat
00159 #define MAX_CHAR 0xFF
00160 #endif
00161 
00162 #define SQUIRREL_VERSION  _SC("Squirrel 2.2.2 stable - With custom OpenTTD modifications")
00163 #define SQUIRREL_COPYRIGHT  _SC("Copyright (C) 2003-2008 Alberto Demichelis")
00164 #define SQUIRREL_AUTHOR   _SC("Alberto Demichelis")
00165 
00166 #define SQ_VMSTATE_IDLE     0
00167 #define SQ_VMSTATE_RUNNING    1
00168 #define SQ_VMSTATE_SUSPENDED  2
00169 
00170 #define SQUIRREL_EOB 0
00171 #define SQ_BYTECODE_STREAM_TAG  0xFAFA
00172 
00173 #define SQOBJECT_REF_COUNTED  0x08000000
00174 #define SQOBJECT_NUMERIC    0x04000000
00175 #define SQOBJECT_DELEGABLE    0x02000000
00176 #define SQOBJECT_CANBEFALSE   0x01000000
00177 
00178 #define SQ_MATCHTYPEMASKSTRING (-99999)
00179 
00180 #define _RT_MASK 0x00FFFFFF
00181 #define _RAW_TYPE(type) (type&_RT_MASK)
00182 
00183 #define _RT_NULL      0x00000001
00184 #define _RT_INTEGER     0x00000002
00185 #define _RT_FLOAT     0x00000004
00186 #define _RT_BOOL      0x00000008
00187 #define _RT_STRING      0x00000010
00188 #define _RT_TABLE     0x00000020
00189 #define _RT_ARRAY     0x00000040
00190 #define _RT_USERDATA    0x00000080
00191 #define _RT_CLOSURE     0x00000100
00192 #define _RT_NATIVECLOSURE 0x00000200
00193 #define _RT_GENERATOR   0x00000400
00194 #define _RT_USERPOINTER   0x00000800
00195 #define _RT_THREAD      0x00001000
00196 #define _RT_FUNCPROTO   0x00002000
00197 #define _RT_CLASS     0x00004000
00198 #define _RT_INSTANCE    0x00008000
00199 #define _RT_WEAKREF     0x00010000
00200 
00201 typedef enum tagSQObjectType{
00202   OT_NULL =     (_RT_NULL|SQOBJECT_CANBEFALSE),
00203   OT_INTEGER =    (_RT_INTEGER|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
00204   OT_FLOAT =      (_RT_FLOAT|SQOBJECT_NUMERIC|SQOBJECT_CANBEFALSE),
00205   OT_BOOL =     (_RT_BOOL|SQOBJECT_CANBEFALSE),
00206   OT_STRING =     (_RT_STRING|SQOBJECT_REF_COUNTED),
00207   OT_TABLE =      (_RT_TABLE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
00208   OT_ARRAY =      (_RT_ARRAY|SQOBJECT_REF_COUNTED),
00209   OT_USERDATA =   (_RT_USERDATA|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
00210   OT_CLOSURE =    (_RT_CLOSURE|SQOBJECT_REF_COUNTED),
00211   OT_NATIVECLOSURE =  (_RT_NATIVECLOSURE|SQOBJECT_REF_COUNTED),
00212   OT_GENERATOR =    (_RT_GENERATOR|SQOBJECT_REF_COUNTED),
00213   OT_USERPOINTER =  _RT_USERPOINTER,
00214   OT_THREAD =     (_RT_THREAD|SQOBJECT_REF_COUNTED) ,
00215   OT_FUNCPROTO =    (_RT_FUNCPROTO|SQOBJECT_REF_COUNTED), //internal usage only
00216   OT_CLASS =      (_RT_CLASS|SQOBJECT_REF_COUNTED),
00217   OT_INSTANCE =   (_RT_INSTANCE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),
00218   OT_WEAKREF =    (_RT_WEAKREF|SQOBJECT_REF_COUNTED)
00219 }SQObjectType;
00220 
00221 #define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)
00222 
00223 
00224 typedef union tagSQObjectValue
00225 {
00226   struct SQTable *pTable;
00227   struct SQArray *pArray;
00228   struct SQClosure *pClosure;
00229   struct SQGenerator *pGenerator;
00230   struct SQNativeClosure *pNativeClosure;
00231   struct SQString *pString;
00232   struct SQUserData *pUserData;
00233   SQInteger nInteger;
00234   SQFloat fFloat;
00235   SQUserPointer pUserPointer;
00236   struct SQFunctionProto *pFunctionProto;
00237   struct SQRefCounted *pRefCounted;
00238   struct SQDelegable *pDelegable;
00239   struct SQVM *pThread;
00240   struct SQClass *pClass;
00241   struct SQInstance *pInstance;
00242   struct SQWeakRef *pWeakRef;
00243 }SQObjectValue;
00244 
00245 
00246 typedef struct tagSQObject
00247 {
00248   SQObjectType _type;
00249   SQObjectValue _unVal;
00250 }SQObject;
00251 
00252 typedef struct tagSQStackInfos{
00253   const SQChar* funcname;
00254   const SQChar* source;
00255   SQInteger line;
00256 }SQStackInfos;
00257 
00258 typedef struct SQVM* HSQUIRRELVM;
00259 typedef SQObject HSQOBJECT;
00260 typedef SQInteger (*SQFUNCTION)(HSQUIRRELVM);
00261 typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);
00262 typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);
00263 typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);
00264 
00265 typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
00266 typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
00267 
00268 typedef SQInteger (*SQLEXREADFUNC)(SQUserPointer);
00269 
00270 typedef struct tagSQRegFunction{
00271   const SQChar *name;
00272   SQFUNCTION f;
00273   SQInteger nparamscheck;
00274   const SQChar *typemask;
00275 }SQRegFunction;
00276 
00277 /*vm*/
00278 SQUIRREL_API bool sq_can_suspend(HSQUIRRELVM v);
00279 SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
00280 SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
00281 SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
00282 SQUIRREL_API void sq_close(HSQUIRRELVM v);
00283 SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);
00284 SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);
00285 SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc);
00286 SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);
00287 SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);
00288 SQUIRREL_API bool sq_resumecatch(HSQUIRRELVM v, int suspend = -1);
00289 SQUIRREL_API bool sq_resumeerror(HSQUIRRELVM v);
00290 SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror);
00291 SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);
00292 
00293 /*compiler*/
00294 SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
00295 SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
00296 SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
00297 SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
00298 SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);
00299 
00300 /*stack operations*/
00301 SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);
00302 SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
00303 SQUIRREL_API void sq_poptop(HSQUIRRELVM v);
00304 SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);
00305 SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);
00306 SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);
00307 SQUIRREL_API void sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
00308 SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);
00309 SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
00310 
00311 /*object creation handling*/
00312 SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);
00313 SQUIRREL_API void sq_newtable(HSQUIRRELVM v);
00314 SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);
00315 SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
00316 SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
00317 SQUIRREL_API SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);
00318 SQUIRREL_API void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);
00319 SQUIRREL_API void sq_pushfloat(HSQUIRRELVM v,SQFloat f);
00320 SQUIRREL_API void sq_pushinteger(HSQUIRRELVM v,SQInteger n);
00321 SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);
00322 SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
00323 SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);
00324 SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
00325 SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
00326 SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
00327 SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);
00328 SQUIRREL_API void sq_tostring(HSQUIRRELVM v,SQInteger idx);
00329 SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
00330 SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
00331 SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
00332 SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
00333 SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
00334 SQUIRREL_API SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
00335 SQUIRREL_API SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
00336 SQUIRREL_API SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
00337 SQUIRREL_API SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
00338 SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
00339 SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
00340 SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
00341 SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
00342 SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
00343 SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
00344 SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
00345 SQUIRREL_API SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
00346 SQUIRREL_API SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);
00347 SQUIRREL_API SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);
00348 SQUIRREL_API SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);
00349 SQUIRREL_API SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);
00350 SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);
00351 SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);
00352 SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);
00353 
00354 /*object manipulation*/
00355 SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);
00356 SQUIRREL_API void sq_pushregistrytable(HSQUIRRELVM v);
00357 SQUIRREL_API void sq_pushconsttable(HSQUIRRELVM v);
00358 SQUIRREL_API SQRESULT sq_setroottable(HSQUIRRELVM v);
00359 SQUIRREL_API SQRESULT sq_setconsttable(HSQUIRRELVM v);
00360 SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
00361 SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
00362 SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
00363 SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
00364 SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
00365 SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
00366 SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
00367 SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);
00368 SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
00369 SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
00370 SQUIRREL_API SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx);
00371 SQUIRREL_API SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
00372 SQUIRREL_API SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
00373 SQUIRREL_API SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);
00374 SQUIRREL_API SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);
00375 SQUIRREL_API SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);
00376 SQUIRREL_API SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
00377 SQUIRREL_API SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);
00378 SQUIRREL_API SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);
00379 SQUIRREL_API SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);
00380 
00381 /*calls*/
00382 SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror, int suspend = -1);
00383 SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
00384 SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
00385 SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
00386 SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);
00387 SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);
00388 SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);
00389 
00390 /*raw object handling*/
00391 SQUIRREL_API SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
00392 SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);
00393 SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);
00394 SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);
00395 SQUIRREL_API void sq_resetobject(HSQOBJECT *po);
00396 SQUIRREL_API const SQChar *sq_objtostring(HSQOBJECT *o);
00397 SQUIRREL_API SQBool sq_objtobool(HSQOBJECT *o);
00398 SQUIRREL_API SQInteger sq_objtointeger(HSQOBJECT *o);
00399 SQUIRREL_API SQFloat sq_objtofloat(HSQOBJECT *o);
00400 SQUIRREL_API SQRESULT sq_getobjtypetag(HSQOBJECT *o,SQUserPointer * typetag);
00401 
00402 /*GC*/
00403 SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);
00404 
00405 /*serialization*/
00406 SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
00407 SQUIRREL_API SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
00408 
00409 /*mem allocation*/
00410 SQUIRREL_API void *sq_malloc(SQUnsignedInteger size);
00411 SQUIRREL_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
00412 SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);
00413 
00414 /*debug*/
00415 SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
00416 SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
00417 
00418 /*UTILITY MACRO*/
00419 #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
00420 #define sq_istable(o) ((o)._type==OT_TABLE)
00421 #define sq_isarray(o) ((o)._type==OT_ARRAY)
00422 #define sq_isfunction(o) ((o)._type==OT_FUNCPROTO)
00423 #define sq_isclosure(o) ((o)._type==OT_CLOSURE)
00424 #define sq_isgenerator(o) ((o)._type==OT_GENERATOR)
00425 #define sq_isnativeclosure(o) ((o)._type==OT_NATIVECLOSURE)
00426 #define sq_isstring(o) ((o)._type==OT_STRING)
00427 #define sq_isinteger(o) ((o)._type==OT_INTEGER)
00428 #define sq_isfloat(o) ((o)._type==OT_FLOAT)
00429 #define sq_isuserpointer(o) ((o)._type==OT_USERPOINTER)
00430 #define sq_isuserdata(o) ((o)._type==OT_USERDATA)
00431 #define sq_isthread(o) ((o)._type==OT_THREAD)
00432 #define sq_isnull(o) ((o)._type==OT_NULL)
00433 #define sq_isclass(o) ((o)._type==OT_CLASS)
00434 #define sq_isinstance(o) ((o)._type==OT_INSTANCE)
00435 #define sq_isbool(o) ((o)._type==OT_BOOL)
00436 #define sq_isweakref(o) ((o)._type==OT_WEAKREF)
00437 #define sq_type(o) ((o)._type)
00438 
00439 /* deprecated */
00440 #define sq_createslot(v,n) sq_newslot(v,n,SQFalse)
00441 
00442 #define SQ_OK (0)
00443 #define SQ_ERROR (-1)
00444 
00445 #define SQ_FAILED(res) (res<0)
00446 #define SQ_SUCCEEDED(res) (res>=0)
00447 
00448 #ifdef __cplusplus
00449 } /*extern "C"*/
00450 #endif
00451 
00452 #endif /*_SQUIRREL_H_*/

Generated on Tue Dec 1 00:06:13 2009 for OpenTTD by  doxygen 1.5.6