================
@@ -9748,36 +9755,40 @@ MacroInfo *ASTReader::getMacro(MacroID ID) {
return nullptr;
}
- ID -= NUM_PREDEF_MACRO_IDS;
- if (!MacrosLoaded[ID]) {
- GlobalMacroMapType::iterator I
- = GlobalMacroMap.find(ID + NUM_PREDEF_MACRO_IDS);
- assert(I != GlobalMacroMap.end() && "Corrupted global macro map");
- ModuleFile *M = I->second;
- unsigned Index = ID - M->BaseMacroID;
- MacrosLoaded[ID] =
- ReadMacroRecord(*M, M->MacroOffsetsBase + M->MacroOffsets[Index]);
+ auto [M, Index] = translateMacroIDToIndex(ID);
+ if (!MacrosLoaded[Index]) {
+ assert(M != nullptr && "Untranslated Macro ID?");
+ assert(Index >= M->BaseMacroID);
+ unsigned LocalIndex = Index - M->BaseMacroID;
+ uint64_t DataOffset = M->MacroOffsetsBase + M->MacroOffsets[LocalIndex];
+ MacrosLoaded[Index] = ReadMacroRecord(*M, DataOffset);
if (DeserializationListener)
- DeserializationListener->MacroRead(ID + NUM_PREDEF_MACRO_IDS,
- MacrosLoaded[ID]);
+ DeserializationListener->MacroRead(ID, MacrosLoaded[Index]);
}
- return MacrosLoaded[ID];
+ return MacrosLoaded[Index];
}
-MacroID ASTReader::getGlobalMacroID(ModuleFile &M, unsigned LocalID) {
+MacroID ASTReader::getGlobalMacroID(ModuleFile &M, MacroID LocalID) {
if (LocalID < NUM_PREDEF_MACRO_IDS)
return LocalID;
if (!M.ModuleOffsetMap.empty())
ReadModuleOffsetMap(M);
- ContinuousRangeMap<uint32_t, int, 2>::iterator I
- = M.MacroRemap.find(LocalID - NUM_PREDEF_MACRO_IDS);
- assert(I != M.MacroRemap.end() && "Invalid index into macro index remap");
+ unsigned ModuleFileIndex = LocalID >> 32;
+ LocalID &= llvm::maskTrailingOnes<MacroID>(32);
+ ModuleFile *MF =
+ ModuleFileIndex ? M.TransitiveImports[ModuleFileIndex - 1] : &M;
+ assert(MF && "malformed identifier ID encoding?");
- return LocalID + I->second;
+ if (!ModuleFileIndex) {
+ assert(LocalID >= NUM_PREDEF_MACRO_IDS);
+ LocalID -= NUM_PREDEF_MACRO_IDS;
+ }
+
+ return ((MacroID)(MF->Index + 1) << 32) | LocalID;
----------------
jansvoboda11 wrote:
C-style cast.
https://github.com/llvm/llvm-project/pull/166346
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits