diff options
author | Phil Ruffwind <rf@rufflewind.com> | 2017-03-13 15:18:22 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-03-13 15:18:23 -0400 |
commit | e61b4a4169da17cd7b77f9dc09e3627eff1ff559 (patch) | |
tree | 5196491cb46897e31c37a41977216ed5af706c24 /compiler/parser | |
parent | 70274b4f8003fde0fa3e4094a10dfae880579786 (diff) | |
download | haskell-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.x | 18 |
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([ |