summaryrefslogtreecommitdiffstats
path: root/clang/lib/Tooling/Syntax/Tokens.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2019-12-03 16:59:52 +0100
committerSam McCall <sam.mccall@gmail.com>2019-12-03 17:53:43 +0100
commitc9c714c7054d555398c767cb39d7d97600b3d9d1 (patch)
tree20ace7c0e5b924d380ec1f639bd531150a5f5735 /clang/lib/Tooling/Syntax/Tokens.cpp
parent5595249e48ef83bae5f2e61c0190332534902051 (diff)
downloadbcm5719-llvm-c9c714c7054d555398c767cb39d7d97600b3d9d1.tar.gz
bcm5719-llvm-c9c714c7054d555398c767cb39d7d97600b3d9d1.zip
Reland [clangd] Rethink how SelectionTree deals with macros and #includes.
This reverts commit 905b002c139f039a32ab9bf1fad63d745d12423f. Avoid tricky (and invalid) comparator for std::set.
Diffstat (limited to 'clang/lib/Tooling/Syntax/Tokens.cpp')
-rw-r--r--clang/lib/Tooling/Syntax/Tokens.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp
index a2c3bc137d6..5941507e086 100644
--- a/clang/lib/Tooling/Syntax/Tokens.cpp
+++ b/clang/lib/Tooling/Syntax/Tokens.cpp
@@ -119,6 +119,22 @@ llvm::StringRef FileRange::text(const SourceManager &SM) const {
return Text.substr(Begin, length());
}
+llvm::ArrayRef<syntax::Token> TokenBuffer::expandedTokens(SourceRange R) const {
+ if (R.isInvalid())
+ return {};
+ const Token *Begin =
+ llvm::partition_point(expandedTokens(), [&](const syntax::Token &T) {
+ return SourceMgr->isBeforeInTranslationUnit(T.location(), R.getBegin());
+ });
+ const Token *End =
+ llvm::partition_point(expandedTokens(), [&](const syntax::Token &T) {
+ return !SourceMgr->isBeforeInTranslationUnit(R.getEnd(), T.location());
+ });
+ if (Begin > End)
+ return {};
+ return {Begin, End};
+}
+
std::pair<const syntax::Token *, const TokenBuffer::Mapping *>
TokenBuffer::spelledForExpandedToken(const syntax::Token *Expanded) const {
assert(Expanded);
OpenPOWER on IntegriCloud