[project @ 2001-07-12 14:51:28 by simonpj]
[ghc-hetmet.git] / ghc / compiler / rename / RnNames.lhs
index a54dbd8..7c65a96 100644 (file)
@@ -13,7 +13,7 @@ module RnNames (
 import CmdLineOpts     ( DynFlag(..) )
 
 import HsSyn           ( HsModule(..), HsDecl(..), IE(..), ieName, ImportDecl(..),
-                         ForeignDecl(..), ForKind(..), isDynamicExtName,
+                         ForeignDecl(..), 
                          collectLocatedHsBinders
                        )
 import RdrHsSyn                ( RdrNameIE, RdrNameImportDecl,
@@ -177,8 +177,8 @@ importsFromImportDecl this_mod_name (ImportDecl imp_mod_name from qual_only as_m
                        Just another_name -> another_name
 
        mk_prov name = NonLocalDef (UserImport imp_mod iloc (name `elemNameSet` explicits)) 
-       gbl_env      = mkGlobalRdrEnv qual_mod unqual_imp True hides mk_prov filtered_avails deprecs
-       exports      = mkExportAvails qual_mod unqual_imp gbl_env            filtered_avails
+       gbl_env      = mkGlobalRdrEnv qual_mod unqual_imp mk_prov filtered_avails hides deprecs
+       exports      = mkExportAvails qual_mod unqual_imp gbl_env filtered_avails
     in
     returnRn (gbl_env, exports)
 \end{code}
@@ -212,7 +212,7 @@ importsFromLocalDecls this_mod decls
        mk_prov n  = LocalDef   -- Provenance is local
        hides      = []         -- Hide nothing
 
-       gbl_env    = mkGlobalRdrEnv mod_name unqual_imp True hides mk_prov avails NoDeprecs
+       gbl_env    = mkGlobalRdrEnv mod_name unqual_imp mk_prov avails hides NoDeprecs
            -- NoDeprecs: don't complain about locally defined names
            -- For a start, we may be exporting a deprecated thing
            -- Also we may use a deprecated thing in the defn of another
@@ -244,17 +244,11 @@ getLocalDeclBinders mod (ValD binds)
     new (rdr_name, loc) = newTopBinder mod rdr_name loc        `thenRn` \ name ->
                          returnRn (Avail name)
 
-getLocalDeclBinders mod (ForD (ForeignDecl nm kind _ ext_nm _ loc))
-  | binds_haskell_name kind
+getLocalDeclBinders mod (ForD (ForeignImport nm _ _ loc))
   = newTopBinder mod nm loc        `thenRn` \ name ->
     returnRn [Avail name]
-
-  | otherwise          -- a foreign export
+getLocalDeclBinders mod (ForD _)
   = returnRn []
-  where
-    binds_haskell_name (FoImport _) = True
-    binds_haskell_name FoLabel      = True
-    binds_haskell_name FoExport     = isDynamicExtName ext_nm
 
 getLocalDeclBinders mod (FixD _)    = returnRn []
 getLocalDeclBinders mod (DeprecD _) = returnRn []
@@ -280,10 +274,9 @@ filterImports :: ModuleName                        -- The module being imported
              -> [AvailInfo]                    -- What's available
              -> RnMG ([AvailInfo],             -- What's actually imported
                       [AvailInfo],             -- What's to be hidden
-                                               -- (the unqualified version, that is)
-                       -- (We need to return both the above sets, because
-                       --  the qualified version is never hidden; so we can't
-                       --  implement hiding by reducing what's imported.)
+                       -- (It's convenient to return both the above sets, because
+                       --  the substraction can be done more efficiently when
+                       --  building the environment.)
                       NameSet)                 -- What was imported explicitly
 
        -- Complains if import spec mentions things that the module doesn't export
@@ -316,6 +309,7 @@ filterImports mod from (Just (want_hiding, import_items)) total_avails
     bale_out item = addErrRn (badImportItemErr mod from item)  `thenRn_`
                    returnRn []
 
+    get_item :: RdrNameIE -> RnMG [(AvailInfo, [Name])]
     get_item item@(IEModuleContents _) = bale_out item
 
     get_item item@(IEThingAll _)
@@ -331,7 +325,7 @@ filterImports mod from (Just (want_hiding, import_items)) total_avails
     get_item item@(IEThingAbs n)
       | want_hiding    -- hiding( C ) 
                        -- Here the 'C' can be a data constructor *or* a type/class
-      = case catMaybes [check_item item, check_item (IEThingAbs data_n)] of
+      = case catMaybes [check_item item, check_item (IEVar data_n)] of
                []     -> bale_out item
                avails -> returnRn [(a, []) | a <- avails]
                                -- The 'explicits' list is irrelevant when hiding