I’m trying to solve SR-4715, which is about improving the fixit for the
diagnostic about out-of-order arguments. Currently I’m stuck with an issue
where I can’t figure out the end of an argument expression in the TupleExpr
that I have.
It would seem that this should work:
auto tuple = cast<TupleExpr>(ArgExpr);
auto end = tuple->getElement(argIdx)->getEndLoc();
but I have one unit test that’s failing because the range of the argument is
incorrect. The only difference I can see in that test, compared to the similar
ones that are passing is that the argument is a number with more than one
digit. Looking at NumberLiteralExpr (the superclass of IntegerLiteralExpr) I
can see that getSourceRange() only returns the DigitsLoc source location, not a
range with a length.
If I instead get the CharSourceRange for that range, and get the End source
location from that, it get’s me the location that I’m after:
auto end = Lexer::getCharSourceRangeFromSourceRange(
TC.Context.SourceMgr,
tuple->getElement(argIdx)->getSourceRange()
).getEnd();
Is this the correct way to get the location of the end of a multi digit
NumberLiteralExpr or should the first approach have worked?
Perhaps I don’t understand the distinction between SourceRange and
CharSourceRange. Is SourceRange the location of the token (where Start and End
would be the same) and CharSourceRange the location of the characters?
Kind regards,
David
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev