// ------------------------------------------------------------------------------------------------
#ifdef SQMOD_PLUGIN_API

//vm
sqapi_open                          sq_open                         = NULL;
sqapi_newthread                     sq_newthread                    = NULL;
sqapi_seterrorhandler               sq_seterrorhandler              = NULL;
sqapi_close                         sq_close                        = NULL;
sqapi_setforeignptr                 sq_setforeignptr                = NULL;
sqapi_getforeignptr                 sq_getforeignptr                = NULL;
sqapi_setsharedforeignptr           sq_setsharedforeignptr          = NULL;
sqapi_getsharedforeignptr           sq_getsharedforeignptr          = NULL;
sqapi_setvmreleasehook              sq_setvmreleasehook             = NULL;
sqapi_getvmreleasehook              sq_getvmreleasehook             = NULL;
sqapi_setsharedreleasehook          sq_setsharedreleasehook         = NULL;
sqapi_getsharedreleasehook          sq_getsharedreleasehook         = NULL;
sqapi_setprintfunc                  sq_setprintfunc                 = NULL;
sqapi_getprintfunc                  sq_getprintfunc                 = NULL;
sqapi_geterrorfunc                  sq_geterrorfunc                 = NULL;
sqapi_suspendvm                     sq_suspendvm                    = NULL;
sqapi_wakeupvm                      sq_wakeupvm                     = NULL;
sqapi_getvmstate                    sq_getvmstate                   = NULL;
sqapi_getversion                    sq_getversion                   = NULL;

//compiler
sqapi_compile                       sq_compile                      = NULL;
sqapi_compilebuffer                 sq_compilebuffer                = NULL;
sqapi_enabledebuginfo               sq_enabledebuginfo              = NULL;
sqapi_notifyallexceptions           sq_notifyallexceptions          = NULL;
sqapi_setcompilererrorhandler       sq_setcompilererrorhandler      = NULL;

//stack operations
sqapi_push                          sq_push                         = NULL;
sqapi_pop                           sq_pop                          = NULL;
sqapi_poptop                        sq_poptop                       = NULL;
sqapi_remove                        sq_remove                       = NULL;
sqapi_gettop                        sq_gettop                       = NULL;
sqapi_settop                        sq_settop                       = NULL;
sqapi_reservestack                  sq_reservestack                 = NULL;
sqapi_cmp                           sq_cmp                          = NULL;
sqapi_move                          sq_move                         = NULL;

//object creation handling
sqapi_newuserdata                   sq_newuserdata                  = NULL;
sqapi_newtable                      sq_newtable                     = NULL;
sqapi_newtableex                    sq_newtableex                   = NULL;
sqapi_newarray                      sq_newarray                     = NULL;
sqapi_newclosure                    sq_newclosure                   = NULL;
sqapi_setparamscheck                sq_setparamscheck               = NULL;
sqapi_bindenv                       sq_bindenv                      = NULL;
sqapi_setclosureroot                sq_setclosureroot               = NULL;
sqapi_getclosureroot                sq_getclosureroot               = NULL;
sqapi_pushstring                    sq_pushstring                   = NULL;
sqapi_pushfloat                     sq_pushfloat                    = NULL;
sqapi_pushinteger                   sq_pushinteger                  = NULL;
sqapi_pushbool                      sq_pushbool                     = NULL;
sqapi_pushuserpointer               sq_pushuserpointer              = NULL;
sqapi_pushnull                      sq_pushnull                     = NULL;
sqapi_pushthread                    sq_pushthread                   = NULL;
sqapi_gettype                       sq_gettype                      = NULL;
sqapi_typeof                        sq_typeof                       = NULL;
sqapi_getsize                       sq_getsize                      = NULL;
sqapi_gethash                       sq_gethash                      = NULL;
sqapi_getbase                       sq_getbase                      = NULL;
sqapi_instanceof                    sq_instanceof                   = NULL;
sqapi_tostring                      sq_tostring                     = NULL;
sqapi_tobool                        sq_tobool                       = NULL;
sqapi_getstringandsize              sq_getstringandsize             = NULL;
sqapi_getstring                     sq_getstring                    = NULL;
sqapi_getinteger                    sq_getinteger                   = NULL;
sqapi_getfloat                      sq_getfloat                     = NULL;
sqapi_getbool                       sq_getbool                      = NULL;
sqapi_getthread                     sq_getthread                    = NULL;
sqapi_getuserpointer                sq_getuserpointer               = NULL;
sqapi_getuserdata                   sq_getuserdata                  = NULL;
sqapi_settypetag                    sq_settypetag                   = NULL;
sqapi_gettypetag                    sq_gettypetag                   = NULL;
sqapi_setreleasehook                sq_setreleasehook               = NULL;
sqapi_getreleasehook                sq_getreleasehook               = NULL;
sqapi_getscratchpad                 sq_getscratchpad                = NULL;
sqapi_getfunctioninfo               sq_getfunctioninfo              = NULL;
sqapi_getclosureinfo                sq_getclosureinfo               = NULL;
sqapi_getclosurename                sq_getclosurename               = NULL;
sqapi_setnativeclosurename          sq_setnativeclosurename         = NULL;
sqapi_setinstanceup                 sq_setinstanceup                = NULL;
sqapi_getinstanceup                 sq_getinstanceup                = NULL;
sqapi_setclassudsize                sq_setclassudsize               = NULL;
sqapi_newclass                      sq_newclass                     = NULL;
sqapi_createinstance                sq_createinstance               = NULL;
sqapi_setattributes                 sq_setattributes                = NULL;
sqapi_getattributes                 sq_getattributes                = NULL;
sqapi_getclass                      sq_getclass                     = NULL;
sqapi_weakref                       sq_weakref                      = NULL;
sqapi_getdefaultdelegate            sq_getdefaultdelegate           = NULL;
sqapi_getmemberhandle               sq_getmemberhandle              = NULL;
sqapi_getbyhandle                   sq_getbyhandle                  = NULL;
sqapi_setbyhandle                   sq_setbyhandle                  = NULL;

//object manipulation
sqapi_pushroottable                 sq_pushroottable                = NULL;
sqapi_pushregistrytable             sq_pushregistrytable            = NULL;
sqapi_pushconsttable                sq_pushconsttable               = NULL;
sqapi_setroottable                  sq_setroottable                 = NULL;
sqapi_setconsttable                 sq_setconsttable                = NULL;
sqapi_newslot                       sq_newslot                      = NULL;
sqapi_deleteslot                    sq_deleteslot                   = NULL;
sqapi_set                           sq_set                          = NULL;
sqapi_get                           sq_get                          = NULL;
sqapi_rawget                        sq_rawget                       = NULL;
sqapi_rawset                        sq_rawset                       = NULL;
sqapi_rawdeleteslot                 sq_rawdeleteslot                = NULL;
sqapi_newmember                     sq_newmember                    = NULL;
sqapi_rawnewmember                  sq_rawnewmember                 = NULL;
sqapi_arrayappend                   sq_arrayappend                  = NULL;
sqapi_arraypop                      sq_arraypop                     = NULL;
sqapi_arrayresize                   sq_arrayresize                  = NULL;
sqapi_arrayreverse                  sq_arrayreverse                 = NULL;
sqapi_arrayremove                   sq_arrayremove                  = NULL;
sqapi_arrayinsert                   sq_arrayinsert                  = NULL;
sqapi_setdelegate                   sq_setdelegate                  = NULL;
sqapi_getdelegate                   sq_getdelegate                  = NULL;
sqapi_clone                         sq_clone                        = NULL;
sqapi_setfreevariable               sq_setfreevariable              = NULL;
sqapi_next                          sq_next                         = NULL;
sqapi_getweakrefval                 sq_getweakrefval                = NULL;
sqapi_clear                         sq_clear                        = NULL;

//calls
sqapi_call                          sq_call                         = NULL;
sqapi_resume                        sq_resume                       = NULL;
sqapi_getlocal                      sq_getlocal                     = NULL;
sqapi_getcallee                     sq_getcallee                    = NULL;
sqapi_getfreevariable               sq_getfreevariable              = NULL;
sqapi_throwerror                    sq_throwerror                   = NULL;
sqapi_throwobject                   sq_throwobject                  = NULL;
sqapi_reseterror                    sq_reseterror                   = NULL;
sqapi_getlasterror                  sq_getlasterror                 = NULL;

//raw object handling
sqapi_getstackobj                   sq_getstackobj                  = NULL;
sqapi_pushobject                    sq_pushobject                   = NULL;
sqapi_addref                        sq_addref                       = NULL;
sqapi_release                       sq_release                      = NULL;
sqapi_getrefcount                   sq_getrefcount                  = NULL;
sqapi_resetobject                   sq_resetobject                  = NULL;
sqapi_objtostring                   sq_objtostring                  = NULL;
sqapi_objtobool                     sq_objtobool                    = NULL;
sqapi_objtointeger                  sq_objtointeger                 = NULL;
sqapi_objtofloat                    sq_objtofloat                   = NULL;
sqapi_objtouserpointer              sq_objtouserpointer             = NULL;
sqapi_getobjtypetag                 sq_getobjtypetag                = NULL;
sqapi_getvmrefcount                 sq_getvmrefcount                = NULL;

//GC
sqapi_collectgarbage                sq_collectgarbage               = NULL;
sqapi_resurrectunreachable          sq_resurrectunreachable         = NULL;

//serialization
sqapi_writeclosure                  sq_writeclosure                 = NULL;
sqapi_readclosure                   sq_readclosure                  = NULL;

//mem allocation
sqapi_malloc                        sq_malloc                       = NULL;
sqapi_realloc                       sq_realloc                      = NULL;
sqapi_free                          sq_free                         = NULL;

//debug
sqapi_stackinfos                    sq_stackinfos                   = NULL;
sqapi_setdebughook                  sq_setdebughook                 = NULL;
sqapi_setnativedebughook            sq_setnativedebughook           = NULL;

//compiler helpers
sqapi_loadfile                      sqstd_loadfile                  = NULL;
sqapi_dofile                        sqstd_dofile                    = NULL;
sqapi_writeclosuretofile            sqstd_writeclosuretofile        = NULL;

//blob
sqapi_createblob                    sqstd_createblob                = NULL;
sqapi_getblob                       sqstd_getblob                   = NULL;
sqapi_getblobsize                   sqstd_getblobsize               = NULL;

//string
sqapi_format                        sqstd_format                    = NULL;

#endif // SQMOD_PLUGIN_API

// ------------------------------------------------------------------------------------------------
HSQEXPORTS sq_api_import(PluginFuncs * vcapi)
{
    // Make sure a valid plug-in api and reference to exports structure pointer was specified
    if (!vcapi)
    {
        return NULL;
    }
    size_t struct_size;
    // Attempt to find the main plug-in ID
    int plugin_id = vcapi->FindPlugin((char *)(SQMOD_HOST_NAME));
    // Attempt to retrieve the plug-in exports
    const void ** plugin_exports = vcapi->GetPluginExports(plugin_id, &struct_size);
    // See if we have any imports from Squirrel
    if (plugin_exports == NULL || struct_size <= 0)
    {
        return NULL;
    }
    // Simply return the obtain poiner to the exports structure
    return *(sq_exports **)plugin_exports;
}

// ------------------------------------------------------------------------------------------------
SQRESULT sq_api_expand(HSQAPI sqapi)
{
    if (!sqapi)
    {
        return SQ_ERROR;
    }

#ifdef SQMOD_PLUGIN_API

    //vm
    sq_open                         = sqapi->open;
    sq_newthread                    = sqapi->newthread;
    sq_seterrorhandler              = sqapi->seterrorhandler;
    sq_close                        = sqapi->close;
    sq_setforeignptr                = sqapi->setforeignptr;
    sq_getforeignptr                = sqapi->getforeignptr;
    sq_setsharedforeignptr          = sqapi->setsharedforeignptr;
    sq_getsharedforeignptr          = sqapi->getsharedforeignptr;
    sq_setvmreleasehook             = sqapi->setvmreleasehook;
    sq_getvmreleasehook             = sqapi->getvmreleasehook;
    sq_setsharedreleasehook         = sqapi->setsharedreleasehook;
    sq_getsharedreleasehook         = sqapi->getsharedreleasehook;
    sq_setprintfunc                 = sqapi->setprintfunc;
    sq_getprintfunc                 = sqapi->getprintfunc;
    sq_geterrorfunc                 = sqapi->geterrorfunc;
    sq_suspendvm                    = sqapi->suspendvm;
    sq_wakeupvm                     = sqapi->wakeupvm;
    sq_getvmstate                   = sqapi->getvmstate;
    sq_getversion                   = sqapi->getversion;

    //compiler
    sq_compile                      = sqapi->compile;
    sq_compilebuffer                = sqapi->compilebuffer;
    sq_enabledebuginfo              = sqapi->enabledebuginfo;
    sq_notifyallexceptions          = sqapi->notifyallexceptions;
    sq_setcompilererrorhandler      = sqapi->setcompilererrorhandler;

    //stack operations
    sq_push                         = sqapi->push;
    sq_pop                          = sqapi->pop;
    sq_poptop                       = sqapi->poptop;
    sq_remove                       = sqapi->remove;
    sq_gettop                       = sqapi->gettop;
    sq_settop                       = sqapi->settop;
    sq_reservestack                 = sqapi->reservestack;
    sq_cmp                          = sqapi->cmp;
    sq_move                         = sqapi->move;

    //object creation handling
    sq_newuserdata                  = sqapi->newuserdata;
    sq_newtable                     = sqapi->newtable;
    sq_newtableex                   = sqapi->newtableex;
    sq_newarray                     = sqapi->newarray;
    sq_newclosure                   = sqapi->newclosure;
    sq_setparamscheck               = sqapi->setparamscheck;
    sq_bindenv                      = sqapi->bindenv;
    sq_setclosureroot               = sqapi->setclosureroot;
    sq_getclosureroot               = sqapi->getclosureroot;
    sq_pushstring                   = sqapi->pushstring;
    sq_pushfloat                    = sqapi->pushfloat;
    sq_pushinteger                  = sqapi->pushinteger;
    sq_pushbool                     = sqapi->pushbool;
    sq_pushuserpointer              = sqapi->pushuserpointer;
    sq_pushnull                     = sqapi->pushnull;
    sq_pushthread                   = sqapi->pushthread;
    sq_gettype                      = sqapi->gettype;
    sq_typeof                       = sqapi->typeof_;
    sq_getsize                      = sqapi->getsize;
    sq_gethash                      = sqapi->gethash;
    sq_getbase                      = sqapi->getbase;
    sq_instanceof                   = sqapi->instanceof;
    sq_tostring                     = sqapi->tostring;
    sq_tobool                       = sqapi->tobool;
    sq_getstringandsize             = sqapi->getstringandsize;
    sq_getstring                    = sqapi->getstring;
    sq_getinteger                   = sqapi->getinteger;
    sq_getfloat                     = sqapi->getfloat;
    sq_getbool                      = sqapi->getbool;
    sq_getthread                    = sqapi->getthread;
    sq_getuserpointer               = sqapi->getuserpointer;
    sq_getuserdata                  = sqapi->getuserdata;
    sq_settypetag                   = sqapi->settypetag;
    sq_gettypetag                   = sqapi->gettypetag;
    sq_setreleasehook               = sqapi->setreleasehook;
    sq_getreleasehook               = sqapi->getreleasehook;
    sq_getscratchpad                = sqapi->getscratchpad;
    sq_getfunctioninfo              = sqapi->getfunctioninfo;
    sq_getclosureinfo               = sqapi->getclosureinfo;
    sq_getclosurename               = sqapi->getclosurename;
    sq_setnativeclosurename         = sqapi->setnativeclosurename;
    sq_setinstanceup                = sqapi->setinstanceup;
    sq_getinstanceup                = sqapi->getinstanceup;
    sq_setclassudsize               = sqapi->setclassudsize;
    sq_newclass                     = sqapi->newclass;
    sq_createinstance               = sqapi->createinstance;
    sq_setattributes                = sqapi->setattributes;
    sq_getattributes                = sqapi->getattributes;
    sq_getclass                     = sqapi->getclass;
    sq_weakref                      = sqapi->weakref;
    sq_getdefaultdelegate           = sqapi->getdefaultdelegate;
    sq_getmemberhandle              = sqapi->getmemberhandle;
    sq_getbyhandle                  = sqapi->getbyhandle;
    sq_setbyhandle                  = sqapi->setbyhandle;

    //object manipulation
    sq_pushroottable                = sqapi->pushroottable;
    sq_pushregistrytable            = sqapi->pushregistrytable;
    sq_pushconsttable               = sqapi->pushconsttable;
    sq_setroottable                 = sqapi->setroottable;
    sq_setconsttable                = sqapi->setconsttable;
    sq_newslot                      = sqapi->newslot;
    sq_deleteslot                   = sqapi->deleteslot;
    sq_set                          = sqapi->set;
    sq_get                          = sqapi->get;
    sq_rawget                       = sqapi->rawget;
    sq_rawset                       = sqapi->rawset;
    sq_rawdeleteslot                = sqapi->rawdeleteslot;
    sq_newmember                    = sqapi->newmember;
    sq_rawnewmember                 = sqapi->rawnewmember;
    sq_arrayappend                  = sqapi->arrayappend;
    sq_arraypop                     = sqapi->arraypop;
    sq_arrayresize                  = sqapi->arrayresize;
    sq_arrayreverse                 = sqapi->arrayreverse;
    sq_arrayremove                  = sqapi->arrayremove;
    sq_arrayinsert                  = sqapi->arrayinsert;
    sq_setdelegate                  = sqapi->setdelegate;
    sq_getdelegate                  = sqapi->getdelegate;
    sq_clone                        = sqapi->clone;
    sq_setfreevariable              = sqapi->setfreevariable;
    sq_next                         = sqapi->next;
    sq_getweakrefval                = sqapi->getweakrefval;
    sq_clear                        = sqapi->clear;

    //calls
    sq_call                         = sqapi->call;
    sq_resume                       = sqapi->resume;
    sq_getlocal                     = sqapi->getlocal;
    sq_getcallee                    = sqapi->getcallee;
    sq_getfreevariable              = sqapi->getfreevariable;
    sq_throwerror                   = sqapi->throwerror;
    sq_throwobject                  = sqapi->throwobject;
    sq_reseterror                   = sqapi->reseterror;
    sq_getlasterror                 = sqapi->getlasterror;

    //raw object handling
    sq_getstackobj                  = sqapi->getstackobj;
    sq_pushobject                   = sqapi->pushobject;
    sq_addref                       = sqapi->addref;
    sq_release                      = sqapi->release;
    sq_getrefcount                  = sqapi->getrefcount;
    sq_resetobject                  = sqapi->resetobject;
    sq_objtostring                  = sqapi->objtostring;
    sq_objtobool                    = sqapi->objtobool;
    sq_objtointeger                 = sqapi->objtointeger;
    sq_objtofloat                   = sqapi->objtofloat;
    sq_objtouserpointer             = sqapi->objtouserpointer;
    sq_getobjtypetag                = sqapi->getobjtypetag;
    sq_getvmrefcount                = sqapi->getvmrefcount;

    //GC
    sq_collectgarbage               = sqapi->collectgarbage;
    sq_resurrectunreachable         = sqapi->resurrectunreachable;

    //serialization
    sq_writeclosure                 = sqapi->writeclosure;
    sq_readclosure                  = sqapi->readclosure;

    //mem allocation
    sq_malloc                       = sqapi->malloc;
    sq_realloc                      = sqapi->realloc;
    sq_free                         = sqapi->free;

    //debug
    sq_stackinfos                   = sqapi->stackinfos;
    sq_setdebughook                 = sqapi->setdebughook;
    sq_setnativedebughook           = sqapi->setnativedebughook;

    //compiler helpers
    sqstd_loadfile                  = sqapi->loadfile;
    sqstd_dofile                    = sqapi->dofile;
    sqstd_writeclosuretofile        = sqapi->writeclosuretofile;

    //blob
    sqstd_createblob                = sqapi->createblob;
    sqstd_getblob                   = sqapi->getblob;
    sqstd_getblobsize               = sqapi->getblobsize;

    //string
    sqstd_format                    = sqapi->format;

#endif // SQMOD_PLUGIN_API

    return SQ_OK;
}

// ------------------------------------------------------------------------------------------------
void sq_api_collapse()
{
#ifdef SQMOD_PLUGIN_API

    //vm
    sq_open                         = NULL;
    sq_newthread                    = NULL;
    sq_seterrorhandler              = NULL;
    sq_close                        = NULL;
    sq_setforeignptr                = NULL;
    sq_getforeignptr                = NULL;
    sq_setsharedforeignptr          = NULL;
    sq_getsharedforeignptr          = NULL;
    sq_setvmreleasehook             = NULL;
    sq_getvmreleasehook             = NULL;
    sq_setsharedreleasehook         = NULL;
    sq_getsharedreleasehook         = NULL;
    sq_setprintfunc                 = NULL;
    sq_getprintfunc                 = NULL;
    sq_geterrorfunc                 = NULL;
    sq_suspendvm                    = NULL;
    sq_wakeupvm                     = NULL;
    sq_getvmstate                   = NULL;
    sq_getversion                   = NULL;

    //compiler
    sq_compile                      = NULL;
    sq_compilebuffer                = NULL;
    sq_enabledebuginfo              = NULL;
    sq_notifyallexceptions          = NULL;
    sq_setcompilererrorhandler      = NULL;

    //stack operations
    sq_push                         = NULL;
    sq_pop                          = NULL;
    sq_poptop                       = NULL;
    sq_remove                       = NULL;
    sq_gettop                       = NULL;
    sq_settop                       = NULL;
    sq_reservestack                 = NULL;
    sq_cmp                          = NULL;
    sq_move                         = NULL;

    //object creation handling
    sq_newuserdata                  = NULL;
    sq_newtable                     = NULL;
    sq_newtableex                   = NULL;
    sq_newarray                     = NULL;
    sq_newclosure                   = NULL;
    sq_setparamscheck               = NULL;
    sq_bindenv                      = NULL;
    sq_setclosureroot               = NULL;
    sq_getclosureroot               = NULL;
    sq_pushstring                   = NULL;
    sq_pushfloat                    = NULL;
    sq_pushinteger                  = NULL;
    sq_pushbool                     = NULL;
    sq_pushuserpointer              = NULL;
    sq_pushnull                     = NULL;
    sq_pushthread                   = NULL;
    sq_gettype                      = NULL;
    sq_typeof                       = NULL;
    sq_getsize                      = NULL;
    sq_gethash                      = NULL;
    sq_getbase                      = NULL;
    sq_instanceof                   = NULL;
    sq_tostring                     = NULL;
    sq_tobool                       = NULL;
    sq_getstringandsize             = NULL;
    sq_getstring                    = NULL;
    sq_getinteger                   = NULL;
    sq_getfloat                     = NULL;
    sq_getbool                      = NULL;
    sq_getthread                    = NULL;
    sq_getuserpointer               = NULL;
    sq_getuserdata                  = NULL;
    sq_settypetag                   = NULL;
    sq_gettypetag                   = NULL;
    sq_setreleasehook               = NULL;
    sq_getreleasehook               = NULL;
    sq_getscratchpad                = NULL;
    sq_getfunctioninfo              = NULL;
    sq_getclosureinfo               = NULL;
    sq_getclosurename               = NULL;
    sq_setnativeclosurename         = NULL;
    sq_setinstanceup                = NULL;
    sq_getinstanceup                = NULL;
    sq_setclassudsize               = NULL;
    sq_newclass                     = NULL;
    sq_createinstance               = NULL;
    sq_setattributes                = NULL;
    sq_getattributes                = NULL;
    sq_getclass                     = NULL;
    sq_weakref                      = NULL;
    sq_getdefaultdelegate           = NULL;
    sq_getmemberhandle              = NULL;
    sq_getbyhandle                  = NULL;
    sq_setbyhandle                  = NULL;

    //object manipulation
    sq_pushroottable                = NULL;
    sq_pushregistrytable            = NULL;
    sq_pushconsttable               = NULL;
    sq_setroottable                 = NULL;
    sq_setconsttable                = NULL;
    sq_newslot                      = NULL;
    sq_deleteslot                   = NULL;
    sq_set                          = NULL;
    sq_get                          = NULL;
    sq_rawget                       = NULL;
    sq_rawset                       = NULL;
    sq_rawdeleteslot                = NULL;
    sq_newmember                    = NULL;
    sq_rawnewmember                 = NULL;
    sq_arrayappend                  = NULL;
    sq_arraypop                     = NULL;
    sq_arrayresize                  = NULL;
    sq_arrayreverse                 = NULL;
    sq_arrayremove                  = NULL;
    sq_arrayinsert                  = NULL;
    sq_setdelegate                  = NULL;
    sq_getdelegate                  = NULL;
    sq_clone                        = NULL;
    sq_setfreevariable              = NULL;
    sq_next                         = NULL;
    sq_getweakrefval                = NULL;
    sq_clear                        = NULL;

    //calls
    sq_call                         = NULL;
    sq_resume                       = NULL;
    sq_getlocal                     = NULL;
    sq_getcallee                    = NULL;
    sq_getfreevariable              = NULL;
    sq_throwerror                   = NULL;
    sq_throwobject                  = NULL;
    sq_reseterror                   = NULL;
    sq_getlasterror                 = NULL;

    //raw object handling
    sq_getstackobj                  = NULL;
    sq_pushobject                   = NULL;
    sq_addref                       = NULL;
    sq_release                      = NULL;
    sq_getrefcount                  = NULL;
    sq_resetobject                  = NULL;
    sq_objtostring                  = NULL;
    sq_objtobool                    = NULL;
    sq_objtointeger                 = NULL;
    sq_objtofloat                   = NULL;
    sq_objtouserpointer             = NULL;
    sq_getobjtypetag                = NULL;
    sq_getvmrefcount                = NULL;

    //GC
    sq_collectgarbage               = NULL;
    sq_resurrectunreachable         = NULL;

    //serialization
    sq_writeclosure                 = NULL;
    sq_readclosure                  = NULL;

    //mem allocation
    sq_malloc                       = NULL;
    sq_realloc                      = NULL;
    sq_free                         = NULL;

    //debug
    sq_stackinfos                   = NULL;
    sq_setdebughook                 = NULL;
    sq_setnativedebughook           = NULL;

    //compiler helpers
    sqstd_loadfile                  = NULL;
    sqstd_dofile                    = NULL;
    sqstd_writeclosuretofile        = NULL;

    //blob
    sqstd_createblob                = NULL;
    sqstd_getblob                   = NULL;
    sqstd_getblobsize               = NULL;

    //string
    sqstd_format                    = NULL;

#endif // SQMOD_PLUGIN_API
}
