diff options
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 52 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 56 |
2 files changed, 56 insertions, 52 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 7c394ab2e2c..f8e1c3ed9ca 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -1062,7 +1062,7 @@ bool ASTReader::ReadBlockAbbrevs(BitstreamCursor &Cursor, unsigned BlockID) { } void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, - MacroInfo *Hint) { + MacroDirective *Hint) { BitstreamCursor &Stream = F.MacroCursor; // Keep track of where we are in the stream, then jump back there @@ -1078,16 +1078,16 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, // adding tokens. struct AddLoadedMacroInfoRAII { Preprocessor &PP; - MacroInfo *Hint; - MacroInfo *MI; + MacroDirective *Hint; + MacroDirective *MD; IdentifierInfo *II; - AddLoadedMacroInfoRAII(Preprocessor &PP, MacroInfo *Hint) - : PP(PP), Hint(Hint), MI(), II() { } + AddLoadedMacroInfoRAII(Preprocessor &PP, MacroDirective *Hint) + : PP(PP), Hint(Hint), MD(), II() { } ~AddLoadedMacroInfoRAII( ) { - if (MI) { + if (MD) { // Finally, install the macro. - PP.addLoadedMacroInfo(II, MI, Hint); + PP.addLoadedMacroInfo(II, MD, Hint); } } } AddLoadedMacroInfo(PP, Hint); @@ -1140,20 +1140,22 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, unsigned NextIndex = 3; SourceLocation Loc = ReadSourceLocation(F, Record, NextIndex); MacroInfo *MI = PP.AllocateMacroInfo(Loc); + // FIXME: Location should be import location in case of module. + MacroDirective *MD = PP.AllocateMacroDirective(MI, Loc, + /*isImported=*/true); MI->setDefinitionEndLoc(ReadSourceLocation(F, Record, NextIndex)); // Record this macro. - MacrosLoaded[GlobalID - NUM_PREDEF_MACRO_IDS] = MI; + MacrosLoaded[GlobalID - NUM_PREDEF_MACRO_IDS] = MD; SourceLocation UndefLoc = ReadSourceLocation(F, Record, NextIndex); if (UndefLoc.isValid()) - MI->setUndefLoc(UndefLoc); + MD->setUndefLoc(UndefLoc); MI->setIsUsed(Record[NextIndex++]); - MI->setIsFromAST(); bool IsPublic = Record[NextIndex++]; - MI->setVisibility(IsPublic, ReadSourceLocation(F, Record, NextIndex)); + MD->setVisibility(IsPublic, ReadSourceLocation(F, Record, NextIndex)); if (RecType == PP_MACRO_FUNCTION_LIKE) { // Decode function-like macro info. @@ -1175,13 +1177,13 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, } if (DeserializationListener) - DeserializationListener->MacroRead(GlobalID, MI); + DeserializationListener->MacroRead(GlobalID, MD); // If an update record marked this as undefined, do so now. // FIXME: Only if the submodule this update came from is visible? MacroUpdatesMap::iterator Update = MacroUpdates.find(GlobalID); if (Update != MacroUpdates.end()) { - if (MI->getUndefLoc().isInvalid()) { + if (MD->getUndefLoc().isInvalid()) { for (unsigned I = 0, N = Update->second.size(); I != N; ++I) { bool Hidden = false; if (unsigned SubmoduleID = Update->second[I].first) { @@ -1192,15 +1194,15 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, // Record this hiding for later. HiddenNamesMap[Owner].push_back( - HiddenName(II, MI, Update->second[I].second.UndefLoc)); + HiddenName(II, MD, Update->second[I].second.UndefLoc)); } } } if (!Hidden) { - MI->setUndefLoc(Update->second[I].second.UndefLoc); + MD->setUndefLoc(Update->second[I].second.UndefLoc); if (PPMutationListener *Listener = PP.getPPMutationListener()) - Listener->UndefinedMacro(MI); + Listener->UndefinedMacro(MD); break; } } @@ -1209,7 +1211,7 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, } // Determine whether this macro definition is visible. - bool Hidden = !MI->isPublic(); + bool Hidden = !MD->isPublic(); if (!Hidden && GlobalSubmoduleID) { if (Module *Owner = getSubmodule(GlobalSubmoduleID)) { if (Owner->NameVisibility == Module::Hidden) { @@ -1219,14 +1221,14 @@ void ASTReader::ReadMacroRecord(ModuleFile &F, uint64_t Offset, // Note that this macro definition was hidden because its owning // module is not yet visible. - HiddenNamesMap[Owner].push_back(HiddenName(II, MI)); + HiddenNamesMap[Owner].push_back(HiddenName(II, MD)); } } } - MI->setHidden(Hidden); + MD->setHidden(Hidden); // Make sure we install the macro once we're done. - AddLoadedMacroInfo.MI = MI; + AddLoadedMacroInfo.MD = MD; AddLoadedMacroInfo.II = II; // Remember that we saw this macro last so that we add the tokens that @@ -2639,7 +2641,7 @@ void ASTReader::makeNamesVisible(const HiddenNames &Names) { break; } case HiddenName::MacroVisibility: { - std::pair<IdentifierInfo *, MacroInfo *> Macro = Names[I].getMacro(); + std::pair<IdentifierInfo *, MacroDirective *> Macro = Names[I].getMacro(); Macro.second->setHidden(!Macro.second->isPublic()); if (Macro.second->isDefined()) { PP.makeLoadedMacroInfoVisible(Macro.first, Macro.second); @@ -2648,7 +2650,7 @@ void ASTReader::makeNamesVisible(const HiddenNames &Names) { } case HiddenName::MacroUndef: { - std::pair<IdentifierInfo *, MacroInfo *> Macro = Names[I].getMacro(); + std::pair<IdentifierInfo *, MacroDirective *> Macro = Names[I].getMacro(); if (Macro.second->isDefined()) { Macro.second->setUndefLoc(Names[I].getMacroUndefLoc()); if (PPMutationListener *Listener = PP.getPPMutationListener()) @@ -5638,7 +5640,7 @@ void ASTReader::PrintStats() { unsigned NumMacrosLoaded = MacrosLoaded.size() - std::count(MacrosLoaded.begin(), MacrosLoaded.end(), - (MacroInfo *)0); + (MacroDirective *)0); unsigned NumSelectorsLoaded = SelectorsLoaded.size() - std::count(SelectorsLoaded.begin(), SelectorsLoaded.end(), @@ -6247,7 +6249,7 @@ IdentifierID ASTReader::getGlobalIdentifierID(ModuleFile &M, unsigned LocalID) { return LocalID + I->second; } -MacroInfo *ASTReader::getMacro(MacroID ID, MacroInfo *Hint) { +MacroDirective *ASTReader::getMacro(MacroID ID, MacroDirective *Hint) { if (ID == 0) return 0; @@ -6979,7 +6981,7 @@ void ASTReader::finishPendingActions() { for (unsigned I = 0; I != PendingMacroIDs.size(); ++I) { // FIXME: std::move here SmallVector<MacroID, 2> GlobalIDs = PendingMacroIDs.begin()[I].second; - MacroInfo *Hint = 0; + MacroDirective *Hint = 0; for (unsigned IDIdx = 0, NumIDs = GlobalIDs.size(); IDIdx != NumIDs; ++IDIdx) { Hint = getMacro(GlobalIDs[IDIdx], Hint); diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 8747bc85122..f33fbc23d8d 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1746,7 +1746,7 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { // emitting each to the PP section. // Construct the list of macro definitions that need to be serialized. - SmallVector<std::pair<const IdentifierInfo *, MacroInfo *>, 2> + SmallVector<std::pair<const IdentifierInfo *, MacroDirective *>, 2> MacrosToEmit; llvm::SmallPtrSet<const IdentifierInfo*, 4> MacroDefinitionsSeen; for (Preprocessor::macro_iterator I = PP.macro_begin(Chain == 0), @@ -1774,19 +1774,19 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { for (unsigned I = 0, N = MacrosToEmit.size(); I != N; ++I) { const IdentifierInfo *Name = MacrosToEmit[I].first; - for (MacroInfo *MI = MacrosToEmit[I].second; MI; - MI = MI->getPreviousDefinition()) { - MacroID ID = getMacroRef(MI); + for (MacroDirective *MD = MacrosToEmit[I].second; MD; + MD = MD->getPrevious()) { + MacroID ID = getMacroRef(MD); if (!ID) continue; // Skip macros from a AST file if we're chaining. - if (Chain && MI->isFromAST() && !MI->hasChangedAfterLoad()) + if (Chain && MD->isImported() && !MD->hasChangedAfterLoad()) continue; if (ID < FirstMacroID) { // This will have been dealt with via an update record. - assert(MacroUpdates.count(MI) > 0 && "Missing macro update"); + assert(MacroUpdates.count(MD) > 0 && "Missing macro update"); continue; } @@ -1802,14 +1802,15 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP, bool IsModule) { } AddIdentifierRef(Name, Record); - addMacroRef(MI, Record); + addMacroRef(MD, Record); + const MacroInfo *MI = MD->getInfo(); Record.push_back(inferSubmoduleIDFromLocation(MI->getDefinitionLoc())); AddSourceLocation(MI->getDefinitionLoc(), Record); AddSourceLocation(MI->getDefinitionEndLoc(), Record); - AddSourceLocation(MI->getUndefLoc(), Record); + AddSourceLocation(MD->getUndefLoc(), Record); Record.push_back(MI->isUsed()); - Record.push_back(MI->isPublic()); - AddSourceLocation(MI->getVisibilityLocation(), Record); + Record.push_back(MD->isPublic()); + AddSourceLocation(MD->getVisibilityLocation(), Record); unsigned Code; if (MI->isObjectLike()) { Code = PP_MACRO_OBJECT_LIKE; @@ -2643,7 +2644,7 @@ class ASTIdentifierTableTrait { /// \brief Determines whether this is an "interesting" identifier /// that needs a full IdentifierInfo structure written into the hash /// table. - bool isInterestingIdentifier(IdentifierInfo *II, MacroInfo *&Macro) { + bool isInterestingIdentifier(IdentifierInfo *II, MacroDirective *&Macro) { if (II->isPoisoned() || II->isExtensionToken() || II->getObjCOrBuiltinID() || @@ -2654,12 +2655,13 @@ class ASTIdentifierTableTrait { return hadMacroDefinition(II, Macro); } - bool hadMacroDefinition(IdentifierInfo *II, MacroInfo *&Macro) { + bool hadMacroDefinition(IdentifierInfo *II, MacroDirective *&Macro) { if (!II->hadMacroDefinition()) return false; - if (Macro || (Macro = PP.getMacroInfoHistory(II))) - return !Macro->isBuiltinMacro() && (!IsModule || Macro->isPublic()); + if (Macro || (Macro = PP.getMacroDirectiveHistory(II))) + return !Macro->getInfo()->isBuiltinMacro() && + (!IsModule || Macro->isPublic()); return false; } @@ -2683,12 +2685,12 @@ public: EmitKeyDataLength(raw_ostream& Out, IdentifierInfo* II, IdentID ID) { unsigned KeyLen = II->getLength() + 1; unsigned DataLen = 4; // 4 bytes for the persistent ID << 1 - MacroInfo *Macro = 0; + MacroDirective *Macro = 0; if (isInterestingIdentifier(II, Macro)) { DataLen += 2; // 2 bytes for builtin ID DataLen += 2; // 2 bytes for flags if (hadMacroDefinition(II, Macro)) { - for (MacroInfo *M = Macro; M; M = M->getPreviousDefinition()) { + for (MacroDirective *M = Macro; M; M = M->getPrevious()) { if (Writer.getMacroRef(M) != 0) DataLen += 4; } @@ -2719,7 +2721,7 @@ public: void EmitData(raw_ostream& Out, IdentifierInfo* II, IdentID ID, unsigned) { - MacroInfo *Macro = 0; + MacroDirective *Macro = 0; if (!isInterestingIdentifier(II, Macro)) { clang::io::Emit32(Out, ID << 1); return; @@ -2740,7 +2742,7 @@ public: if (HadMacroDefinition) { // Write all of the macro IDs associated with this identifier. - for (MacroInfo *M = Macro; M; M = M->getPreviousDefinition()) { + for (MacroDirective *M = Macro; M; M = M->getPrevious()) { if (MacroID ID = Writer.getMacroRef(M)) clang::io::Emit32(Out, ID); } @@ -3943,8 +3945,8 @@ void ASTWriter::AddIdentifierRef(const IdentifierInfo *II, RecordDataImpl &Recor Record.push_back(getIdentifierRef(II)); } -void ASTWriter::addMacroRef(MacroInfo *MI, RecordDataImpl &Record) { - Record.push_back(getMacroRef(MI)); +void ASTWriter::addMacroRef(MacroDirective *MD, RecordDataImpl &Record) { + Record.push_back(getMacroRef(MD)); } IdentID ASTWriter::getIdentifierRef(const IdentifierInfo *II) { @@ -3957,14 +3959,14 @@ IdentID ASTWriter::getIdentifierRef(const IdentifierInfo *II) { return ID; } -MacroID ASTWriter::getMacroRef(MacroInfo *MI) { +MacroID ASTWriter::getMacroRef(MacroDirective *MD) { // Don't emit builtin macros like __LINE__ to the AST file unless they // have been redefined by the header (in which case they are not // isBuiltinMacro). - if (MI == 0 || MI->isBuiltinMacro()) + if (MD == 0 || MD->getInfo()->isBuiltinMacro()) return 0; - MacroID &ID = MacroIDs[MI]; + MacroID &ID = MacroIDs[MD]; if (ID == 0) ID = NextMacroID++; return ID; @@ -4709,9 +4711,9 @@ void ASTWriter::IdentifierRead(IdentID ID, IdentifierInfo *II) { StoredID = ID; } -void ASTWriter::MacroRead(serialization::MacroID ID, MacroInfo *MI) { +void ASTWriter::MacroRead(serialization::MacroID ID, MacroDirective *MD) { // Always keep the highest ID. See \p TypeRead() for more information. - MacroID &StoredID = MacroIDs[MI]; + MacroID &StoredID = MacroIDs[MD]; if (ID > StoredID) StoredID = ID; } @@ -4745,8 +4747,8 @@ void ASTWriter::ModuleRead(serialization::SubmoduleID ID, Module *Mod) { SubmoduleIDs[Mod] = ID; } -void ASTWriter::UndefinedMacro(MacroInfo *MI) { - MacroUpdates[MI].UndefLoc = MI->getUndefLoc(); +void ASTWriter::UndefinedMacro(MacroDirective *MD) { + MacroUpdates[MD].UndefLoc = MD->getUndefLoc(); } void ASTWriter::CompletedTagDefinition(const TagDecl *D) { |