diff options
author | Sam McCall <sam.mccall@gmail.com> | 2019-12-03 16:59:52 +0100 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2019-12-03 17:53:43 +0100 |
commit | c9c714c7054d555398c767cb39d7d97600b3d9d1 (patch) | |
tree | 20ace7c0e5b924d380ec1f639bd531150a5f5735 /clang/lib/Tooling/Syntax/Tokens.cpp | |
parent | 5595249e48ef83bae5f2e61c0190332534902051 (diff) | |
download | bcm5719-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.cpp | 16 |
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); |