ModuleMacro *addModuleMacro(unsigned ModuleID, IdentifierInfo *II,
MacroInfo *Macro,
ArrayRef<ModuleMacro *> Overrides, bool &IsNew);
+ ModuleMacro *getModuleMacro(unsigned ModuleID, IdentifierInfo *II);
/// \{
/// Iterators for the macro history table. Currently defined macros have
return MM;
}
+ModuleMacro *Preprocessor::getModuleMacro(unsigned ModuleID,
+ IdentifierInfo *II) {
+ llvm::FoldingSetNodeID ID;
+ ModuleMacro::Profile(ID, ModuleID, II);
+
+ void *InsertPos;
+ return ModuleMacros.FindNodeOrInsertPos(ID, InsertPos);
+}
+
/// RegisterBuiltinMacro - Register the specified identifier in the identifier
/// table and mark it as a builtin macro to be expanded.
static IdentifierInfo *RegisterBuiltinMacro(Preprocessor &PP, const char *Name){
// Module macros are listed in reverse dependency order.
{
std::reverse(ModuleMacros.begin(), ModuleMacros.end());
- llvm::SmallDenseMap<unsigned, ModuleMacro*> Macros;
llvm::SmallVector<ModuleMacro*, 8> Overrides;
for (auto &MMI : ModuleMacros) {
Overrides.clear();
for (unsigned ModID : MMI.Overrides) {
- auto *Macro = Macros.lookup(ModID);
+ auto *Macro = PP.getModuleMacro(ModID, II);
assert(Macro && "missing definition for overridden macro");
- Overrides.push_back(Macros.lookup(ModID));
+ Overrides.push_back(Macro);
}
bool Inserted = false;
- Macros[MMI.SubModID] =
- PP.addModuleMacro(MMI.SubModID, II, MMI.MI, Overrides, Inserted);
+ PP.addModuleMacro(MMI.SubModID, II, MMI.MI, Overrides, Inserted);
if (!Inserted)
continue;
// Macros in the owning module are hidden. Just remember this macro to
// install if we make this module visible.
HiddenNamesMap[Owner].HiddenMacros.insert(
- std::make_pair(II, new ModuleMacroInfo(MMI)));
+ std::make_pair(II, new (Context) ModuleMacroInfo(MMI)));
} else {
installImportedMacro(II, MMI, Owner);
}