123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- {-# LANGUAGE CPP #-}
- module Gap (
- Gap.ClsInst
- , mkTarget
- , showDocForUser
- , showDoc
- , styleDoc
- , setLogAction
- , supportedExtensions
- , getSrcSpan
- , getSrcFile
- , renderMsg
- , setCtx
- , fOptions
- , toStringBuffer
- , liftIO
- , showSeverityCaption
- #if __GLASGOW_HASKELL__ >= 702
- #else
- , module Pretty
- #endif
- ) where
- import Control.Applicative hiding (empty)
- import Control.Monad
- import Data.Time.Clock
- import DynFlags
- import ErrUtils
- import FastString
- import GHC
- import GHCChoice
- import Outputable
- import StringBuffer
- import qualified InstEnv
- import qualified Pretty
- import qualified StringBuffer as SB
- #if __GLASGOW_HASKELL__ >= 702
- import CoreMonad (liftIO)
- #else
- import HscTypes (liftIO)
- import Pretty
- #endif
- #if __GLASGOW_HASKELL__ < 706
- import Control.Arrow
- import Data.Convertible
- #endif
- {-
- pretty :: Outputable a => a -> String
- pretty = showSDocForUser neverQualify . ppr
- debug :: Outputable a => a -> b -> b
- debug x v = trace (pretty x) v
- -}
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- --
- #if __GLASGOW_HASKELL__ >= 706
- type ClsInst = InstEnv.ClsInst
- #else
- type ClsInst = InstEnv.Instance
- #endif
- mkTarget :: TargetId -> Bool -> Maybe (SB.StringBuffer, UTCTime) -> Target
- #if __GLASGOW_HASKELL__ >= 706
- mkTarget = Target
- #else
- mkTarget tid allowObjCode = Target tid allowObjCode . (fmap . second) convert
- #endif
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- showDocForUser :: PrintUnqualified -> SDoc -> String
- #if __GLASGOW_HASKELL__ >= 706
- showDocForUser = showSDocForUser tracingDynFlags
- #else
- showDocForUser = showSDocForUser
- #endif
- showDoc :: SDoc -> String
- #if __GLASGOW_HASKELL__ >= 706
- showDoc = showSDoc tracingDynFlags
- #else
- showDoc = showSDoc
- #endif
- styleDoc :: PprStyle -> SDoc -> Pretty.Doc
- #if __GLASGOW_HASKELL__ >= 706
- styleDoc = withPprStyleDoc tracingDynFlags
- #else
- styleDoc = withPprStyleDoc
- #endif
- setLogAction :: DynFlags
- -> (DynFlags -> Severity -> SrcSpan -> PprStyle -> SDoc -> IO ())
- -> DynFlags
- setLogAction df f =
- #if __GLASGOW_HASKELL__ >= 706
- df { log_action = f }
- #else
- df { log_action = f df }
- #endif
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- supportedExtensions :: [String]
- #if __GLASGOW_HASKELL__ >= 700
- supportedExtensions = supportedLanguagesAndExtensions
- #else
- supportedExtensions = supportedLanguages
- #endif
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- getSrcSpan :: SrcSpan -> Maybe (Int,Int,Int,Int)
- #if __GLASGOW_HASKELL__ >= 702
- getSrcSpan (RealSrcSpan spn)
- #else
- getSrcSpan spn | isGoodSrcSpan spn
- #endif
- = Just (srcSpanStartLine spn
- , srcSpanStartCol spn
- , srcSpanEndLine spn
- , srcSpanEndCol spn)
- getSrcSpan _ = Nothing
- getSrcFile :: SrcSpan -> Maybe String
- #if __GLASGOW_HASKELL__ >= 702
- getSrcFile (RealSrcSpan spn) = Just . unpackFS . srcSpanFile $ spn
- #else
- getSrcFile spn | isGoodSrcSpan spn = Just . unpackFS . srcSpanFile $ spn
- #endif
- getSrcFile _ = Nothing
- ----------------------------------------------------------------
- renderMsg :: SDoc -> PprStyle -> String
- #if __GLASGOW_HASKELL__ >= 706
- renderMsg d stl = renderWithStyle tracingDynFlags d stl
- #elif __GLASGOW_HASKELL__ >= 702
- renderMsg d stl = renderWithStyle d stl
- #else
- renderMsg d stl = Pretty.showDocWith PageMode $ d stl
- #endif
- ----------------------------------------------------------------
- toStringBuffer :: [String] -> Ghc StringBuffer
- #if __GLASGOW_HASKELL__ >= 702
- toStringBuffer = return . stringToStringBuffer . unlines
- #else
- toStringBuffer = liftIO . stringToStringBuffer . unlines
- #endif
- ----------------------------------------------------------------
- fOptions :: [String]
- #if __GLASGOW_HASKELL__ >= 704
- fOptions = [option | (option,_,_) <- fFlags]
- ++ [option | (option,_,_) <- fWarningFlags]
- ++ [option | (option,_,_) <- fLangFlags]
- #elif __GLASGOW_HASKELL__ == 702
- fOptions = [option | (option,_,_,_) <- fFlags]
- #else
- fOptions = [option | (option,_,_) <- fFlags]
- #endif
- ----------------------------------------------------------------
- ----------------------------------------------------------------
- setCtx :: [ModSummary] -> Ghc Bool
- #if __GLASGOW_HASKELL__ >= 704
- setCtx ms = do
- #if __GLASGOW_HASKELL__ >= 706
- let modName = IIModule . moduleName . ms_mod
- #else
- let modName = IIModule . ms_mod
- #endif
- top <- map modName <$> filterM isTop ms
- setContext top
- return (not . null $ top)
- #else
- setCtx ms = do
- top <- map ms_mod <$> filterM isTop ms
- setContext top []
- return (not . null $ top)
- #endif
- where
- isTop mos = lookupMod ||> returnFalse
- where
- lookupMod = lookupModule (ms_mod_name mos) Nothing >> return True
- returnFalse = return False
- showSeverityCaption :: Severity -> String
- #if __GLASGOW_HASKELL__ >= 706
- showSeverityCaption SevWarning = "Warning: "
- showSeverityCaption _ = ""
- #else
- showSeverityCaption = const ""
- #endif
|