Commit f41e3ea7 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Teach advanceSrcLoc about tab characters

parent 8371c638
......@@ -72,6 +72,8 @@ module SrcLoc (
import Util
import Outputable
import FastString
import Data.Bits
\end{code}
%************************************************************************
......@@ -131,10 +133,13 @@ srcLocCol :: SrcLoc -> Int
srcLocCol (SrcLoc _ _ c) = c
srcLocCol _other = panic "srcLocCol: unknown col"
-- | Move the 'SrcLoc' down by one line if the character is a newline
-- and across by one character in any other case
-- | Move the 'SrcLoc' down by one line if the character is a newline,
-- to the next 8-char tabstop if it is a tab, and across by one
-- character in any other case
advanceSrcLoc :: SrcLoc -> Char -> SrcLoc
advanceSrcLoc (SrcLoc f l _) '\n' = SrcLoc f (l + 1) 1
advanceSrcLoc (SrcLoc f l c) '\t' = SrcLoc f l ((((c `shiftR` 3) + 1)
`shiftL` 3) + 1)
advanceSrcLoc (SrcLoc f l c) _ = SrcLoc f l (c + 1)
advanceSrcLoc loc _ = loc -- Better than nothing
\end{code}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment