From def40b89e722212bb64dd9d2fde54c429886759f Mon Sep 17 00:00:00 2001 From: simonpj Date: Fri, 22 Apr 2005 02:10:10 +0000 Subject: [PATCH] [project @ 2005-04-22 02:10:10 by simonpj] Fix hi-boot interface-finding code --- ghc/compiler/iface/TcIface.lhs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/ghc/compiler/iface/TcIface.lhs b/ghc/compiler/iface/TcIface.lhs index 195e99d..685d0be 100644 --- a/ghc/compiler/iface/TcIface.lhs +++ b/ghc/compiler/iface/TcIface.lhs @@ -30,7 +30,7 @@ import TypeRep ( Type(..), PredType(..) ) import TyCon ( TyCon, tyConName, isSynTyCon ) import HscTypes ( ExternalPackageState(..), EpsStats(..), PackageInstEnv, HscEnv, TyThing(..), tyThingClass, tyThingTyCon, - ModIface(..), ModDetails(..), ModGuts, + ModIface(..), ModDetails(..), ModGuts, HomeModInfo(..), emptyModDetails, extendTypeEnv, lookupTypeEnv, lookupType, typeEnvIds ) import InstEnv ( extendInstEnvList ) @@ -64,7 +64,7 @@ import ErrUtils ( Message ) import Maybes ( MaybeErr(..) ) import SrcLoc ( noSrcLoc ) import Util ( zipWithEqual, dropList, equalLength ) -import DynFlags ( DynFlag(..) ) +import DynFlags ( DynFlag(..), isOneShot ) \end{code} This module takes @@ -222,9 +222,21 @@ tcHiBootIface :: Module -> TcRn ModDetails tcHiBootIface mod = do { traceIf (text "loadHiBootInterface" <+> ppr mod) - -- We're read all the direct imports by now, so eps_is_boot will - -- record if any of our imports mention us by way of hi-boot file - ; eps <- getEps + ; mode <- getGhciMode + ; if not (isOneShot mode) + -- In --make and interactive mode, if this module has an hs-boot file + -- we'll have compiled it already, and it'll be in the HPT + then do { hpt <- getHpt + ; case lookupModuleEnv hpt mod of + Just info -> return (hm_details info) + Nothing -> return emptyModDetails } + else do + + -- OK, so we're in one-shot mode. + -- In that case, we're read all the direct imports by now, + -- so eps_is_boot will record if any of our imports mention us by + -- way of hi-boot file + { eps <- getEps ; case lookupModuleEnv (eps_is_boot eps) mod of { Nothing -> return emptyModDetails ; -- The typical case @@ -242,7 +254,7 @@ tcHiBootIface mod ; case read_result of Failed err -> failWithTc (elaborate err) Succeeded (iface, _path) -> typecheckIface iface - }}} + }}}} where need = ptext SLIT("Need the hi-boot interface for") <+> ppr mod <+> ptext SLIT("to compare against the Real Thing") -- 1.7.10.4