diff options
author | Ian Lynagh <ian@well-typed.com> | 2012-11-02 14:47:38 +0000 |
---|---|---|
committer | Ian Lynagh <ian@well-typed.com> | 2012-11-02 15:26:07 +0000 |
commit | fb31191a76b0b623e11aab8486643bc175a8712e (patch) | |
tree | 3ceaa2bba59d6a32b5892e4a2cfaa53b0440ab87 | |
parent | 0a7c4efe8b7ce459979c0cb18d60910539347f9c (diff) | |
download | haskell-fb31191a76b0b623e11aab8486643bc175a8712e.tar.gz |
Refactoring: Make a HasModule class for getModule
-rw-r--r-- | compiler/basicTypes/Module.lhs | 8 | ||||
-rw-r--r-- | compiler/deSugar/DsForeign.lhs | 6 | ||||
-rw-r--r-- | compiler/deSugar/DsMonad.lhs | 3 | ||||
-rw-r--r-- | compiler/rename/RnBinds.lhs | 1 | ||||
-rw-r--r-- | compiler/rename/RnEnv.lhs | 2 | ||||
-rw-r--r-- | compiler/rename/RnExpr.lhs | 1 | ||||
-rw-r--r-- | compiler/simplCore/CoreMonad.lhs | 8 | ||||
-rw-r--r-- | compiler/typecheck/TcBinds.lhs | 1 | ||||
-rw-r--r-- | compiler/typecheck/TcEnv.lhs | 17 | ||||
-rw-r--r-- | compiler/typecheck/TcRnMonad.lhs | 3 | ||||
-rw-r--r-- | compiler/typecheck/TcRnTypes.lhs | 6 | ||||
-rw-r--r-- | compiler/typecheck/TcTyClsDecls.lhs | 1 | ||||
-rw-r--r-- | compiler/utils/IOEnv.hs | 5 |
13 files changed, 41 insertions, 21 deletions
diff --git a/compiler/basicTypes/Module.lhs b/compiler/basicTypes/Module.lhs index 35d4a89a23..27d3c524c2 100644 --- a/compiler/basicTypes/Module.lhs +++ b/compiler/basicTypes/Module.lhs @@ -48,6 +48,8 @@ module Module pprModule, mkModule, stableModuleCmp, + HasModule(..), + ContainsModule(..), -- * The ModuleLocation type ModLocation(..), @@ -276,6 +278,12 @@ pprPackagePrefix p mod = getPprStyle doc -- the PrintUnqualified tells us which modules have to -- be qualified with package names | otherwise = empty + +class ContainsModule t where + extractModule :: t -> Module + +class HasModule m where + getModule :: m Module \end{code} %************************************************************************ diff --git a/compiler/deSugar/DsForeign.lhs b/compiler/deSugar/DsForeign.lhs index 59124e32e1..daf49eebac 100644 --- a/compiler/deSugar/DsForeign.lhs +++ b/compiler/deSugar/DsForeign.lhs @@ -212,11 +212,7 @@ dsFCall fn_id co fcall mDeclHeader = do (fcall', cDoc) <- case fcall of CCall (CCallSpec (StaticTarget cName mPackageId isFun) CApiConv safety) -> - do thisMod <- getModuleDs - let pkg = packageIdString (modulePackageId thisMod) - mod = moduleNameString (moduleName thisMod) - wrapperNameComponents = [pkg, mod, unpackFS cName] - wrapperName <- mkWrapperName "ghc_wrapper" wrapperNameComponents + do wrapperName <- mkWrapperName "ghc_wrapper" (unpackFS cName) let fcall' = CCall (CCallSpec (StaticTarget wrapperName mPackageId True) CApiConv safety) c = includes $$ fun_proto <+> braces (cRet <> semi) diff --git a/compiler/deSugar/DsMonad.lhs b/compiler/deSugar/DsMonad.lhs index 6ed0f64a06..5e94d515d7 100644 --- a/compiler/deSugar/DsMonad.lhs +++ b/compiler/deSugar/DsMonad.lhs @@ -167,6 +167,9 @@ data DsGblEnv , ds_parr_bi :: PArrBuiltin -- desugarar names for '-XParallelArrays' } +instance ContainsModule DsGblEnv where + extractModule = ds_mod + data DsLclEnv = DsLclEnv { ds_meta :: DsMetaEnv, -- Template Haskell bindings ds_loc :: SrcSpan -- to put in pattern-matching error msgs diff --git a/compiler/rename/RnBinds.lhs b/compiler/rename/RnBinds.lhs index fbbaf65819..717b885e63 100644 --- a/compiler/rename/RnBinds.lhs +++ b/compiler/rename/RnBinds.lhs @@ -39,6 +39,7 @@ import RnTypes ( bindSigTyVarsFV, rnHsSigType, rnLHsType, checkPrecMatch import RnPat import RnEnv import DynFlags +import Module import Name import NameEnv import NameSet diff --git a/compiler/rename/RnEnv.lhs b/compiler/rename/RnEnv.lhs index f29d64c55c..5e466c9a32 100644 --- a/compiler/rename/RnEnv.lhs +++ b/compiler/rename/RnEnv.lhs @@ -52,7 +52,7 @@ import Name import NameSet import NameEnv import Avail -import Module ( ModuleName, moduleName ) +import Module import UniqFM import DataCon ( dataConFieldLabels, dataConTyCon ) import TyCon ( isTupleTyCon, tyConArity ) diff --git a/compiler/rename/RnExpr.lhs b/compiler/rename/RnExpr.lhs index 038f754406..606549161f 100644 --- a/compiler/rename/RnExpr.lhs +++ b/compiler/rename/RnExpr.lhs @@ -40,6 +40,7 @@ import DynFlags import BasicTypes ( FixityDirection(..) ) import PrelNames +import Module import Name import NameSet import RdrName diff --git a/compiler/simplCore/CoreMonad.lhs b/compiler/simplCore/CoreMonad.lhs index bc1e1e5199..c2c265044c 100644 --- a/compiler/simplCore/CoreMonad.lhs +++ b/compiler/simplCore/CoreMonad.lhs @@ -72,7 +72,7 @@ import PprCore import CoreUtils import CoreLint ( lintCoreBindings ) import HscTypes -import Module ( Module ) +import Module import DynFlags import StaticFlags import Rules ( RuleBase ) @@ -863,9 +863,6 @@ getHscEnv = read cr_hsc_env getRuleBase :: CoreM RuleBase getRuleBase = read cr_rule_base -getModule :: CoreM Module -getModule = read cr_module - addSimplCount :: SimplCount -> CoreM () addSimplCount count = write (CoreWriter { cw_simpl_count = count }) @@ -874,6 +871,9 @@ addSimplCount count = write (CoreWriter { cw_simpl_count = count }) instance HasDynFlags CoreM where getDynFlags = fmap hsc_dflags getHscEnv +instance HasModule CoreM where + getModule = read cr_module + -- | The original name cache is the current mapping from 'Module' and -- 'OccName' to a compiler-wide unique 'Name' getOrigNameCache :: CoreM OrigNameCache diff --git a/compiler/typecheck/TcBinds.lhs b/compiler/typecheck/TcBinds.lhs index a63471011f..f0394c8762 100644 --- a/compiler/typecheck/TcBinds.lhs +++ b/compiler/typecheck/TcBinds.lhs @@ -32,6 +32,7 @@ import TysPrim import Id import Var import VarSet +import Module import Name import NameSet import NameEnv diff --git a/compiler/typecheck/TcEnv.lhs b/compiler/typecheck/TcEnv.lhs index 175ab9cc08..aa39673224 100644 --- a/compiler/typecheck/TcEnv.lhs +++ b/compiler/typecheck/TcEnv.lhs @@ -756,9 +756,7 @@ mkStableIdFromString :: String -> Type -> SrcSpan -> (OccName -> OccName) -> TcM mkStableIdFromString str sig_ty loc occ_wrapper = do uniq <- newUnique mod <- getModule - name <- mkWrapperName "stable" [packageIdString (modulePackageId mod), - moduleNameString (moduleName mod), - str] + name <- mkWrapperName "stable" str let occ = mkVarOccFS name :: OccName gnm = mkExternalName uniq mod (occ_wrapper occ) loc :: Name id = mkExportedLocalId gnm sig_ty :: Id @@ -769,15 +767,18 @@ mkStableIdFromName nm = mkStableIdFromString (getOccString nm) \end{code} \begin{code} -mkWrapperName :: (MonadIO m, HasDynFlags m) - => String -> [String] -> m FastString -mkWrapperName what components +mkWrapperName :: (MonadIO m, HasDynFlags m, HasModule m) + => String -> String -> m FastString +mkWrapperName what nameBase = do dflags <- getDynFlags + thisMod <- getModule let wrapperRef = nextWrapperNum dflags + pkg = packageIdString (modulePackageId thisMod) + mod = moduleNameString (moduleName thisMod) wrapperNum <- liftIO $ readIORef wrapperRef liftIO $ writeIORef wrapperRef (wrapperNum + 1) - let allComponents = what : show wrapperNum : components - return $ mkFastString $ zEncodeString $ intercalate ":" allComponents + let components = [what, show wrapperNum, pkg, mod, nameBase] + return $ mkFastString $ zEncodeString $ intercalate ":" components \end{code} %************************************************************************ diff --git a/compiler/typecheck/TcRnMonad.lhs b/compiler/typecheck/TcRnMonad.lhs index ee337c4d51..d866893545 100644 --- a/compiler/typecheck/TcRnMonad.lhs +++ b/compiler/typecheck/TcRnMonad.lhs @@ -480,9 +480,6 @@ dumpOptTcRn flag doc = whenDOptM flag (dumpTcRn doc) %************************************************************************ \begin{code} -getModule :: TcRn Module -getModule = do { env <- getGblEnv; return (tcg_mod env) } - setModule :: Module -> TcRn a -> TcRn a setModule mod thing_inside = updGblEnv (\env -> env { tcg_mod = mod }) thing_inside diff --git a/compiler/typecheck/TcRnTypes.lhs b/compiler/typecheck/TcRnTypes.lhs index 967c327fd6..e6d2013ff2 100644 --- a/compiler/typecheck/TcRnTypes.lhs +++ b/compiler/typecheck/TcRnTypes.lhs @@ -182,6 +182,9 @@ data Env gbl lcl instance ContainsDynFlags (Env gbl lcl) where extractDynFlags env = hsc_dflags (env_top env) +instance ContainsModule gbl => ContainsModule (Env gbl lcl) where + extractModule env = extractModule (env_gbl env) + -- TcGblEnv describes the top-level of the module at the -- point at which the typechecker is finished work. -- It is this structure that is handed on to the desugarer @@ -319,6 +322,9 @@ data TcGblEnv -- as -XSafe (Safe Haskell) } +instance ContainsModule TcGblEnv where + extractModule env = tcg_mod env + data RecFieldEnv = RecFields (NameEnv [Name]) -- Maps a constructor name *in this module* -- to the fields for that constructor diff --git a/compiler/typecheck/TcTyClsDecls.lhs b/compiler/typecheck/TcTyClsDecls.lhs index 469635ef29..ffcf5c2991 100644 --- a/compiler/typecheck/TcTyClsDecls.lhs +++ b/compiler/typecheck/TcTyClsDecls.lhs @@ -48,6 +48,7 @@ import MkCore ( rEC_SEL_ERROR_ID ) import IdInfo import Var import VarSet +import Module import Name import NameSet import NameEnv diff --git a/compiler/utils/IOEnv.hs b/compiler/utils/IOEnv.hs index ee7e616305..35d7973c04 100644 --- a/compiler/utils/IOEnv.hs +++ b/compiler/utils/IOEnv.hs @@ -32,6 +32,7 @@ module IOEnv ( import DynFlags import Exception +import Module import Panic import Data.IORef ( IORef, newIORef, readIORef, writeIORef, modifyIORef, @@ -93,6 +94,10 @@ instance ContainsDynFlags env => HasDynFlags (IOEnv env) where getDynFlags = do env <- getEnv return $ extractDynFlags env +instance ContainsModule env => HasModule (IOEnv env) where + getModule = do env <- getEnv + return $ extractModule env + ---------------------------------------------------------------------- -- Fundmantal combinators specific to the monad ---------------------------------------------------------------------- |