summaryrefslogtreecommitdiff
path: root/compiler/parser
diff options
context:
space:
mode:
authorPhil Ruffwind <rf@rufflewind.com>2017-03-13 15:18:22 -0400
committerBen Gamari <ben@smart-cactus.org>2017-03-13 15:18:23 -0400
commite61b4a4169da17cd7b77f9dc09e3627eff1ff559 (patch)
tree5196491cb46897e31c37a41977216ed5af706c24 /compiler/parser
parent70274b4f8003fde0fa3e4094a10dfae880579786 (diff)
downloadhaskell-e61b4a4169da17cd7b77f9dc09e3627eff1ff559.tar.gz
Add COLUMN pragma
Test Plan: validate Reviewers: bgamari, austin Reviewed By: bgamari Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3313
Diffstat (limited to 'compiler/parser')
-rw-r--r--compiler/parser/Lexer.x18
1 files changed, 17 insertions, 1 deletions
diff --git a/compiler/parser/Lexer.x b/compiler/parser/Lexer.x
index 6f91f44241..3d6fa1609c 100644
--- a/compiler/parser/Lexer.x
+++ b/compiler/parser/Lexer.x
@@ -318,6 +318,10 @@ $tab { warnTab }
-- NOTE: accept -} at the end of a LINE pragma, for compatibility
-- with older versions of GHC which generated these.
+-- Haskell-style column pragmas, of the form
+-- {-# COLUMN <column> #-}
+<column_prag> @decimal $whitechar* "#-}" { setColumn }
+
<0,option_prags> {
"{-#" $whitechar* $pragmachar+
$whitechar+ $pragmachar+ / { known_pragma twoWordPrags }
@@ -1390,6 +1394,17 @@ setLine code span buf len = do
pushLexState code
lexToken
+setColumn :: Action
+setColumn span buf len = do
+ let column =
+ case reads (lexemeToString buf len) of
+ [(column, _)] -> column
+ _ -> error "setColumn: expected integer" -- shouldn't happen
+ setSrcLoc (mkRealSrcLoc (srcSpanFile span) (srcSpanEndLine span)
+ (fromIntegral (column :: Integer)))
+ _ <- popLexState
+ lexToken
+
setFile :: Int -> Action
setFile code span buf len = do
let file = mkFastString (go (lexemeToString (stepOn buf) (len-2)))
@@ -2751,7 +2766,8 @@ oneWordPrags = Map.fromList [
("overlapping", strtoken (\s -> IToverlapping_prag (SourceText s))),
("incoherent", strtoken (\s -> ITincoherent_prag (SourceText s))),
("ctype", strtoken (\s -> ITctype (SourceText s))),
- ("complete", strtoken (\s -> ITcomplete_prag (SourceText s)))
+ ("complete", strtoken (\s -> ITcomplete_prag (SourceText s))),
+ ("column", begin column_prag)
]
twoWordPrags = Map.fromList([