X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=GhcTools.hs;h=9c5038cfd42586ba8ccd6c7b1aca998d06a8b7b7;hb=998e440a7fa765685e1ed500c871058a33129b1f;hp=dcfab0fe4920e3302ebb2d0bd0be92563127220c;hpb=d3b6fd0ae1b3e9ed30df97a7e03e389bd3f8d26b;p=matthijs%2Fmaster-project%2Fc%CE%BBash.git diff --git a/GhcTools.hs b/GhcTools.hs index dcfab0f..9c5038c 100644 --- a/GhcTools.hs +++ b/GhcTools.hs @@ -6,6 +6,10 @@ import qualified System.IO.Unsafe import qualified GHC import qualified GHC.Paths import qualified DynFlags +import qualified TcRnMonad +import qualified MonadUtils +import qualified HscTypes +import qualified PrelNames -- Change a DynFlag from within the Ghc monad. Strangely enough there seems to -- be no standard function to do exactly this. @@ -29,3 +33,12 @@ unsafeRunGhc m = dflags <- GHC.getSessionDynFlags GHC.setSessionDynFlags dflags m + +runTcM :: TcRnMonad.TcM a -> IO a +runTcM thing_inside = do + GHC.runGhc (Just GHC.Paths.libdir) $ do + dflags <- GHC.getSessionDynFlags + GHC.setSessionDynFlags dflags + env <- GHC.getSession + HscTypes.ioMsgMaybe . MonadUtils.liftIO . TcRnMonad.initTcPrintErrors env PrelNames.iNTERACTIVE $ do + thing_inside