Add {-# OPTIONS_GHC -w #-} and some blurb to all compiler modules
[ghc-hetmet.git] / compiler / rename / RnExpr.lhs
index 421a0f3..bccd2e2 100644 (file)
@@ -10,6 +10,13 @@ general, all of these functions return a renamed thing, and a set of
 free variables.
 
 \begin{code}
+{-# OPTIONS_GHC -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/WorkingConventions#Warnings
+-- for details
+
 module RnExpr (
        rnLExpr, rnExpr, rnStmts
    ) where
@@ -20,14 +27,13 @@ import RnSource  ( rnSrcDecls, rnSplice, checkTH )
 import RnBinds  ( rnLocalBindsAndThen, rnValBinds,
                   rnMatchGroup, trimWith ) 
 import HsSyn
-import RnHsSyn
 import TcRnMonad
 import RnEnv
 import HscTypes         ( availNames )
 import RnNames         ( getLocalDeclBinders, extendRdrEnvRn )
 import RnTypes         ( rnHsTypeFVs, rnLPat, rnOverLit, rnPatsAndThen, rnLit,
                          mkOpFormRn, mkOpAppRn, mkNegAppRn, checkSectionPrec, 
-                         dupFieldErr, checkTupSize )
+                         rnHsRecFields, checkTupSize )
 import DynFlags                ( DynFlag(..) )
 import BasicTypes      ( FixityDirection(..) )
 import SrcLoc           ( SrcSpan )
@@ -46,7 +52,7 @@ import Util           ( isSingleton )
 import ListSetOps      ( removeDups )
 import Maybes          ( expectJust )
 import Outputable
-import SrcLoc          ( Located(..), unLoc, getLoc, cmpLocated )
+import SrcLoc          ( Located(..), unLoc, getLoc )
 import FastString
 
 import List            ( unzip4 )
@@ -220,17 +226,18 @@ rnExpr e@(ExplicitTuple exps boxity)
     rnExprs exps                               `thenM` \ (exps', fvs) ->
     returnM (ExplicitTuple exps' boxity, fvs)
 
-rnExpr (RecordCon con_id _ (HsRecordBinds rbinds))
-  = lookupLocatedOccRn con_id          `thenM` \ conname ->
-    rnRbinds "construction" rbinds     `thenM` \ (rbinds', fvRbinds) ->
-    returnM (RecordCon conname noPostTcExpr (HsRecordBinds rbinds'), 
-            fvRbinds `addOneFV` unLoc conname)
+rnExpr (RecordCon con_id _ rbinds)
+  = do { conname <- lookupLocatedOccRn con_id
+       ; (rbinds', fvRbinds) <- rnHsRecFields "construction" (Just conname) 
+                                               rnLExpr HsVar rbinds
+       ; return (RecordCon conname noPostTcExpr rbinds', 
+                 fvRbinds `addOneFV` unLoc conname) }
 
-rnExpr (RecordUpd expr (HsRecordBinds rbinds) _ _ _)
-  = rnLExpr expr               `thenM` \ (expr', fvExpr) ->
-    rnRbinds "update" rbinds   `thenM` \ (rbinds', fvRbinds) ->
-    returnM (RecordUpd expr' (HsRecordBinds rbinds') [] [] [], 
-            fvExpr `plusFV` fvRbinds)
+rnExpr (RecordUpd expr rbinds _ _ _)
+  = do { (expr', fvExpr) <- rnLExpr expr
+       ; (rbinds', fvRbinds) <- rnHsRecFields "update" Nothing rnLExpr HsVar rbinds
+       ; return (RecordUpd expr' rbinds' [] [] [], 
+                 fvExpr `plusFV` fvRbinds) }
 
 rnExpr (ExprWithTySig expr pty)
   = do { (pty', fvTy) <- rnHsTypeFVs doc pty
@@ -502,29 +509,6 @@ rnArithSeq (FromThenTo expr1 expr2 expr3)
            plusFVs [fvExpr1, fvExpr2, fvExpr3])
 \end{code}
 
-
-%************************************************************************
-%*                                                                     *
-\subsubsection{@Rbinds@s and @Rpats@s: in record expressions}
-%*                                                                     *
-%************************************************************************
-
-\begin{code}
-rnRbinds str rbinds 
-  = mappM_ field_dup_err dup_fields    `thenM_`
-    mapFvRn rn_rbind rbinds            `thenM` \ (rbinds', fvRbind) ->
-    returnM (rbinds', fvRbind)
-  where
-    (_, dup_fields) = removeDups cmpLocated [ f | (f,_) <- rbinds ]
-
-    field_dup_err dups = mappM_ (\f -> addLocErr f (dupFieldErr str)) dups
-
-    rn_rbind (field, expr)
-      = lookupLocatedGlobalOccRn field `thenM` \ fieldname ->
-       rnLExpr expr                    `thenM` \ (expr', fvExpr) ->
-       returnM ((fieldname, expr'), fvExpr `addOneFV` unLoc fieldname)
-\end{code}
-
 %************************************************************************
 %*                                                                     *
        Template Haskell brackets
@@ -668,8 +652,8 @@ rnStmt ctxt (RecStmt rec_stmts _ _ _ _) thing_inside
     doc = text "In a recursive do statement"
 
 rnStmt ctxt (ParStmt segs) thing_inside
-  = do { opt_GlasgowExts <- doptM Opt_GlasgowExts
-       ; checkM opt_GlasgowExts parStmtErr
+  = do { parallel_list_comp <- doptM Opt_ParallelListComp
+       ; checkM parallel_list_comp parStmtErr
        ; orig_lcl_env <- getLocalRdrEnv
        ; ((segs',thing), fvs) <- go orig_lcl_env [] segs
        ; return ((ParStmt segs', thing), fvs) }
@@ -958,7 +942,7 @@ patSynErr e = do { addErr (sep [ptext SLIT("Pattern syntax in expression context
                                nest 4 (ppr e)])
                 ; return (EWildPat, emptyFVs) }
 
-parStmtErr = addErr (ptext SLIT("Illegal parallel list comprehension: use -fglasgow-exts"))
+parStmtErr = addErr (ptext SLIT("Illegal parallel list comprehension: use -XParallelListComp"))
 
 badIpBinds what binds
   = hang (ptext SLIT("Implicit-parameter bindings illegal in") <+> what)