================
@@ -178,6 +178,56 @@ RangeSelector transformer::encloseNodes(std::string
BeginID,
return transformer::enclose(node(std::move(BeginID)),
node(std::move(EndID)));
}
+RangeSelector transformer::merge(RangeSelector First, RangeSelector Second) {
+ return [First,
+ Second](const MatchResult &Result) -> Expected<CharSourceRange> {
+ Expected<CharSourceRange> FirstRange = First(Result);
+ if (!FirstRange)
+ return FirstRange.takeError();
+ Expected<CharSourceRange> SecondRange = Second(Result);
+ if (!SecondRange)
+ return SecondRange.takeError();
+ // Result begin loc is the minimum of the begin locs of the two ranges.
+ SourceLocation B = FirstRange->getBegin() < SecondRange->getBegin()
+ ? FirstRange->getBegin()
+ : SecondRange->getBegin();
+ if (FirstRange->isTokenRange() && SecondRange->isTokenRange()) {
+ // Both ranges are token ranges. Just take the maximum of their end locs.
+ SourceLocation E = FirstRange->getEnd() > SecondRange->getEnd()
+ ? FirstRange->getEnd()
+ : SecondRange->getEnd();
+ return CharSourceRange::getTokenRange(B, E);
+ }
+ SourceLocation FirstE = FirstRange->getEnd();
+ if (FirstRange->isTokenRange()) {
+ // The end of the first range is a token. Need to resolve the token to a
+ // char range.
+ CharSourceRange EndRange = Lexer::makeFileCharRange(
----------------
yuhaouy wrote:
I think so. Was using `makeFileCharRange` because `after` at line 120 uses it.
Changed to use `getLocForEndOfToken `.
https://github.com/llvm/llvm-project/pull/169560
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits