Ejemplo n.º 1
0
static inline void loadscript( const filePath& path, void *ud )
{
    CLuaMain *main = (CLuaMain*)ud;
    lua_State *state = main->GetVirtualMachine();

    filePath relPath;
    fileRoot->GetRelativePath( path, true, relPath );

    std::vector <char> buff;
    fileRoot->ReadToBuffer( path, buff );

    // Zero terminate
    buff.push_back( 0 );

    if ( lint_loadscript( state, &buff[0], relPath.c_str() ) )
    {
        std::cout << "init: " << relPath << "\n";
    }
}
Ejemplo n.º 2
0
///////////////////////////////////////////////////////////////
//
// GetMapEventDebugInfo
//
// Get current Lua source file and line number
//
///////////////////////////////////////////////////////////////
void GetMapEventDebugInfo(CMapEvent* pMapEvent, const char*& szFilename, int& iLineNumber)
{
    CLuaMain* pLuaMain = pMapEvent->GetVM();

    if (!pLuaMain)
        return;

    lua_State* luaVM = pLuaMain->GetVirtualMachine();

    if (!luaVM)
        return;

    const CLuaFunctionRef& iLuaFunction = pMapEvent->GetLuaFunction();
    lua_Debug              debugInfo;
    lua_getref(luaVM, iLuaFunction.ToInt());

    if (lua_getinfo(luaVM, ">lS", &debugInfo))
    {
        // Make sure this function isn't defined in a string
        if (debugInfo.source[0] == '@')
        {
            szFilename = debugInfo.source;
            iLineNumber = debugInfo.currentline != -1 ? debugInfo.currentline : debugInfo.linedefined;
        }
        else
        {
            szFilename = debugInfo.short_src;
        }

        // Remove path
        if (const char* szNext = strrchr(szFilename, '\\'))
            szFilename = szNext + 1;

        if (const char* szNext = strrchr(szFilename, '/'))
            szFilename = szNext + 1;
    }
}