- imp_mods = [ mod | ImportDecl mod _ _ _ _ <- src_imps ]
- imp_warns = listToBag (map dupImportWarn imp_dups)
- prel_warns = listToBag (map qualPreludeImportWarn qual_prels)
-
- (_, imp_dups) = removeDups cmp_mod src_imps
- cmp_mod (ImportDecl m1 _ _ _ _) (ImportDecl m2 _ _ _ _) = cmpPString m1 m2
- qual_prels = [imp | imp@(ImportDecl mod qual _ _ _) <- src_imps,
- fromPrelude mod && qual]
- in
- return (vals, tcs, imp_mods, unquals, fixes, errs,
- prel_warns `unionBags` imp_warns `unionBags` warns)
- where
- explicit_prelude_import
- = null [() | (ImportDecl mod qual _ _ _) <- src_imps,
- fromPrelude mod && not qual]
-
- qprel_imp = if opt_NoImplicitPrelude
- then [{-the flag really means it: *NO* implicit "import Prelude" -}]
- else [ImportDecl pRELUDE True Nothing Nothing mkIfaceSrcLoc]
-
- prel_imp = if not explicit_prelude_import || opt_NoImplicitPrelude
- then
- [ {-prelude imported explicitly => no import Prelude-} ]
- else
- [ImportDecl pRELUDE False Nothing Nothing mkIfaceSrcLoc]
-
-doImports iface_cache i_info us []
- = return (emptyBag, emptyBag, emptyBag, emptyBag, emptyBag, emptyBag, emptyBag)
-doImports iface_cache i_info@(g_info,done_vals,done_tcs,imp_fn) us (imp:imps)
- = doImport iface_cache i_info us1 imp
- >>= \ (vals1, tcs1, unquals1, fixes1, errs1, warns1, imps1) ->
- let
- new_vals = [ (moduleNamePair rn, rn) | (_,rn) <- bagToList vals1,
- not (maybeToBool (lookupFM done_vals (moduleNamePair rn))) ]
- -- moduleNamePair computed twice
- ext_vals = addListToFM done_vals new_vals
-
- new_tcs = [ (moduleNamePair rn, rn) | (_,rn) <- bagToList tcs1,
- not (maybeToBool (lookupFM done_tcs (moduleNamePair rn))) ]
- ext_tcs = addListToFM done_tcs new_tcs
- in
- doImports iface_cache (g_info,ext_vals,ext_tcs,imp_fn) us2 imps
- >>= \ (vals2, tcs2, unquals2, fixes2, errs2, warns2, imps2) ->
- return (vals1 `unionBags` vals2,
- tcs1 `unionBags` tcs2,
- unquals1 `unionBags` unquals2,
- fixes1 `unionBags` fixes2,
- errs1 `unionBags` errs2,
- warns1 `unionBags` warns2,
- imps1 `unionBags` imps2)
- where
- (us1, us2) = splitUniqSupply us
-
-
-doImport :: IfaceCache
- -> ImportNameInfo
- -> UniqSupply
- -> RdrNameImportDecl
- -> IO (Bag (RdrName,RnName), -- values
- Bag (RdrName,RnName), -- tycons/classes
- Bag (Module,RnName), -- unqual imports
- Bag RenamedFixityDecl,
- Bag Error,
- Bag Warning,
- Bag (RnName,ExportFlag)) -- import flags
-
-doImport iface_cache info us (ImportDecl mod qual maybe_as maybe_spec src_loc)
- = cachedIface iface_cache mod >>= \ maybe_iface ->
- case maybe_iface of
- Failed err ->
- return (emptyBag, emptyBag, emptyBag, emptyBag,
- unitBag err, emptyBag, emptyBag)
- Succeeded iface ->
- let
- (b_vals, b_tcs, maybe_spec') = getBuiltins info mod maybe_spec
- (ies, chk_ies, get_errs) = getOrigIEs iface maybe_spec'
- in
- doOrigIEs iface_cache info mod src_loc us ies
- >>= \ (ie_vals, ie_tcs, imp_flags, errs, warns) ->
- accumulate (map (checkOrigIE iface_cache) chk_ies)
- >>= \ chk_errs_warns ->
- accumulate (map (getFixityDecl iface_cache) (bagToList ie_vals))
- >>= \ fix_maybes_errs ->
- let
- (chk_errs, chk_warns) = unzip chk_errs_warns
- (fix_maybes, fix_errs) = unzip fix_maybes_errs