8ccf276566ffc24e7828121baae6b85e3c63baa1
[ghc-hetmet.git] / ghc / compiler / rename / RnEnv.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[RnEnv]{Environment manipulation for the renamer monad}
5
6 \begin{code}
7 module RnEnv where              -- Export everything
8
9 #include "HsVersions.h"
10
11 import {-# SOURCE #-} RnHiFiles
12
13 import FlattenInfo      ( namesNeededForFlattening )
14 import HsSyn
15 import RdrHsSyn         ( RdrNameIE, RdrNameHsType, extractHsTyRdrTyVars )
16 import RdrName          ( RdrName, rdrNameModule, rdrNameOcc, isQual, isUnqual, isOrig,
17                           mkRdrUnqual, mkRdrQual, 
18                           lookupRdrEnv, foldRdrEnv, rdrEnvToList, elemRdrEnv,
19                           unqualifyRdrName
20                         )
21 import HsTypes          ( hsTyVarName, replaceTyVarName )
22 import HscTypes         ( Provenance(..), pprNameProvenance, hasBetterProv,
23                           ImportReason(..), GlobalRdrEnv, GlobalRdrElt(..), AvailEnv,
24                           AvailInfo, Avails, GenAvailInfo(..), NameSupply(..), 
25                           ModIface(..), GhciMode(..),
26                           Deprecations(..), lookupDeprec,
27                           extendLocalRdrEnv
28                         )
29 import RnMonad
30 import Name             ( Name, 
31                           getSrcLoc, nameIsLocalOrFrom,
32                           mkInternalName, mkExternalName,
33                           mkIPName, nameOccName, nameModule_maybe,
34                           setNameModuleAndLoc
35                         )
36 import NameEnv
37 import NameSet
38 import OccName          ( OccName, occNameUserString, occNameFlavour )
39 import Module           ( ModuleName, moduleName, mkVanillaModule, 
40                           mkSysModuleNameFS, moduleNameFS, WhereFrom(..) )
41 import PrelNames        ( mkUnboundName, 
42                           derivingOccurrences,
43                           mAIN_Name, main_RDR_Unqual,
44                           runMainName, intTyConName, 
45                           boolTyConName, funTyConName,
46                           unpackCStringName, unpackCStringFoldrName, unpackCStringUtf8Name,
47                           eqStringName, printName, 
48                           bindIOName, returnIOName, failIOName
49                         )
50 import TysWiredIn       ( unitTyCon )   -- A little odd
51 import FiniteMap
52 import UniqSupply
53 import SrcLoc           ( SrcLoc, noSrcLoc )
54 import Outputable
55 import ListSetOps       ( removeDups, equivClasses )
56 import Util             ( sortLt )
57 import BasicTypes       ( mapIPName )
58 import List             ( nub )
59 import UniqFM           ( lookupWithDefaultUFM )
60 import Maybe            ( mapMaybe )
61 import CmdLineOpts
62 import FastString       ( FastString )
63 \end{code}
64
65 %*********************************************************
66 %*                                                      *
67 \subsection{Making new names}
68 %*                                                      *
69 %*********************************************************
70
71 \begin{code}
72 newTopBinder :: Module -> RdrName -> SrcLoc -> RnM d Name
73         -- newTopBinder puts into the cache the binder with the
74         -- module information set correctly.  When the decl is later renamed,
75         -- the binding site will thereby get the correct module.
76         -- There maybe occurrences that don't have the correct Module, but
77         -- by the typechecker will propagate the binding definition to all 
78         -- the occurrences, so that doesn't matter
79
80 newTopBinder mod rdr_name loc
81   =     -- First check the cache
82
83         -- There should never be a qualified name in a binding position (except in instance decls)
84         -- The parser doesn't check this because the same parser parses instance decls
85     (if isQual rdr_name then
86         qualNameErr (text "In its declaration") (rdr_name,loc)
87      else
88         returnRn ()
89     )                           `thenRn_`
90
91     getNameSupplyRn             `thenRn` \ name_supply -> 
92     let 
93         occ = rdrNameOcc rdr_name
94         key = (moduleName mod, occ)
95         cache = nsNames name_supply
96     in
97     case lookupFM cache key of
98
99         -- A hit in the cache!  We are at the binding site of the name, and
100         -- this is the moment when we know all about 
101         --      a) the Name's host Module (in particular, which
102         --         package it comes from)
103         --      b) its defining SrcLoc
104         -- So we update this info
105
106         Just name -> let 
107                         new_name  = setNameModuleAndLoc name mod loc
108                         new_cache = addToFM cache key new_name
109                      in
110                      setNameSupplyRn (name_supply {nsNames = new_cache})        `thenRn_`
111 --                   traceRn (text "newTopBinder: overwrite" <+> ppr new_name) `thenRn_`
112                      returnRn new_name
113                      
114         -- Miss in the cache!
115         -- Build a completely new Name, and put it in the cache
116         -- Even for locally-defined names we use implicitImportProvenance; 
117         -- updateProvenances will set it to rights
118         Nothing -> let
119                         (us', us1) = splitUniqSupply (nsUniqs name_supply)
120                         uniq       = uniqFromSupply us1
121                         new_name   = mkExternalName uniq mod occ loc
122                         new_cache  = addToFM cache key new_name
123                    in
124                    setNameSupplyRn (name_supply {nsUniqs = us', nsNames = new_cache})   `thenRn_`
125 --                 traceRn (text "newTopBinder: new" <+> ppr new_name) `thenRn_`
126                    returnRn new_name
127
128
129 newGlobalName :: ModuleName -> OccName -> RnM d Name
130   -- Used for *occurrences*.  We make a place-holder Name, really just
131   -- to agree on its unique, which gets overwritten when we read in
132   -- the binding occurence later (newTopBinder)
133   -- The place-holder Name doesn't have the right SrcLoc, and its
134   -- Module won't have the right Package either.
135   --
136   -- (We have to pass a ModuleName, not a Module, because we may be
137   -- simply looking at an occurrence M.x in an interface file.)
138   --
139   -- This means that a renamed program may have incorrect info
140   -- on implicitly-imported occurrences, but the correct info on the 
141   -- *binding* declaration. It's the type checker that propagates the 
142   -- correct information to all the occurrences.
143   -- Since implicitly-imported names never occur in error messages,
144   -- it doesn't matter that we get the correct info in place till later,
145   -- (but since it affects DLL-ery it does matter that we get it right
146   --  in the end).
147 newGlobalName mod_name occ
148   = getNameSupplyRn             `thenRn` \ name_supply ->
149     let
150         key = (mod_name, occ)
151         cache = nsNames name_supply
152     in
153     case lookupFM cache key of
154         Just name -> -- traceRn (text "newGlobalName: hit" <+> ppr name) `thenRn_`
155                      returnRn name
156
157         Nothing   -> setNameSupplyRn (name_supply {nsUniqs = us', nsNames = new_cache})  `thenRn_`
158                      -- traceRn (text "newGlobalName: new" <+> ppr name)                  `thenRn_`
159                      returnRn name
160                   where
161                      (us', us1) = splitUniqSupply (nsUniqs name_supply)
162                      uniq       = uniqFromSupply us1
163                      mod        = mkVanillaModule mod_name
164                      name       = mkExternalName uniq mod occ noSrcLoc
165                      new_cache  = addToFM cache key name
166
167 newIPName rdr_name_ip
168   = getNameSupplyRn             `thenRn` \ name_supply ->
169     let
170         ipcache = nsIPs name_supply
171     in
172     case lookupFM ipcache key of
173         Just name_ip -> returnRn name_ip
174         Nothing      -> setNameSupplyRn new_ns  `thenRn_`
175                         returnRn name_ip
176                   where
177                      (us', us1)  = splitUniqSupply (nsUniqs name_supply)
178                      uniq        = uniqFromSupply us1
179                      name_ip     = mapIPName mk_name rdr_name_ip
180                      mk_name rdr_name = mkIPName uniq (rdrNameOcc rdr_name)
181                      new_ipcache = addToFM ipcache key name_ip
182                      new_ns      = name_supply {nsUniqs = us', nsIPs = new_ipcache}
183     where 
184         key = rdr_name_ip       -- Ensures that ?x and %x get distinct Names
185 \end{code}
186
187 %*********************************************************
188 %*                                                      *
189 \subsection{Looking up names}
190 %*                                                      *
191 %*********************************************************
192
193 Looking up a name in the RnEnv.
194
195 \begin{code}
196 lookupBndrRn rdr_name
197   = getLocalNameEnv             `thenRn` \ local_env ->
198     case lookupRdrEnv local_env rdr_name of 
199           Just name -> returnRn name
200           Nothing   -> lookupTopBndrRn rdr_name
201
202 lookupTopBndrRn rdr_name
203 -- Look up a top-level local binder.   We may be looking up an unqualified 'f',
204 -- and there may be several imported 'f's too, which must not confuse us.
205 -- So we have to filter out the non-local ones.
206 -- A separate function (importsFromLocalDecls) reports duplicate top level
207 -- decls, so here it's safe just to choose an arbitrary one.
208
209   | isOrig rdr_name
210         -- This is here just to catch the PrelBase defn of (say) [] and similar
211         -- The parser reads the special syntax and returns an Orig RdrName
212         -- But the global_env contains only Qual RdrNames, so we won't
213         -- find it there; instead just get the name via the Orig route
214   = lookupOrigName rdr_name
215
216   | otherwise
217   = getModeRn   `thenRn` \ mode ->
218     if isInterfaceMode mode
219         then lookupSysBinder rdr_name   
220                 -- lookupSysBinder uses the Module in the monad to set
221                 -- the correct module for the binder.  This is important because
222                 -- when GHCi is reading in an old interface, it just sucks it
223                 -- in entire (Rename.loadHomeDecls) which uses lookupTopBndrRn
224                 -- rather than via the iface file cache which uses newTopBndrRn
225                 -- We must get the correct Module into the thing.
226
227     else 
228     getModuleRn         `thenRn` \ mod ->
229     getGlobalNameEnv    `thenRn` \ global_env ->
230     case lookup_local mod global_env rdr_name of
231         Just name -> returnRn name
232         Nothing   -> failWithRn (mkUnboundName rdr_name)
233                                 (unknownNameErr rdr_name)
234   where
235     lookup_local mod global_env rdr_name
236       = case lookupRdrEnv global_env rdr_name of
237           Nothing   -> Nothing
238           Just gres -> case [n | GRE n _ _ <- gres, nameIsLocalOrFrom mod n] of
239                          []     -> Nothing
240                          (n:ns) -> Just n
241               
242
243 -- lookupSigOccRn is used for type signatures and pragmas
244 -- Is this valid?
245 --   module A
246 --      import M( f )
247 --      f :: Int -> Int
248 --      f x = x
249 -- It's clear that the 'f' in the signature must refer to A.f
250 -- The Haskell98 report does not stipulate this, but it will!
251 -- So we must treat the 'f' in the signature in the same way
252 -- as the binding occurrence of 'f', using lookupBndrRn
253 lookupSigOccRn :: RdrName -> RnMS Name
254 lookupSigOccRn = lookupBndrRn
255
256 -- lookupInstDeclBndr is used for the binders in an 
257 -- instance declaration.   Here we use the class name to
258 -- disambiguate.  
259
260 lookupInstDeclBndr :: Name -> RdrName -> RnMS Name
261         -- We use the selector name as the binder
262 lookupInstDeclBndr cls_name rdr_name
263   | isOrig rdr_name     -- Occurs in derived instances, where we just
264                         -- refer diectly to the right method
265   = lookupOrigName rdr_name
266
267   | otherwise   
268   = getGlobalAvails     `thenRn` \ avail_env ->
269     case lookupNameEnv avail_env cls_name of
270           -- The class itself isn't in scope, so cls_name is unboundName
271           -- e.g.   import Prelude hiding( Ord )
272           --        instance Ord T where ...
273           -- The program is wrong, but that should not cause a crash.
274         Nothing -> returnRn (mkUnboundName rdr_name)
275         Just (AvailTC _ ns) -> case [n | n <- ns, nameOccName n == occ] of
276                                 (n:ns)-> ASSERT( null ns ) returnRn n
277                                 []    -> failWithRn (mkUnboundName rdr_name)
278                                                     (unknownNameErr rdr_name)
279         other               -> pprPanic "lookupInstDeclBndr" (ppr cls_name)
280   where
281     occ = rdrNameOcc rdr_name
282
283 -- lookupOccRn looks up an occurrence of a RdrName
284 lookupOccRn :: RdrName -> RnMS Name
285 lookupOccRn rdr_name
286   = getLocalNameEnv                     `thenRn` \ local_env ->
287     case lookupRdrEnv local_env rdr_name of
288           Just name -> returnRn name
289           Nothing   -> lookupGlobalOccRn rdr_name
290
291 -- lookupGlobalOccRn is like lookupOccRn, except that it looks in the global 
292 -- environment.  It's used only for
293 --      record field names
294 --      class op names in class and instance decls
295
296 lookupGlobalOccRn rdr_name
297   = getModeRn           `thenRn` \ mode ->
298     if (isInterfaceMode mode)
299         then lookupIfaceName rdr_name
300         else 
301
302     getGlobalNameEnv    `thenRn` \ global_env ->
303     case mode of 
304         SourceMode -> lookupSrcName global_env rdr_name
305
306         CmdLineMode
307          | not (isQual rdr_name) -> 
308                 lookupSrcName global_env rdr_name
309
310                 -- We allow qualified names on the command line to refer to 
311                 -- *any* name exported by any module in scope, just as if 
312                 -- there was an "import qualified M" declaration for every 
313                 -- module.
314                 --
315                 -- First look up the name in the normal environment.  If
316                 -- it isn't there, we manufacture a new occurrence of an
317                 -- original name.
318          | otherwise -> 
319                 case lookupRdrEnv global_env rdr_name of
320                        Just _  -> lookupSrcName global_env rdr_name
321                        Nothing -> lookupQualifiedName rdr_name
322
323 -- a qualified name on the command line can refer to any module at all: we
324 -- try to load the interface if we don't already have it.
325 lookupQualifiedName :: RdrName -> RnM d Name
326 lookupQualifiedName rdr_name
327  = let 
328        mod = rdrNameModule rdr_name
329        occ = rdrNameOcc rdr_name
330    in
331    loadInterface (ppr rdr_name) mod ImportByUser `thenRn` \ iface ->
332    case  [ name | (_,avails) <- mi_exports iface,
333            avail             <- avails,
334            name              <- availNames avail,
335            nameOccName name == occ ] of
336       (n:ns) -> ASSERT (null ns) returnRn n
337       _      -> failWithRn (mkUnboundName rdr_name) (unknownNameErr rdr_name)
338
339 lookupSrcName :: GlobalRdrEnv -> RdrName -> RnM d Name
340 -- NB: passed GlobalEnv explicitly, not necessarily in RnMS monad
341 lookupSrcName global_env rdr_name
342   | isOrig rdr_name     -- Can occur in source code too
343   = lookupOrigName rdr_name
344
345   | otherwise
346   = case lookupRdrEnv global_env rdr_name of
347         Just [GRE name _ Nothing]       -> returnRn name
348         Just [GRE name _ (Just deprec)] -> warnDeprec name deprec       `thenRn_`
349                                            returnRn name
350         Just stuff@(GRE name _ _ : _)   -> addNameClashErrRn rdr_name stuff     `thenRn_`
351                                            returnRn name
352         Nothing                         -> failWithRn (mkUnboundName rdr_name)
353                                                       (unknownNameErr rdr_name)
354
355 lookupOrigName :: RdrName -> RnM d Name 
356 lookupOrigName rdr_name
357   = -- NO: ASSERT( isOrig rdr_name )
358     -- Now that .hi-boot files are read by the main parser, they contain
359     -- ordinary qualified names (which we treat as Orig names here).
360     newGlobalName (rdrNameModule rdr_name) (rdrNameOcc rdr_name)
361
362 lookupIfaceUnqual :: RdrName -> RnM d Name
363 lookupIfaceUnqual rdr_name
364   = ASSERT( isUnqual rdr_name )
365         -- An Unqual is allowed; interface files contain 
366         -- unqualified names for locally-defined things, such as
367         -- constructors of a data type.
368     getModuleRn                         `thenRn ` \ mod ->
369     newGlobalName (moduleName mod) (rdrNameOcc rdr_name)
370
371 lookupIfaceName :: RdrName -> RnM d Name
372 lookupIfaceName rdr_name
373   | isUnqual rdr_name = lookupIfaceUnqual rdr_name
374   | otherwise         = lookupOrigName rdr_name
375 \end{code}
376
377 @lookupOrigName@ takes an RdrName representing an {\em original}
378 name, and adds it to the occurrence pool so that it'll be loaded
379 later.  This is used when language constructs (such as monad
380 comprehensions, overloaded literals, or deriving clauses) require some
381 stuff to be loaded that isn't explicitly mentioned in the code.
382
383 This doesn't apply in interface mode, where everything is explicit,
384 but we don't check for this case: it does no harm to record an
385 ``extra'' occurrence and @lookupOrigNames@ isn't used much in
386 interface mode (it's only the @Nothing@ clause of @rnDerivs@ that
387 calls it at all I think).
388
389   \fbox{{\em Jan 98: this comment is wrong: @rnHsType@ uses it quite a bit.}}
390
391 \begin{code}
392 lookupOrigNames :: [RdrName] -> RnM d NameSet
393 lookupOrigNames rdr_names
394   = mapRn lookupOrigName rdr_names      `thenRn` \ names ->
395     returnRn (mkNameSet names)
396 \end{code}
397
398 lookupSysBinder is used for the "system binders" of a type, class, or
399 instance decl.  It ensures that the module is set correctly in the
400 name cache, and sets the provenance on the returned name too.  The
401 returned name will end up actually in the type, class, or instance.
402
403 \begin{code}
404 lookupSysBinder rdr_name
405   = ASSERT( isUnqual rdr_name )
406     getModuleRn                         `thenRn` \ mod ->
407     getSrcLocRn                         `thenRn` \ loc ->
408     newTopBinder mod rdr_name loc
409 \end{code}
410
411
412 %*********************************************************
413 %*                                                      *
414 \subsection{Implicit free vars and sugar names}
415 %*                                                      *
416 %*********************************************************
417
418 @getXImplicitFVs@ forces the renamer to slurp in some things which aren't
419 mentioned explicitly, but which might be needed by the type checker.
420
421 \begin{code}
422 getImplicitStmtFVs      -- Compiling a statement
423   = returnRn (mkFVs [printName, bindIOName, returnIOName, failIOName]
424               `plusFV` ubiquitousNames)
425                 -- These are all needed implicitly when compiling a statement
426                 -- See TcModule.tc_stmts
427
428 getImplicitModuleFVs decls      -- Compiling a module
429   = lookupOrigNames deriv_occs          `thenRn` \ deriving_names ->
430     returnRn (deriving_names `plusFV` ubiquitousNames)
431   where
432         -- deriv_classes is now a list of HsTypes, so a "normal" one
433         -- appears as a (HsClassP c []).  The non-normal ones for the new
434         -- newtype-deriving extension, and they don't require any
435         -- implicit names, so we can silently filter them out.
436         deriv_occs = [occ | TyClD (TyData {tcdDerivs = Just deriv_classes}) <- decls,
437                             HsClassP cls [] <- deriv_classes,
438                             occ <- lookupWithDefaultUFM derivingOccurrences [] cls ]
439
440 -- ubiquitous_names are loaded regardless, because 
441 -- they are needed in virtually every program
442 ubiquitousNames 
443   = mkFVs [unpackCStringName, unpackCStringFoldrName, 
444            unpackCStringUtf8Name, eqStringName]
445         -- Virtually every program has error messages in it somewhere
446
447   `plusFV`
448     mkFVs [getName unitTyCon, funTyConName, boolTyConName, intTyConName]
449         -- Add occurrences for very frequently used types.
450         --       (e.g. we don't want to be bothered with making funTyCon a
451         --        free var at every function application!)
452   `plusFV`
453     namesNeededForFlattening
454         -- this will be empty unless flattening is activated
455
456 checkMain ghci_mode mod_name gbl_env
457         -- LOOKUP main IF WE'RE IN MODULE Main
458         -- The main point of this is to drag in the declaration for 'main',
459         -- its in another module, and for the Prelude function 'runMain',
460         -- so that the type checker will find them
461         --
462         -- We have to return the main_name separately, because it's a
463         -- bona fide 'use', and should be recorded as such, but the others
464         -- aren't 
465   | mod_name /= mAIN_Name
466   = returnRn (Nothing, emptyFVs, emptyFVs)
467
468   | not (main_RDR_Unqual `elemRdrEnv` gbl_env)
469   = complain_no_main            `thenRn_`
470     returnRn (Nothing, emptyFVs, emptyFVs)
471
472   | otherwise
473   = lookupSrcName gbl_env main_RDR_Unqual       `thenRn` \ main_name ->
474     returnRn (Just main_name, unitFV main_name, unitFV runMainName)
475
476   where
477     complain_no_main | ghci_mode == Interactive = addWarnRn noMainMsg
478                      | otherwise                = addErrRn  noMainMsg
479                 -- In interactive mode, only warn about the absence of main
480 \end{code}
481
482 %************************************************************************
483 %*                                                                      *
484 \subsection{Re-bindable desugaring names}
485 %*                                                                      *
486 %************************************************************************
487
488 Haskell 98 says that when you say "3" you get the "fromInteger" from the
489 Standard Prelude, regardless of what is in scope.   However, to experiment
490 with having a language that is less coupled to the standard prelude, we're
491 trying a non-standard extension that instead gives you whatever "Prelude.fromInteger"
492 happens to be in scope.  Then you can
493         import Prelude ()
494         import MyPrelude as Prelude
495 to get the desired effect.
496
497 At the moment this just happens for
498   * fromInteger, fromRational on literals (in expressions and patterns)
499   * negate (in expressions)
500   * minus  (arising from n+k patterns)
501
502 We store the relevant Name in the HsSyn tree, in 
503   * HsIntegral/HsFractional     
504   * NegApp
505   * NPlusKPatIn
506 respectively.  Initially, we just store the "standard" name (PrelNames.fromIntegralName,
507 fromRationalName etc), but the renamer changes this to the appropriate user
508 name if Opt_NoImplicitPrelude is on.  That is what lookupSyntaxName does.
509
510 \begin{code}
511 lookupSyntaxName :: Name        -- The standard name
512                  -> RnMS Name   -- Possibly a non-standard name
513 lookupSyntaxName std_name
514   = doptRn Opt_NoImplicitPrelude        `thenRn` \ no_prelude -> 
515     if not no_prelude then
516         returnRn std_name       -- Normal case
517     else
518     let
519         rdr_name = mkRdrUnqual (nameOccName std_name)
520         -- Get the similarly named thing from the local environment
521     in
522     lookupOccRn rdr_name
523 \end{code}
524
525
526 %*********************************************************
527 %*                                                      *
528 \subsection{Binding}
529 %*                                                      *
530 %*********************************************************
531
532 \begin{code}
533 newLocalsRn :: [(RdrName,SrcLoc)]
534             -> RnMS [Name]
535 newLocalsRn rdr_names_w_loc
536  =  getNameSupplyRn             `thenRn` \ name_supply ->
537     let
538         (us', us1) = splitUniqSupply (nsUniqs name_supply)
539         uniqs      = uniqsFromSupply us1
540         names      = [ mkInternalName uniq (rdrNameOcc rdr_name) loc
541                      | ((rdr_name,loc), uniq) <- rdr_names_w_loc `zip` uniqs
542                      ]
543     in
544     setNameSupplyRn (name_supply {nsUniqs = us'})       `thenRn_`
545     returnRn names
546
547
548 bindLocatedLocalsRn :: SDoc     -- Documentation string for error message
549                     -> [(RdrName,SrcLoc)]
550                     -> ([Name] -> RnMS a)
551                     -> RnMS a
552 bindLocatedLocalsRn doc_str rdr_names_w_loc enclosed_scope
553   = getModeRn                           `thenRn` \ mode ->
554     getLocalNameEnv                     `thenRn` \ local_env ->
555     getGlobalNameEnv                    `thenRn` \ global_env ->
556
557         -- Check for duplicate names
558     checkDupOrQualNames doc_str rdr_names_w_loc `thenRn_`
559
560         -- Warn about shadowing, but only in source modules
561     let
562       check_shadow (rdr_name,loc)
563         |  rdr_name `elemRdrEnv` local_env 
564         || rdr_name `elemRdrEnv` global_env 
565         = pushSrcLocRn loc $ addWarnRn (shadowedNameWarn rdr_name)
566         | otherwise 
567         = returnRn ()
568     in
569
570     (case mode of
571         SourceMode -> ifOptRn Opt_WarnNameShadowing     $
572                       mapRn_ check_shadow rdr_names_w_loc
573         other      -> returnRn ()
574     )                                   `thenRn_`
575
576     newLocalsRn rdr_names_w_loc         `thenRn` \ names ->
577     let
578         new_local_env = addListToRdrEnv local_env (map fst rdr_names_w_loc `zip` names)
579     in
580     setLocalNameEnv new_local_env (enclosed_scope names)
581
582 bindCoreLocalRn :: RdrName -> (Name -> RnMS a) -> RnMS a
583   -- A specialised variant when renaming stuff from interface
584   -- files (of which there is a lot)
585   --    * one at a time
586   --    * no checks for shadowing
587   --    * always imported
588   --    * deal with free vars
589 bindCoreLocalRn rdr_name enclosed_scope
590   = getSrcLocRn                 `thenRn` \ loc ->
591     getLocalNameEnv             `thenRn` \ name_env ->
592     getNameSupplyRn             `thenRn` \ name_supply ->
593     let
594         (us', us1) = splitUniqSupply (nsUniqs name_supply)
595         uniq       = uniqFromSupply us1
596         name       = mkInternalName uniq (rdrNameOcc rdr_name) loc
597     in
598     setNameSupplyRn (name_supply {nsUniqs = us'})       `thenRn_`
599     let
600         new_name_env = extendRdrEnv name_env rdr_name name
601     in
602     setLocalNameEnv new_name_env (enclosed_scope name)
603
604 bindCoreLocalsRn []     thing_inside = thing_inside []
605 bindCoreLocalsRn (b:bs) thing_inside = bindCoreLocalRn b        $ \ name' ->
606                                        bindCoreLocalsRn bs      $ \ names' ->
607                                        thing_inside (name':names')
608
609 bindLocalNames names enclosed_scope
610   = getLocalNameEnv             `thenRn` \ name_env ->
611     setLocalNameEnv (extendLocalRdrEnv name_env names)
612                     enclosed_scope
613
614 bindLocalNamesFV names enclosed_scope
615   = bindLocalNames names $
616     enclosed_scope `thenRn` \ (thing, fvs) ->
617     returnRn (thing, delListFromNameSet fvs names)
618
619
620 -------------------------------------
621 bindLocalRn doc rdr_name enclosed_scope
622   = getSrcLocRn                                 `thenRn` \ loc ->
623     bindLocatedLocalsRn doc [(rdr_name,loc)]    $ \ (n:ns) ->
624     ASSERT( null ns )
625     enclosed_scope n
626
627 bindLocalsRn doc rdr_names enclosed_scope
628   = getSrcLocRn         `thenRn` \ loc ->
629     bindLocatedLocalsRn doc
630                         (rdr_names `zip` repeat loc)
631                         enclosed_scope
632
633         -- binLocalsFVRn is the same as bindLocalsRn
634         -- except that it deals with free vars
635 bindLocalsFVRn doc rdr_names enclosed_scope
636   = bindLocalsRn doc rdr_names          $ \ names ->
637     enclosed_scope names                `thenRn` \ (thing, fvs) ->
638     returnRn (thing, delListFromNameSet fvs names)
639
640 -------------------------------------
641 extendTyVarEnvFVRn :: [Name] -> RnMS (a, FreeVars) -> RnMS (a, FreeVars)
642         -- This tiresome function is used only in rnSourceDecl on InstDecl
643 extendTyVarEnvFVRn tyvars enclosed_scope
644   = bindLocalNames tyvars enclosed_scope        `thenRn` \ (thing, fvs) -> 
645     returnRn (thing, delListFromNameSet fvs tyvars)
646
647 bindTyVarsRn :: SDoc -> [HsTyVarBndr RdrName]
648               -> ([HsTyVarBndr Name] -> RnMS a)
649               -> RnMS a
650 bindTyVarsRn doc_str tyvar_names enclosed_scope
651   = getSrcLocRn                                 `thenRn` \ loc ->
652     let
653         located_tyvars = [(hsTyVarName tv, loc) | tv <- tyvar_names] 
654     in
655     bindLocatedLocalsRn doc_str located_tyvars  $ \ names ->
656     enclosed_scope (zipWith replaceTyVarName tyvar_names names)
657
658 bindPatSigTyVars :: [RdrNameHsType]
659                  -> RnMS (a, FreeVars)
660                  -> RnMS (a, FreeVars)
661   -- Find the type variables in the pattern type 
662   -- signatures that must be brought into scope
663
664 bindPatSigTyVars tys enclosed_scope
665   = getLocalNameEnv                     `thenRn` \ name_env ->
666     getSrcLocRn                         `thenRn` \ loc ->
667     let
668         forall_tyvars  = nub [ tv | ty <- tys,
669                                     tv <- extractHsTyRdrTyVars ty, 
670                                     not (tv `elemFM` name_env)
671                          ]
672                 -- The 'nub' is important.  For example:
673                 --      f (x :: t) (y :: t) = ....
674                 -- We don't want to complain about binding t twice!
675
676         located_tyvars = [(tv, loc) | tv <- forall_tyvars] 
677         doc_sig        = text "In a pattern type-signature"
678     in
679     bindLocatedLocalsRn doc_sig located_tyvars  $ \ names ->
680     enclosed_scope                              `thenRn` \ (thing, fvs) ->
681     returnRn (thing, delListFromNameSet fvs names)
682
683
684 -------------------------------------
685 checkDupOrQualNames, checkDupNames :: SDoc
686                                    -> [(RdrName, SrcLoc)]
687                                    -> RnM d ()
688         -- Works in any variant of the renamer monad
689
690 checkDupOrQualNames doc_str rdr_names_w_loc
691   =     -- Check for use of qualified names
692     mapRn_ (qualNameErr doc_str) quals  `thenRn_`
693     checkDupNames doc_str rdr_names_w_loc
694   where
695     quals = filter (isQual . fst) rdr_names_w_loc
696     
697 checkDupNames doc_str rdr_names_w_loc
698   =     -- Check for duplicated names in a binding group
699     mapRn_ (dupNamesErr doc_str) dups
700   where
701     (_, dups) = removeDups (\(n1,l1) (n2,l2) -> n1 `compare` n2) rdr_names_w_loc
702 \end{code}
703
704
705 %************************************************************************
706 %*                                                                      *
707 \subsection{GlobalRdrEnv}
708 %*                                                                      *
709 %************************************************************************
710
711 \begin{code}
712 mkGlobalRdrEnv :: ModuleName            -- Imported module (after doing the "as M" name change)
713                -> Bool                  -- True <=> want unqualified import
714                -> (Name -> Provenance)
715                -> Avails                -- Whats imported
716                -> Deprecations
717                -> GlobalRdrEnv
718
719 mkGlobalRdrEnv this_mod unqual_imp mk_provenance avails deprecs
720   = gbl_env2
721   where
722         -- Make the name environment.  We're talking about a 
723         -- single module here, so there must be no name clashes.
724         -- In practice there only ever will be if it's the module
725         -- being compiled.
726
727         -- Add qualified names for the things that are available
728         -- (Qualified names are always imported)
729     gbl_env1 = foldl add_avail emptyRdrEnv avails
730
731         -- Add unqualified names
732     gbl_env2 | unqual_imp = foldl add_unqual gbl_env1 (rdrEnvToList gbl_env1)
733              | otherwise  = gbl_env1
734
735     add_unqual env (qual_name, elts)
736         = foldl add_one env elts
737         where
738           add_one env elt = addOneToGlobalRdrEnv env unqual_name elt
739           unqual_name     = unqualifyRdrName qual_name
740         -- The qualified import should only have added one 
741         -- binding for each qualified name!  But if there's an error in
742         -- the module (multiple bindings for the same name) we may get
743         -- duplicates.  So the simple thing is to do the fold.
744
745     add_avail :: GlobalRdrEnv -> AvailInfo -> GlobalRdrEnv
746     add_avail env avail = foldl add_name env (availNames avail)
747
748     add_name env name   -- Add qualified name only
749         = addOneToGlobalRdrEnv env  (mkRdrQual this_mod occ) elt
750         where
751           occ  = nameOccName name
752           elt  = GRE name (mk_provenance name) (lookupDeprec deprecs name)
753 \end{code}
754
755 \begin{code}
756 plusGlobalRdrEnv :: GlobalRdrEnv -> GlobalRdrEnv -> GlobalRdrEnv
757 plusGlobalRdrEnv env1 env2 = plusFM_C combine_globals env1 env2
758
759 addOneToGlobalRdrEnv :: GlobalRdrEnv -> RdrName -> GlobalRdrElt -> GlobalRdrEnv
760 addOneToGlobalRdrEnv env rdr_name name = addToFM_C combine_globals env rdr_name [name]
761
762 delOneFromGlobalRdrEnv :: GlobalRdrEnv -> RdrName -> GlobalRdrEnv 
763 delOneFromGlobalRdrEnv env rdr_name = delFromFM env rdr_name
764
765 combine_globals :: [GlobalRdrElt]       -- Old
766                 -> [GlobalRdrElt]       -- New
767                 -> [GlobalRdrElt]
768 combine_globals ns_old ns_new   -- ns_new is often short
769   = foldr add ns_old ns_new
770   where
771     add n ns | any (is_duplicate n) ns_old = map (choose n) ns  -- Eliminate duplicates
772              | otherwise                   = n:ns
773
774     choose n m | n `beats` m = n
775                | otherwise   = m
776
777     (GRE n pn _) `beats` (GRE m pm _) = n==m && pn `hasBetterProv` pm
778
779     is_duplicate :: GlobalRdrElt -> GlobalRdrElt -> Bool
780     is_duplicate (GRE n1 LocalDef _) (GRE n2 LocalDef _) = False
781     is_duplicate (GRE n1 _        _) (GRE n2 _        _) = n1 == n2
782 \end{code}
783
784 We treat two bindings of a locally-defined name as a duplicate,
785 because they might be two separate, local defns and we want to report
786 and error for that, {\em not} eliminate a duplicate.
787
788 On the other hand, if you import the same name from two different
789 import statements, we {\em do} want to eliminate the duplicate, not report
790 an error.
791
792 If a module imports itself then there might be a local defn and an imported
793 defn of the same name; in this case the names will compare as equal, but
794 will still have different provenances.
795
796
797 @unQualInScope@ returns a function that takes a @Name@ and tells whether
798 its unqualified name is in scope.  This is put as a boolean flag in
799 the @Name@'s provenance to guide whether or not to print the name qualified
800 in error messages.
801
802 \begin{code}
803 unQualInScope :: GlobalRdrEnv -> Name -> Bool
804 -- True if 'f' is in scope, and has only one binding,
805 -- and the thing it is bound to is the name we are looking for
806 -- (i.e. false if A.f and B.f are both in scope as unqualified 'f')
807 --
808 -- This fn is only efficient if the shared 
809 -- partial application is used a lot.
810 unQualInScope env
811   = (`elemNameSet` unqual_names)
812   where
813     unqual_names :: NameSet
814     unqual_names = foldRdrEnv add emptyNameSet env
815     add rdr_name [GRE name _ _] unquals | isUnqual rdr_name = addOneToNameSet unquals name
816     add _        _              unquals                     = unquals
817 \end{code}
818
819
820 %************************************************************************
821 %*                                                                      *
822 \subsection{Avails}
823 %*                                                                      *
824 %************************************************************************
825
826 \begin{code}
827 plusAvail (Avail n1)       (Avail n2)       = Avail n1
828 plusAvail (AvailTC n1 ns1) (AvailTC n2 ns2) = AvailTC n2 (nub (ns1 ++ ns2))
829 -- Added SOF 4/97
830 #ifdef DEBUG
831 plusAvail a1 a2 = pprPanic "RnEnv.plusAvail" (hsep [ppr a1,ppr a2])
832 #endif
833
834 addAvail :: AvailEnv -> AvailInfo -> AvailEnv
835 addAvail avails avail = extendNameEnv_C plusAvail avails (availName avail) avail
836
837 unitAvailEnv :: AvailInfo -> AvailEnv
838 unitAvailEnv a = unitNameEnv (availName a) a
839
840 plusAvailEnv :: AvailEnv -> AvailEnv -> AvailEnv
841 plusAvailEnv = plusNameEnv_C plusAvail
842
843 availEnvElts = nameEnvElts
844
845 addAvailToNameSet :: NameSet -> AvailInfo -> NameSet
846 addAvailToNameSet names avail = addListToNameSet names (availNames avail)
847
848 availsToNameSet :: [AvailInfo] -> NameSet
849 availsToNameSet avails = foldl addAvailToNameSet emptyNameSet avails
850
851 availName :: GenAvailInfo name -> name
852 availName (Avail n)     = n
853 availName (AvailTC n _) = n
854
855 availNames :: GenAvailInfo name -> [name]
856 availNames (Avail n)      = [n]
857 availNames (AvailTC n ns) = ns
858
859 -------------------------------------
860 filterAvail :: RdrNameIE        -- Wanted
861             -> AvailInfo        -- Available
862             -> Maybe AvailInfo  -- Resulting available; 
863                                 -- Nothing if (any of the) wanted stuff isn't there
864
865 filterAvail ie@(IEThingWith want wants) avail@(AvailTC n ns)
866   | sub_names_ok = Just (AvailTC n (filter is_wanted ns))
867   | otherwise    = Nothing
868   where
869     is_wanted name = nameOccName name `elem` wanted_occs
870     sub_names_ok   = all (`elem` avail_occs) wanted_occs
871     avail_occs     = map nameOccName ns
872     wanted_occs    = map rdrNameOcc (want:wants)
873
874 filterAvail (IEThingAbs _) (AvailTC n ns)       = ASSERT( n `elem` ns ) 
875                                                   Just (AvailTC n [n])
876
877 filterAvail (IEThingAbs _) avail@(Avail n)      = Just avail            -- Type synonyms
878
879 filterAvail (IEVar _)      avail@(Avail n)      = Just avail
880 filterAvail (IEVar v)      avail@(AvailTC n ns) = Just (AvailTC n (filter wanted ns))
881                                                 where
882                                                   wanted n = nameOccName n == occ
883                                                   occ      = rdrNameOcc v
884         -- The second equation happens if we import a class op, thus
885         --      import A( op ) 
886         -- where op is a class operation
887
888 filterAvail (IEThingAll _) avail@(AvailTC _ _)   = Just avail
889         -- We don't complain even if the IE says T(..), but
890         -- no constrs/class ops of T are available
891         -- Instead that's caught with a warning by the caller
892
893 filterAvail ie avail = Nothing
894
895 -------------------------------------
896 groupAvails :: Module -> Avails -> [(ModuleName, Avails)]
897   -- Group by module and sort by occurrence
898   -- This keeps the list in canonical order
899 groupAvails this_mod avails 
900   = [ (mkSysModuleNameFS fs, sortLt lt avails)
901     | (fs,avails) <- fmToList groupFM
902     ]
903   where
904     groupFM :: FiniteMap FastString Avails
905         -- Deliberately use the FastString so we
906         -- get a canonical ordering
907     groupFM = foldl add emptyFM avails
908
909     add env avail = addToFM_C combine env mod_fs [avail']
910                   where
911                     mod_fs = moduleNameFS (moduleName avail_mod)
912                     avail_mod = case nameModule_maybe (availName avail) of
913                                           Just m  -> m
914                                           Nothing -> this_mod
915                     combine old _ = avail':old
916                     avail'        = sortAvail avail
917
918     a1 `lt` a2 = occ1 < occ2
919                where
920                  occ1  = nameOccName (availName a1)
921                  occ2  = nameOccName (availName a2)
922
923 sortAvail :: AvailInfo -> AvailInfo
924 -- Sort the sub-names into canonical order.
925 -- The canonical order has the "main name" at the beginning 
926 -- (if it's there at all)
927 sortAvail (Avail n) = Avail n
928 sortAvail (AvailTC n ns) | n `elem` ns = AvailTC n (n : sortLt lt (filter (/= n) ns))
929                          | otherwise   = AvailTC n (    sortLt lt ns)
930                          where
931                            n1 `lt` n2 = nameOccName n1 < nameOccName n2
932 \end{code}
933
934 \begin{code}
935 pruneAvails :: (Name -> Bool)   -- Keep if this is True
936             -> [AvailInfo]
937             -> [AvailInfo]
938 pruneAvails keep avails
939   = mapMaybe del avails
940   where
941     del :: AvailInfo -> Maybe AvailInfo -- Nothing => nothing left!
942     del (Avail n) | keep n    = Just (Avail n)
943                   | otherwise = Nothing
944     del (AvailTC n ns) | null ns'  = Nothing
945                        | otherwise = Just (AvailTC n ns')
946                        where
947                          ns' = filter keep ns
948 \end{code}
949
950 %************************************************************************
951 %*                                                                      *
952 \subsection{Free variable manipulation}
953 %*                                                                      *
954 %************************************************************************
955
956 \begin{code}
957 -- A useful utility
958 mapFvRn f xs = mapRn f xs       `thenRn` \ stuff ->
959                let
960                   (ys, fvs_s) = unzip stuff
961                in
962                returnRn (ys, plusFVs fvs_s)
963 \end{code}
964
965
966 %************************************************************************
967 %*                                                                      *
968 \subsection{Envt utility functions}
969 %*                                                                      *
970 %************************************************************************
971
972 \begin{code}
973 warnUnusedModules :: [ModuleName] -> RnM d ()
974 warnUnusedModules mods
975   = ifOptRn Opt_WarnUnusedImports (mapRn_ (addWarnRn . unused_mod) mods)
976   where
977     unused_mod m = vcat [ptext SLIT("Module") <+> quotes (ppr m) <+> 
978                            text "is imported, but nothing from it is used",
979                          parens (ptext SLIT("except perhaps to re-export instances visible in") <+>
980                                    quotes (ppr m))]
981
982 warnUnusedImports :: [(Name,Provenance)] -> RnM d ()
983 warnUnusedImports names
984   = ifOptRn Opt_WarnUnusedImports (warnUnusedBinds names)
985
986 warnUnusedLocalBinds, warnUnusedMatches :: [Name] -> RnM d ()
987 warnUnusedLocalBinds names
988   = ifOptRn Opt_WarnUnusedBinds (warnUnusedBinds [(n,LocalDef) | n<-names])
989
990 warnUnusedMatches names
991   = ifOptRn Opt_WarnUnusedMatches (warnUnusedGroup [(n,LocalDef) | n<-names])
992
993 -------------------------
994
995 warnUnusedBinds :: [(Name,Provenance)] -> RnM d ()
996 warnUnusedBinds names
997   = mapRn_ warnUnusedGroup  groups
998   where
999         -- Group by provenance
1000    groups = equivClasses cmp names
1001    (_,prov1) `cmp` (_,prov2) = prov1 `compare` prov2
1002  
1003
1004 -------------------------
1005
1006 warnUnusedGroup :: [(Name,Provenance)] -> RnM d ()
1007 warnUnusedGroup names
1008   | null filtered_names  = returnRn ()
1009   | not is_local         = returnRn ()
1010   | otherwise
1011   = pushSrcLocRn def_loc        $
1012     addWarnRn                   $
1013     sep [msg <> colon, nest 4 (fsep (punctuate comma (map (ppr.fst) filtered_names)))]
1014   where
1015     filtered_names = filter reportable names
1016     (name1, prov1) = head filtered_names
1017     (is_local, def_loc, msg)
1018         = case prov1 of
1019                 LocalDef -> (True, getSrcLoc name1, text "Defined but not used")
1020
1021                 NonLocalDef (UserImport mod loc _)
1022                         -> (True, loc, text "Imported from" <+> quotes (ppr mod) <+> text "but not used")
1023
1024     reportable (name,_) = case occNameUserString (nameOccName name) of
1025                                 ('_' : _) -> False
1026                                 zz_other  -> True
1027         -- Haskell 98 encourages compilers to suppress warnings about
1028         -- unused names in a pattern if they start with "_".
1029 \end{code}
1030
1031 \begin{code}
1032 addNameClashErrRn rdr_name (np1:nps)
1033   = addErrRn (vcat [ptext SLIT("Ambiguous occurrence") <+> quotes (ppr rdr_name),
1034                     ptext SLIT("It could refer to") <+> vcat (msg1 : msgs)])
1035   where
1036     msg1 = ptext  SLIT("either") <+> mk_ref np1
1037     msgs = [ptext SLIT("    or") <+> mk_ref np | np <- nps]
1038     mk_ref (GRE name prov _) = quotes (ppr name) <> comma <+> pprNameProvenance name prov
1039
1040 shadowedNameWarn shadow
1041   = hsep [ptext SLIT("This binding for"), 
1042                quotes (ppr shadow),
1043                ptext SLIT("shadows an existing binding")]
1044
1045 noMainMsg = ptext SLIT("No 'main' defined in module Main")
1046
1047 unknownNameErr name
1048   = sep [text flavour, ptext SLIT("not in scope:"), quotes (ppr name)]
1049   where
1050     flavour = occNameFlavour (rdrNameOcc name)
1051
1052 qualNameErr descriptor (name,loc)
1053   = pushSrcLocRn loc $
1054     addErrRn (vcat [ ptext SLIT("Invalid use of qualified name") <+> quotes (ppr name),
1055                      descriptor])
1056
1057 dupNamesErr descriptor ((name,loc) : dup_things)
1058   = pushSrcLocRn loc $
1059     addErrRn ((ptext SLIT("Conflicting definitions for") <+> quotes (ppr name))
1060               $$ 
1061               descriptor)
1062
1063 warnDeprec :: Name -> DeprecTxt -> RnM d ()
1064 warnDeprec name txt
1065   = ifOptRn Opt_WarnDeprecations        $
1066     addWarnRn (sep [ text (occNameFlavour (nameOccName name)) <+> 
1067                      quotes (ppr name) <+> text "is deprecated:", 
1068                      nest 4 (ppr txt) ])
1069 \end{code}
1070