aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/Sema.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
-rw-r--r--clang/lib/Sema/Sema.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp
index 925f2d4..370ade6 100644
--- a/clang/lib/Sema/Sema.cpp
+++ b/clang/lib/Sema/Sema.cpp
@@ -84,6 +84,28 @@ SourceLocation Sema::getLocForEndOfToken(SourceLocation Loc, unsigned Offset) {
return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
}
+SourceRange
+Sema::getRangeForNextToken(SourceLocation Loc, bool IncludeMacros,
+ bool IncludeComments,
+ std::optional<tok::TokenKind> ExpectedToken) {
+ if (!Loc.isValid())
+ return SourceRange();
+ std::optional<Token> NextToken =
+ Lexer::findNextToken(Loc, SourceMgr, LangOpts, IncludeComments);
+ if (!NextToken)
+ return SourceRange();
+ if (ExpectedToken && NextToken->getKind() != *ExpectedToken)
+ return SourceRange();
+ SourceLocation TokenStart = NextToken->getLocation();
+ SourceLocation TokenEnd = NextToken->getLastLoc();
+ if (!TokenStart.isValid() || !TokenEnd.isValid())
+ return SourceRange();
+ if (!IncludeMacros && (TokenStart.isMacroID() || TokenEnd.isMacroID()))
+ return SourceRange();
+
+ return SourceRange(TokenStart, TokenEnd);
+}
+
ModuleLoader &Sema::getModuleLoader() const { return PP.getModuleLoader(); }
DarwinSDKInfo *