kadircet created this revision. Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay, ilya-biryukov. Herald added a project: clang.
Depends on D79879 <https://reviews.llvm.org/D79879>. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D79881 Files: clang-tools-extra/clangd/Hover.cpp clang-tools-extra/clangd/SourceCode.cpp clang-tools-extra/clangd/SourceCode.h clang-tools-extra/clangd/XRefs.cpp clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp Index: clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp +++ clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp @@ -92,8 +92,8 @@ const auto *Id = syntax::spelledIdentifierTouching(*Loc, AST.getTokens()); ASSERT_TRUE(Id); auto Macro = locateMacroAt(*Id, PP); - assert(Macro && Macro->Info); - auto SID = getSymbolID(Macro->Name, Macro->Info->getDefinitionLoc(), SM); + assert(Macro); + auto SID = getSymbolID(Macro->Name, Macro->DefRange.getBegin(), SM); assert(SID); EXPECT_THAT(ExpectedRefs, Index: clang-tools-extra/clangd/XRefs.cpp =================================================================== --- clang-tools-extra/clangd/XRefs.cpp +++ clang-tools-extra/clangd/XRefs.cpp @@ -206,8 +206,8 @@ locateMacroReferent(const syntax::Token &TouchedIdentifier, ParsedAST &AST, llvm::StringRef MainFilePath) { if (auto M = locateMacroAt(TouchedIdentifier, AST.getPreprocessor())) { - if (auto Loc = makeLocation(AST.getASTContext(), - M->Info->getDefinitionLoc(), MainFilePath)) { + if (auto Loc = makeLocation(AST.getASTContext(), M->DefRange.getBegin(), + MainFilePath)) { LocatedSymbol Macro; Macro.Name = std::string(M->Name); Macro.PreferredDeclaration = *Loc; @@ -753,10 +753,10 @@ } RefsRequest Req; - if (Macro && Macro->Info) { + if (Macro) { // Handle references to macro. if (auto MacroSID = - getSymbolID(Macro->Name, Macro->Info->getDefinitionLoc(), SM)) { + getSymbolID(Macro->Name, Macro->DefRange.getBegin(), SM)) { // Collect macro references from main file. const auto &IDToRefs = AST.getMacros().MacroRefs; auto Refs = IDToRefs.find(*MacroSID); @@ -875,8 +875,8 @@ SymbolDetails NewMacro; NewMacro.name = std::string(M->Name); llvm::SmallString<32> USR; - if (!index::generateUSRForMacro(NewMacro.name, M->Info->getDefinitionLoc(), - SM, USR)) { + if (!index::generateUSRForMacro(NewMacro.name, M->DefRange.getBegin(), SM, + USR)) { NewMacro.USR = std::string(USR.str()); NewMacro.ID = SymbolID(NewMacro.USR); } Index: clang-tools-extra/clangd/SourceCode.h =================================================================== --- clang-tools-extra/clangd/SourceCode.h +++ clang-tools-extra/clangd/SourceCode.h @@ -291,7 +291,7 @@ struct DefinedMacro { llvm::StringRef Name; - const MacroInfo *Info; + CharSourceRange DefRange; }; /// Gets the macro referenced by \p SpelledTok. It must be a spelled token /// aligned to the beginning of an identifier. Index: clang-tools-extra/clangd/SourceCode.cpp =================================================================== --- clang-tools-extra/clangd/SourceCode.cpp +++ clang-tools-extra/clangd/SourceCode.cpp @@ -961,7 +961,11 @@ Loc = Loc.getLocWithOffset(-1); MacroDefinition MacroDef = PP.getMacroDefinitionAtLoc(IdentifierInfo, Loc); if (auto *MI = MacroDef.getMacroInfo()) - return DefinedMacro{IdentifierInfo->getName(), MI}; + return DefinedMacro{ + IdentifierInfo->getName(), + // MacroInfo::getDefinitionEndLoc returns the location for last token. + CharSourceRange::getTokenRange(MI->getDefinitionLoc(), + MI->getDefinitionEndLoc())}; return None; } Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -553,8 +553,8 @@ // FIXME: Populate parameters // Try to get the full definition, not just the name - SourceLocation StartLoc = Macro.Info->getDefinitionLoc(); - SourceLocation EndLoc = Macro.Info->getDefinitionEndLoc(); + SourceLocation StartLoc = Macro.DefRange.getBegin(); + SourceLocation EndLoc = Macro.DefRange.getEnd(); if (EndLoc.isValid()) { EndLoc = Lexer::getLocForEndOfToken(EndLoc, 0, SM, AST.getLangOpts()); bool Invalid;
Index: clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp +++ clang-tools-extra/clangd/unittests/CollectMacrosTests.cpp @@ -92,8 +92,8 @@ const auto *Id = syntax::spelledIdentifierTouching(*Loc, AST.getTokens()); ASSERT_TRUE(Id); auto Macro = locateMacroAt(*Id, PP); - assert(Macro && Macro->Info); - auto SID = getSymbolID(Macro->Name, Macro->Info->getDefinitionLoc(), SM); + assert(Macro); + auto SID = getSymbolID(Macro->Name, Macro->DefRange.getBegin(), SM); assert(SID); EXPECT_THAT(ExpectedRefs, Index: clang-tools-extra/clangd/XRefs.cpp =================================================================== --- clang-tools-extra/clangd/XRefs.cpp +++ clang-tools-extra/clangd/XRefs.cpp @@ -206,8 +206,8 @@ locateMacroReferent(const syntax::Token &TouchedIdentifier, ParsedAST &AST, llvm::StringRef MainFilePath) { if (auto M = locateMacroAt(TouchedIdentifier, AST.getPreprocessor())) { - if (auto Loc = makeLocation(AST.getASTContext(), - M->Info->getDefinitionLoc(), MainFilePath)) { + if (auto Loc = makeLocation(AST.getASTContext(), M->DefRange.getBegin(), + MainFilePath)) { LocatedSymbol Macro; Macro.Name = std::string(M->Name); Macro.PreferredDeclaration = *Loc; @@ -753,10 +753,10 @@ } RefsRequest Req; - if (Macro && Macro->Info) { + if (Macro) { // Handle references to macro. if (auto MacroSID = - getSymbolID(Macro->Name, Macro->Info->getDefinitionLoc(), SM)) { + getSymbolID(Macro->Name, Macro->DefRange.getBegin(), SM)) { // Collect macro references from main file. const auto &IDToRefs = AST.getMacros().MacroRefs; auto Refs = IDToRefs.find(*MacroSID); @@ -875,8 +875,8 @@ SymbolDetails NewMacro; NewMacro.name = std::string(M->Name); llvm::SmallString<32> USR; - if (!index::generateUSRForMacro(NewMacro.name, M->Info->getDefinitionLoc(), - SM, USR)) { + if (!index::generateUSRForMacro(NewMacro.name, M->DefRange.getBegin(), SM, + USR)) { NewMacro.USR = std::string(USR.str()); NewMacro.ID = SymbolID(NewMacro.USR); } Index: clang-tools-extra/clangd/SourceCode.h =================================================================== --- clang-tools-extra/clangd/SourceCode.h +++ clang-tools-extra/clangd/SourceCode.h @@ -291,7 +291,7 @@ struct DefinedMacro { llvm::StringRef Name; - const MacroInfo *Info; + CharSourceRange DefRange; }; /// Gets the macro referenced by \p SpelledTok. It must be a spelled token /// aligned to the beginning of an identifier. Index: clang-tools-extra/clangd/SourceCode.cpp =================================================================== --- clang-tools-extra/clangd/SourceCode.cpp +++ clang-tools-extra/clangd/SourceCode.cpp @@ -961,7 +961,11 @@ Loc = Loc.getLocWithOffset(-1); MacroDefinition MacroDef = PP.getMacroDefinitionAtLoc(IdentifierInfo, Loc); if (auto *MI = MacroDef.getMacroInfo()) - return DefinedMacro{IdentifierInfo->getName(), MI}; + return DefinedMacro{ + IdentifierInfo->getName(), + // MacroInfo::getDefinitionEndLoc returns the location for last token. + CharSourceRange::getTokenRange(MI->getDefinitionLoc(), + MI->getDefinitionEndLoc())}; return None; } Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -553,8 +553,8 @@ // FIXME: Populate parameters // Try to get the full definition, not just the name - SourceLocation StartLoc = Macro.Info->getDefinitionLoc(); - SourceLocation EndLoc = Macro.Info->getDefinitionEndLoc(); + SourceLocation StartLoc = Macro.DefRange.getBegin(); + SourceLocation EndLoc = Macro.DefRange.getEnd(); if (EndLoc.isValid()) { EndLoc = Lexer::getLocForEndOfToken(EndLoc, 0, SM, AST.getLangOpts()); bool Invalid;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits