From 2cfc91da83fb720e5634001bad29bf053e4a6909 Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Sun, 30 Mar 2008 00:10:22 +0000 Subject: [PATCH] Dump namespace information separate from global functions. --- stepmania/src/LuaManager.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/stepmania/src/LuaManager.cpp b/stepmania/src/LuaManager.cpp index 53fc9f047f..6f8bfb237a 100644 --- a/stepmania/src/LuaManager.cpp +++ b/stepmania/src/LuaManager.cpp @@ -506,12 +506,14 @@ XNode *LuaHelpers::GetLuaInformation() XNode *pGlobalsNode = pLuaNode->AppendChild( "GlobalFunctions" ); XNode *pClassesNode = pLuaNode->AppendChild( "Classes" ); + XNode *pNamespacesNode = pLuaNode->AppendChild( "Namespaces" ); XNode *pSingletonsNode = pLuaNode->AppendChild( "Singletons" ); XNode *pEnumsNode = pLuaNode->AppendChild( "Enums" ); XNode *pConstantsNode = pLuaNode->AppendChild( "Constants" ); vector vFunctions; map mClasses; + map > mNamespaces; map mSingletons; map mConstants; map mStringConstants; @@ -579,6 +581,14 @@ XNode *LuaHelpers::GetLuaInformation() break; case LUA_TFUNCTION: vFunctions.push_back( sKey ); + /* + { + lua_Debug ar; + lua_getfield( L, LUA_GLOBALSINDEX, sKey ); + lua_getinfo( L, ">S", &ar ); // Pops the function + printf( "%s: %s\n", sKey.c_str(), ar.short_src ); + } + */ break; } } @@ -598,13 +608,14 @@ XNode *LuaHelpers::GetLuaInformation() LuaHelpers::Pop( L, sNamespace ); if( find(BuiltInPackages, end, sNamespace) != end ) continue; - + vector &vNamespaceFunctions = mNamespaces[sNamespace]; FOREACH_LUATABLE( L, -1 ) { RString sFunction; LuaHelpers::Pop( L, sFunction ); - vFunctions.push_back( ssprintf("%s.%s", sNamespace.c_str(), sFunction.c_str()) ); + vNamespaceFunctions.push_back( sFunction ); } + sort( vNamespaceFunctions.begin(), vNamespaceFunctions.end() ); } lua_pop( L, 2 ); @@ -639,6 +650,19 @@ XNode *LuaHelpers::GetLuaInformation() pSingletonNode->AppendAttr( "name", s->first ); pSingletonNode->AppendAttr( "class", s->second ); } + + for( map >::const_iterator iter = mNamespaces.begin(); iter != mNamespaces.end(); ++iter ) + { + XNode *pNamespaceNode = pNamespacesNode->AppendChild( "Namespace" ); + const vector &vNamespace = iter->second; + pNamespaceNode->AppendAttr( "name", iter->first ); + + FOREACH_CONST( RString, vNamespace, func ) + { + XNode *pFunctionNode = pNamespaceNode->AppendChild( "Function" ); + pFunctionNode->AppendAttr( "name", *func ); + } + } for( map >::const_iterator iter = mEnums.begin(); iter != mEnums.end(); ++iter ) {