X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FGHC.hs;h=52212d6b6a948d85601779f1f1027030593ff21a;hb=5ddee764beb312933256096d03df7c3ec47ac452;hp=5c0dbcd932f2c2ab525f086664ab3ae744b7ae71;hpb=cd290fc88d35d5a32c994664baa56a5eae250e9e;p=ghc-hetmet.git diff --git a/compiler/main/GHC.hs b/compiler/main/GHC.hs index 5c0dbcd..52212d6 100644 --- a/compiler/main/GHC.hs +++ b/compiler/main/GHC.hs @@ -82,11 +82,12 @@ module GHC ( RunResult(..), runStmt, showModule, + isModuleInterpreted, compileExpr, HValue, dynCompileExpr, lookupName, getBreakpointHandler, setBreakpointHandler, - obtainTerm, + obtainTerm, obtainTerm1, #endif -- * Abstract syntax elements @@ -338,9 +339,8 @@ defaultErrorHandler dflags inner = defaultCleanupHandler :: DynFlags -> IO a -> IO a defaultCleanupHandler dflags inner = -- make sure we clean up after ourselves - later (unless (dopt Opt_KeepTmpFiles dflags) $ - do cleanTempFiles dflags - cleanTempDirs dflags + later (do cleanTempFiles dflags + cleanTempDirs dflags ) -- exceptions will be blocked while we clean the temporary files, -- so there shouldn't be any difficulty if we receive further @@ -2208,17 +2208,26 @@ foreign import "rts_evalStableIO" {- safe -} -- more informative than the C type! -} + ----------------------------------------------------------------------------- -- show a module and it's source/object filenames showModule :: Session -> ModSummary -> IO String -showModule s mod_summary = withSession s $ \hsc_env -> do +showModule s mod_summary = withSession s $ \hsc_env -> + isModuleInterpreted s mod_summary >>= \interpreted -> + return (showModMsg (hscTarget(hsc_dflags hsc_env)) interpreted mod_summary) + +isModuleInterpreted :: Session -> ModSummary -> IO Bool +isModuleInterpreted s mod_summary = withSession s $ \hsc_env -> case lookupUFM (hsc_HPT hsc_env) (ms_mod_name mod_summary) of Nothing -> panic "missing linkable" - Just mod_info -> return (showModMsg (hscTarget (hsc_dflags hsc_env)) (not obj_linkable) mod_summary) + Just mod_info -> return (not obj_linkable) where obj_linkable = isObjectLinkable (expectJust "showModule" (hm_linkable mod_info)) +----------------------------------------------------------------------------- +-- Breakpoint handlers + getBreakpointHandler :: Session -> IO (Maybe (BkptHandler Module)) getBreakpointHandler session = getSessionDynFlags session >>= return . bkptHandler @@ -2246,6 +2255,9 @@ reinstallBreakpointHandlers session = do initDynLinker dflags extendLinkEnv linkEnv +----------------------------------------------------------------------- +-- Jump functions + type SiteInfo = (String, String, SiteNumber) jumpFunction, jumpAutoFunction :: Session -> BkptHandler Module -> Int -> [Opaque] -> SiteInfo -> String -> b -> b @@ -2265,8 +2277,7 @@ jumpFunction session handler ptr hValues siteInfo locmsg b jumpFunctionM session handler (I# idsPtr) wrapped_hValues site locmsg b = do ids <- deRefStablePtr (castPtrToStablePtr (Ptr (int2Addr# idsPtr))) - ASSERT (length ids == length wrapped_hValues) return () - let hValues = [unsafeCoerce# hv | O hv <- wrapped_hValues] + let hValues = unsafeCoerce# b : [unsafeCoerce# hv | O hv <- wrapped_hValues] handleBreakpoint handler session (zip ids hValues) site locmsg b jumpAutoFunction session handler ptr hValues siteInfo locmsg b @@ -2286,6 +2297,9 @@ mkSite :: SiteInfo -> BkptLocation Module mkSite (pkgName, modName, sitenum) = (mkModule (stringToPackageId pkgName) (mkModuleName modName), sitenum) +obtainTerm1 :: Session -> Bool -> Maybe Type -> a -> IO Term +obtainTerm1 sess force mb_ty x = withSession sess $ \hsc_env -> cvObtainTerm hsc_env force mb_ty (unsafeCoerce# x) + obtainTerm :: Session -> Bool -> Id -> IO (Maybe Term) obtainTerm sess force id = withSession sess $ \hsc_env -> do mb_v <- getHValue (varName id)