diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2017-02-02 16:13:10 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2017-02-02 16:13:10 +0000 |
commit | 5b7a09aca40ead4dd0ca607ae21736219c272846 (patch) | |
tree | f70f137e7fe618a5076597e7dc5bec03334cd794 | |
parent | f3e421d6e99eca984cec7ee1c6acfd2d7b23d391 (diff) | |
download | bcm5719-llvm-5b7a09aca40ead4dd0ca607ae21736219c272846.tar.gz bcm5719-llvm-5b7a09aca40ead4dd0ca607ae21736219c272846.zip |
[index] Provide a more general index::generateUSRForMacro() that doesn't depend on having a PreprocessingRecord.
llvm-svn: 293904
-rw-r--r-- | clang/include/clang/Index/USRGeneration.h | 3 | ||||
-rw-r--r-- | clang/lib/Index/USRGeneration.cpp | 15 |
2 files changed, 15 insertions, 3 deletions
diff --git a/clang/include/clang/Index/USRGeneration.h b/clang/include/clang/Index/USRGeneration.h index be89068469c..61f2c9d1ff1 100644 --- a/clang/include/clang/Index/USRGeneration.h +++ b/clang/include/clang/Index/USRGeneration.h @@ -16,6 +16,7 @@ namespace clang { class Decl; class MacroDefinitionRecord; +class SourceLocation; class SourceManager; namespace index { @@ -54,6 +55,8 @@ void generateUSRForObjCProtocol(StringRef Prot, raw_ostream &OS); /// \returns true on error, false on success. bool generateUSRForMacro(const MacroDefinitionRecord *MD, const SourceManager &SM, SmallVectorImpl<char> &Buf); +bool generateUSRForMacro(StringRef MacroName, SourceLocation Loc, + const SourceManager &SM, SmallVectorImpl<char> &Buf); } // namespace index } // namespace clang diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp index 58f61c3c65b..f9ed3c47995 100644 --- a/clang/lib/Index/USRGeneration.cpp +++ b/clang/lib/Index/USRGeneration.cpp @@ -911,21 +911,30 @@ bool clang::index::generateUSRForDecl(const Decl *D, bool clang::index::generateUSRForMacro(const MacroDefinitionRecord *MD, const SourceManager &SM, SmallVectorImpl<char> &Buf) { + if (!MD) + return true; + return generateUSRForMacro(MD->getName()->getName(), MD->getLocation(), + SM, Buf); + +} + +bool clang::index::generateUSRForMacro(StringRef MacroName, SourceLocation Loc, + const SourceManager &SM, + SmallVectorImpl<char> &Buf) { // Don't generate USRs for things with invalid locations. - if (!MD || MD->getLocation().isInvalid()) + if (MacroName.empty() || Loc.isInvalid()) return true; llvm::raw_svector_ostream Out(Buf); // Assume that system headers are sane. Don't put source location // information into the USR if the macro comes from a system header. - SourceLocation Loc = MD->getLocation(); bool ShouldGenerateLocation = !SM.isInSystemHeader(Loc); Out << getUSRSpacePrefix(); if (ShouldGenerateLocation) printLoc(Out, Loc, SM, /*IncludeOffset=*/true); Out << "@macro@"; - Out << MD->getName()->getName(); + Out << MacroName; return false; } |