D) Printing Ranges. This requires:
*) Printing accurate column information. Similar to (B) above.
*) A location(s) -> source strings interface and machinery. Similar
to (A.3) above.
Ranges also require some way to get the end of a token (in addition to
its beginning). For example, a range for:
X + some_long\
_ident??/
ifier
The range should start at "X" and end at "r". This is just a location
like any other, but requires passing down like the begin loc. You
might instead decide to do some fuzzy matching or something, but clang
at least gets this right. This is important for other clients of the
loc info, e.g. refactoring clients.
-Chris