Make ASSERT2 mention msg even when debug is off (avoid warnings)
[ghc-hetmet.git] / compiler / deSugar / DsMonad.lhs
index 10cd28a..1f01e15 100644 (file)
@@ -12,7 +12,7 @@ module DsMonad (
        foldlM, foldrM, ifOptM,
        Applicative(..),(<$>),
 
-       newTyVarsDs, newLocalName,
+       newLocalName,
        duplicateLocalDs, newSysLocalDs, newSysLocalsDs, newUniqueId,
        newFailLocalDs,
        getSrcSpanDs, putSrcSpanDs,
@@ -34,8 +34,6 @@ module DsMonad (
        CanItFail(..), orFail
     ) where
 
-#include "HsVersions.h"
-
 import TcRnMonad
 import CoreSyn
 import HsSyn
@@ -80,6 +78,9 @@ data EquationInfo
   = EqnInfo { eqn_pats :: [Pat Id],            -- The patterns for an eqn
              eqn_rhs  :: MatchResult } -- What to do after match
 
+instance Outputable EquationInfo where
+    ppr (EqnInfo pats _) = ppr pats
+
 type DsWrapper = CoreExpr -> CoreExpr
 idDsWrapper :: DsWrapper
 idDsWrapper e = e
@@ -196,7 +197,7 @@ mkDsEnvs :: DynFlags -> Module -> GlobalRdrEnv -> TypeEnv -> IORef Messages -> I
 mkDsEnvs dflags mod rdr_env type_env msg_var
   = do -- TODO: unnecessarily monadic
        let     if_genv = IfGblEnv { if_rec_types = Just (mod, return type_env) }
-               if_lenv = mkIfLclEnv mod (ptext SLIT("GHC error in desugarer lookup in") <+> ppr mod)
+               if_lenv = mkIfLclEnv mod (ptext (sLit "GHC error in desugarer lookup in") <+> ppr mod)
                gbl_env = DsGblEnv { ds_mod = mod, 
                                    ds_if_env = (if_genv, if_lenv),
                                    ds_unqual = mkPrintUnqualified dflags rdr_env,
@@ -205,7 +206,6 @@ mkDsEnvs dflags mod rdr_env type_env msg_var
                                    ds_loc = noSrcSpan }
 
        return (gbl_env, lcl_env)
-
 \end{code}
 
 %************************************************************************
@@ -222,9 +222,7 @@ it easier to read debugging output.
 \begin{code}
 -- Make a new Id with the same print name, but different type, and new unique
 newUniqueId :: Name -> Type -> DsM Id
-newUniqueId id ty = do
-    uniq <- newUnique
-    return (mkSysLocal (occNameFS (nameOccName id)) uniq ty)
+newUniqueId id = mkSysLocalM (occNameFS (nameOccName id))
 
 duplicateLocalDs :: Id -> DsM Id
 duplicateLocalDs old_local = do
@@ -232,24 +230,11 @@ duplicateLocalDs old_local = do
     return (setIdUnique old_local uniq)
 
 newSysLocalDs, newFailLocalDs :: Type -> DsM Id
-newSysLocalDs ty = do
-    uniq <- newUnique
-    return (mkSysLocal FSLIT("ds") uniq ty)
+newSysLocalDs = mkSysLocalM (fsLit "ds")
+newFailLocalDs = mkSysLocalM (fsLit "fail")
 
 newSysLocalsDs :: [Type] -> DsM [Id]
 newSysLocalsDs tys = mapM newSysLocalDs tys
-
-newFailLocalDs ty = do
-    uniq <- newUnique
-    return (mkSysLocal FSLIT("fail") uniq ty)
-       -- The UserLocal bit just helps make the code a little clearer
-\end{code}
-
-\begin{code}
-newTyVarsDs :: [TyVar] -> DsM [TyVar]
-newTyVarsDs tyvar_tmpls = do
-    uniqs <- newUniqueSupply
-    return (zipWith setTyVarUnique tyvar_tmpls (uniqsFromSupply uniqs))
 \end{code}
 
 We can also reach out and either set/grab location information from
@@ -278,9 +263,8 @@ warnDs :: SDoc -> DsM ()
 warnDs warn = do { env <- getGblEnv 
                 ; loc <- getSrcSpanDs
                 ; let msg = mkWarnMsg loc (ds_unqual env) 
-                                     (ptext SLIT("Warning:") <+> warn)
+                                     (ptext (sLit "Warning:") <+> warn)
                 ; updMutVar (ds_msgs env) (\ (w,e) -> (w `snocBag` msg, e)) }
-           where
 
 failWithDs :: SDoc -> DsM a
 failWithDs err 
@@ -289,10 +273,12 @@ failWithDs err
        ; let msg = mkErrMsg loc (ds_unqual env) err
        ; updMutVar (ds_msgs env) (\ (w,e) -> (w, e `snocBag` msg))
        ; failM }
-       where
 \end{code}
 
 \begin{code}
+instance MonadThings (IOEnv (Env DsGblEnv DsLclEnv)) where
+    lookupThing = dsLookupGlobal
+
 dsLookupGlobal :: Name -> DsM TyThing
 -- Very like TcEnv.tcLookupGlobal
 dsLookupGlobal name