Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/4a0973bb25f8d328f1a41d43d9f45c374178113c

>---------------------------------------------------------------

commit 4a0973bb25f8d328f1a41d43d9f45c374178113c
Author: Simon Marlow <[email protected]>
Date:   Mon Feb 13 13:22:20 2012 +0000

    Revert "Don't add a bad import to the saved context."
    
    This reverts commit e5272d9bf2a65b7da8364803fcafbd2012b7de97.
    
    Reverting to fix validate regression, and pending a redesign of the
    changes.

>---------------------------------------------------------------

 ghc/InteractiveUI.hs |   45 +++++++++++++++++----------------------------
 1 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/ghc/InteractiveUI.hs b/ghc/InteractiveUI.hs
index 8d0205d..45bac2c 100644
--- a/ghc/InteractiveUI.hs
+++ b/ghc/InteractiveUI.hs
@@ -1645,13 +1645,16 @@ addImportToContext str = do
      st { remembered_ctx = addNotSubsumed (IIDecl idecl) (remembered_ctx st) }
   setGHCContextFromGHCiState
 
--- TODO: ARGH! This is a mess! 'checkAdd' is called from many places and we
--- have about 4 different variants of setGHCContext. All this import code needs
--- to be refactored to something saner. We should do the sanity check on an
--- import in 'checkAdd' and checkAdd only and only need to call checkAdd from
--- one place ('setGHCContetFromGHCiState'). The code isn't even logically
--- ordered!
-checkAdd :: Bool -> String -> GHCi (InteractiveImport)
+setContext :: [String] -> [String] -> GHCi ()
+setContext starred not_starred = do
+  is1 <- mapM (checkAdd True)  starred
+  is2 <- mapM (checkAdd False) not_starred
+  let iss = foldr addNotSubsumed [] (is1++is2)
+  modifyGHCiState $ \st -> st { remembered_ctx = iss, transient_ctx = [] }
+                                -- delete the transient context
+  setGHCContextFromGHCiState
+
+checkAdd :: Bool -> String -> GHCi InteractiveImport
 checkAdd star mstr = do
   dflags <- getDynFlags 
   case safeLanguageOn dflags of
@@ -1661,8 +1664,8 @@ checkAdd star mstr = do
                s <- GHC.isModuleTrusted m
                case s of
                  True  -> return $ IIDecl (simpleImportDecl $ moduleName m)
-                 False -> ghcError $ CmdLineError $
-                     "can't import " ++ mstr ++ " as it isn't trusted."
+                 False -> ghcError $ CmdLineError $ "can't import " ++ mstr
+                                                 ++ " as it isn't trusted."
 
     False | star -> do m <- wantInterpretedModule mstr
                        return $ IIModule m
@@ -1684,26 +1687,12 @@ checkAdd star mstr = do
 --
 setGHCContextFromGHCiState :: GHCi ()
 setGHCContextFromGHCiState = do
+  let ok (IIModule m) = checkAdd True  (moduleNameString (moduleName m))
+      ok (IIDecl   d) = checkAdd False (moduleNameString (unLoc (ideclName d)))
   st <- getGHCiState
-  goodTran <- filterM (tryBool . ok) $ transient_ctx st
-  goodRemb <- filterM (tryBool . ok) $ remembered_ctx st
-  -- drop bad imports so we don't keep replaying it to the user!
-  modifyGHCiState $ \s -> s { transient_ctx  = goodTran }
-  modifyGHCiState $ \s -> s { remembered_ctx = goodRemb }
-  setGHCContext (goodTran ++ goodRemb)
+  iidecls <- filterM (tryBool . ok) (transient_ctx st ++ remembered_ctx st)
+  setGHCContext iidecls
 
-  where 
-    ok (IIModule m) = checkAdd True  (moduleNameString (moduleName m))
-    ok (IIDecl   d) = checkAdd False (moduleNameString (unLoc (ideclName d)))
-
-setContext :: [String] -> [String] -> GHCi ()
-setContext starred not_starred = do
-  is1 <- mapM (checkAdd True)  starred
-  is2 <- mapM (checkAdd False) not_starred
-  let iss = foldr addNotSubsumed [] (is1++is2)
-  modifyGHCiState $ \st -> st { remembered_ctx = iss, transient_ctx = [] }
-                                -- delete the transient context
-  setGHCContextFromGHCiState
 
 -- | Sets the GHC contexts to the given set of imports, adding a Prelude
 -- import if there isn't an explicit one already.
@@ -2756,7 +2745,7 @@ tryBool :: GHCi a -> GHCi Bool
 tryBool m = do
     r <- ghciTry m
     case r of
-      Left e  -> showException e >> return False
+      Left _  -> return False
       Right _ -> return True
 
 -- ----------------------------------------------------------------------------



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to