X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fiface%2FLoadIface.lhs;h=8c496f76efcbfe12d315629e66b90fc854fc28c7;hb=9d7da331989abcd1844e9d03b8d1e4163796fa85;hp=9415ac07586957f9988e5c2232cd11e90e091868;hpb=dd313897eb9a14bcc7b81f97e4f2292c30039efd;p=ghc-hetmet.git diff --git a/ghc/compiler/iface/LoadIface.lhs b/ghc/compiler/iface/LoadIface.lhs index 9415ac0..8c496f7 100644 --- a/ghc/compiler/iface/LoadIface.lhs +++ b/ghc/compiler/iface/LoadIface.lhs @@ -5,10 +5,10 @@ \begin{code} module LoadIface ( - loadHomeInterface, loadInterface, loadDecls, - loadSrcInterface, loadOrphanModules, + loadInterface, loadHomeInterface, loadWiredInHomeIface, + loadSrcInterface, loadSysInterface, loadOrphanModules, findAndReadIface, readIface, -- Used when reading the module's old interface - ifaceStats, discardDeclPrags, + loadDecls, ifaceStats, discardDeclPrags, initExternalPackageState ) where @@ -20,8 +20,7 @@ import Packages ( PackageState(..), PackageIdH(..), isHomePackage ) import DynFlags ( DynFlags(..), DynFlag( Opt_IgnoreInterfacePragmas ), isOneShot ) import IfaceSyn ( IfaceDecl(..), IfaceConDecl(..), IfaceClassOp(..), - IfaceConDecls(..), IfaceExpr(..), IfaceIdInfo(..), - IfaceType(..), IfaceExtName ) + IfaceConDecls(..), IfaceIdInfo(..) ) import IfaceEnv ( newGlobalBinder ) import HscTypes ( ModIface(..), TyThing, emptyModIface, EpsStats(..), addEpsInStats, ExternalPackageState(..), @@ -41,12 +40,12 @@ import PrelRules ( builtinRules ) import Rules ( extendRuleBaseList, mkRuleBase ) import InstEnv ( emptyInstEnv, extendInstEnvList ) import Name ( Name {-instance NamedThing-}, getOccName, - nameModule, isInternalName ) + nameModule, nameIsLocalOrFrom, isWiredInName ) import NameEnv import MkId ( seqId ) import Module ( Module, ModLocation(ml_hi_file), emptyModuleEnv, addBootSuffix_maybe, - extendModuleEnv, lookupModuleEnv, moduleUserString + extendModuleEnv, lookupModuleEnv, moduleString ) import OccName ( OccName, mkOccEnv, lookupOccEnv, mkClassTyConOcc, mkClassDataConOcc, mkSuperDictSelOcc, mkDataConWrapperOcc, mkDataConWorkerOcc ) @@ -102,8 +101,24 @@ loadOrphanModules mods --------------- loadHomeInterface :: SDoc -> Name -> TcRn ModIface loadHomeInterface doc name - = ASSERT2( not (isInternalName name), ppr name <+> parens doc ) - initIfaceTcRn $ loadSysInterface doc (nameModule name) + = do { +#ifdef DEBUG + -- Should not be called with a name from the module being compiled + this_mod <- getModule + ; ASSERT2( not (nameIsLocalOrFrom this_mod name), ppr name <+> parens doc ) +#endif + initIfaceTcRn $ loadSysInterface doc (nameModule name) + } + +--------------- +loadWiredInHomeIface :: Name -> IfM lcl () +-- A IfM function to load the home interface for a wired-in thing, +-- so that we're sure that we see its instance declarations and rules +loadWiredInHomeIface name + = ASSERT( isWiredInName name ) + do { loadSysInterface doc (nameModule name); return () } + where + doc = ptext SLIT("Need home interface for wired-in thing") <+> ppr name --------------- loadSysInterface :: SDoc -> Module -> IfM lcl ModIface @@ -191,7 +206,7 @@ loadInterface doc_str mod from | otherwise -> let - loc_doc = text file_path <+> colon + loc_doc = text file_path in initIfaceLcl mod loc_doc $ do @@ -297,7 +312,7 @@ loadDecl ignore_prags mod (_version, decl) -- imported name, to fix the module correctly in the cache mk_new_bndr mod mb_parent occ = newGlobalBinder mod occ mb_parent - (importedSrcLoc (moduleUserString mod)) + (importedSrcLoc (moduleString mod)) doc = ptext SLIT("Declaration for") <+> ppr (ifName decl)