Add several new record features
[ghc-hetmet.git] / compiler / typecheck / TcRnMonad.lhs
index 56f073f..84b5aee 100644 (file)
@@ -14,14 +14,6 @@ module TcRnMonad(
 import TcRnTypes       -- Re-export all
 import IOEnv           -- Re-export all
 
-#if defined(GHCI)
-import TypeRep
-import IdInfo
-import TysWiredIn
-import PrelNames
-import {-#SOURCE#-} TcEnv
-#endif
-
 import HsSyn hiding (LIE)
 import HscTypes
 import Module
@@ -92,12 +84,13 @@ initTc hsc_env hsc_src keep_rn_syntax mod do_this
                | otherwise      = Nothing ;
                        
             gbl_env = TcGblEnv {
-               tcg_mod      = mod,
-               tcg_src      = hsc_src,
-               tcg_rdr_env  = hsc_global_rdr_env hsc_env,
-               tcg_fix_env  = emptyNameEnv,
-               tcg_default  = Nothing,
-               tcg_type_env = hsc_global_type_env hsc_env,
+               tcg_mod       = mod,
+               tcg_src       = hsc_src,
+               tcg_rdr_env   = hsc_global_rdr_env hsc_env,
+               tcg_fix_env   = emptyNameEnv,
+               tcg_field_env = emptyNameEnv,
+               tcg_default   = Nothing,
+               tcg_type_env  = hsc_global_type_env hsc_env,
                tcg_type_env_var = type_env_var,
                tcg_inst_env  = emptyInstEnv,
                tcg_fam_inst_env  = emptyFamInstEnv,
@@ -332,7 +325,7 @@ newUniqueSupply
 newLocalName :: Name -> TcRnIf gbl lcl Name
 newLocalName name      -- Make a clone
   = do { uniq <- newUnique
-       ; return (mkInternalName uniq (nameOccName name) (getSrcLoc name)) }
+       ; return (mkInternalName uniq (nameOccName name) (getSrcSpan name)) }
 
 newSysLocalIds :: FastString -> [TcType] -> TcRnIf gbl lcl [TcId]
 newSysLocalIds fs tys
@@ -411,6 +404,14 @@ extendFixityEnv new_bit
   = updGblEnv (\env@(TcGblEnv { tcg_fix_env = old_fix_env }) -> 
                env {tcg_fix_env = extendNameEnvList old_fix_env new_bit})           
 
+getRecFieldEnv :: TcRn RecFieldEnv
+getRecFieldEnv = do { env <- getGblEnv; return (tcg_field_env env) }
+
+extendRecFieldEnv :: RecFieldEnv -> RnM a -> RnM a
+extendRecFieldEnv new_bit
+  = updGblEnv (\env@(TcGblEnv { tcg_field_env = old_env }) -> 
+               env {tcg_field_env = old_env `plusNameEnv` new_bit})         
+
 getDeclaredDefaultTys :: TcRn (Maybe [Type])
 getDeclaredDefaultTys = do { env <- getGblEnv; return (tcg_default env) }
 \end{code}
@@ -733,11 +734,14 @@ checkTc False err = failWithTc err
 
 \begin{code}
 addWarnTc :: Message -> TcM ()
-addWarnTc msg
+addWarnTc msg = do { env0 <- tcInitTidyEnv 
+                  ; addWarnTcM (env0, msg) }
+
+addWarnTcM :: (TidyEnv, Message) -> TcM ()
+addWarnTcM (env0, msg)
  = do { ctxt <- getErrCtxt ;
-       env0 <- tcInitTidyEnv ;
        ctxt_msgs <- do_ctxt env0 ctxt ;
-       addWarn (vcat (msg : ctxt_to_use ctxt_msgs)) }
+       addReport (vcat (ptext SLIT("Warning:") <+> msg : ctxt_to_use ctxt_msgs)) }
 
 warnTc :: Bool -> Message -> TcM ()
 warnTc warn_if_true warn_msg