diff --git a/IDEHelper/COFF.cpp b/IDEHelper/COFF.cpp index f4db454b..67de0683 100644 --- a/IDEHelper/COFF.cpp +++ b/IDEHelper/COFF.cpp @@ -4087,6 +4087,12 @@ CvCompileUnit* COFF::ParseCompileUnit(int compileUnitId) return moduleInfo->mCompileUnit; } +void COFF::ParseCompileUnits() +{ + for (int i = 0; i < (int)mCvModuleInfo.size(); i++) + ParseCompileUnit(i); +} + DbgType* COFF::CvGetTypeOrNamespace(char* name, DbgLanguage language) { if (language == DbgLanguage_Unknown) diff --git a/IDEHelper/COFF.h b/IDEHelper/COFF.h index c45de0e5..25041032 100644 --- a/IDEHelper/COFF.h +++ b/IDEHelper/COFF.h @@ -301,6 +301,7 @@ public: void ParseCompileUnit_Symbols(DbgCompileUnit* compileUnit, uint8* sectionData, uint8* data, uint8* dataEnd, CvInlineInfoVec& inlineDataVec, bool deferInternals, DbgSubprogram* useSubprogram); CvCompileUnit* ParseCompileUnit(CvModuleInfo* moduleInfo, CvCompileUnit* compileUnit, uint8* sectionData, int sectionSize); virtual CvCompileUnit* ParseCompileUnit(int compileUnitId) override; + virtual void ParseCompileUnits() override; virtual void MapCompileUnitMethods(DbgCompileUnit* compileUnit) override; virtual void MapCompileUnitMethods(int compileUnitId) override; virtual void PopulateType(DbgType* dbgType) override; diff --git a/IDEHelper/DbgExprEvaluator.cpp b/IDEHelper/DbgExprEvaluator.cpp index 2a1cc419..ef56a86e 100644 --- a/IDEHelper/DbgExprEvaluator.cpp +++ b/IDEHelper/DbgExprEvaluator.cpp @@ -7656,7 +7656,13 @@ DbgTypedValue DbgExprEvaluator::MatchMethod(BfAstNode* targetSrc, DbgTypedValue return result; } } - + else if (methodName == "__parseCompileUnits") + { + for (auto dbgModule : mDebugTarget->mDbgModules) + { + dbgModule->ParseCompileUnits(); + } + } DbgType* curTypeDef; DbgType* targetTypeInst = NULL; diff --git a/IDEHelper/DbgModule.h b/IDEHelper/DbgModule.h index 803a5d04..a4c9b925 100644 --- a/IDEHelper/DbgModule.h +++ b/IDEHelper/DbgModule.h @@ -1215,6 +1215,7 @@ public: virtual void ParseSymbolData(); virtual void ParseTypeData(); virtual DbgCompileUnit* ParseCompileUnit(int compileUnitId); + virtual void ParseCompileUnits() {} virtual void MapCompileUnitMethods(DbgCompileUnit* compileUnit); virtual void MapCompileUnitMethods(int compileUnitId); virtual void PopulateType(DbgType* dbgType);