Commit f09fe9cd authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Eliminate a global variable

Very little parameter passing is needed without it, so there was no real
benefit to it.
parent 7510eead
......@@ -10,7 +10,7 @@
--
-- Binary interface file support.
module BinIface ( writeBinIface, readBinIface, v_IgnoreHiWay ) where
module BinIface ( writeBinIface, readBinIface, CheckHiWay(..) ) where
#include "HsVersions.h"
......@@ -48,18 +48,22 @@ import Data.IORef
import Control.Exception
import Control.Monad
data CheckHiWay = CheckHiWay | IgnoreHiWay
deriving Eq
-- ---------------------------------------------------------------------------
-- Reading and writing binary interface files
readBinIface :: FilePath -> TcRnIf a b ModIface
readBinIface hi_path = do
readBinIface :: CheckHiWay -> FilePath -> TcRnIf a b ModIface
readBinIface checkHiWay hi_path = do
nc <- getNameCache
(new_nc, iface) <- liftIO $ readBinIface_ hi_path nc
(new_nc, iface) <- liftIO $ readBinIface_ checkHiWay hi_path nc
setNameCache new_nc
return iface
readBinIface_ :: FilePath -> NameCache -> IO (NameCache, ModIface)
readBinIface_ hi_path nc = do
readBinIface_ :: CheckHiWay -> FilePath -> NameCache
-> IO (NameCache, ModIface)
readBinIface_ checkHiWay hi_path nc = do
bh <- Binary.readBinMem hi_path
-- Read the magic number to check that this really is a GHC .hi file
......@@ -88,9 +92,8 @@ readBinIface_ hi_path nc = do
++ our_ver ++ ", found " ++ check_ver))
check_way <- get bh
ignore_way <- readIORef v_IgnoreHiWay
way_descr <- getWayDescr
when (not ignore_way && check_way /= way_descr) $
when (checkHiWay == CheckHiWay && check_way /= way_descr) $
-- This will be caught by readIface
-- which will emit an error msg containing the iface module name.
throwDyn (ProgramError (
......@@ -367,8 +370,6 @@ instance Binary ModIface where
mi_fix_fn = mkIfaceFixCache fixities,
mi_ver_fn = mkIfaceVerCache decls })
GLOBAL_VAR(v_IgnoreHiWay, False, Bool)
getWayDescr :: IO String
getWayDescr = do
tag <- readIORef v_Build_tag
......
......@@ -515,7 +515,7 @@ readIface :: Module -> FilePath -> IsBootInterface
readIface wanted_mod file_path is_hi_boot_file
= do { dflags <- getDOpts
; res <- tryMostM $ readBinIface file_path
; res <- tryMostM $ readBinIface CheckHiWay file_path
; case res of
Right iface
| wanted_mod == actual_mod -> return (Succeeded iface)
......@@ -610,10 +610,9 @@ ifaceStats eps
-- | Read binary interface, and print it out
showIface :: HscEnv -> FilePath -> IO ()
showIface hsc_env filename = do
-- skip the version check; we don't want to worry about profiled vs.
-- skip the hi way check; we don't want to worry about profiled vs.
-- non-profiled interfaces, for example.
writeIORef v_IgnoreHiWay True
iface <- initTcRnIf 's' hsc_env () () $ readBinIface filename
iface <- initTcRnIf 's' hsc_env () () $ readBinIface IgnoreHiWay filename
printDump (pprModIface iface)
\end{code}
......@@ -624,6 +623,7 @@ pprModIface iface
= vcat [ ptext SLIT("interface")
<+> ppr (mi_module iface) <+> pp_boot
<+> ppr (mi_mod_vers iface) <+> pp_sub_vers
<+> ppr (mi_mod_vers iface)
<+> (if mi_orphan iface then ptext SLIT("[orphan module]") else empty)
<+> (if mi_finsts iface then ptext SLIT("[family instance module]") else empty)
<+> (if mi_hpc iface then ptext SLIT("[hpc]") else empty)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment