================
@@ -163,6 +164,66 @@ llvm::Expected<SelectionRange> getSemanticRanges(ParsedAST
&AST, Position Pos) {
return std::move(Head);
}
+class PragmaRegionFinder {
+ // Record the token range of a region:
+ //
+ // #pragma region [[name
+ // ...
+ // ]]#pragma region
+ std::vector<Token::Range> &Ranges;
+ const TokenStream &Code;
+ // Stack of starting token (the name of the region) indices for nested
#pragma
+ // region.
+ std::vector<unsigned> Stack;
+
+public:
+ PragmaRegionFinder(std::vector<Token::Range> &Ranges, const TokenStream
&Code)
+ : Ranges(Ranges), Code(Code) {}
+
+ void walk(const DirectiveTree &T) {
+ for (const auto &C : T.Chunks)
+ std::visit(*this, C);
+ }
+
+ void operator()(const DirectiveTree::Code &C) {}
+
+ void operator()(const DirectiveTree::Directive &D) {
+ // Get the tokens that make up this directive.
+ auto Tokens = Code.tokens(D.Tokens);
+ if (Tokens.empty())
+ return;
+ const Token &HashToken = Tokens.front();
+ assert(HashToken.Kind == tok::hash);
+ const Token &Pragma = HashToken.nextNC();
+ if (Pragma.text() != "pragma")
+ return;
+ const Token &Value = Pragma.nextNC();
----------------
HighCommander4 wrote:
If there can be a comment between `pragma` and `region`...
https://github.com/llvm/llvm-project/pull/168177
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits