summaryrefslogtreecommitdiff
path: root/compiler/main
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/main')
-rw-r--r--compiler/main/DynFlags.hs2
-rw-r--r--compiler/main/ErrUtils.lhs29
2 files changed, 21 insertions, 10 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 0c493863b4..0034464eba 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -1536,7 +1536,7 @@ printInfoForUser = printSevForUser SevInfo
printSevForUser :: Severity -> DynFlags -> PrintUnqualified -> SDoc -> IO ()
printSevForUser sev dflags unqual doc
- = log_action dflags dflags sev noSrcSpan (mkUserStyle unqual AllTheWay) doc
+ = log_action dflags dflags sev noSrcSpan (mkUserStyle unqual AllTheWay (useUnicodeSyntax dflags)) doc
{-
Note [Verbosity levels]
diff --git a/compiler/main/ErrUtils.lhs b/compiler/main/ErrUtils.lhs
index 02f731d3c2..40c16698bf 100644
--- a/compiler/main/ErrUtils.lhs
+++ b/compiler/main/ErrUtils.lhs
@@ -65,7 +65,7 @@ type ErrorMessages = Bag ErrMsg
data ErrMsg = ErrMsg {
errMsgSpan :: SrcSpan,
- errMsgContext :: PrintUnqualified,
+ errMsgContext :: ErrMsgContext,
errMsgShortDoc :: MsgDoc, -- errMsgShort* should always
errMsgShortString :: String, -- contain the same text
errMsgExtraInfo :: MsgDoc,
@@ -73,6 +73,16 @@ data ErrMsg = ErrMsg {
}
-- The SrcSpan is used for sorting errors into line-number order
+-- Some information about how to print stuff needs to be taken from the context
+-- of the error message location. This includes:
+-- * How to qualifiy names (as that depends on what’s in scope)
+-- * Whether to use UnicodeSyntax (as that depends on whether UnicodeSyntax is enabled)
+data ErrMsgContext = ErrMsgContext {
+ errMsgCUnqual :: PrintUnqualified,
+ errMsgCUnicodeSyntax :: Bool
+ }
+
+
type WarnMsg = ErrMsg
type MsgDoc = SDoc
@@ -116,7 +126,8 @@ makeIntoWarning err = err { errMsgSeverity = SevWarning }
mk_err_msg :: DynFlags -> Severity -> SrcSpan -> PrintUnqualified -> MsgDoc -> SDoc -> ErrMsg
mk_err_msg dflags sev locn print_unqual msg extra
- = ErrMsg { errMsgSpan = locn, errMsgContext = print_unqual
+ = ErrMsg { errMsgSpan = locn
+ , errMsgContext = ErrMsgContext print_unqual (useUnicodeSyntax dflags)
, errMsgShortDoc = msg , errMsgShortString = showSDoc dflags msg
, errMsgExtraInfo = extra
, errMsgSeverity = sev }
@@ -156,11 +167,11 @@ printBagOfErrors dflags bag_of_errors
pprErrMsgBag :: Bag ErrMsg -> [SDoc]
pprErrMsgBag bag
= [ sdocWithDynFlags $ \dflags ->
- let style = mkErrStyle dflags unqual
+ let style = mkErrStyle dflags unqual useUnicode
in withPprStyle style (d $$ e)
| ErrMsg { errMsgShortDoc = d,
errMsgExtraInfo = e,
- errMsgContext = unqual } <- sortMsgBag bag ]
+ errMsgContext = ErrMsgContext unqual useUnicode} <- sortMsgBag bag ]
pprErrMsgBagWithLoc :: Bag ErrMsg -> [SDoc]
pprErrMsgBagWithLoc bag = [ pprLocErrMsg item | item <- sortMsgBag bag ]
@@ -170,19 +181,19 @@ pprLocErrMsg (ErrMsg { errMsgSpan = s
, errMsgShortDoc = d
, errMsgExtraInfo = e
, errMsgSeverity = sev
- , errMsgContext = unqual })
+ , errMsgContext = ErrMsgContext unqual useUnicode })
= sdocWithDynFlags $ \dflags ->
- withPprStyle (mkErrStyle dflags unqual) (mkLocMessage sev s (d $$ e))
+ withPprStyle (mkErrStyle dflags unqual useUnicode) (mkLocMessage sev s (d $$ e))
printMsgBag :: DynFlags -> Bag ErrMsg -> IO ()
printMsgBag dflags bag
- = sequence_ [ let style = mkErrStyle dflags unqual
+ = sequence_ [ let style = mkErrStyle dflags unqual useUnicode
in log_action dflags dflags sev s style (d $$ e)
| ErrMsg { errMsgSpan = s,
errMsgShortDoc = d,
errMsgSeverity = sev,
errMsgExtraInfo = e,
- errMsgContext = unqual } <- sortMsgBag bag ]
+ errMsgContext = ErrMsgContext unqual useUnicode } <- sortMsgBag bag ]
sortMsgBag :: Bag ErrMsg -> [ErrMsg]
sortMsgBag bag = sortBy (comparing errMsgSpan) $ bagToList bag
@@ -322,7 +333,7 @@ putMsgWith :: DynFlags -> PrintUnqualified -> MsgDoc -> IO ()
putMsgWith dflags print_unqual msg
= log_action dflags dflags SevInfo noSrcSpan sty msg
where
- sty = mkUserStyle print_unqual AllTheWay
+ sty = mkUserStyle print_unqual AllTheWay (useUnicodeSyntax dflags)
errorMsg :: DynFlags -> MsgDoc -> IO ()
errorMsg dflags msg =