[project @ 1996-05-20 13:15:10 by partain]
[ghc-hetmet.git] / ghc / compiler / rename / RnMonad.lhs
index dd1ec55..78f8918 100644 (file)
@@ -43,7 +43,8 @@ import RnHsSyn                ( RnName, mkRnName, mkRnUnbound, mkRnImplicit,
 import RnUtils         ( RnEnv(..), extendLocalRnEnv,
                          lookupRnEnv, lookupGlobalRnEnv, lookupTcRnEnv,
                          unknownNameErr, badClassOpErr, qualNameErr,
-                         dupNamesErr, shadowedNameWarn, negateNameWarn )
+                         dupNamesErr, shadowedNameWarn
+                       )
 
 import Bag             ( Bag, emptyBag, isEmptyBag, snocBag )
 import CmdLineOpts     ( opt_WarnNameShadowing )
@@ -55,6 +56,7 @@ import Name           ( Module(..), RdrName(..), isQual,
                          getOccName
                        )
 import PrelInfo                ( builtinNameInfo, BuiltinNames(..), BuiltinKeys(..) )
+import PrelMods                ( pRELUDE )
 import Pretty          ( Pretty(..), PrettyRep )
 import SrcLoc          ( SrcLoc, mkUnknownSrcLoc )
 import UniqFM          ( UniqFM, emptyUFM )
@@ -291,12 +293,10 @@ newLocalNames :: String           -- Documentation string
              -> RnMonad x s [RnName]
 
 newLocalNames str names_w_loc
-  = mapRn (addWarnRn . negateNameWarn) negs    `thenRn_`
-    mapRn (addErrRn . qualNameErr str) quals   `thenRn_`
+  = mapRn (addErrRn . qualNameErr str) quals   `thenRn_`
     mapRn (addErrRn . dupNamesErr str) dups    `thenRn_`
     mkLocalNames these
   where
-    negs  = filter ((== Unqual SLIT("negate")).fst) names_w_loc
     quals = filter (isQual.fst) names_w_loc
     (these, dups) = removeDups cmp_fst names_w_loc
     cmp_fst (a,_) (b,_) = cmp a b
@@ -306,10 +306,10 @@ newLocalNames str names_w_loc
 mkLocalNames :: [(RdrName, SrcLoc)] -> RnMonad x s [RnName]
 mkLocalNames names_w_locs
   = rnGetUniques (length names_w_locs)         `thenRn` \ uniqs ->
-    returnRn (zipWithEqual new_local uniqs names_w_locs)
+    returnRn (zipWithEqual "mkLocalNames" new_local uniqs names_w_locs)
   where
     new_local uniq (Unqual str, srcloc)
-      = mkRnName (mkLocalName uniq str srcloc)
+      = mkRnName (mkLocalName uniq str False{-emph names-} srcloc)
 \end{code}
 
 
@@ -369,30 +369,26 @@ lookup_val rdr lookup check do_err down@(RnDown _ _ locn (RnIface b_names b_key
        Nothing   -> lookup_nonexisting_val b_names b_key imp_var us_var rdr
 
 lookup_nonexisting_val (b_names,_) b_key imp_var us_var rdr
-  = case rdr of
-      Qual _ _ -> -- builtin things *don't* have Qual names
-                 lookup_or_create_implicit_val b_key imp_var us_var rdr
-
-      Unqual n -> case (lookupFM b_names n) of
-                   Nothing -> lookup_or_create_implicit_val b_key imp_var us_var rdr
-                   Just xx -> returnSST xx
+  = let str_mod = case rdr of { Qual m n -> (n,m); Unqual n -> (n, pRELUDE) }
+    in case (lookupFM b_names str_mod) of
+        Nothing -> lookup_or_create_implicit_val b_key imp_var us_var rdr
+        Just xx -> returnSST xx
 
 lookup_or_create_implicit_val b_key imp_var us_var rdr
   = readMutVarSST imp_var `thenSST` \ (implicit_val_fm, implicit_tc_fm) ->
     case lookupFM implicit_val_fm rdr of
        Just implicit -> returnSST implicit
        Nothing ->
-         (case rdr of
-            Qual _ _ -> get_unique us_var
-            Unqual n -> case (lookupFM b_key n) of
-                          Just (u,_) -> returnSST u
-                          _          -> get_unique us_var
-         )                                     `thenSST` \ uniq -> 
+         (let str_mod = case rdr of { Qual m n -> (n,m); Unqual n -> (n, pRELUDE) }
+          in case (lookupFM b_key str_mod) of
+               Just (u,_) -> returnSST u
+               _          -> get_unique us_var
+         )                                                     `thenSST` \ uniq -> 
          let
              implicit   = mkRnImplicit (mkImplicitName uniq rdr)
              new_val_fm = addToFM implicit_val_fm rdr implicit
          in
-         writeMutVarSST imp_var (new_val_fm, implicit_tc_fm) `thenSST_`
+         writeMutVarSST imp_var (new_val_fm, implicit_tc_fm)   `thenSST_`
          returnSST implicit
 \end{code}
 
@@ -430,13 +426,10 @@ lookup_tc rdr check mk_implicit err_str down@(RnDown _ _ locn (RnIface b_names b
     fail = failButContinueRn (mkRnUnbound rdr) (unknownNameErr err_str rdr locn) down
 
 lookup_nonexisting_tc check mk_implicit fail (_,b_names) b_key imp_var us_var rdr
-  = case rdr of
-      Qual _ _ -> -- builtin things *don't* have Qual names
-                 lookup_or_create_implicit_tc check mk_implicit fail b_key imp_var us_var rdr
-
-      Unqual n -> case (lookupFM b_names n) of
-                   Nothing -> lookup_or_create_implicit_tc check mk_implicit fail b_key imp_var us_var rdr
-                   Just xx -> returnSST xx
+  = let str_mod = case rdr of { Qual m n -> (n,m); Unqual n -> (n, pRELUDE) }
+    in case (lookupFM b_names str_mod) of
+        Nothing -> lookup_or_create_implicit_tc check mk_implicit fail b_key imp_var us_var rdr
+        Just xx -> returnSST xx
 
 lookup_or_create_implicit_tc check mk_implicit fail b_key imp_var us_var rdr
   = readMutVarSST imp_var `thenSST` \ (implicit_val_fm, implicit_tc_fm) ->
@@ -444,17 +437,16 @@ lookup_or_create_implicit_tc check mk_implicit fail b_key imp_var us_var rdr
        Just implicit | check implicit -> returnSST implicit
                      | otherwise      -> fail
        Nothing ->
-         (case rdr of
-            Qual _ _ -> get_unique us_var
-            Unqual n -> case (lookupFM b_key n) of
-                          Just (u,_) -> returnSST u
-                          _          -> get_unique us_var
-         )                                     `thenSST` \ uniq -> 
+         (let str_mod = case rdr of { Qual m n -> (n,m); Unqual n -> (n, pRELUDE) }
+          in case (lookupFM b_key str_mod) of
+               Just (u,_) -> returnSST u
+               _          -> get_unique us_var
+         )                                                     `thenSST` \ uniq -> 
          let
              implicit  = mk_implicit (mkImplicitName uniq rdr)
              new_tc_fm = addToFM implicit_tc_fm rdr implicit
          in
-         writeMutVarSST imp_var (implicit_val_fm, new_tc_fm) `thenSST_`
+         writeMutVarSST imp_var (implicit_val_fm, new_tc_fm)   `thenSST_`
          returnSST implicit
 \end{code}