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

//primitive functions
SqModAPI_GetSquirrelVM                      SqMod_GetSquirrelVM                         = NULL;

//logging utilities
SqModAPI_LogMessage                         SqMod_LogDbg                                = NULL;
SqModAPI_LogMessage                         SqMod_LogUsr                                = NULL;
SqModAPI_LogMessage                         SqMod_LogScs                                = NULL;
SqModAPI_LogMessage                         SqMod_LogInf                                = NULL;
SqModAPI_LogMessage                         SqMod_LogWrn                                = NULL;
SqModAPI_LogMessage                         SqMod_LogErr                                = NULL;
SqModAPI_LogMessage                         SqMod_LogFtl                                = NULL;
SqModAPI_LogMessage                         SqMod_LogSDbg                               = NULL;
SqModAPI_LogMessage                         SqMod_LogSUsr                               = NULL;
SqModAPI_LogMessage                         SqMod_LogSScs                               = NULL;
SqModAPI_LogMessage                         SqMod_LogSInf                               = NULL;
SqModAPI_LogMessage                         SqMod_LogSWrn                               = NULL;
SqModAPI_LogMessage                         SqMod_LogSErr                               = NULL;
SqModAPI_LogMessage                         SqMod_LogSFtl                               = NULL;

//script loading
SqModAPI_LoadScript                         SqMod_LoadScript                            = NULL;

//numeric utilities
SqModAPI_GetSLongValue                      SqMod_GetSLongValue                         = NULL;
SqModAPI_PushSLongObject                    SqMod_PushSLongObject                       = NULL;
SqModAPI_GetULongValue                      SqMod_GetULongValue                         = NULL;
SqModAPI_PushULongObject                    SqMod_PushULongObject                       = NULL;

//time utilities
SqModAPI_GetCurrentSysTime                  SqMod_GetCurrentSysTime                     = NULL;
SqModAPI_GetEpochTimeMicro                  SqMod_GetEpochTimeMicro                     = NULL;
SqModAPI_GetEpochTimeMilli                  SqMod_GetEpochTimeMilli                     = NULL;
SqModAPI_ValidDate                          SqMod_ValidDate                             = NULL;
SqModAPI_IsLeapYear                         SqMod_IsLeapYear                            = NULL;
SqModAPI_DaysInYear                         SqMod_DaysInYear                            = NULL;
SqModAPI_DaysInMonth                        SqMod_DaysInMonth                           = NULL;
SqModAPI_DayOfYear                          SqMod_DayOfYear                             = NULL;
SqModAPI_DateRangeToSeconds                 SqMod_DateRangeToSeconds                    = NULL;
SqModAPI_GetTimestamp                       SqMod_GetTimestamp                          = NULL;
SqModAPI_PushTimestamp                      SqMod_PushTimestamp                         = NULL;
SqModAPI_GetDate                            SqMod_GetDate                               = NULL;
SqModAPI_PushDate                           SqMod_PushDate                              = NULL;
SqModAPI_GetTime                            SqMod_GetTime                               = NULL;
SqModAPI_PushTime                           SqMod_PushTime                              = NULL;
SqModAPI_GetDatetime                        SqMod_GetDatetime                           = NULL;
SqModAPI_PushDatetime                       SqMod_PushDatetime                          = NULL;

//stack utilities
SqModAPI_PopStackInteger                    SqMod_PopStackInteger                       = NULL;
SqModAPI_PopStackFloat                      SqMod_PopStackFloat                         = NULL;
SqModAPI_PopStackSLong                      SqMod_PopStackSLong                         = NULL;
SqModAPI_PopStackULong                      SqMod_PopStackULong                         = NULL;

//buffer utilities
SqModAPI_PushBuffer                         SqMod_PushBuffer                            = NULL;
SqModAPI_PushBufferData                     SqMod_PushBufferData                        = NULL;
SqModAPI_GetBufferInfo                      SqMod_GetBufferInfo                         = NULL;
SqModAPI_GetBufferData                      SqMod_GetBufferData                         = NULL;
SqModAPI_GetBufferSize                      SqMod_GetBufferSize                         = NULL;
SqModAPI_GetBufferCursor                    SqMod_GetBufferCursor                       = NULL;

#endif // SQMOD_PLUGIN_API

// ------------------------------------------------------------------------------------------------
uint8_t sqmod_api_expand(HSQMODAPI sqmodapi)
{
    if (!sqmodapi)
    {
        return 0;
    }

#ifdef SQMOD_PLUGIN_API

    //primitive functions
    SqMod_GetSquirrelVM                         = sqmodapi->GetSquirrelVM;

    //logging utilities
    SqMod_LogDbg                                = sqmodapi->LogDbg;
    SqMod_LogUsr                                = sqmodapi->LogUsr;
    SqMod_LogScs                                = sqmodapi->LogScs;
    SqMod_LogInf                                = sqmodapi->LogInf;
    SqMod_LogWrn                                = sqmodapi->LogWrn;
    SqMod_LogErr                                = sqmodapi->LogErr;
    SqMod_LogFtl                                = sqmodapi->LogFtl;
    SqMod_LogSDbg                               = sqmodapi->LogSDbg;
    SqMod_LogSUsr                               = sqmodapi->LogSUsr;
    SqMod_LogSScs                               = sqmodapi->LogSScs;
    SqMod_LogSInf                               = sqmodapi->LogSInf;
    SqMod_LogSWrn                               = sqmodapi->LogSWrn;
    SqMod_LogSErr                               = sqmodapi->LogSErr;
    SqMod_LogSFtl                               = sqmodapi->LogSFtl;

    //script loading
    SqMod_LoadScript                            = sqmodapi->LoadScript;

    //numeric utilities
    SqMod_GetSLongValue                         = sqmodapi->GetSLongValue;
    SqMod_PushSLongObject                       = sqmodapi->PushSLongObject;
    SqMod_GetULongValue                         = sqmodapi->GetULongValue;
    SqMod_PushULongObject                       = sqmodapi->PushULongObject;

    //time utilities
    SqMod_GetCurrentSysTime                     = sqmodapi->GetCurrentSysTime;
    SqMod_GetEpochTimeMicro                     = sqmodapi->GetEpochTimeMicro;
    SqMod_GetEpochTimeMilli                     = sqmodapi->GetEpochTimeMilli;
    SqMod_ValidDate                             = sqmodapi->ValidDate;
    SqMod_IsLeapYear                            = sqmodapi->IsLeapYear;
    SqMod_DaysInYear                            = sqmodapi->DaysInYear;
    SqMod_DaysInMonth                           = sqmodapi->DaysInMonth;
    SqMod_DayOfYear                             = sqmodapi->DayOfYear;
    SqMod_DateRangeToSeconds                    = sqmodapi->DateRangeToSeconds;
    SqMod_GetTimestamp                          = sqmodapi->GetTimestamp;
    SqMod_PushTimestamp                         = sqmodapi->PushTimestamp;
    SqMod_GetDate                               = sqmodapi->GetDate;
    SqMod_PushDate                              = sqmodapi->PushDate;
    SqMod_GetTime                               = sqmodapi->GetTime;
    SqMod_PushTime                              = sqmodapi->PushTime;
    SqMod_GetDatetime                           = sqmodapi->GetDatetime;
    SqMod_PushDatetime                          = sqmodapi->PushDatetime;

    //stack utilities
    SqMod_PopStackInteger                       = sqmodapi->PopStackInteger;
    SqMod_PopStackFloat                         = sqmodapi->PopStackFloat;
    SqMod_PopStackSLong                         = sqmodapi->PopStackSLong;
    SqMod_PopStackULong                         = sqmodapi->PopStackULong;

    //buffer utilities
    SqMod_PushBuffer                            = sqmodapi->PushBuffer;
    SqMod_PushBufferData                        = sqmodapi->PushBufferData;
    SqMod_GetBufferInfo                         = sqmodapi->GetBufferInfo;
    SqMod_GetBufferData                         = sqmodapi->GetBufferData;
    SqMod_GetBufferSize                         = sqmodapi->GetBufferSize;
    SqMod_GetBufferCursor                       = sqmodapi->GetBufferCursor;

#endif // SQMOD_PLUGIN_API

    return 1;
}

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

    //primitive functions
    SqMod_GetSquirrelVM                         = NULL;

    //logging utilities
    SqMod_LogDbg                                = NULL;
    SqMod_LogUsr                                = NULL;
    SqMod_LogScs                                = NULL;
    SqMod_LogInf                                = NULL;
    SqMod_LogWrn                                = NULL;
    SqMod_LogErr                                = NULL;
    SqMod_LogFtl                                = NULL;
    SqMod_LogSDbg                               = NULL;
    SqMod_LogSUsr                               = NULL;
    SqMod_LogSScs                               = NULL;
    SqMod_LogSInf                               = NULL;
    SqMod_LogSWrn                               = NULL;
    SqMod_LogSErr                               = NULL;
    SqMod_LogSFtl                               = NULL;

    //script loading
    SqMod_LoadScript                            = NULL;

    //numeric utilities
    SqMod_GetSLongValue                         = NULL;
    SqMod_PushSLongObject                       = NULL;
    SqMod_GetULongValue                         = NULL;
    SqMod_PushULongObject                       = NULL;

    //time utilities
    SqMod_GetCurrentSysTime                     = NULL;
    SqMod_GetEpochTimeMicro                     = NULL;
    SqMod_GetEpochTimeMilli                     = NULL;
    SqMod_ValidDate                             = NULL;
    SqMod_IsLeapYear                            = NULL;
    SqMod_DaysInYear                            = NULL;
    SqMod_DaysInMonth                           = NULL;
    SqMod_DayOfYear                             = NULL;
    SqMod_DateRangeToSeconds                    = NULL;
    SqMod_GetTimestamp                          = NULL;
    SqMod_PushTimestamp                         = NULL;
    SqMod_GetDate                               = NULL;
    SqMod_PushDate                              = NULL;
    SqMod_GetTime                               = NULL;
    SqMod_PushTime                              = NULL;
    SqMod_GetDatetime                           = NULL;
    SqMod_PushDatetime                          = NULL;

    //stack utilities
    SqMod_PopStackInteger                       = NULL;
    SqMod_PopStackFloat                         = NULL;
    SqMod_PopStackSLong                         = NULL;
    SqMod_PopStackULong                         = NULL;

    //buffer utilities
    SqMod_PushBuffer                            = NULL;
    SqMod_PushBufferData                        = NULL;
    SqMod_GetBufferInfo                         = NULL;
    SqMod_GetBufferData                         = NULL;
    SqMod_GetBufferSize                         = NULL;
    SqMod_GetBufferCursor                       = NULL;

#endif // SQMOD_PLUGIN_API
}

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

//vm
SqLibAPI_open                               SqLib_open                                  = NULL;
SqLibAPI_newthread                          SqLib_newthread                             = NULL;
SqLibAPI_seterrorhandler                    SqLib_seterrorhandler                       = NULL;
SqLibAPI_close                              SqLib_close                                 = NULL;
SqLibAPI_setforeignptr                      SqLib_setforeignptr                         = NULL;
SqLibAPI_getforeignptr                      SqLib_getforeignptr                         = NULL;
SqLibAPI_setsharedforeignptr                SqLib_setsharedforeignptr                   = NULL;
SqLibAPI_getsharedforeignptr                SqLib_getsharedforeignptr                   = NULL;
SqLibAPI_setvmreleasehook                   SqLib_setvmreleasehook                      = NULL;
SqLibAPI_getvmreleasehook                   SqLib_getvmreleasehook                      = NULL;
SqLibAPI_setsharedreleasehook               SqLib_setsharedreleasehook                  = NULL;
SqLibAPI_getsharedreleasehook               SqLib_getsharedreleasehook                  = NULL;
SqLibAPI_setprintfunc                       SqLib_setprintfunc                          = NULL;
SqLibAPI_getprintfunc                       SqLib_getprintfunc                          = NULL;
SqLibAPI_geterrorfunc                       SqLib_geterrorfunc                          = NULL;
SqLibAPI_suspendvm                          SqLib_suspendvm                             = NULL;
SqLibAPI_wakeupvm                           SqLib_wakeupvm                              = NULL;
SqLibAPI_getvmstate                         SqLib_getvmstate                            = NULL;
SqLibAPI_getversion                         SqLib_getversion                            = NULL;

//compiler
SqLibAPI_compile                            SqLib_compile                               = NULL;
SqLibAPI_compilebuffer                      SqLib_compilebuffer                         = NULL;
SqLibAPI_enabledebuginfo                    SqLib_enabledebuginfo                       = NULL;
SqLibAPI_notifyallexceptions                SqLib_notifyallexceptions                   = NULL;
SqLibAPI_setcompilererrorhandler            SqLib_setcompilererrorhandler               = NULL;

//stack operations
SqLibAPI_push                               SqLib_push                                  = NULL;
SqLibAPI_pop                                SqLib_pop                                   = NULL;
SqLibAPI_poptop                             SqLib_poptop                                = NULL;
SqLibAPI_remove                             SqLib_remove                                = NULL;
SqLibAPI_gettop                             SqLib_gettop                                = NULL;
SqLibAPI_settop                             SqLib_settop                                = NULL;
SqLibAPI_reservestack                       SqLib_reservestack                          = NULL;
SqLibAPI_cmp                                SqLib_cmp                                   = NULL;
SqLibAPI_move                               SqLib_move                                  = NULL;

//object creation handling
SqLibAPI_newuserdata                        SqLib_newuserdata                           = NULL;
SqLibAPI_newtable                           SqLib_newtable                              = NULL;
SqLibAPI_newtableex                         SqLib_newtableex                            = NULL;
SqLibAPI_newarray                           SqLib_newarray                              = NULL;
SqLibAPI_newclosure                         SqLib_newclosure                            = NULL;
SqLibAPI_setparamscheck                     SqLib_setparamscheck                        = NULL;
SqLibAPI_bindenv                            SqLib_bindenv                               = NULL;
SqLibAPI_setclosureroot                     SqLib_setclosureroot                        = NULL;
SqLibAPI_getclosureroot                     SqLib_getclosureroot                        = NULL;
SqLibAPI_pushstring                         SqLib_pushstring                            = NULL;
SqLibAPI_pushfloat                          SqLib_pushfloat                             = NULL;
SqLibAPI_pushinteger                        SqLib_pushinteger                           = NULL;
SqLibAPI_pushbool                           SqLib_pushbool                              = NULL;
SqLibAPI_pushuserpointer                    SqLib_pushuserpointer                       = NULL;
SqLibAPI_pushnull                           SqLib_pushnull                              = NULL;
SqLibAPI_pushthread                         SqLib_pushthread                            = NULL;
SqLibAPI_gettype                            SqLib_gettype                               = NULL;
SqLibAPI_typeof                             SqLib_typeof                                = NULL;
SqLibAPI_getsize                            SqLib_getsize                               = NULL;
SqLibAPI_gethash                            SqLib_gethash                               = NULL;
SqLibAPI_getbase                            SqLib_getbase                               = NULL;
SqLibAPI_instanceof                         SqLib_instanceof                            = NULL;
SqLibAPI_tostring                           SqLib_tostring                              = NULL;
SqLibAPI_tobool                             SqLib_tobool                                = NULL;
SqLibAPI_getstringandsize                   SqLib_getstringandsize                      = NULL;
SqLibAPI_getstring                          SqLib_getstring                             = NULL;
SqLibAPI_getinteger                         SqLib_getinteger                            = NULL;
SqLibAPI_getfloat                           SqLib_getfloat                              = NULL;
SqLibAPI_getbool                            SqLib_getbool                               = NULL;
SqLibAPI_getthread                          SqLib_getthread                             = NULL;
SqLibAPI_getuserpointer                     SqLib_getuserpointer                        = NULL;
SqLibAPI_getuserdata                        SqLib_getuserdata                           = NULL;
SqLibAPI_settypetag                         SqLib_settypetag                            = NULL;
SqLibAPI_gettypetag                         SqLib_gettypetag                            = NULL;
SqLibAPI_setreleasehook                     SqLib_setreleasehook                        = NULL;
SqLibAPI_getreleasehook                     SqLib_getreleasehook                        = NULL;
SqLibAPI_getscratchpad                      SqLib_getscratchpad                         = NULL;
SqLibAPI_getfunctioninfo                    SqLib_getfunctioninfo                       = NULL;
SqLibAPI_getclosureinfo                     SqLib_getclosureinfo                        = NULL;
SqLibAPI_getclosurename                     SqLib_getclosurename                        = NULL;
SqLibAPI_setnativeclosurename               SqLib_setnativeclosurename                  = NULL;
SqLibAPI_setinstanceup                      SqLib_setinstanceup                         = NULL;
SqLibAPI_getinstanceup                      SqLib_getinstanceup                         = NULL;
SqLibAPI_setclassudsize                     SqLib_setclassudsize                        = NULL;
SqLibAPI_newclass                           SqLib_newclass                              = NULL;
SqLibAPI_createinstance                     SqLib_createinstance                        = NULL;
SqLibAPI_setattributes                      SqLib_setattributes                         = NULL;
SqLibAPI_getattributes                      SqLib_getattributes                         = NULL;
SqLibAPI_getclass                           SqLib_getclass                              = NULL;
SqLibAPI_weakref                            SqLib_weakref                               = NULL;
SqLibAPI_getdefaultdelegate                 SqLib_getdefaultdelegate                    = NULL;
SqLibAPI_getmemberhandle                    SqLib_getmemberhandle                       = NULL;
SqLibAPI_getbyhandle                        SqLib_getbyhandle                           = NULL;
SqLibAPI_setbyhandle                        SqLib_setbyhandle                           = NULL;

//object manipulation
SqLibAPI_pushroottable                      SqLib_pushroottable                         = NULL;
SqLibAPI_pushregistrytable                  SqLib_pushregistrytable                     = NULL;
SqLibAPI_pushconsttable                     SqLib_pushconsttable                        = NULL;
SqLibAPI_setroottable                       SqLib_setroottable                          = NULL;
SqLibAPI_setconsttable                      SqLib_setconsttable                         = NULL;
SqLibAPI_newslot                            SqLib_newslot                               = NULL;
SqLibAPI_deleteslot                         SqLib_deleteslot                            = NULL;
SqLibAPI_set                                SqLib_set                                   = NULL;
SqLibAPI_get                                SqLib_get                                   = NULL;
SqLibAPI_rawget                             SqLib_rawget                                = NULL;
SqLibAPI_rawset                             SqLib_rawset                                = NULL;
SqLibAPI_rawdeleteslot                      SqLib_rawdeleteslot                         = NULL;
SqLibAPI_newmember                          SqLib_newmember                             = NULL;
SqLibAPI_rawnewmember                       SqLib_rawnewmember                          = NULL;
SqLibAPI_arrayappend                        SqLib_arrayappend                           = NULL;
SqLibAPI_arraypop                           SqLib_arraypop                              = NULL;
SqLibAPI_arrayresize                        SqLib_arrayresize                           = NULL;
SqLibAPI_arrayreverse                       SqLib_arrayreverse                          = NULL;
SqLibAPI_arrayremove                        SqLib_arrayremove                           = NULL;
SqLibAPI_arrayinsert                        SqLib_arrayinsert                           = NULL;
SqLibAPI_setdelegate                        SqLib_setdelegate                           = NULL;
SqLibAPI_getdelegate                        SqLib_getdelegate                           = NULL;
SqLibAPI_clone                              SqLib_clone                                 = NULL;
SqLibAPI_setfreevariable                    SqLib_setfreevariable                       = NULL;
SqLibAPI_next                               SqLib_next                                  = NULL;
SqLibAPI_getweakrefval                      SqLib_getweakrefval                         = NULL;
SqLibAPI_clear                              SqLib_clear                                 = NULL;

//calls
SqLibAPI_call                               SqLib_call                                  = NULL;
SqLibAPI_resume                             SqLib_resume                                = NULL;
SqLibAPI_getlocal                           SqLib_getlocal                              = NULL;
SqLibAPI_getcallee                          SqLib_getcallee                             = NULL;
SqLibAPI_getfreevariable                    SqLib_getfreevariable                       = NULL;
SqLibAPI_throwerror                         SqLib_throwerror                            = NULL;
SqLibAPI_throwobject                        SqLib_throwobject                           = NULL;
SqLibAPI_reseterror                         SqLib_reseterror                            = NULL;
SqLibAPI_getlasterror                       SqLib_getlasterror                          = NULL;

//raw object handling
SqLibAPI_getstackobj                        SqLib_getstackobj                           = NULL;
SqLibAPI_pushobject                         SqLib_pushobject                            = NULL;
SqLibAPI_addref                             SqLib_addref                                = NULL;
SqLibAPI_release                            SqLib_release                               = NULL;
SqLibAPI_getrefcount                        SqLib_getrefcount                           = NULL;
SqLibAPI_resetobject                        SqLib_resetobject                           = NULL;
SqLibAPI_objtostring                        SqLib_objtostring                           = NULL;
SqLibAPI_objtobool                          SqLib_objtobool                             = NULL;
SqLibAPI_objtointeger                       SqLib_objtointeger                          = NULL;
SqLibAPI_objtofloat                         SqLib_objtofloat                            = NULL;
SqLibAPI_objtouserpointer                   SqLib_objtouserpointer                      = NULL;
SqLibAPI_getobjtypetag                      SqLib_getobjtypetag                         = NULL;
SqLibAPI_getvmrefcount                      SqLib_getvmrefcount                         = NULL;

//GC
SqLibAPI_collectgarbage                     SqLib_collectgarbage                        = NULL;
SqLibAPI_resurrectunreachable               SqLib_resurrectunreachable                  = NULL;

//serialization
SqLibAPI_writeclosure                       SqLib_writeclosure                          = NULL;
SqLibAPI_readclosure                        SqLib_readclosure                           = NULL;

//mem allocation
SqLibAPI_malloc                             SqLib_malloc                                = NULL;
SqLibAPI_realloc                            SqLib_realloc                               = NULL;
SqLibAPI_free                               SqLib_free                                  = NULL;

//debug
SqLibAPI_stackinfos                         SqLib_stackinfos                            = NULL;
SqLibAPI_setdebughook                       SqLib_setdebughook                          = NULL;
SqLibAPI_setnativedebughook                 SqLib_setnativedebughook                    = NULL;

//compiler helpers
SqLibAPI_loadfile                           SqLib_loadfile                              = NULL;
SqLibAPI_dofile                             SqLib_dofile                                = NULL;
SqLibAPI_writeclosuretofile                 SqLib_writeclosuretofile                    = NULL;

//blob
SqLibAPI_createblob                         SqLib_createblob                            = NULL;
SqLibAPI_getblob                            SqLib_getblob                               = NULL;
SqLibAPI_getblobsize                        SqLib_getblobsize                           = NULL;

//string
SqLibAPI_format                             SqLib_format                                = NULL;
#endif // SQMOD_PLUGIN_API

// ------------------------------------------------------------------------------------------------
uint8_t sqlib_api_expand(HSQLIBAPI sqlibapi)
{
    if (!sqlibapi)
    {
        return 0;
    }

#ifdef SQMOD_PLUGIN_API

    //vm
    SqLib_open                                  = sqlibapi->open;
    SqLib_newthread                             = sqlibapi->newthread;
    SqLib_seterrorhandler                       = sqlibapi->seterrorhandler;
    SqLib_close                                 = sqlibapi->close;
    SqLib_setforeignptr                         = sqlibapi->setforeignptr;
    SqLib_getforeignptr                         = sqlibapi->getforeignptr;
    SqLib_setsharedforeignptr                   = sqlibapi->setsharedforeignptr;
    SqLib_getsharedforeignptr                   = sqlibapi->getsharedforeignptr;
    SqLib_setvmreleasehook                      = sqlibapi->setvmreleasehook;
    SqLib_getvmreleasehook                      = sqlibapi->getvmreleasehook;
    SqLib_setsharedreleasehook                  = sqlibapi->setsharedreleasehook;
    SqLib_getsharedreleasehook                  = sqlibapi->getsharedreleasehook;
    SqLib_setprintfunc                          = sqlibapi->setprintfunc;
    SqLib_getprintfunc                          = sqlibapi->getprintfunc;
    SqLib_geterrorfunc                          = sqlibapi->geterrorfunc;
    SqLib_suspendvm                             = sqlibapi->suspendvm;
    SqLib_wakeupvm                              = sqlibapi->wakeupvm;
    SqLib_getvmstate                            = sqlibapi->getvmstate;
    SqLib_getversion                            = sqlibapi->getversion;

    //compiler
    SqLib_compile                               = sqlibapi->compile;
    SqLib_compilebuffer                         = sqlibapi->compilebuffer;
    SqLib_enabledebuginfo                       = sqlibapi->enabledebuginfo;
    SqLib_notifyallexceptions                   = sqlibapi->notifyallexceptions;
    SqLib_setcompilererrorhandler               = sqlibapi->setcompilererrorhandler;

    //stack operations
    SqLib_push                                  = sqlibapi->push;
    SqLib_pop                                   = sqlibapi->pop;
    SqLib_poptop                                = sqlibapi->poptop;
    SqLib_remove                                = sqlibapi->remove;
    SqLib_gettop                                = sqlibapi->gettop;
    SqLib_settop                                = sqlibapi->settop;
    SqLib_reservestack                          = sqlibapi->reservestack;
    SqLib_cmp                                   = sqlibapi->cmp;
    SqLib_move                                  = sqlibapi->move;

    //object creation handling
    SqLib_newuserdata                           = sqlibapi->newuserdata;
    SqLib_newtable                              = sqlibapi->newtable;
    SqLib_newtableex                            = sqlibapi->newtableex;
    SqLib_newarray                              = sqlibapi->newarray;
    SqLib_newclosure                            = sqlibapi->newclosure;
    SqLib_setparamscheck                        = sqlibapi->setparamscheck;
    SqLib_bindenv                               = sqlibapi->bindenv;
    SqLib_setclosureroot                        = sqlibapi->setclosureroot;
    SqLib_getclosureroot                        = sqlibapi->getclosureroot;
    SqLib_pushstring                            = sqlibapi->pushstring;
    SqLib_pushfloat                             = sqlibapi->pushfloat;
    SqLib_pushinteger                           = sqlibapi->pushinteger;
    SqLib_pushbool                              = sqlibapi->pushbool;
    SqLib_pushuserpointer                       = sqlibapi->pushuserpointer;
    SqLib_pushnull                              = sqlibapi->pushnull;
    SqLib_pushthread                            = sqlibapi->pushthread;
    SqLib_gettype                               = sqlibapi->gettype;
    SqLib_typeof                                = sqlibapi->typeof_;
    SqLib_getsize                               = sqlibapi->getsize;
    SqLib_gethash                               = sqlibapi->gethash;
    SqLib_getbase                               = sqlibapi->getbase;
    SqLib_instanceof                            = sqlibapi->instanceof;
    SqLib_tostring                              = sqlibapi->tostring;
    SqLib_tobool                                = sqlibapi->tobool;
    SqLib_getstringandsize                      = sqlibapi->getstringandsize;
    SqLib_getstring                             = sqlibapi->getstring;
    SqLib_getinteger                            = sqlibapi->getinteger;
    SqLib_getfloat                              = sqlibapi->getfloat;
    SqLib_getbool                               = sqlibapi->getbool;
    SqLib_getthread                             = sqlibapi->getthread;
    SqLib_getuserpointer                        = sqlibapi->getuserpointer;
    SqLib_getuserdata                           = sqlibapi->getuserdata;
    SqLib_settypetag                            = sqlibapi->settypetag;
    SqLib_gettypetag                            = sqlibapi->gettypetag;
    SqLib_setreleasehook                        = sqlibapi->setreleasehook;
    SqLib_getreleasehook                        = sqlibapi->getreleasehook;
    SqLib_getscratchpad                         = sqlibapi->getscratchpad;
    SqLib_getfunctioninfo                       = sqlibapi->getfunctioninfo;
    SqLib_getclosureinfo                        = sqlibapi->getclosureinfo;
    SqLib_getclosurename                        = sqlibapi->getclosurename;
    SqLib_setnativeclosurename                  = sqlibapi->setnativeclosurename;
    SqLib_setinstanceup                         = sqlibapi->setinstanceup;
    SqLib_getinstanceup                         = sqlibapi->getinstanceup;
    SqLib_setclassudsize                        = sqlibapi->setclassudsize;
    SqLib_newclass                              = sqlibapi->newclass;
    SqLib_createinstance                        = sqlibapi->createinstance;
    SqLib_setattributes                         = sqlibapi->setattributes;
    SqLib_getattributes                         = sqlibapi->getattributes;
    SqLib_getclass                              = sqlibapi->getclass;
    SqLib_weakref                               = sqlibapi->weakref;
    SqLib_getdefaultdelegate                    = sqlibapi->getdefaultdelegate;
    SqLib_getmemberhandle                       = sqlibapi->getmemberhandle;
    SqLib_getbyhandle                           = sqlibapi->getbyhandle;
    SqLib_setbyhandle                           = sqlibapi->setbyhandle;

    //object manipulation
    SqLib_pushroottable                         = sqlibapi->pushroottable;
    SqLib_pushregistrytable                     = sqlibapi->pushregistrytable;
    SqLib_pushconsttable                        = sqlibapi->pushconsttable;
    SqLib_setroottable                          = sqlibapi->setroottable;
    SqLib_setconsttable                         = sqlibapi->setconsttable;
    SqLib_newslot                               = sqlibapi->newslot;
    SqLib_deleteslot                            = sqlibapi->deleteslot;
    SqLib_set                                   = sqlibapi->set;
    SqLib_get                                   = sqlibapi->get;
    SqLib_rawget                                = sqlibapi->rawget;
    SqLib_rawset                                = sqlibapi->rawset;
    SqLib_rawdeleteslot                         = sqlibapi->rawdeleteslot;
    SqLib_newmember                             = sqlibapi->newmember;
    SqLib_rawnewmember                          = sqlibapi->rawnewmember;
    SqLib_arrayappend                           = sqlibapi->arrayappend;
    SqLib_arraypop                              = sqlibapi->arraypop;
    SqLib_arrayresize                           = sqlibapi->arrayresize;
    SqLib_arrayreverse                          = sqlibapi->arrayreverse;
    SqLib_arrayremove                           = sqlibapi->arrayremove;
    SqLib_arrayinsert                           = sqlibapi->arrayinsert;
    SqLib_setdelegate                           = sqlibapi->setdelegate;
    SqLib_getdelegate                           = sqlibapi->getdelegate;
    SqLib_clone                                 = sqlibapi->clone;
    SqLib_setfreevariable                       = sqlibapi->setfreevariable;
    SqLib_next                                  = sqlibapi->next;
    SqLib_getweakrefval                         = sqlibapi->getweakrefval;
    SqLib_clear                                 = sqlibapi->clear;

    //calls
    SqLib_call                                  = sqlibapi->call;
    SqLib_resume                                = sqlibapi->resume;
    SqLib_getlocal                              = sqlibapi->getlocal;
    SqLib_getcallee                             = sqlibapi->getcallee;
    SqLib_getfreevariable                       = sqlibapi->getfreevariable;
    SqLib_throwerror                            = sqlibapi->throwerror;
    SqLib_throwobject                           = sqlibapi->throwobject;
    SqLib_reseterror                            = sqlibapi->reseterror;
    SqLib_getlasterror                          = sqlibapi->getlasterror;

    //raw object handling
    SqLib_getstackobj                           = sqlibapi->getstackobj;
    SqLib_pushobject                            = sqlibapi->pushobject;
    SqLib_addref                                = sqlibapi->addref;
    SqLib_release                               = sqlibapi->release;
    SqLib_getrefcount                           = sqlibapi->getrefcount;
    SqLib_resetobject                           = sqlibapi->resetobject;
    SqLib_objtostring                           = sqlibapi->objtostring;
    SqLib_objtobool                             = sqlibapi->objtobool;
    SqLib_objtointeger                          = sqlibapi->objtointeger;
    SqLib_objtofloat                            = sqlibapi->objtofloat;
    SqLib_objtouserpointer                      = sqlibapi->objtouserpointer;
    SqLib_getobjtypetag                         = sqlibapi->getobjtypetag;
    SqLib_getvmrefcount                         = sqlibapi->getvmrefcount;

    //GC
    SqLib_collectgarbage                        = sqlibapi->collectgarbage;
    SqLib_resurrectunreachable                  = sqlibapi->resurrectunreachable;

    //serialization
    SqLib_writeclosure                          = sqlibapi->writeclosure;
    SqLib_readclosure                           = sqlibapi->readclosure;

    //mem allocation
    SqLib_malloc                                = sqlibapi->malloc;
    SqLib_realloc                               = sqlibapi->realloc;
    SqLib_free                                  = sqlibapi->free;

    //debug
    SqLib_stackinfos                            = sqlibapi->stackinfos;
    SqLib_setdebughook                          = sqlibapi->setdebughook;
    SqLib_setnativedebughook                    = sqlibapi->setnativedebughook;

    //compiler helpers
    SqLib_loadfile                              = sqlibapi->loadfile;
    SqLib_dofile                                = sqlibapi->dofile;
    SqLib_writeclosuretofile                    = sqlibapi->writeclosuretofile;

    //blob
    SqLib_createblob                            = sqlibapi->createblob;
    SqLib_getblob                               = sqlibapi->getblob;
    SqLib_getblobsize                           = sqlibapi->getblobsize;

    //string
    SqLib_format                                = sqlibapi->format;

#endif // SQMOD_PLUGIN_API

    return 1;
}

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

    //vm
    SqLib_open                                  = NULL;
    SqLib_newthread                             = NULL;
    SqLib_seterrorhandler                       = NULL;
    SqLib_close                                 = NULL;
    SqLib_setforeignptr                         = NULL;
    SqLib_getforeignptr                         = NULL;
    SqLib_setsharedforeignptr                   = NULL;
    SqLib_getsharedforeignptr                   = NULL;
    SqLib_setvmreleasehook                      = NULL;
    SqLib_getvmreleasehook                      = NULL;
    SqLib_setsharedreleasehook                  = NULL;
    SqLib_getsharedreleasehook                  = NULL;
    SqLib_setprintfunc                          = NULL;
    SqLib_getprintfunc                          = NULL;
    SqLib_geterrorfunc                          = NULL;
    SqLib_suspendvm                             = NULL;
    SqLib_wakeupvm                              = NULL;
    SqLib_getvmstate                            = NULL;
    SqLib_getversion                            = NULL;

    //compiler
    SqLib_compile                               = NULL;
    SqLib_compilebuffer                         = NULL;
    SqLib_enabledebuginfo                       = NULL;
    SqLib_notifyallexceptions                   = NULL;
    SqLib_setcompilererrorhandler               = NULL;

    //stack operations
    SqLib_push                                  = NULL;
    SqLib_pop                                   = NULL;
    SqLib_poptop                                = NULL;
    SqLib_remove                                = NULL;
    SqLib_gettop                                = NULL;
    SqLib_settop                                = NULL;
    SqLib_reservestack                          = NULL;
    SqLib_cmp                                   = NULL;
    SqLib_move                                  = NULL;

    //object creation handling
    SqLib_newuserdata                           = NULL;
    SqLib_newtable                              = NULL;
    SqLib_newtableex                            = NULL;
    SqLib_newarray                              = NULL;
    SqLib_newclosure                            = NULL;
    SqLib_setparamscheck                        = NULL;
    SqLib_bindenv                               = NULL;
    SqLib_setclosureroot                        = NULL;
    SqLib_getclosureroot                        = NULL;
    SqLib_pushstring                            = NULL;
    SqLib_pushfloat                             = NULL;
    SqLib_pushinteger                           = NULL;
    SqLib_pushbool                              = NULL;
    SqLib_pushuserpointer                       = NULL;
    SqLib_pushnull                              = NULL;
    SqLib_pushthread                            = NULL;
    SqLib_gettype                               = NULL;
    SqLib_typeof                                = NULL;
    SqLib_getsize                               = NULL;
    SqLib_gethash                               = NULL;
    SqLib_getbase                               = NULL;
    SqLib_instanceof                            = NULL;
    SqLib_tostring                              = NULL;
    SqLib_tobool                                = NULL;
    SqLib_getstringandsize                      = NULL;
    SqLib_getstring                             = NULL;
    SqLib_getinteger                            = NULL;
    SqLib_getfloat                              = NULL;
    SqLib_getbool                               = NULL;
    SqLib_getthread                             = NULL;
    SqLib_getuserpointer                        = NULL;
    SqLib_getuserdata                           = NULL;
    SqLib_settypetag                            = NULL;
    SqLib_gettypetag                            = NULL;
    SqLib_setreleasehook                        = NULL;
    SqLib_getreleasehook                        = NULL;
    SqLib_getscratchpad                         = NULL;
    SqLib_getfunctioninfo                       = NULL;
    SqLib_getclosureinfo                        = NULL;
    SqLib_getclosurename                        = NULL;
    SqLib_setnativeclosurename                  = NULL;
    SqLib_setinstanceup                         = NULL;
    SqLib_getinstanceup                         = NULL;
    SqLib_setclassudsize                        = NULL;
    SqLib_newclass                              = NULL;
    SqLib_createinstance                        = NULL;
    SqLib_setattributes                         = NULL;
    SqLib_getattributes                         = NULL;
    SqLib_getclass                              = NULL;
    SqLib_weakref                               = NULL;
    SqLib_getdefaultdelegate                    = NULL;
    SqLib_getmemberhandle                       = NULL;
    SqLib_getbyhandle                           = NULL;
    SqLib_setbyhandle                           = NULL;

    //object manipulation
    SqLib_pushroottable                         = NULL;
    SqLib_pushregistrytable                     = NULL;
    SqLib_pushconsttable                        = NULL;
    SqLib_setroottable                          = NULL;
    SqLib_setconsttable                         = NULL;
    SqLib_newslot                               = NULL;
    SqLib_deleteslot                            = NULL;
    SqLib_set                                   = NULL;
    SqLib_get                                   = NULL;
    SqLib_rawget                                = NULL;
    SqLib_rawset                                = NULL;
    SqLib_rawdeleteslot                         = NULL;
    SqLib_newmember                             = NULL;
    SqLib_rawnewmember                          = NULL;
    SqLib_arrayappend                           = NULL;
    SqLib_arraypop                              = NULL;
    SqLib_arrayresize                           = NULL;
    SqLib_arrayreverse                          = NULL;
    SqLib_arrayremove                           = NULL;
    SqLib_arrayinsert                           = NULL;
    SqLib_setdelegate                           = NULL;
    SqLib_getdelegate                           = NULL;
    SqLib_clone                                 = NULL;
    SqLib_setfreevariable                       = NULL;
    SqLib_next                                  = NULL;
    SqLib_getweakrefval                         = NULL;
    SqLib_clear                                 = NULL;

    //calls
    SqLib_call                                  = NULL;
    SqLib_resume                                = NULL;
    SqLib_getlocal                              = NULL;
    SqLib_getcallee                             = NULL;
    SqLib_getfreevariable                       = NULL;
    SqLib_throwerror                            = NULL;
    SqLib_throwobject                           = NULL;
    SqLib_reseterror                            = NULL;
    SqLib_getlasterror                          = NULL;

    //raw object handling
    SqLib_getstackobj                           = NULL;
    SqLib_pushobject                            = NULL;
    SqLib_addref                                = NULL;
    SqLib_release                               = NULL;
    SqLib_getrefcount                           = NULL;
    SqLib_resetobject                           = NULL;
    SqLib_objtostring                           = NULL;
    SqLib_objtobool                             = NULL;
    SqLib_objtointeger                          = NULL;
    SqLib_objtofloat                            = NULL;
    SqLib_objtouserpointer                      = NULL;
    SqLib_getobjtypetag                         = NULL;
    SqLib_getvmrefcount                         = NULL;

    //GC
    SqLib_collectgarbage                        = NULL;
    SqLib_resurrectunreachable                  = NULL;

    //serialization
    SqLib_writeclosure                          = NULL;
    SqLib_readclosure                           = NULL;

    //mem allocation
    SqLib_malloc                                = NULL;
    SqLib_realloc                               = NULL;
    SqLib_free                                  = NULL;

    //debug
    SqLib_stackinfos                            = NULL;
    SqLib_setdebughook                          = NULL;
    SqLib_setnativedebughook                    = NULL;

    //compiler helpers
    SqLib_loadfile                              = NULL;
    SqLib_dofile                                = NULL;
    SqLib_writeclosuretofile                    = NULL;

    //blob
    SqLib_createblob                            = NULL;
    SqLib_getblob                               = NULL;
    SqLib_getblobsize                           = NULL;

    //string
    SqLib_format                                = NULL;

#endif // SQMOD_PLUGIN_API
}