X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FbasicTypes%2FSrcLoc.lhs;h=e213befc839f045bb0fe872005444a7c81e2753e;hb=59300a7161f44b3a2afe381a6ccd914043a32c4f;hp=02c3e8af3d230dac38bd2ec1e9d0623837506376;hpb=4a84e214da8a2d87d2fd819d59fb06115e98014c;p=ghc-hetmet.git diff --git a/compiler/basicTypes/SrcLoc.lhs b/compiler/basicTypes/SrcLoc.lhs index 02c3e8a..e213bef 100644 --- a/compiler/basicTypes/SrcLoc.lhs +++ b/compiler/basicTypes/SrcLoc.lhs @@ -72,6 +72,8 @@ module SrcLoc ( import Util import Outputable import FastString + +import Data.Bits \end{code} %************************************************************************ @@ -87,10 +89,7 @@ this is the obvious stuff: data SrcLoc = SrcLoc FastString -- A precise location (file name) {-# UNPACK #-} !Int -- line number, begins at 1 - {-# UNPACK #-} !Int -- column number, begins at 0 - -- Don't ask me why lines start at 1 and columns start at - -- zero. That's just the way it is, so there. --SDM - + {-# UNPACK #-} !Int -- column number, begins at 1 | UnhelpfulLoc FastString -- Just a general indication \end{code} @@ -134,12 +133,15 @@ 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) 0 +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 +advanceSrcLoc loc _ = loc -- Better than nothing \end{code} %************************************************************************