projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
8371c63
)
Teach advanceSrcLoc about tab characters
author
Ian Lynagh
<igloo@earth.li>
Sat, 28 Nov 2009 15:12:04 +0000
(15:12 +0000)
committer
Ian Lynagh
<igloo@earth.li>
Sat, 28 Nov 2009 15:12:04 +0000
(15:12 +0000)
compiler/basicTypes/SrcLoc.lhs
patch
|
blob
|
history
diff --git
a/compiler/basicTypes/SrcLoc.lhs
b/compiler/basicTypes/SrcLoc.lhs
index
20e1bca
..
e213bef
100644
(file)
--- a/
compiler/basicTypes/SrcLoc.lhs
+++ b/
compiler/basicTypes/SrcLoc.lhs
@@
-72,6
+72,8
@@
module SrcLoc (
import Util
import Outputable
import FastString
import Util
import Outputable
import FastString
+
+import Data.Bits
\end{code}
%************************************************************************
\end{code}
%************************************************************************
@@
-131,10
+133,13
@@
srcLocCol :: SrcLoc -> Int
srcLocCol (SrcLoc _ _ c) = c
srcLocCol _other = panic "srcLocCol: unknown col"
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 -> 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}
advanceSrcLoc (SrcLoc f l c) _ = SrcLoc f l (c + 1)
advanceSrcLoc loc _ = loc -- Better than nothing
\end{code}