Browse Source

Separate api declarations and use a macro to reuse then in other contexts

mingodad 9 years ago
parent
commit
69f85ea7b9
5 changed files with 393 additions and 678 deletions
  1. 3 153
      SquiLu-ext/sqmodule.h
  2. 172 307
      SquiLu-ext/sqratimport.cpp
  3. 213 0
      SquiLu/include/sqapi.h
  4. 4 217
      SquiLu/include/squirrel.h
  5. 1 1
      SquiLu/squirrel/sqapi.cpp

+ 3 - 153
SquiLu-ext/sqmodule.h

@@ -40,159 +40,9 @@ extern "C" {
         If new functions are added to the Squirrel API, they should be added here too
         If new functions are added to the Squirrel API, they should be added here too
     */
     */
     typedef struct {
     typedef struct {
-        /*vm*/
-        HSQUIRRELVM     (*open)(SQInteger initialstacksize);
-        HSQUIRRELVM     (*newthread)(HSQUIRRELVM friendvm, SQInteger initialstacksize);
-        void            (*seterrorhandler)(HSQUIRRELVM v);
-        void            (*close)(HSQUIRRELVM v);
-        void            (*setforeignptr)(HSQUIRRELVM v,SQUserPointer p);
-        SQUserPointer   (*getforeignptr)(HSQUIRRELVM v);
-#if SQUIRREL_VERSION_NUMBER >= 300
-        void            (*setprintfunc)(HSQUIRRELVM v, SQPRINTFUNCTION printfunc, SQPRINTFUNCTION);
-#else
-        void            (*setprintfunc)(HSQUIRRELVM v, SQPRINTFUNCTION printfunc);
-#endif
-        SQPRINTFUNCTION (*getprintfunc)(HSQUIRRELVM v);
-        SQRESULT        (*suspendvm)(HSQUIRRELVM v);
-        SQRESULT        (*wakeupvm)(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
-        SQInteger       (*getvmstate)(HSQUIRRELVM v);
-
-        /*compiler*/
-        SQRESULT        (*compile)(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,
-                                   SQBool raiseerror,SQBool show_warnings);
-        SQRESULT        (*compilebuffer)(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,
-                                         SQBool raiseerror,SQBool show_warnings);
-        void            (*enabledebuginfo)(HSQUIRRELVM v, SQBool enable);
-        void            (*notifyallexceptions)(HSQUIRRELVM v, SQBool enable);
-        void            (*setcompilererrorhandler)(HSQUIRRELVM v,SQCOMPILERERROR f);
-
-        /*stack operations*/
-        void            (*push)(HSQUIRRELVM v,SQInteger idx);
-        void            (*pop)(HSQUIRRELVM v,SQInteger nelemstopop);
-        void            (*poptop)(HSQUIRRELVM v);
-        void            (*remove)(HSQUIRRELVM v,SQInteger idx);
-        SQInteger       (*gettop)(HSQUIRRELVM v);
-        void            (*settop)(HSQUIRRELVM v,SQInteger newtop);
-#if SQUIRREL_VERSION_NUMBER >= 300
-        SQRESULT            (*reservestack)(HSQUIRRELVM v,SQInteger nsize);
-#else
-        void            (*reservestack)(HSQUIRRELVM v,SQInteger nsize);
-#endif
-        SQInteger       (*cmp)(HSQUIRRELVM v);
-        void            (*move)(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
-
-        /*object creation handling*/
-        SQUserPointer   (*newuserdata)(HSQUIRRELVM v,SQUnsignedInteger size);
-        void            (*newtable)(HSQUIRRELVM v);
-        void            (*newarray)(HSQUIRRELVM v,SQInteger size);
-        void            (*newclosure)(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
-        SQRESULT        (*setparamscheck)(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
-        SQRESULT        (*bindenv)(HSQUIRRELVM v,SQInteger idx);
-        void            (*pushstring)(HSQUIRRELVM v,const SQChar *s,SQInteger len);
-        void            (*pushfloat)(HSQUIRRELVM v,SQFloat f);
-        void            (*pushinteger)(HSQUIRRELVM v,SQInteger n);
-        void            (*pushbool)(HSQUIRRELVM v,SQBool b);
-        void            (*pushuserpointer)(HSQUIRRELVM v,SQUserPointer p);
-        void            (*pushnull)(HSQUIRRELVM v);
-        SQObjectType    (*gettype)(HSQUIRRELVM v,SQInteger idx);
-        SQInteger       (*getsize)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*getbase)(HSQUIRRELVM v,SQInteger idx);
-        SQBool          (*instanceof)(HSQUIRRELVM v);
-#if SQUIRREL_VERSION_NUMBER >= 300
-        SQRESULT            (*tostring)(HSQUIRRELVM v,SQInteger idx);
-#else
-        void            (*tostring)(HSQUIRRELVM v,SQInteger idx);
-#endif
-        SQRESULT        (*tobool)(HSQUIRRELVM v, SQInteger idx);
-        SQRESULT        (*tointeger)(HSQUIRRELVM v, SQInteger idx);
-        SQRESULT        (*tofloat)(HSQUIRRELVM v, SQInteger idx);
-        SQRESULT        (*getstring)(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
-        SQRESULT        (*getinteger)(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
-        SQRESULT        (*getfloat)(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
-        SQRESULT        (*getbool)(HSQUIRRELVM v,SQInteger idx,SQBool *b);
-        SQRESULT        (*getthread)(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
-        SQRESULT        (*getuserpointer)(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
-        SQRESULT        (*getuserdata)(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
-        SQRESULT        (*settypetag)(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
-        SQRESULT        (*gettypetag)(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
-        void            (*setreleasehook)(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
-        SQChar*         (*getscratchpad)(HSQUIRRELVM v,SQInteger minsize);
-        SQRESULT        (*getclosureinfo)(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
-        SQRESULT        (*setnativeclosurename)(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
-        SQRESULT        (*setinstanceup)(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
-        SQRESULT        (*getinstanceup)(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
-        SQRESULT        (*setclassudsize)(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
-        SQRESULT        (*newclass)(HSQUIRRELVM v,SQBool hasbase);
-        SQRESULT        (*createinstance)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*setattributes)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*getattributes)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*getclass)(HSQUIRRELVM v,SQInteger idx);
-        void            (*weakref)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*getdefaultdelegate)(HSQUIRRELVM v,SQObjectType t);
-
-        /*object manipulation*/
-        void            (*pushroottable)(HSQUIRRELVM v);
-        void            (*pushregistrytable)(HSQUIRRELVM v);
-        void            (*pushconsttable)(HSQUIRRELVM v);
-        SQRESULT        (*setroottable)(HSQUIRRELVM v);
-        SQRESULT        (*setconsttable)(HSQUIRRELVM v);
-        SQRESULT        (*newslot)(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
-        SQRESULT        (*deleteslot)(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
-        SQRESULT        (*set)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*get)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*rawget)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*rawset)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*rawdeleteslot)(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
-        SQRESULT        (*arrayappend)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*arraypop)(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
-        SQRESULT        (*arrayresize)(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
-        SQRESULT        (*arrayreverse)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*arrayremove)(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
-        SQRESULT        (*arrayinsert)(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
-        SQRESULT        (*setdelegate)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*getdelegate)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*clone)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*setfreevariable)(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
-        SQRESULT        (*next)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*getweakrefval)(HSQUIRRELVM v,SQInteger idx);
-        SQRESULT        (*clear)(HSQUIRRELVM v,SQInteger idx);
-
-        /*calls*/
-        SQRESULT        (*call)(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror);
-        SQRESULT        (*resume)(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
-        const SQChar*   (*getlocal)(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
-        const SQChar*   (*getfreevariable)(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
-        SQRESULT        (*throwerror)(HSQUIRRELVM v,const SQChar *fmt, ...);
-        void            (*reseterror)(HSQUIRRELVM v);
-        void            (*getlasterror)(HSQUIRRELVM v);
-
-        /*raw object handling*/
-        SQRESULT        (*getstackobj)(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
-        void            (*pushobject)(HSQUIRRELVM v,HSQOBJECT obj);
-        void            (*addref)(HSQUIRRELVM v,HSQOBJECT *po);
-        SQBool          (*release)(HSQUIRRELVM v,HSQOBJECT *po);
-        void            (*resetobject)(HSQOBJECT *po);
-        const SQChar*   (*objtostring)(const HSQOBJECT *o);
-        SQBool          (*objtobool)(const HSQOBJECT *o);
-        SQInteger       (*objtointeger)(const HSQOBJECT *o);
-        SQFloat         (*objtofloat)(const HSQOBJECT *o);
-        SQRESULT        (*getobjtypetag)(const HSQOBJECT *o,SQUserPointer * typetag);
-
-        /*GC*/
-        SQInteger       (*collectgarbage)(HSQUIRRELVM v);
-
-        /*serialization*/
-        SQRESULT        (*writeclosure)(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
-        SQRESULT        (*readclosure)(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
-
-        /*mem allocation*/
-        void*           (*malloc)(SQUnsignedInteger size);
-        void*           (*realloc)(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
-        void            (*free)(void *p,SQUnsignedInteger size);
-
-        /*debug*/
-        SQRESULT        (*stackinfos)(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
-        void            (*setdebughook)(HSQUIRRELVM v);
+#define SQUIRREL_API_FUNC(fret, fname, fargs) fret (*sq_##fname) fargs;
+#include "sqapi.h"
+#undef SQUIRREL_API_FUNC
     } sq_api;
     } sq_api;
     typedef sq_api* HSQAPI;
     typedef sq_api* HSQAPI;
 
 

+ 172 - 307
SquiLu-ext/sqratimport.cpp

@@ -1,314 +1,179 @@
-//
-// SqratImport: Supports importing of squirrel modules
-//
-
-//
-// Copyright (c) 2009 Brandon Jones
-//
-// This software is provided 'as-is', without any express or implied
-// warranty. In no event will the authors be held liable for any damages
-// arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose,
-// including commercial applications, and to alter it and redistribute it
-// freely, subject to the following restrictions:
-//
-//  1. The origin of this software must not be misrepresented; you must not
-//  claim that you wrote the original software. If you use this software
-//  in a product, an acknowledgment in the product documentation would be
-//  appreciated but is not required.
-//
-//  2. Altered source versions must be plainly marked as such, and must not be
-//  misrepresented as being the original software.
-//
-//  3. This notice may not be removed or altered from any source
-//  distribution.
-//
-
-#include "sqratimport.h"
-#include "sqmodule.h"
-
-//#include "sqratlib/sqratBase.h"
-#include <sqstdio.h>
-#include <string>
-
-#if defined(_WIN32)
-
-#include <windows.h>
-
-#elif defined(__unix)
-
-#include <dlfcn.h>
-
-#endif
-
-typedef SQRESULT (*SQMODULELOAD)(HSQUIRRELVM v, HSQAPI sq);
-
-static HSQAPI sqapi = NULL;
-
-// Create and populate the HSQAPI structure with function pointers
-// If new functions are added to the Squirrel API, they should be added here too
-static HSQAPI sqrat_newapi() {
-    HSQAPI sq = (HSQAPI)sq_malloc(sizeof(sq_api));
-
-    /*vm*/
-    sq->open = sq_open;
-    sq->newthread = sq_newthread;
-    sq->seterrorhandler = sq_seterrorhandler;
-    sq->close = sq_close;
-    sq->setforeignptr = sq_setforeignptr;
-    sq->getforeignptr = sq_getforeignptr;
-    sq->setprintfunc = sq_setprintfunc;
-    sq->getprintfunc = sq_getprintfunc;
-    sq->suspendvm = sq_suspendvm;
-    sq->wakeupvm = sq_wakeupvm;
-    sq->getvmstate = sq_getvmstate;
-
-    /*compiler*/
-    sq->compile = sq_compile;
-    sq->compilebuffer = sq_compilebuffer;
-    sq->enabledebuginfo = sq_enabledebuginfo;
-    sq->notifyallexceptions = sq_notifyallexceptions;
-    sq->setcompilererrorhandler = sq_setcompilererrorhandler;
-
-    /*stack operations*/
-    sq->push = sq_push;
-    sq->pop = sq_pop;
-    sq->poptop = sq_poptop;
-    sq->remove = sq_remove;
-    sq->gettop = sq_gettop;
-    sq->settop = sq_settop;
-    sq->reservestack = sq_reservestack;
-    sq->cmp = sq_cmp;
-    sq->move = sq_move;
-
-    /*object creation handling*/
-    sq->newuserdata = sq_newuserdata;
-    sq->newtable = sq_newtable;
-    sq->newarray = sq_newarray;
-    sq->newclosure = sq_newclosure;
-    sq->setparamscheck = sq_setparamscheck;
-    sq->bindenv = sq_bindenv;
-    sq->pushstring = sq_pushstring;
-    sq->pushfloat = sq_pushfloat;
-    sq->pushinteger = sq_pushinteger;
-    sq->pushbool = sq_pushbool;
-    sq->pushuserpointer = sq_pushuserpointer;
-    sq->pushnull = sq_pushnull;
-    sq->gettype = sq_gettype;
-    sq->getsize = sq_getsize;
-    sq->getbase = sq_getbase;
-    sq->instanceof = sq_instanceof;
-    sq->tostring = sq_tostring;
-    sq->tobool = sq_tobool;
-    sq->tointeger = sq_tointeger;
-    sq->tofloat = sq_tofloat;
-    sq->getstring = sq_getstring;
-    sq->getinteger = sq_getinteger;
-    sq->getthread = sq_getthread;
-    sq->getbool = sq_getbool;
-    sq->getuserpointer = sq_getuserpointer;
-    sq->getuserdata = sq_getuserdata;
-    sq->settypetag = sq_settypetag;
-    sq->gettypetag = sq_gettypetag;
-    sq->setreleasehook = sq_setreleasehook;
-    sq->getscratchpad = sq_getscratchpad;
-    sq->getclosureinfo = sq_getclosureinfo;
-    sq->setnativeclosurename = sq_setnativeclosurename;
-    sq->setinstanceup = sq_setinstanceup;
-    sq->getinstanceup = sq_getinstanceup;
-    sq->setclassudsize = sq_setclassudsize;
-    sq->newclass = sq_newclass;
-    sq->createinstance = sq_createinstance;
-    sq->setattributes = sq_setattributes;
-    sq->getattributes = sq_getattributes;
-    sq->getclass = sq_getclass;
-    sq->weakref = sq_weakref;
-    sq->getdefaultdelegate = sq_getdefaultdelegate;
-
-    /*object manipulation*/
-    sq->pushroottable = sq_pushroottable;
-    sq->pushregistrytable = sq_pushregistrytable;
-    sq->pushconsttable = sq_pushconsttable;
-    sq->setroottable = sq_setroottable;
-    sq->setconsttable = sq_setconsttable;
-    sq->newslot = sq_newslot;
-    sq->deleteslot = sq_deleteslot;
-    sq->set = sq_set;
-    sq->get = sq_get;
-    sq->rawset = sq_rawset;
-    sq->rawget = sq_rawget;
-    sq->rawdeleteslot = sq_rawdeleteslot;
-    sq->arrayappend = sq_arrayappend;
-    sq->arraypop = sq_arraypop;
-    sq->arrayresize = sq_arrayresize;
-    sq->arrayreverse = sq_arrayreverse;
-    sq->arrayremove = sq_arrayremove;
-    sq->arrayinsert = sq_arrayinsert;
-    sq->setdelegate = sq_setdelegate;
-    sq->getdelegate = sq_getdelegate;
-    sq->clone = sq_clone;
-    sq->setfreevariable = sq_setfreevariable;
-    sq->next = sq_next;
-    sq->getweakrefval = sq_getweakrefval;
-    sq->clear = sq_clear;
-
-    /*calls*/
-    sq->call = sq_call;
-    sq->resume = sq_resume;
-    sq->getlocal = sq_getlocal;
-    sq->getfreevariable = sq_getfreevariable;
-    sq->throwerror = sq_throwerror;
-    sq->reseterror = sq_reseterror;
-    sq->getlasterror = sq_getlasterror;
-
-    /*raw object handling*/
-    sq->getstackobj = sq_getstackobj;
-    sq->pushobject = sq_pushobject;
-    sq->addref = sq_addref;
-    sq->release = sq_release;
-    sq->resetobject = sq_resetobject;
-    sq->objtostring = sq_objtostring;
-    sq->objtobool = sq_objtobool;
-    sq->objtointeger = sq_objtointeger;
-    sq->objtofloat = sq_objtofloat;
-    sq->getobjtypetag = sq_getobjtypetag;
-
-    /*GC*/
-    sq->collectgarbage = sq_collectgarbage;
-
-    /*serialization*/
-    sq->writeclosure = sq_writeclosure;
-    sq->readclosure = sq_readclosure;
-
-    /*mem allocation*/
-    sq->malloc = sq_malloc;
-    sq->realloc = sq_realloc;
-    sq->free = sq_free;
-
-    /*debug*/
-    sq->stackinfos = sq_stackinfos;
-    sq->setdebughook = sq_setdebughook;
-
-    return sq;
-}
-
-static void sqrat_deleteapi(HSQAPI sq) {
-    sq_free(sq, sizeof(sq_api));
-}
-
-static SQRESULT sqrat_importscript(HSQUIRRELVM v, const SQChar* moduleName) {
-    if(SQ_FAILED(sqstd_loadfile(v, moduleName, true, true))) {
-        std::basic_string<SQChar> filename(moduleName);
-        filename += _SC(".nut");
-        if(SQ_FAILED(sqstd_loadfile(v, filename.c_str(), true, true))) {
-            return SQ_ERROR;
-        }
-    }
-    sq_push(v, -2);
-    sq_call(v, 1, false, true);
-    return SQ_OK;
-}
-
-static SQRESULT sqrat_importbin(HSQUIRRELVM v, const SQChar* moduleName) {
-    SQMODULELOAD modLoad = 0;
-
-#if defined(_WIN32)
-    HMODULE mod;
-    mod = GetModuleHandleA(moduleName);
-    if(mod == NULL) {
-        mod = LoadLibraryA(moduleName);
-        if(mod == NULL) {
-            return SQ_ERROR;
-        }
-    }
-
-    modLoad = (SQMODULELOAD)GetProcAddressA(mod, "sqmodule_load");
-    if(modLoad == NULL) {
-        FreeLibrary(mod);
-        return SQ_ERROR;
-    }
-#elif defined(__unix)
-    /* adding .so to moduleName? */
+//
+// SqratImport: Supports importing of squirrel modules
+//
+
+//
+// Copyright (c) 2009 Brandon Jones
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+//  1. The origin of this software must not be misrepresented; you must not
+//  claim that you wrote the original software. If you use this software
+//  in a product, an acknowledgment in the product documentation would be
+//  appreciated but is not required.
+//
+//  2. Altered source versions must be plainly marked as such, and must not be
+//  misrepresented as being the original software.
+//
+//  3. This notice may not be removed or altered from any source
+//  distribution.
+//
+
+#include "sqratimport.h"
+#include "sqmodule.h"
+
+//#include "sqratlib/sqratBase.h"
+#include <stdio.h>
+#include <sqstdio.h>
+
+#if defined(_WIN32)
+
+#include <windows.h>
+
+#elif defined(__unix)
+
+#include <dlfcn.h>
+
+#endif
+
+typedef SQRESULT (*SQMODULELOAD)(HSQUIRRELVM v, HSQAPI sq);
+
+static HSQAPI sqapi = NULL;
+
+// Create and populate the HSQAPI structure with function pointers
+// If new functions are added to the Squirrel API, they should be added here too
+static HSQAPI sqrat_newapi() {
+    HSQAPI sq = (HSQAPI)sq_malloc(sizeof(sq_api));
+
+#define SQUIRREL_API_FUNC(fret, fname, fargs) sq->sq_##fname = sq_##fname;
+#include "sqapi.h"
+#undef SQUIRREL_API_FUNC
+
+    return sq;
+}
+
+static void sqrat_deleteapi(HSQAPI sq) {
+    sq_free(sq, sizeof(sq_api));
+}
+
+static SQRESULT sqrat_importscript(HSQUIRRELVM v, const SQChar* moduleName) {
+    if(SQ_FAILED(sqstd_loadfile(v, moduleName, true, true))) {
+        char filename[1024];
+        scsprintf(filename, sizeof(filename), "%s.nut", moduleName);
+        if(SQ_FAILED(sqstd_loadfile(v, filename, true, true))) {
+            return SQ_ERROR;
+        }
+    }
+    sq_push(v, -2);
+    sq_call(v, 1, false, true);
+    return SQ_OK;
+}
+
+static SQRESULT sqrat_importbin(HSQUIRRELVM v, const SQChar* moduleName) {
+    SQMODULELOAD modLoad = 0;
+
+#if defined(_WIN32)
+    HMODULE mod;
+    mod = GetModuleHandleA(moduleName);
+    if(mod == NULL) {
+        mod = LoadLibraryA(moduleName);
+        if(mod == NULL) {
+            return SQ_ERROR;
+        }
+    }
+
+    modLoad = (SQMODULELOAD)GetProcAddressA(mod, "sqmodule_load");
+    if(modLoad == NULL) {
+        FreeLibrary(mod);
+        return SQ_ERROR;
+    }
+#elif defined(__unix)
+    /* adding .so to moduleName? */
     void *mod = dlopen(moduleName, RTLD_NOW | RTLD_LOCAL
     void *mod = dlopen(moduleName, RTLD_NOW | RTLD_LOCAL
 #ifndef ANDROID_BUILD
 #ifndef ANDROID_BUILD
                        | RTLD_NOLOAD //RTLD_NOLOAD flag is not specified in POSIX.1-2001..so not the best solution :(
                        | RTLD_NOLOAD //RTLD_NOLOAD flag is not specified in POSIX.1-2001..so not the best solution :(
 #endif
 #endif
-                       );
-    if (mod == NULL) {
-        mod = dlopen(moduleName, RTLD_NOW | RTLD_LOCAL);
-        if (mod == NULL)
-            return SQ_ERROR;
-    }
-    modLoad = (SQMODULELOAD) dlsym(mod, "sqmodule_load");
-    if (modLoad == NULL) {
-        dlclose(mod);
-        return SQ_ERROR;
-    }
-#endif
-
-    if(sqapi == NULL) {
-        sqapi = sqrat_newapi(); // Caching this for multiple imports is probably a very good idea
-    }
-
-    SQRESULT res = modLoad(v, sqapi);
-
-    return res;
-}
-
-SQRESULT sqrat_import(HSQUIRRELVM v) {
-    const SQChar* moduleName;
-    HSQOBJECT table;
-    SQRESULT res = SQ_OK;
-
-    //SQInteger top = sq_gettop(v);
-    sq_getstring(v, -2, &moduleName);
-    sq_getstackobj(v, -1, &table);
-    sq_addref(v, &table);
-
-    sq_settop(v, 0); // Clear Stack
-    sq_pushobject(v, table); // Push the target table onto the stack
-
-    if(SQ_FAILED(sqrat_importscript(v, moduleName))) {
-        res = sqrat_importbin(v, moduleName);
-    }
-
-    sq_settop(v, 0); // Clean up the stack (just in case the module load leaves it messy)
+                       );
+    if (mod == NULL) {
+        mod = dlopen(moduleName, RTLD_NOW | RTLD_LOCAL);
+        if (mod == NULL)
+            return SQ_ERROR;
+    }
+    modLoad = (SQMODULELOAD) dlsym(mod, "sqmodule_load");
+    if (modLoad == NULL) {
+        dlclose(mod);
+        return SQ_ERROR;
+    }
+#endif
+
+    if(sqapi == NULL) {
+        sqapi = sqrat_newapi(); // Caching this for multiple imports is probably a very good idea
+    }
+
+    SQRESULT res = modLoad(v, sqapi);
+
+    return res;
+}
+
+SQRESULT sqrat_import(HSQUIRRELVM v) {
+    const SQChar* moduleName;
+    HSQOBJECT table;
+    SQRESULT res = SQ_OK;
+
+    //SQInteger top = sq_gettop(v);
+    sq_getstring(v, -2, &moduleName);
+    sq_getstackobj(v, -1, &table);
+    sq_addref(v, &table);
+
+    sq_settop(v, 0); // Clear Stack
+    sq_pushobject(v, table); // Push the target table onto the stack
+
+    if(SQ_FAILED(sqrat_importscript(v, moduleName))) {
+        res = sqrat_importbin(v, moduleName);
+    }
+
+    sq_settop(v, 0); // Clean up the stack (just in case the module load leaves it messy)
     sq_pushobject(v, table); // return the target table
     sq_pushobject(v, table); // return the target table
-    sq_release(v, &table);
-
-    return res;
-}
-
-static SQRESULT sqratbase_import(HSQUIRRELVM v) {
-    SQInteger args = sq_gettop(v);
-    switch(args) {
-    case 2:
-        sq_pushroottable(v);
-        break;
-    case 3:
+    sq_release(v, &table);
+
+    return res;
+}
+
+static SQRESULT sqratbase_import(HSQUIRRELVM v) {
+    SQInteger args = sq_gettop(v);
+    switch(args) {
+    case 2:
+        sq_pushroottable(v);
+        break;
+    case 3:
         // should already have the desired table pushed onto the stack
         // should already have the desired table pushed onto the stack
-        if(sq_gettype(v, 3) != OT_TABLE) return sq_throwerror(v, _SC("table expected as second parameter"));
-        break;
-    default:
+        if(sq_gettype(v, 3) != OT_TABLE) return sq_throwerror(v, _SC("table expected as second parameter"));
+        break;
+    default:
         // Error, unexpected number of arguments
         // Error, unexpected number of arguments
-        return sq_throwerror(v, _SC("unexpected number of arguments"));
-        break;
-    }
-
-    sqrat_import(v);
-
-    return 1;
-}
-
-SQRESULT sqrat_register_importlib(HSQUIRRELVM v) {
-    sq_pushroottable(v);
-
-    sq_pushstring(v, _SC("import"), -1);
-    sq_newclosure(v, &sqratbase_import, 0);
-    sq_newslot(v, -3, 0);
-
-    sq_pop(v, 1); // pop root table
-
-    return SQ_OK;
-}
+        return sq_throwerror(v, _SC("unexpected number of arguments"));
+        break;
+    }
+
+    sqrat_import(v);
+
+    return 1;
+}
+
+SQRESULT sqrat_register_importlib(HSQUIRRELVM v) {
+    sq_pushroottable(v);
+
+    sq_pushstring(v, _SC("import"), -1);
+    sq_newclosure(v, &sqratbase_import, 0);
+    sq_newslot(v, -3, 0);
+
+    sq_pop(v, 1); // pop root table
+
+    return SQ_OK;
+}

+ 213 - 0
SquiLu/include/sqapi.h

@@ -0,0 +1,213 @@
+SQUIRREL_API_FUNC(SQRESULT, preload_modules, (HSQUIRRELVM v, sq_modules_preload_st *modules))
+
+/*vm*/
+SQUIRREL_API_FUNC(HSQUIRRELVM, open, (SQInteger initialstacksize))
+SQUIRREL_API_FUNC(HSQUIRRELVM, newthread, (HSQUIRRELVM friendvm, SQInteger initialstacksize))
+SQUIRREL_API_FUNC(void, seterrorhandler, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, geterrorhandler, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setatexithandler, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, getatexithandler, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, close, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setforeignptr, (HSQUIRRELVM v,SQUserPointer p))
+SQUIRREL_API_FUNC(SQUserPointer, getforeignptr, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setsharedforeignptr, (HSQUIRRELVM v,SQUserPointer p))
+SQUIRREL_API_FUNC(SQUserPointer, getsharedforeignptr, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setvmreleasehook, (HSQUIRRELVM v,SQRELEASEHOOK hook))
+SQUIRREL_API_FUNC(SQRELEASEHOOK, getvmreleasehook, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setsharedreleasehook, (HSQUIRRELVM v,SQRELEASEHOOK hook))
+SQUIRREL_API_FUNC(SQRELEASEHOOK, getsharedreleasehook, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setprintfunc, (HSQUIRRELVM v, SQPRINTFUNCTION printfunc,SQPRINTFUNCTION errfunc))
+SQUIRREL_API_FUNC(SQPRINTFUNCTION, getprintfunc, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQPRINTFUNCTION, geterrorfunc, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, suspendvm, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, wakeupvm, (HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror))
+SQUIRREL_API_FUNC(SQInteger, getvmstate, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQInteger, getversion, ())
+
+/*compiler*/
+SQUIRREL_API_FUNC(SQRESULT, compile, (HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,
+                                 SQBool raiseerror, SQBool show_warnings))
+SQUIRREL_API_FUNC(SQRESULT, compilebuffer, (HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,
+                                       SQBool raiseerror, SQBool show_warnings))
+SQUIRREL_API_FUNC(void, enabledebuginfo, (HSQUIRRELVM v, SQBool enable))
+SQUIRREL_API_FUNC(void, notifyallexceptions, (HSQUIRRELVM v, SQBool enable))
+SQUIRREL_API_FUNC(void, setcompilererrorhandler, (HSQUIRRELVM v,SQCOMPILERERROR f))
+
+/*stack operations*/
+SQUIRREL_API_FUNC(void, push, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(void, pop, (HSQUIRRELVM v,SQInteger nelemstopop))
+SQUIRREL_API_FUNC(void, poptop, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, remove, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(void, insert, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(void, replace, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQInteger, gettop, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, settop, (HSQUIRRELVM v,SQInteger newtop))
+SQUIRREL_API_FUNC(SQRESULT, reservestack, (HSQUIRRELVM v,SQInteger nsize))
+SQUIRREL_API_FUNC(SQInteger, compare, (HSQUIRRELVM v, SQInteger idx1, SQInteger idx2))
+SQUIRREL_API_FUNC(SQInteger, cmp, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, move, (HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx))
+
+/*object creation handling*/
+SQUIRREL_API_FUNC(SQUserPointer, newuserdata, (HSQUIRRELVM v,SQUnsignedInteger size))
+SQUIRREL_API_FUNC(void, newtable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, newtableex, (HSQUIRRELVM v,SQInteger initialcapacity))
+SQUIRREL_API_FUNC(void, newarray, (HSQUIRRELVM v,SQInteger size))
+SQUIRREL_API_FUNC(void, newclosure, (HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars))
+SQUIRREL_API_FUNC(SQRESULT, setparamscheck, (HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask))
+SQUIRREL_API_FUNC(SQRESULT, setfenv, (HSQUIRRELVM v,SQInteger idx, SQBool cloning))
+SQUIRREL_API_FUNC(SQRESULT, getfenv, (HSQUIRRELVM v,SQInteger idx, SQBool roottable_when_null))
+SQUIRREL_API_FUNC(SQRESULT, bindenv, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, setclosureroot, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getclosureroot, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(void, pushstring, (HSQUIRRELVM v,const SQChar *s,SQInteger len))
+SQUIRREL_API_FUNC(void, pushfstring, (HSQUIRRELVM v,const SQChar *fmt, ...))
+SQUIRREL_API_FUNC(void, pushfloat, (HSQUIRRELVM v,SQFloat f))
+SQUIRREL_API_FUNC(void, pushinteger, (HSQUIRRELVM v,SQInteger n))
+SQUIRREL_API_FUNC(void, pushbool, (HSQUIRRELVM v,SQBool b))
+SQUIRREL_API_FUNC(void, pushuserpointer, (HSQUIRRELVM v,SQUserPointer p))
+SQUIRREL_API_FUNC(void, pushnull, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, pushthread, (HSQUIRRELVM v, HSQUIRRELVM thread))
+SQUIRREL_API_FUNC(SQRESULT, checkoption, (HSQUIRRELVM v, SQInteger narg, const SQChar *def,
+                                 const SQChar *const lst[]))
+SQUIRREL_API_FUNC(SQObjectType, gettype, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(const SQChar*, gettypename, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, typeof, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQInteger, getsize, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQHash, gethash, (HSQUIRRELVM v, SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getbase, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQBool, instanceof, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, tostring, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, tobool, (HSQUIRRELVM v, SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, tointeger, (HSQUIRRELVM v, SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, tofloat, (HSQUIRRELVM v, SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getstring, (HSQUIRRELVM v,SQInteger idx,const SQChar **c))
+SQUIRREL_API_FUNC(SQRESULT, getstr_and_size, (HSQUIRRELVM v,SQInteger idx,const SQChar **c, SQInteger *size))
+SQUIRREL_API_FUNC(SQRESULT, getinteger, (HSQUIRRELVM v,SQInteger idx,SQInteger *i))
+SQUIRREL_API_FUNC(SQRESULT, getfloat, (HSQUIRRELVM v,SQInteger idx,SQFloat *f))
+SQUIRREL_API_FUNC(SQRESULT, getbool, (HSQUIRRELVM v,SQInteger idx,SQBool *b))
+SQUIRREL_API_FUNC(SQRESULT, getthread, (HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread))
+SQUIRREL_API_FUNC(SQRESULT, getuserpointer, (HSQUIRRELVM v,SQInteger idx,SQUserPointer *p))
+SQUIRREL_API_FUNC(SQUserPointer, get_as_userpointer, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getuserdata, (HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag))
+SQUIRREL_API_FUNC(SQRESULT, settypetag, (HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag))
+SQUIRREL_API_FUNC(SQRESULT, gettypetag, (HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag))
+SQUIRREL_API_FUNC(void, setreleasehook, (HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook))
+SQUIRREL_API_FUNC(SQRELEASEHOOK, getreleasehook, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQChar*, getscratchpad, (HSQUIRRELVM v,SQInteger minsize))
+SQUIRREL_API_FUNC(SQRESULT, getfunctioninfo, (HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi))
+SQUIRREL_API_FUNC(SQRESULT, getclosureinfo, (HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars))
+SQUIRREL_API_FUNC(SQRESULT, getclosurename, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, setnativeclosurename, (HSQUIRRELVM v,SQInteger idx,const SQChar *name))
+SQUIRREL_API_FUNC(SQRESULT, setinstanceup, (HSQUIRRELVM v, SQInteger idx, SQUserPointer p))
+SQUIRREL_API_FUNC(SQRESULT, getinstanceup, (HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag))
+SQUIRREL_API_FUNC(SQRESULT, setclassudsize, (HSQUIRRELVM v, SQInteger idx, SQInteger udsize))
+SQUIRREL_API_FUNC(SQRESULT, newclass, (HSQUIRRELVM v,SQBool hasbase))
+SQUIRREL_API_FUNC(SQRESULT, pushnewclass, (HSQUIRRELVM v, const SQChar *className,
+                          const SQChar *parentName,
+                          void *classTag, SQRegFunction *methods, SQBool leaveOnTop))
+SQUIRREL_API_FUNC(SQRESULT, createinstance, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, setattributes, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getattributes, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getclass, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(void, weakref, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getdefaultdelegate, (HSQUIRRELVM v,SQObjectType t))
+SQUIRREL_API_FUNC(SQRESULT, getmemberhandle, (HSQUIRRELVM v,SQInteger idx,HSQMEMBERHANDLE *handle))
+SQUIRREL_API_FUNC(SQRESULT, getbyhandle, (HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle))
+SQUIRREL_API_FUNC(SQRESULT, setbyhandle, (HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle))
+SQUIRREL_API_FUNC(void, insertfunc, (HSQUIRRELVM sqvm, const SQChar *fname, SQFUNCTION func,
+                        SQInteger nparamscheck, const SQChar *typemask, SQBool isStatic))
+SQUIRREL_API_FUNC(void, insert_reg_funcs, (HSQUIRRELVM sqvm, SQRegFunction *obj_funcs))
+//SQUIRREL_API_FUNC(const SQChar*, optstring, (HSQUIRRELVM sqvm, SQInteger idx, const SQChar *dflt, SQInteger *size))
+SQUIRREL_API_FUNC(SQRESULT, optinteger, (HSQUIRRELVM sqvm, SQInteger idx, SQInteger *value, SQInteger default_value))
+
+/*object manipulation*/
+SQUIRREL_API_FUNC(void, pushroottable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, getonroottable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, setonroottable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, pushregistrytable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, getonregistrytable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, setonregistrytable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, delete_on_registry_table, (HSQUIRRELVM v, SQUserPointer uptr))
+SQUIRREL_API_FUNC(void, pushconsttable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, setroottable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, setconsttable, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, newslot, (HSQUIRRELVM v, SQInteger idx, SQBool bstatic))
+SQUIRREL_API_FUNC(SQRESULT, deleteslot, (HSQUIRRELVM v,SQInteger idx,SQBool pushval))
+SQUIRREL_API_FUNC(SQRESULT, set, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, get, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getbyname, (HSQUIRRELVM v,SQInteger idx, const SQChar *key, SQInteger key_len))
+SQUIRREL_API_FUNC(SQRESULT, rawget, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQBool, rawexists, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, rawset, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, rawdeleteslot, (HSQUIRRELVM v,SQInteger idx,SQBool pushval))
+SQUIRREL_API_FUNC(SQRESULT, newmember, (HSQUIRRELVM v,SQInteger idx,SQBool bstatic))
+SQUIRREL_API_FUNC(SQRESULT, rawnewmember, (HSQUIRRELVM v,SQInteger idx,SQBool bstatic))
+SQUIRREL_API_FUNC(SQRESULT, arrayappend, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, arraypop, (HSQUIRRELVM v,SQInteger idx,SQBool pushval))
+SQUIRREL_API_FUNC(SQRESULT, arrayresize, (HSQUIRRELVM v,SQInteger idx,SQInteger newsize))
+SQUIRREL_API_FUNC(SQRESULT, arrayreverse, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, arrayremove, (HSQUIRRELVM v,SQInteger idx,SQInteger itemidx))
+SQUIRREL_API_FUNC(SQRESULT, arrayinsert, (HSQUIRRELVM v,SQInteger idx,SQInteger destpos))
+SQUIRREL_API_FUNC(SQRESULT, arrayget, (HSQUIRRELVM v,SQInteger idx,SQInteger pos))
+SQUIRREL_API_FUNC(SQRESULT, arrayset, (HSQUIRRELVM v,SQInteger idx,SQInteger destpos))
+SQUIRREL_API_FUNC(SQRESULT, setdelegate, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getdelegate, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, clone, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, setfreevariable, (HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval))
+SQUIRREL_API_FUNC(SQRESULT, next, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getweakrefval, (HSQUIRRELVM v,SQInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, clear, (HSQUIRRELVM v,SQInteger idx))
+
+/*calls*/
+SQUIRREL_API_FUNC(SQRESULT, call, (HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror))
+SQUIRREL_API_FUNC(SQRESULT, call_va_vl, (HSQUIRRELVM v, SQBool reset_stack, SQInteger idx, const SQChar *func,
+                                    SQInteger idx_this, const SQChar *sig, va_list vl))
+SQUIRREL_API_FUNC(SQRESULT, call_va, (HSQUIRRELVM v, SQBool reset_stack, SQInteger idx, const SQChar *func,
+                                 SQInteger idx_this, const SQChar *sig, ...))
+SQUIRREL_API_FUNC(SQRESULT, resume, (HSQUIRRELVM v,SQBool retval,SQBool raiseerror))
+SQUIRREL_API_FUNC(const SQChar*, getlocal, (HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx))
+SQUIRREL_API_FUNC(SQRESULT, getcallee, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(const SQChar*, getfreevariable, (HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval))
+SQUIRREL_API_FUNC(SQRESULT, throwerror, (HSQUIRRELVM v,const SQChar *fmt, ...))
+SQUIRREL_API_FUNC(SQRESULT, throwobject, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, reseterror, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, getlasterror, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(const SQChar*, getlasterror_str, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, getlasterror_line_col, (HSQUIRRELVM v, SQInteger *line, SQInteger *column))
+
+/*raw object handling*/
+SQUIRREL_API_FUNC(SQRESULT, getstackobj, (HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po))
+SQUIRREL_API_FUNC(void, pushobject, (HSQUIRRELVM v,HSQOBJECT obj))
+SQUIRREL_API_FUNC(void, addref, (HSQUIRRELVM v,HSQOBJECT *po))
+SQUIRREL_API_FUNC(SQBool, release, (HSQUIRRELVM v,HSQOBJECT *po))
+SQUIRREL_API_FUNC(SQUnsignedInteger, getrefcount, (HSQUIRRELVM v,HSQOBJECT *po))
+SQUIRREL_API_FUNC(void, resetobject, (HSQOBJECT *po))
+SQUIRREL_API_FUNC(const SQChar*,objtostring, (const HSQOBJECT *o))
+SQUIRREL_API_FUNC(SQBool, objtobool, (const HSQOBJECT *o))
+SQUIRREL_API_FUNC(SQInteger, objtointeger, (const HSQOBJECT *o))
+SQUIRREL_API_FUNC(SQFloat, objtofloat, (const HSQOBJECT *o))
+SQUIRREL_API_FUNC(SQUserPointer, objtouserpointer, (const HSQOBJECT *o))
+SQUIRREL_API_FUNC(SQRESULT, getobjtypetag, (const HSQOBJECT *o,SQUserPointer * typetag))
+SQUIRREL_API_FUNC(SQUnsignedInteger, getvmrefcount, (HSQUIRRELVM v, const HSQOBJECT *po))
+
+
+/*GC*/
+SQUIRREL_API_FUNC(SQInteger, collectgarbage, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(SQRESULT, resurrectunreachable, (HSQUIRRELVM v))
+
+/*serialization*/
+SQUIRREL_API_FUNC(SQRESULT, writeclosure, (HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up))
+SQUIRREL_API_FUNC(SQRESULT, writeclosure_as_source, (HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up))
+SQUIRREL_API_FUNC(SQRESULT, readclosure, (HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up))
+
+/*mem allocation*/
+SQUIRREL_API_FUNC(void*, malloc, (SQUnsignedInteger size))
+SQUIRREL_API_FUNC(void*, realloc, (void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize))
+SQUIRREL_API_FUNC(void, free, (void *p,SQUnsignedInteger size))
+
+/*debug*/
+SQUIRREL_API_FUNC(SQRESULT, stackinfos, (HSQUIRRELVM v,SQInteger level,SQStackInfos *si))
+SQUIRREL_API_FUNC(void, setdebughook, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, setnativedebughook, (HSQUIRRELVM v,SQDEBUGHOOK hook))
+SQUIRREL_API_FUNC(SQInteger, getfulltop, (HSQUIRRELVM v))
+SQUIRREL_API_FUNC(void, getlaststackinfo, (HSQUIRRELVM v))

+ 4 - 217
SquiLu/include/squirrel.h

@@ -264,225 +264,15 @@ typedef struct tagSQFunctionInfo {
 #define sq_assert(x)	((void)0)
 #define sq_assert(x)	((void)0)
 #endif
 #endif
 
 
-/*vm*/
-SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
-SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
-SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_geterrorhandler(HSQUIRRELVM v);
-SQUIRREL_API void sq_setatexithandler(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_getatexithandler(HSQUIRRELVM v);
-SQUIRREL_API void sq_close(HSQUIRRELVM v);
-SQUIRREL_API void sq_setforeignptr(HSQUIRRELVM v,SQUserPointer p);
-SQUIRREL_API SQUserPointer sq_getforeignptr(HSQUIRRELVM v);
-SQUIRREL_API void sq_setsharedforeignptr(HSQUIRRELVM v,SQUserPointer p);
-SQUIRREL_API SQUserPointer sq_getsharedforeignptr(HSQUIRRELVM v);
-SQUIRREL_API void sq_setvmreleasehook(HSQUIRRELVM v,SQRELEASEHOOK hook);
-SQUIRREL_API SQRELEASEHOOK sq_getvmreleasehook(HSQUIRRELVM v);
-SQUIRREL_API void sq_setsharedreleasehook(HSQUIRRELVM v,SQRELEASEHOOK hook);
-SQUIRREL_API SQRELEASEHOOK sq_getsharedreleasehook(HSQUIRRELVM v);
-SQUIRREL_API void sq_setprintfunc(HSQUIRRELVM v, SQPRINTFUNCTION printfunc,SQPRINTFUNCTION errfunc);
-SQUIRREL_API SQPRINTFUNCTION sq_getprintfunc(HSQUIRRELVM v);
-SQUIRREL_API SQPRINTFUNCTION sq_geterrorfunc(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_suspendvm(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
-SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);
-SQUIRREL_API SQInteger sq_getversion();
-
-/*compiler*/
-SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,
-                                 SQBool raiseerror, SQBool show_warnings);
-SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,
-                                       SQBool raiseerror, SQBool show_warnings);
-SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
-SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
-SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);
-
-/*stack operations*/
-SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
-SQUIRREL_API void sq_poptop(HSQUIRRELVM v);
-SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API void sq_insert(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API void sq_replace(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);
-SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);
-SQUIRREL_API SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
-SQUIRREL_API SQInteger sq_compare(HSQUIRRELVM v, SQInteger idx1, SQInteger idx2);
-SQUIRREL_API SQInteger sq_cmp(HSQUIRRELVM v);
-SQUIRREL_API void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx);
-
-/*object creation handling*/
-SQUIRREL_API SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size);
-SQUIRREL_API void sq_newtable(HSQUIRRELVM v);
-SQUIRREL_API void sq_newtableex(HSQUIRRELVM v,SQInteger initialcapacity);
-SQUIRREL_API void sq_newarray(HSQUIRRELVM v,SQInteger size);
-SQUIRREL_API void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
-SQUIRREL_API SQRESULT sq_setparamscheck(HSQUIRRELVM v,SQInteger nparamscheck,const SQChar *typemask);
-SQUIRREL_API SQRESULT sq_setfenv(HSQUIRRELVM v,SQInteger idx, SQBool cloning);
-SQUIRREL_API SQRESULT sq_getfenv(HSQUIRRELVM v,SQInteger idx, SQBool roottable_when_null);
-SQUIRREL_API SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_setclosureroot(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getclosureroot(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API void sq_pushstring(HSQUIRRELVM v,const SQChar *s,SQInteger len);
-SQUIRREL_API void sq_pushfstring(HSQUIRRELVM v,const SQChar *fmt, ...);
-SQUIRREL_API void sq_pushfloat(HSQUIRRELVM v,SQFloat f);
-SQUIRREL_API void sq_pushinteger(HSQUIRRELVM v,SQInteger n);
-SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);
-SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
-SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);
-SQUIRREL_API void sq_pushthread(HSQUIRRELVM v, HSQUIRRELVM thread);
-SQUIRREL_API SQRESULT sq_checkoption (HSQUIRRELVM v, SQInteger narg, const SQChar *def,
-                                 const SQChar *const lst[]);
-SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API const SQChar *sq_gettypename(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQHash sq_gethash(HSQUIRRELVM v, SQInteger idx);
-SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_tostring(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_tobool(HSQUIRRELVM v, SQInteger idx);
-SQUIRREL_API SQRESULT sq_tointeger(HSQUIRRELVM v, SQInteger idx);
-SQUIRREL_API SQRESULT sq_tofloat(HSQUIRRELVM v, SQInteger idx);
-SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
-SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
-SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
-SQUIRREL_API SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b);
-SQUIRREL_API SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread);
-SQUIRREL_API SQRESULT sq_getuserpointer(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p);
-SQUIRREL_API SQUserPointer sq_get_as_userpointer(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
-SQUIRREL_API SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag);
-SQUIRREL_API SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag);
-SQUIRREL_API void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook);
-SQUIRREL_API SQRELEASEHOOK sq_getreleasehook(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQChar *sq_getscratchpad(HSQUIRRELVM v,SQInteger minsize);
-SQUIRREL_API SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi);
-SQUIRREL_API SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
-SQUIRREL_API SQRESULT sq_getclosurename(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_setnativeclosurename(HSQUIRRELVM v,SQInteger idx,const SQChar *name);
-SQUIRREL_API SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p);
-SQUIRREL_API SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
-SQUIRREL_API SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize);
-SQUIRREL_API SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase);
-SQUIRREL_API SQRESULT sq_pushnewclass(HSQUIRRELVM v, const SQChar *className,
-                          const SQChar *parentName,
-                          void *classTag, SQRegFunction *methods, SQBool leaveOnTop);
-SQUIRREL_API SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API void sq_weakref(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t);
-SQUIRREL_API SQRESULT sq_getmemberhandle(HSQUIRRELVM v,SQInteger idx,HSQMEMBERHANDLE *handle);
-SQUIRREL_API SQRESULT sq_getbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);
-SQUIRREL_API SQRESULT sq_setbyhandle(HSQUIRRELVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);
-SQUIRREL_API void sq_insertfunc(HSQUIRRELVM sqvm, const SQChar *fname, SQFUNCTION func,
-                        SQInteger nparamscheck, const SQChar *typemask, SQBool isStatic);
-SQUIRREL_API void sq_insert_reg_funcs(HSQUIRRELVM sqvm, SQRegFunction *obj_funcs);
-SQUIRREL_API const SQChar *sq_optstring(HSQUIRRELVM sqvm, SQInteger idx, const SQChar *dflt, SQInteger *size);
-SQUIRREL_API SQRESULT sq_optinteger(HSQUIRRELVM sqvm, SQInteger idx, SQInteger *value, SQInteger default_value);
-
-
 #define SQ_EXTENSIONS_KEY _SC("sq__Extensions")
 #define SQ_EXTENSIONS_KEY _SC("sq__Extensions")
 typedef struct {
 typedef struct {
     const char* module_name;
     const char* module_name;
     SQFUNCTION module_load_func;
     SQFUNCTION module_load_func;
 } sq_modules_preload_st;
 } sq_modules_preload_st;
-int sq_preload_modules(HSQUIRRELVM v, sq_modules_preload_st *modules);
-
-/*object manipulation*/
-SQUIRREL_API void sq_pushroottable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_getonroottable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_setonroottable(HSQUIRRELVM v);
-SQUIRREL_API void sq_pushregistrytable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_getonregistrytable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_setonregistrytable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_delete_on_registry_table(HSQUIRRELVM v, SQUserPointer uptr);
-SQUIRREL_API void sq_pushconsttable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_setroottable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_setconsttable(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
-SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
-SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getbyname(HSQUIRRELVM v,SQInteger idx, const SQChar *key, SQInteger key_len);
-SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQBool sq_rawexists(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
-SQUIRREL_API SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);
-SQUIRREL_API SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic);
-SQUIRREL_API SQRESULT sq_arrayappend(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_arraypop(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
-SQUIRREL_API SQRESULT sq_arrayresize(HSQUIRRELVM v,SQInteger idx,SQInteger newsize);
-SQUIRREL_API SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx);
-SQUIRREL_API SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
-SQUIRREL_API SQRESULT sq_arrayget(HSQUIRRELVM v,SQInteger idx,SQInteger pos);
-SQUIRREL_API SQRESULT sq_arrayset(HSQUIRRELVM v,SQInteger idx,SQInteger destpos);
-SQUIRREL_API SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
-SQUIRREL_API SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx);
-SQUIRREL_API SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx);
-
-/*calls*/
-SQUIRREL_API SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror);
-SQUIRREL_API SQRESULT sq_call_va_vl(HSQUIRRELVM v, SQBool reset_stack, SQInteger idx, const SQChar *func,
-                                    SQInteger idx_this, const SQChar *sig, va_list vl);
-SQUIRREL_API SQRESULT sq_call_va(HSQUIRRELVM v, SQBool reset_stack, SQInteger idx, const SQChar *func,
-                                 SQInteger idx_this, const SQChar *sig, ...);
-SQUIRREL_API SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror);
-SQUIRREL_API const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
-SQUIRREL_API SQRESULT sq_getcallee(HSQUIRRELVM v);
-SQUIRREL_API const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval);
-SQUIRREL_API SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *fmt, ...);
-SQUIRREL_API SQRESULT sq_throwobject(HSQUIRRELVM v);
-SQUIRREL_API void sq_reseterror(HSQUIRRELVM v);
-SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);
-SQUIRREL_API const SQChar *sq_getlasterror_str(HSQUIRRELVM v);
-SQUIRREL_API void sq_getlasterror_line_col(HSQUIRRELVM v, SQInteger *line, SQInteger *column);
-
-/*raw object handling*/
-SQUIRREL_API SQRESULT sq_getstackobj(HSQUIRRELVM v,SQInteger idx,HSQOBJECT *po);
-SQUIRREL_API void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj);
-SQUIRREL_API void sq_addref(HSQUIRRELVM v,HSQOBJECT *po);
-SQUIRREL_API SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po);
-SQUIRREL_API SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po);
-SQUIRREL_API void sq_resetobject(HSQOBJECT *po);
-SQUIRREL_API const SQChar *sq_objtostring(const HSQOBJECT *o);
-SQUIRREL_API SQBool sq_objtobool(const HSQOBJECT *o);
-SQUIRREL_API SQInteger sq_objtointeger(const HSQOBJECT *o);
-SQUIRREL_API SQFloat sq_objtofloat(const HSQOBJECT *o);
-SQUIRREL_API SQUserPointer sq_objtouserpointer(const HSQOBJECT *o);
-SQUIRREL_API SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag);
-SQUIRREL_API SQUnsignedInteger sq_getvmrefcount(HSQUIRRELVM v, const HSQOBJECT *po);
-
-
-/*GC*/
-SQUIRREL_API SQInteger sq_collectgarbage(HSQUIRRELVM v);
-SQUIRREL_API SQRESULT sq_resurrectunreachable(HSQUIRRELVM v);
-
-/*serialization*/
-SQUIRREL_API SQRESULT sq_writeclosure(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
-SQUIRREL_API SQRESULT sq_writeclosure_as_source(HSQUIRRELVM vm,SQWRITEFUNC writef,SQUserPointer up);
-SQUIRREL_API SQRESULT sq_readclosure(HSQUIRRELVM vm,SQREADFUNC readf,SQUserPointer up);
-
-/*mem allocation*/
-SQUIRREL_API void *sq_malloc(SQUnsignedInteger size);
-SQUIRREL_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
-SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);
-
-/*debug*/
-SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
-SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
-SQUIRREL_API void sq_setnativedebughook(HSQUIRRELVM v,SQDEBUGHOOK hook);
-SQUIRREL_API SQInteger sq_getfulltop(HSQUIRRELVM v);
-SQUIRREL_API void sq_getlasterror(HSQUIRRELVM v);
-SQUIRREL_API void sq_getlaststackinfo(HSQUIRRELVM v);
+
+#define SQUIRREL_API_FUNC(fret, fname, fargs) SQUIRREL_API fret sq_##fname fargs;
+#include "sqapi.h"
+#undef SQUIRREL_API_FUNC
 
 
 /*UTILITY MACRO*/
 /*UTILITY MACRO*/
 #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
 #define sq_isnumeric(o) ((o)._type&SQOBJECT_NUMERIC)
@@ -591,9 +381,6 @@ SQUIRREL_API void sq_getlaststackinfo(HSQUIRRELVM v);
 #define SIZEOF_SQCHAR_STRING(str) ((sizeof(str)/sizeof(SQChar))-1)
 #define SIZEOF_SQCHAR_STRING(str) ((sizeof(str)/sizeof(SQChar))-1)
 
 
 
 
-SQUIRREL_API void sq_insert_reg_funcs(HSQUIRRELVM sqvm, SQRegFunction *obj_funcs);
-SQUIRREL_API SQRESULT sq_getstr_and_size(HSQUIRRELVM v,SQInteger idx,const SQChar **c, SQInteger *size);
-
 struct SQStrBufState{
 struct SQStrBufState{
 	const SQChar *buf;
 	const SQChar *buf;
 	SQInteger ptr;
 	SQInteger ptr;

+ 1 - 1
SquiLu/squirrel/sqapi.cpp

@@ -731,7 +731,7 @@ SQRESULT sq_delete_on_registry_table(HSQUIRRELVM v, SQUserPointer uptr)
     return SQ_ERROR;
     return SQ_ERROR;
 }
 }
 
 
-int sq_preload_modules(HSQUIRRELVM v, sq_modules_preload_st *modules){
+SQRESULT sq_preload_modules(HSQUIRRELVM v, sq_modules_preload_st *modules){
     int result = 0;
     int result = 0;
     int saved_top = sq_gettop(v);
     int saved_top = sq_gettop(v);
     sq_pushliteral(v, SQ_EXTENSIONS_KEY);
     sq_pushliteral(v, SQ_EXTENSIONS_KEY);