Skip to content

Monotonic locations (#17632)

Vladislav Zavialov requested to merge wip/monotonic-loc into master

When GHC is parsing a file generated by a tool, e.g. by the C preprocessor, the tool may insert #line pragmas to adjust the locations reported to the user.

As the result, the locations recorded in RealSrcLoc are not monotonic. Elements that appear later in the StringBuffer are not guaranteed to have a higher line/column number.

In fact, there are no guarantees whatsoever, as #line pragmas can arbitrarily modify locations. This lack of guarantees makes ideas such as #17544 (closed) infeasible.

This patch adds an additional bit of information to every SrcLoc:

newtype BufPos = BufPos { bufPos :: Int }

A BufPos represents the location in the StringBuffer, unaffected by any pragmas.

Edited by Vladislav Zavialov

Merge request reports