Move function from where clause to top level
authorDavid Terei <davidterei@gmail.com>
Tue, 20 Dec 2011 23:15:21 +0000 (15:15 -0800)
committerDavid Terei <davidterei@gmail.com>
Fri, 23 Dec 2011 05:27:47 +0000 (21:27 -0800)
compiler/main/HscMain.hs

index c705526..025efb9 100644 (file)
@@ -911,20 +911,18 @@ hscCheckSafeImports tcg_env = do
             text "Rule \"" <> ftext n <> text "\" ignored" $+$
             text "User defined rules are disabled under Safe Haskell"
 
--- | Validate that safe imported modules are actually safe.
--- For modules in the HomePackage (the package the module we
--- are compiling in resides) this just involves checking its
--- trust type is 'Safe' or 'Trustworthy'. For modules that
--- reside in another package we also must check that the
--- external pacakge is trusted. See the Note [Safe Haskell
--- Trust Check] above for more information.
+-- | Validate that safe imported modules are actually safe.  For modules in the
+-- HomePackage (the package the module we are compiling in resides) this just
+-- involves checking its trust type is 'Safe' or 'Trustworthy'. For modules
+-- that reside in another package we also must check that the external pacakge
+-- is trusted. See the Note [Safe Haskell Trust Check] above for more
+-- information.
 --
--- The code for this is quite tricky as the whole algorithm
--- is done in a few distinct phases in different parts of the
--- code base. See RnNames.rnImportDecl for where package trust
--- dependencies for a module are collected and unioned.
--- Specifically see the Note [RnNames . Tracking Trust Transitively]
--- and the Note [RnNames . Trust Own Package].
+-- The code for this is quite tricky as the whole algorithm is done in a few
+-- distinct phases in different parts of the code base. See
+-- RnNames.rnImportDecl for where package trust dependencies for a module are
+-- collected and unioned.  Specifically see the Note [RnNames . Tracking Trust
+-- Transitively] and the Note [RnNames . Trust Own Package].
 checkSafeImports :: DynFlags -> TcGblEnv -> Hsc TcGblEnv
 checkSafeImports dflags tcg_env
     = do
@@ -941,7 +939,7 @@ checkSafeImports dflags tcg_env
         clearWarnings
         logWarnings oldErrs
 
-        -- See the Note [ Safe Haskell Inference]
+        -- See the Note [Safe Haskell Inference]
         case (not $ isEmptyBag errs) of
 
             -- We have errors!
@@ -953,7 +951,7 @@ checkSafeImports dflags tcg_env
 
             -- All good matey!
             False -> do
-                when (packageTrustOn dflags) $ checkPkgTrust pkg_reqs
+                when (packageTrustOn dflags) $ checkPkgTrust dflags pkg_reqs
                 -- add in trusted package requirements for this module
                 let new_trust = emptyImportAvails { imp_trust_pkgs = catMaybes pkgs }
                 return tcg_env { tcg_imports = imp_info `plusImportAvails` new_trust }
@@ -986,22 +984,6 @@ checkSafeImports dflags tcg_env
     checkSafe (_, _, False) = return Nothing
     checkSafe (m, l, True ) = hscCheckSafe' dflags m l
 
-    -- Here we check the transitive package trust requirements are OK still.
-    checkPkgTrust :: [PackageId] -> Hsc ()
-    checkPkgTrust pkgs =
-        case errors of
-            [] -> return ()
-            _  -> (liftIO . throwIO . mkSrcErr . listToBag) errors
-        where
-            errors = catMaybes $ map go pkgs
-            go pkg
-                | trusted $ getPackageDetails (pkgState dflags) pkg
-                = Nothing
-                | otherwise
-                = Just $ mkPlainErrMsg noSrcSpan
-                       $ text "The package (" <> ppr pkg <> text ") is required"
-                      <> text " to be trusted but it isn't!"
-
 -- | Check that a module is safe to import.
 --
 -- We return a package id if the safe import is OK and a Nothing otherwise
@@ -1055,11 +1037,10 @@ hscCheckSafe' dflags m l = do
                         <+> text "can't be safely imported!"
                         <+> text "The module itself isn't safe."
 
-    -- | Check the package a module resides in is trusted.
-    -- Safe compiled modules are trusted without requiring
-    -- that their package is trusted. For trustworthy modules,
-    -- modules in the home package are trusted but otherwise
-    -- we check the package trust flag.
+    -- | Check the package a module resides in is trusted. Safe compiled
+    -- modules are trusted without requiring that their package is trusted. For
+    -- trustworthy modules, modules in the home package are trusted but
+    -- otherwise we check the package trust flag.
     packageTrusted :: SafeHaskellMode -> Bool -> Module -> Bool
     packageTrusted _ _ _
         | not (packageTrustOn dflags)     = True
@@ -1084,6 +1065,22 @@ hscCheckSafe' dflags m l = do
         | thisPackage dflags == modulePackageId m = True
         | otherwise                               = False
 
+-- | Check the list of packages are trusted.
+checkPkgTrust :: DynFlags -> [PackageId] -> Hsc ()
+checkPkgTrust dflags pkgs =
+    case errors of
+        [] -> return ()
+        _  -> (liftIO . throwIO . mkSrcErr . listToBag) errors
+    where
+        errors = catMaybes $ map go pkgs
+        go pkg
+            | trusted $ getPackageDetails (pkgState dflags) pkg
+            = Nothing
+            | otherwise
+            = Just $ mkPlainErrMsg noSrcSpan
+                   $ text "The package (" <> ppr pkg <> text ") is required"
+                  <> text " to be trusted but it isn't!"
+
 -- | Set module to unsafe and wipe trust information.
 --
 -- Make sure to call this method to set a module to infered unsafe,