X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FGHC.hs;h=d34b0f3b5b7a9aeaac6c4f9e0553f07835f7d799;hb=85174045bbcc05adb28447d423794d1f087da59e;hp=52212d6b6a948d85601779f1f1027030593ff21a;hpb=e81584fdd6320e5d5b29be5d89ff7590dfc531fb;p=ghc-hetmet.git diff --git a/compiler/main/GHC.hs b/compiler/main/GHC.hs index 52212d6..d34b0f3 100644 --- a/compiler/main/GHC.hs +++ b/compiler/main/GHC.hs @@ -255,7 +255,7 @@ import SysTools ( initSysTools, cleanTempFiles, cleanTempFilesExcept, cleanTempDirs ) import Module import UniqFM -import PackageConfig ( PackageId, stringToPackageId ) +import PackageConfig ( PackageId, stringToPackageId, mainPackageId ) import FiniteMap import Panic import Digraph @@ -1929,7 +1929,7 @@ findModule' hsc_env mod_name maybe_pkg = case lookupUFM hpt mod_name of Just mod_info -> return (mi_module (hm_iface mod_info)) _not_a_home_module -> do - res <- findImportedModule hsc_env mod_name Nothing + res <- findImportedModule hsc_env mod_name maybe_pkg case res of Found _ m | modulePackageId m /= this_pkg -> return m | otherwise -> throwDyn (CmdLineError (showSDoc $ @@ -2206,6 +2206,9 @@ sandboxIO thing = do foreign import "rts_evalStableIO" {- safe -} rts_evalStableIO :: StablePtr (IO a) -> Ptr (StablePtr a) -> IO CInt -- more informative than the C type! + +XXX the type of rts_evalStableIO no longer matches the above + -} @@ -2258,44 +2261,41 @@ reinstallBreakpointHandlers session = do ----------------------------------------------------------------------- -- Jump functions -type SiteInfo = (String, String, SiteNumber) -jumpFunction, jumpAutoFunction :: Session -> BkptHandler Module -> Int -> [Opaque] - -> SiteInfo -> String -> b -> b -jumpCondFunction :: Session -> BkptHandler Module -> Int -> [Opaque] - -> SiteInfo -> String -> Bool -> b -> b -jumpFunctionM :: Session -> BkptHandler a -> Int -> [Opaque] -> BkptLocation a - -> String -> b -> IO b +type SiteInfo = (String, SiteNumber) +jumpFunction, jumpAutoFunction :: Session -> BkptHandler Module -> SiteInfo -> (Int, [Opaque], String) -> b -> b +jumpCondFunction :: Session -> BkptHandler Module -> SiteInfo -> (Int, [Opaque], String) -> Bool -> b -> b +jumpFunctionM :: Session -> BkptHandler a -> BkptLocation a -> (Int, [Opaque], String) -> b -> IO b -jumpCondFunction _ _ _ _ _ _ False b = b -jumpCondFunction session handler ptr hValues siteInfo locmsg True b - = jumpFunction session handler ptr hValues siteInfo locmsg b +jumpCondFunction _ _ _ _ False b = b +jumpCondFunction session handler site args True b + = jumpFunction session handler site args b -jumpFunction session handler ptr hValues siteInfo locmsg b +jumpFunction session handler siteInfo args b | site <- mkSite siteInfo - = unsafePerformIO $ jumpFunctionM session handler ptr hValues site locmsg b + = unsafePerformIO $ jumpFunctionM session handler site args b -jumpFunctionM session handler (I# idsPtr) wrapped_hValues site locmsg b = +jumpFunctionM session handler site (I# idsPtr, wrapped_hValues, locmsg) b = do ids <- deRefStablePtr (castPtrToStablePtr (Ptr (int2Addr# idsPtr))) 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 +jumpAutoFunction session handler siteInfo args b | site <- mkSite siteInfo = unsafePerformIO $ do break <- isAutoBkptEnabled handler session site if break - then jumpFunctionM session handler ptr hValues site locmsg b + then jumpFunctionM session handler site args b else return b -jumpStepByStepFunction session handler ptr hValues siteInfo locmsg b +jumpStepByStepFunction session handler siteInfo args b | site <- mkSite siteInfo = unsafePerformIO $ do - jumpFunctionM session handler ptr hValues site locmsg b + jumpFunctionM session handler site args b mkSite :: SiteInfo -> BkptLocation Module -mkSite (pkgName, modName, sitenum) = - (mkModule (stringToPackageId pkgName) (mkModuleName modName), sitenum) +mkSite ( modName, sitenum) = + (mkModule mainPackageId (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)