X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FdeSugar%2FDsMonad.lhs;h=a83a1f4a7b44dedd2bcdff86979edd844f90d111;hb=10cbc75d37064b3ef76ca3ccd219d66e445ecb0f;hp=056068d9cc4ca7f68e73a95aa06d1e02d30f58b9;hpb=1b7a99e3e7f64c6f402e8aece32ba0b9a3703bfa;p=ghc-hetmet.git diff --git a/ghc/compiler/deSugar/DsMonad.lhs b/ghc/compiler/deSugar/DsMonad.lhs index 056068d..a83a1f4 100644 --- a/ghc/compiler/deSugar/DsMonad.lhs +++ b/ghc/compiler/deSugar/DsMonad.lhs @@ -15,16 +15,17 @@ module DsMonad ( getSrcLocDs, putSrcLocDs, getModuleDs, getUniqueDs, + getDOptsDs, dsLookupGlobalValue, - ValueEnv, dsWarn, DsWarnings, - DsMatchContext(..), DsMatchKind(..) + DsMatchContext(..) ) where #include "HsVersions.h" +import HsSyn ( HsMatchContext ) import Bag ( emptyBag, snocBag, Bag ) import ErrUtils ( WarnMsg ) import Id ( mkSysLocal, setIdUnique, Id ) @@ -33,13 +34,13 @@ import Var ( TyVar, setTyVarUnique ) import Outputable import SrcLoc ( noSrcLoc, SrcLoc ) import TcHsSyn ( TypecheckedPat ) -import TcEnv ( ValueEnv ) import Type ( Type ) import UniqSupply ( initUs_, splitUniqSupply, uniqFromSupply, uniqsFromSupply, UniqSM, UniqSupply ) import Unique ( Unique ) -import UniqFM ( lookupWithDefaultUFM_Directly ) import Util ( zipWithEqual ) +import Name ( Name ) +import CmdLineOpts ( DynFlags ) infixr 9 `thenDs` \end{code} @@ -49,10 +50,11 @@ a @UniqueSupply@ and some annotations, which presumably include source-file location information: \begin{code} type DsM result = - UniqSupply - -> ValueEnv - -> SrcLoc -- to put in pattern-matching error msgs - -> Module -- module: for SCC profiling + DynFlags + -> UniqSupply + -> (Name -> Id) -- Lookup well-known Ids + -> SrcLoc -- to put in pattern-matching error msgs + -> Module -- module: for SCC profiling -> DsWarnings -> (result, DsWarnings) @@ -65,31 +67,32 @@ type DsWarnings = Bag WarnMsg -- The desugarer reports matches which a -- initDs returns the UniqSupply out the end (not just the result) -initDs :: UniqSupply - -> ValueEnv +initDs :: DynFlags + -> UniqSupply + -> (Name -> Id) -> Module -- module name: for profiling -> DsM a -> (a, DsWarnings) -initDs init_us genv mod action - = action init_us genv noSrcLoc mod emptyBag +initDs dflags init_us lookup mod action + = action dflags init_us lookup noSrcLoc mod emptyBag thenDs :: DsM a -> (a -> DsM b) -> DsM b andDs :: (a -> a -> a) -> DsM a -> DsM a -> DsM a -thenDs m1 m2 us genv loc mod warns +thenDs m1 m2 dflags us genv loc mod warns = case splitUniqSupply us of { (s1, s2) -> - case (m1 s1 genv loc mod warns) of { (result, warns1) -> - m2 result s2 genv loc mod warns1}} + case (m1 dflags s1 genv loc mod warns) of { (result, warns1) -> + m2 result dflags s2 genv loc mod warns1}} -andDs combiner m1 m2 us genv loc mod warns +andDs combiner m1 m2 dflags us genv loc mod warns = case splitUniqSupply us of { (s1, s2) -> - case (m1 s1 genv loc mod warns) of { (result1, warns1) -> - case (m2 s2 genv loc mod warns1) of { (result2, warns2) -> + case (m1 dflags s1 genv loc mod warns) of { (result1, warns1) -> + case (m2 dflags s2 genv loc mod warns1) of { (result2, warns2) -> (combiner result1 result2, warns2) }}} returnDs :: a -> DsM a -returnDs result us genv loc mod warns = (result, warns) +returnDs result dflags us genv loc mod warns = (result, warns) listDs :: [DsM a] -> DsM [a] listDs [] = returnDs [] @@ -136,29 +139,33 @@ it easier to read debugging output. \begin{code} newSysLocalDs, newFailLocalDs :: Type -> DsM Id -newSysLocalDs ty us genv loc mod warns +newSysLocalDs ty dflags us genv loc mod warns = case uniqFromSupply us of { assigned_uniq -> (mkSysLocal SLIT("ds") assigned_uniq ty, warns) } newSysLocalsDs tys = mapDs newSysLocalDs tys -newFailLocalDs ty us genv loc mod warns +newFailLocalDs ty dflags us genv loc mod warns = case uniqFromSupply us of { assigned_uniq -> (mkSysLocal SLIT("fail") assigned_uniq ty, warns) } -- The UserLocal bit just helps make the code a little clearer getUniqueDs :: DsM Unique -getUniqueDs us genv loc mod warns +getUniqueDs dflags us genv loc mod warns = case (uniqFromSupply us) of { assigned_uniq -> (assigned_uniq, warns) } +getDOptsDs :: DsM DynFlags +getDOptsDs dflags us genv loc mod warns + = (dflags, warns) + duplicateLocalDs :: Id -> DsM Id -duplicateLocalDs old_local us genv loc mod warns +duplicateLocalDs old_local dflags us genv loc mod warns = case uniqFromSupply us of { assigned_uniq -> (setIdUnique old_local assigned_uniq, warns) } cloneTyVarsDs :: [TyVar] -> DsM [TyVar] -cloneTyVarsDs tyvars us genv loc mod warns +cloneTyVarsDs tyvars dflags us genv loc mod warns = case uniqsFromSupply (length tyvars) us of { uniqs -> (zipWithEqual "cloneTyVarsDs" setTyVarUnique tyvars uniqs, warns) } \end{code} @@ -166,7 +173,7 @@ cloneTyVarsDs tyvars us genv loc mod warns \begin{code} newTyVarsDs :: [TyVar] -> DsM [TyVar] -newTyVarsDs tyvar_tmpls us genv loc mod warns +newTyVarsDs tyvar_tmpls dflags us genv loc mod warns = case uniqsFromSupply (length tyvar_tmpls) us of { uniqs -> (zipWithEqual "newTyVarsDs" setTyVarUnique tyvar_tmpls uniqs, warns) } \end{code} @@ -176,33 +183,31 @@ the @SrcLoc@ being carried around. \begin{code} uniqSMtoDsM :: UniqSM a -> DsM a -uniqSMtoDsM u_action us genv loc mod warns +uniqSMtoDsM u_action dflags us genv loc mod warns = (initUs_ us u_action, warns) getSrcLocDs :: DsM SrcLoc -getSrcLocDs us genv loc mod warns +getSrcLocDs dflags us genv loc mod warns = (loc, warns) putSrcLocDs :: SrcLoc -> DsM a -> DsM a -putSrcLocDs new_loc expr us genv old_loc mod warns - = expr us genv new_loc mod warns +putSrcLocDs new_loc expr dflags us genv old_loc mod warns + = expr dflags us genv new_loc mod warns dsWarn :: WarnMsg -> DsM () -dsWarn warn us genv loc mod warns = ((), warns `snocBag` warn) +dsWarn warn dflags us genv loc mod warns = ((), warns `snocBag` warn) \end{code} \begin{code} getModuleDs :: DsM Module -getModuleDs us genv loc mod warns = (mod, warns) +getModuleDs dflags us genv loc mod warns = (mod, warns) \end{code} \begin{code} -dsLookupGlobalValue :: Unique -> DsM Id -dsLookupGlobalValue key us genv loc mod warns - = (lookupWithDefaultUFM_Directly genv def key, warns) - where - def = pprPanic "tcLookupGlobalValue:" (ppr key) +dsLookupGlobalValue :: Name -> DsM Id +dsLookupGlobalValue name dflags us genv loc mod warns + = (genv name, warns) \end{code} @@ -214,18 +219,7 @@ dsLookupGlobalValue key us genv loc mod warns \begin{code} data DsMatchContext - = DsMatchContext DsMatchKind [TypecheckedPat] SrcLoc + = DsMatchContext HsMatchContext [TypecheckedPat] SrcLoc | NoMatchContext deriving () - -data DsMatchKind - = FunMatch Id - | CaseMatch - | LambdaMatch - | PatBindMatch - | DoBindMatch - | ListCompMatch - | LetMatch - | RecUpdMatch - deriving () \end{code}