/*\r
-Copyright (c) 2003-2012 Alberto Demichelis\r
-\r
-Permission is hereby granted, free of charge, to any person obtaining a copy\r
-of this software and associated documentation files (the "Software"), to deal\r
-in the Software without restriction, including without limitation the rights\r
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-copies of the Software, and to permit persons to whom the Software is\r
-furnished to do so, subject to the following conditions:\r
-\r
-The above copyright notice and this permission notice shall be included in\r
-all copies or substantial portions of the Software.\r
-\r
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-THE SOFTWARE.\r
+Copyright (c) 2003-2011 Alberto Demichelis\r
+\r
+This software is provided 'as-is', without any \r
+express or implied warranty. In no event will the \r
+authors be held liable for any damages arising from \r
+the use of this software.\r
+\r
+Permission is granted to anyone to use this software \r
+for any purpose, including commercial applications, \r
+and to alter it and redistribute it freely, subject \r
+to the following restrictions:\r
+\r
+ 1. The origin of this software must not be \r
+ misrepresented; you must not claim that \r
+ you wrote the original software. If you \r
+ use this software in a product, an \r
+ acknowledgment in the product \r
+ documentation would be appreciated but is \r
+ not required.\r
+\r
+ 2. Altered source versions must be plainly \r
+ marked as such, and must not be \r
+ misrepresented as being the original \r
+ software.\r
+\r
+ 3. This notice may not be removed or \r
+ altered from any source distribution.\r
+\r
*/\r
#ifndef _SQUIRREL_H_\r
#define _SQUIRREL_H_\r
#endif\r
#endif\r
\r
-#ifdef _SQ64\r
\r
+#ifdef _SQ64\r
#ifdef _MSC_VER\r
typedef __int64 SQInteger;\r
typedef unsigned __int64 SQUnsignedInteger;\r
typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/\r
#else\r
-typedef long long SQInteger;\r
-typedef unsigned long long SQUnsignedInteger;\r
-typedef unsigned long long SQHash; /*should be the same size of a pointer*/\r
+typedef long SQInteger;\r
+typedef unsigned long SQUnsignedInteger;\r
+typedef unsigned long SQHash; /*should be the same size of a pointer*/\r
#endif\r
typedef int SQInt32; \r
-typedef unsigned int SQUnsignedInteger32;\r
#else \r
typedef int SQInteger;\r
typedef int SQInt32; /*must be 32 bits(also on 64bits processors)*/\r
-typedef unsigned int SQUnsignedInteger32; /*must be 32 bits(also on 64bits processors)*/\r
typedef unsigned int SQUnsignedInteger;\r
typedef unsigned int SQHash; /*should be the same size of a pointer*/\r
#endif\r
#define SQ_OBJECT_RAWINIT()\r
#endif\r
\r
-#ifndef SQ_ALIGNMENT // SQ_ALIGNMENT shall be less than or equal to SQ_MALLOC alignments, and its value shall be power of 2.\r
-#if defined(SQUSEDOUBLE) || defined(_SQ64)\r
-#define SQ_ALIGNMENT 8\r
-#else\r
-#define SQ_ALIGNMENT 4\r
-#endif\r
-#endif\r
-\r
typedef void* SQUserPointer;\r
typedef SQUnsignedInteger SQBool;\r
typedef SQInteger SQRESULT;\r
struct SQClass;\r
struct SQInstance;\r
struct SQDelegable;\r
-struct SQOuter;\r
\r
#ifdef _UNICODE\r
#define SQUNICODE\r
#ifdef SQUNICODE\r
#if (defined(_MSC_VER) && _MSC_VER >= 1400) // 1400 = VS8\r
\r
-#if !defined(_NATIVE_WCHAR_T_DEFINED) //this is if the compiler considers wchar_t as native type\r
+#if defined(wchar_t) //this is if the compiler considers wchar_t as native type\r
#define wchar_t unsigned short\r
#endif\r
\r
#define scsprintf swprintf\r
#define scstrlen wcslen\r
#define scstrtod wcstod\r
-#ifdef _SQ64\r
-#define scstrtol _wcstoi64\r
-#else\r
#define scstrtol wcstol\r
-#endif\r
#define scatoi _wtoi\r
#define scstrtoul wcstoul\r
#define scvsprintf vswprintf\r
#define scsprintf sprintf\r
#define scstrlen strlen\r
#define scstrtod strtod\r
-#ifdef _SQ64\r
-#ifdef _MSC_VER\r
-#define scstrtol _strtoi64\r
-#else\r
-#define scstrtol strtoll\r
-#endif\r
-#else\r
#define scstrtol strtol\r
-#endif\r
#define scatoi atoi\r
#define scstrtoul strtoul\r
#define scvsprintf vsprintf\r
#define MAX_CHAR 0xFF\r
#endif\r
\r
-#ifdef _SQ64\r
-#define _PRINT_INT_PREC _SC("ll")\r
-#define _PRINT_INT_FMT _SC("%lld")\r
-#else\r
-#define _PRINT_INT_FMT _SC("%d")\r
-#endif\r
-\r
-#define SQUIRREL_VERSION _SC("Squirrel 3.0.4 stable")\r
-#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2012 Alberto Demichelis")\r
+#define SQUIRREL_VERSION _SC("Squirrel 2.2.5 stable")\r
+#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2010 Alberto Demichelis")\r
#define SQUIRREL_AUTHOR _SC("Alberto Demichelis")\r
-#define SQUIRREL_VERSION_NUMBER 304\r
+#define SQUIRREL_VERSION_NUMBER 225\r
\r
#define SQ_VMSTATE_IDLE 0\r
#define SQ_VMSTATE_RUNNING 1\r
#define _RT_CLASS 0x00004000\r
#define _RT_INSTANCE 0x00008000\r
#define _RT_WEAKREF 0x00010000\r
-#define _RT_OUTER 0x00020000\r
\r
typedef enum tagSQObjectType{\r
OT_NULL = (_RT_NULL|SQOBJECT_CANBEFALSE),\r
OT_FUNCPROTO = (_RT_FUNCPROTO|SQOBJECT_REF_COUNTED), //internal usage only\r
OT_CLASS = (_RT_CLASS|SQOBJECT_REF_COUNTED),\r
OT_INSTANCE = (_RT_INSTANCE|SQOBJECT_REF_COUNTED|SQOBJECT_DELEGABLE),\r
- OT_WEAKREF = (_RT_WEAKREF|SQOBJECT_REF_COUNTED),\r
- OT_OUTER = (_RT_OUTER|SQOBJECT_REF_COUNTED) //internal usage only\r
+ OT_WEAKREF = (_RT_WEAKREF|SQOBJECT_REF_COUNTED)\r
}SQObjectType;\r
\r
#define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)\r
struct SQTable *pTable;\r
struct SQArray *pArray;\r
struct SQClosure *pClosure;\r
- struct SQOuter *pOuter;\r
struct SQGenerator *pGenerator;\r
struct SQNativeClosure *pNativeClosure;\r
struct SQString *pString;\r
SQObjectValue _unVal;\r
}SQObject;\r
\r
-typedef struct tagSQMemberHandle{\r
- SQBool _static;\r
- SQInteger _index;\r
-}SQMemberHandle;\r
-\r
typedef struct tagSQStackInfos{\r
const SQChar* funcname;\r
const SQChar* source;\r
\r
typedef struct SQVM* HSQUIRRELVM;\r
typedef SQObject HSQOBJECT;\r
-typedef SQMemberHandle HSQMEMBERHANDLE;\r
typedef SQInteger (*SQFUNCTION)(HSQUIRRELVM);\r
typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);\r
typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);\r
typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);\r
-typedef void (*SQDEBUGHOOK)(HSQUIRRELVM /*v*/, SQInteger /*type*/, const SQChar * /*sourcename*/, SQInteger /*line*/, const SQChar * /*funcname*/);\r
+\r
typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);\r
typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);\r
\r
const SQChar *source;\r
}SQFunctionInfo;\r
\r
+\r
/*vm*/\r
SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);\r
SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);\r
SQUIRREL_API void sq_close(HSQUIRRELVM v);\r
SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);\r
SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);\r
-SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc,SQPRINTFUNCTION errfunc);\r
+SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc);\r
SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);\r
-SQUIRREL_API SQPRINTFUNCTION sq_geterrorfunc(HSQUIRRELVM v);\r
SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);\r
SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);\r
SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);\r
-SQUIRREL_API SQInteger sq_getversion();\r
\r
/*compiler*/\r
SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);\r
SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);\r
SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);\r
-SQUIRREL_API SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize);\r
+SQUIRREL_API void sq_reservestack(HSQUIRRELVM v,SQInteger nsize);\r
SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);\r
SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);\r
\r
/*object creation handling*/\r
SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);\r
SQUIRREL_API void sq_newtable(HSQUIRRELVM v);\r
-SQUIRREL_API void sq_newtableex(HSQUIRRELVM v,SQInteger initialcapacity);\r
SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);\r
SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);\r
SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);\r
SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);\r
SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);\r
SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);\r
-SQUIRREL_API SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);\r
-SQUIRREL_API SQHash sq_gethash(HSQUIRRELVM v, SQInteger idx);\r
SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);\r
-SQUIRREL_API SQRESULT sq_tostring(HSQUIRRELVM v,SQInteger idx);\r
+SQUIRREL_API void sq_tostring(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);\r
SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);\r
SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);\r
SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);\r
SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);\r
SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);\r
-SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi);\r
+SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger idx,SQFunctionInfo *fi);\r
SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);\r
-SQUIRREL_API SQRESULT sq_getclosurename(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);\r
SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);\r
SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);\r
SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);\r
-SQUIRREL_API SQRESULT sq_getmemberhandle(HSQUIRRELVM v,SQInteger idx,HSQMEMBERHANDLE *handle);\r
-SQUIRREL_API SQRESULT sq_getbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);\r
-SQUIRREL_API SQRESULT sq_setbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);\r
\r
/*object manipulation*/\r
SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);\r
SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);\r
-SQUIRREL_API SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);\r
-SQUIRREL_API SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);\r
SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);\r
SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval); \r
SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize); \r
SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror);\r
SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);\r
SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);\r
-SQUIRREL_API SQRESULT sq_getcallee(HSQUIRRELVM v);\r
SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);\r
SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err);\r
-SQUIRREL_API SQRESULT sq_throwobject(HSQUIRRELVM v);\r
SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);\r
SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);\r
\r
SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);\r
SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);\r
SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);\r
-SQUIRREL_API SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po);\r
SQUIRREL_API void sq_resetobject(HSQOBJECT *po);\r
-SQUIRREL_API const SQChar *sq_objtostring(const HSQOBJECT *o);\r
-SQUIRREL_API SQBool sq_objtobool(const HSQOBJECT *o);\r
-SQUIRREL_API SQInteger sq_objtointeger(const HSQOBJECT *o);\r
-SQUIRREL_API SQFloat sq_objtofloat(const HSQOBJECT *o);\r
-SQUIRREL_API SQUserPointer sq_objtouserpointer(const HSQOBJECT *o);\r
-SQUIRREL_API SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag);\r
+SQUIRREL_API const SQChar *sq_objtostring(HSQOBJECT *o);\r
+SQUIRREL_API SQBool sq_objtobool(HSQOBJECT *o);\r
+SQUIRREL_API SQInteger sq_objtointeger(HSQOBJECT *o);\r
+SQUIRREL_API SQFloat sq_objtofloat(HSQOBJECT *o);\r
+SQUIRREL_API SQRESULT sq_getobjtypetag(HSQOBJECT *o,SQUserPointer * typetag);\r
\r
/*GC*/\r
SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);\r
-SQUIRREL_API SQRESULT sq_resurrectunreachable(HSQUIRRELVM v);\r
\r
/*serialization*/\r
SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);\r
/*debug*/\r
SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);\r
SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);\r
-SQUIRREL_API void sq_setnativedebughook(HSQUIRRELVM v,SQDEBUGHOOK hook);\r
\r
/*UTILITY MACRO*/\r
#define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)\r