projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
only comments, spacing, alpha-renaming
[ghc-hetmet.git]
/
compiler
/
rename
/
RnNames.lhs
diff --git
a/compiler/rename/RnNames.lhs
b/compiler/rename/RnNames.lhs
index
6c35ef1
..
7f80049
100644
(file)
--- a/
compiler/rename/RnNames.lhs
+++ b/
compiler/rename/RnNames.lhs
@@
-13,7
+13,7
@@
module RnNames (
#include "HsVersions.h"
#include "HsVersions.h"
-import DynFlags ( DynFlag(..), GhcMode(..), DynFlags(..) )
+import DynFlags
import HsSyn ( IE(..), ieName, ImportDecl(..), LImportDecl,
ForeignDecl(..), HsGroup(..), HsValBinds(..),
Sig(..), collectHsBindLocatedBinders, tyClDeclNames,
import HsSyn ( IE(..), ieName, ImportDecl(..), LImportDecl,
ForeignDecl(..), HsGroup(..), HsValBinds(..),
Sig(..), collectHsBindLocatedBinders, tyClDeclNames,
@@
-69,6
+69,10
@@
rnImports imports
(source, ordinary) = partition is_source_import imports
is_source_import (L _ (ImportDecl _ is_boot _ _ _)) = is_boot
(source, ordinary) = partition is_source_import imports
is_source_import (L _ (ImportDecl _ is_boot _ _ _)) = is_boot
+ ifOptM Opt_WarnImplicitPrelude (
+ when (notNull prel_imports) $ addWarn (implicitPreludeWarn)
+ )
+
stuff1 <- mapM (rnImportDecl this_mod) (prel_imports ++ ordinary)
stuff2 <- mapM (rnImportDecl this_mod) source
let (decls, rdr_env, imp_avails) = combine (stuff1 ++ stuff2)
stuff1 <- mapM (rnImportDecl this_mod) (prel_imports ++ ordinary)
stuff2 <- mapM (rnImportDecl this_mod) source
let (decls, rdr_env, imp_avails) = combine (stuff1 ++ stuff2)
@@
-298,7
+302,7
@@
used for source code.
*** See "THE NAMING STORY" in HsDecls ****
*** See "THE NAMING STORY" in HsDecls ****
-Instances of indexed types
+Instances of type families
~~~~~~~~~~~~~~~~~~~~~~~~~~
Indexed data/newtype instances contain data constructors that we need to
collect, too. Moreover, we need to descend into the data/newtypes instances
~~~~~~~~~~~~~~~~~~~~~~~~~~
Indexed data/newtype instances contain data constructors that we need to
collect, too. Moreover, we need to descend into the data/newtypes instances
@@
-380,8
+384,8
@@
filterImports iface decl_spec Nothing all_avails
filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
= do -- check for errors, convert RdrNames to Names
filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
= do -- check for errors, convert RdrNames to Names
- opt_indexedtypes <- doptM Opt_IndexedTypes
- items1 <- mapM (lookup_lie opt_indexedtypes) import_items
+ opt_typeFamilies <- doptM Opt_TypeFamilies
+ items1 <- mapM (lookup_lie opt_typeFamilies) import_items
let items2 :: [(LIE Name, AvailInfo)]
items2 = concat items1
let items2 :: [(LIE Name, AvailInfo)]
items2 = concat items1
@@
-428,10
+432,10
@@
filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
(name, AvailTC name subs, Just parent)
lookup_lie :: Bool -> LIE RdrName -> TcRn [(LIE Name, AvailInfo)]
(name, AvailTC name subs, Just parent)
lookup_lie :: Bool -> LIE RdrName -> TcRn [(LIE Name, AvailInfo)]
- lookup_lie opt_indexedtypes (L loc ieRdr)
+ lookup_lie opt_typeFamilies (L loc ieRdr)
= do
stuff <- setSrcSpan loc $
= do
stuff <- setSrcSpan loc $
- case lookup_ie opt_indexedtypes ieRdr of
+ case lookup_ie opt_typeFamilies ieRdr of
Failed err -> addErr err >> return []
Succeeded a -> return a
checkDodgyImport stuff
Failed err -> addErr err >> return []
Succeeded a -> return a
checkDodgyImport stuff
@@
-456,7
+460,7
@@
filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
-- AvailInfos for the data constructors and the family (as they have
-- different parents). See the discussion at occ_env.
lookup_ie :: Bool -> IE RdrName -> MaybeErr Message [(IE Name,AvailInfo)]
-- AvailInfos for the data constructors and the family (as they have
-- different parents). See the discussion at occ_env.
lookup_ie :: Bool -> IE RdrName -> MaybeErr Message [(IE Name,AvailInfo)]
- lookup_ie opt_indexedtypes ie
+ lookup_ie opt_typeFamilies ie
= let bad_ie = Failed (badImportItemErr iface decl_spec ie)
lookup_name rdrName =
= let bad_ie = Failed (badImportItemErr iface decl_spec ie)
lookup_name rdrName =
@@
-501,8
+505,8
@@
filterImports iface decl_spec (Just (want_hiding, import_items)) all_avails
children <- if any isNothing mb_children
then bad_ie
else return (catMaybes mb_children)
children <- if any isNothing mb_children
then bad_ie
else return (catMaybes mb_children)
- -- check for proper import of indexed types
- when (not opt_indexedtypes && any isTyConName children) $
+ -- check for proper import of type families
+ when (not opt_typeFamilies && any isTyConName children) $
Failed (typeItemErr (head . filter isTyConName $ children)
(text "in import list"))
case mb_parent of
Failed (typeItemErr (head . filter isTyConName $ children)
(text "in import list"))
case mb_parent of
@@
-708,10
+712,10
@@
rnExports explicit_mod exports
-- written "module Main where ..."
-- Reason: don't want to complain about 'main' not in scope
-- in interactive mode
-- written "module Main where ..."
-- Reason: don't want to complain about 'main' not in scope
-- in interactive mode
- ; ghc_mode <- getGhcMode
+ ; dflags <- getDOpts
; let real_exports
; let real_exports
- | explicit_mod = exports
- | ghc_mode == Interactive = Nothing
+ | explicit_mod = exports
+ | ghcLink dflags == LinkInMemory = Nothing
| otherwise = Just ([noLoc (IEVar main_RDR_Unqual)])
-- ToDo: the 'noLoc' here is unhelpful if 'main'
-- turns out to be out of scope
| otherwise = Just ([noLoc (IEVar main_RDR_Unqual)])
-- ToDo: the 'noLoc' here is unhelpful if 'main'
-- turns out to be out of scope
@@
-833,8
+837,8
@@
exports_from_avail (Just rdr_items) rdr_env imports this_mod
then do addErr (exportItemErr ie)
return (IEThingWith name [], AvailTC name [name])
else do let names = catMaybes mb_names
then do addErr (exportItemErr ie)
return (IEThingWith name [], AvailTC name [name])
else do let names = catMaybes mb_names
- optIdxTypes <- doptM Opt_IndexedTypes
- when (not optIdxTypes && any isTyConName names) $
+ optTyFam <- doptM Opt_TypeFamilies
+ when (not optTyFam && any isTyConName names) $
addErr (typeItemErr ( head
. filter isTyConName
$ names )
addErr (typeItemErr ( head
. filter isTyConName
$ names )
@@
-1305,12
+1309,14
@@
exportItemErr export_item
typeItemErr name wherestr
= sep [ ptext SLIT("Using 'type' tag on") <+> quotes (ppr name) <+> wherestr,
typeItemErr name wherestr
= sep [ ptext SLIT("Using 'type' tag on") <+> quotes (ppr name) <+> wherestr,
- ptext SLIT("Use -findexed-types to enable this extension") ]
+ ptext SLIT("Use -ftype-families to enable this extension") ]
+exportClashErr :: GlobalRdrEnv -> Name -> Name -> IE RdrName -> IE RdrName
+ -> Message
exportClashErr global_env name1 name2 ie1 ie2
= vcat [ ptext SLIT("Conflicting exports for") <+> quotes (ppr occ) <> colon
exportClashErr global_env name1 name2 ie1 ie2
= vcat [ ptext SLIT("Conflicting exports for") <+> quotes (ppr occ) <> colon
- , ppr_export ie1 name1
- , ppr_export ie2 name2 ]
+ , ppr_export ie1' name1'
+ , ppr_export ie2' name2' ]
where
occ = nameOccName name1
ppr_export ie name = nest 2 (quotes (ppr ie) <+> ptext SLIT("exports") <+>
where
occ = nameOccName name1
ppr_export ie name = nest 2 (quotes (ppr ie) <+> ptext SLIT("exports") <+>
@@
-1321,6
+1327,10
@@
exportClashErr global_env name1 name2 ie1 ie2
= case lookupGRE_Name global_env name of
(gre:_) -> gre
[] -> pprPanic "exportClashErr" (ppr name)
= case lookupGRE_Name global_env name of
(gre:_) -> gre
[] -> pprPanic "exportClashErr" (ppr name)
+ get_loc name = nameSrcLoc $ gre_name $ get_gre name
+ (name1', ie1', name2', ie2') = if get_loc name1 < get_loc name2
+ then (name1, ie1, name2, ie2)
+ else (name2, ie2, name1, ie1)
addDupDeclErr :: Name -> Name -> TcRn ()
addDupDeclErr name_a name_b
addDupDeclErr :: Name -> Name -> TcRn ()
addDupDeclErr name_a name_b
@@
-1349,4
+1359,7
@@
nullModuleExport mod
moduleDeprec mod txt
= sep [ ptext SLIT("Module") <+> quotes (ppr mod) <+> ptext SLIT("is deprecated:"),
nest 4 (ppr txt) ]
moduleDeprec mod txt
= sep [ ptext SLIT("Module") <+> quotes (ppr mod) <+> ptext SLIT("is deprecated:"),
nest 4 (ppr txt) ]
+
+implicitPreludeWarn
+ = ptext SLIT("Module `Prelude' implicitly imported")
\end{code}
\end{code}