summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling/Syntax/Tokens.cpp
diff options
context:
space:
mode:
authorJohan Vikstrom <jvikstrom@google.com>2019-08-20 13:34:01 +0000
committerJohan Vikstrom <jvikstrom@google.com>2019-08-20 13:34:01 +0000
commit6687fde07aeaea958d9f9b385949dbde769b20f7 (patch)
tree8433952735f0397550eda19de0449f19861e37f4 /clang/lib/Tooling/Syntax/Tokens.cpp
parentcec028fc14dda68c80e489b861adcf28944151f6 (diff)
downloadbcm5719-llvm-6687fde07aeaea958d9f9b385949dbde769b20f7.tar.gz
bcm5719-llvm-6687fde07aeaea958d9f9b385949dbde769b20f7.zip
[Syntax] Added function to get macro expansion tokens to TokenBuffer.
Summary: Returns the first token in every mapping where the token is an identifier. This API is required to be able to highlight macro expansions in clangd. Reviewers: hokein, ilya-biryukov Subscribers: kadircet, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D66470 llvm-svn: 369385
Diffstat (limited to 'clang/lib/Tooling/Syntax/Tokens.cpp')
-rw-r--r--clang/lib/Tooling/Syntax/Tokens.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp
index 3852e71c37f..a2c3bc137d6 100644
--- a/clang/lib/Tooling/Syntax/Tokens.cpp
+++ b/clang/lib/Tooling/Syntax/Tokens.cpp
@@ -232,6 +232,21 @@ TokenBuffer::expansionStartingAt(const syntax::Token *Spelled) const {
return E;
}
+std::vector<const syntax::Token *>
+TokenBuffer::macroExpansions(FileID FID) const {
+ auto FileIt = Files.find(FID);
+ assert(FileIt != Files.end() && "file not tracked by token buffer");
+ auto &File = FileIt->second;
+ std::vector<const syntax::Token *> Expansions;
+ auto &Spelled = File.SpelledTokens;
+ for (auto Mapping : File.Mappings) {
+ const syntax::Token *Token = &Spelled[Mapping.BeginSpelled];
+ if (Token->kind() == tok::TokenKind::identifier)
+ Expansions.push_back(Token);
+ }
+ return Expansions;
+}
+
std::vector<syntax::Token> syntax::tokenize(FileID FID, const SourceManager &SM,
const LangOptions &LO) {
std::vector<syntax::Token> Tokens;
OpenPOWER on IntegriCloud