Spelling error in comment
[ghc-hetmet.git] / compiler / deSugar / Coverage.lhs
index 7162982..c110377 100644 (file)
@@ -7,8 +7,6 @@
 \begin{code}
 module Coverage (addCoverageTicksToBinds) where
 
-#include "HsVersions.h"
-
 import HsSyn
 import Module
 import Outputable
@@ -18,7 +16,7 @@ import SrcLoc
 import ErrUtils
 import Name
 import Bag
-import Var
+import Id
 import VarSet
 import Data.List
 import FastString
@@ -28,12 +26,9 @@ import TyCon
 import FiniteMap
 
 import Data.Array
+import Data.Maybe
 import System.IO   (FilePath)
-#if __GLASGOW_HASKELL__ < 603
-import Compat.Directory ( createDirectoryIfMissing )
-#else
 import System.Directory ( createDirectoryIfMissing )
-#endif
 
 import Trace.Hpc.Mix
 import Trace.Hpc.Util
@@ -67,12 +62,20 @@ addCoverageTicksToBinds dflags mod mod_loc tyCons binds = do
 
   if "boot" `isSuffixOf` orig_file then return (binds, emptyHpcInfo False, emptyModBreaks) else do
 
+  -- Now, we try look for a file generated from a .hsc file to a .hs file, by peeking ahead.
+
+  let top_pos = catMaybes $ foldrBag (\ (L pos _) rest -> srcSpanFileName_maybe pos : rest) [] binds
+  let orig_file2 = case top_pos of
+                    (file_name:_) 
+                      | ".hsc" `isSuffixOf` unpackFS file_name -> unpackFS file_name
+                    _ -> orig_file
+
   let mod_name = moduleNameString (moduleName mod)
 
   let (binds1,_,st)
                 = unTM (addTickLHsBinds binds) 
                   (TTE
-                      { fileName    = mkFastString orig_file
+                      { fileName    = mkFastString orig_file2
                      , declPath     = []
                       , inScope      = emptyVarSet
                      , blackList    = listToFM [ (getSrcSpan (tyConName tyCon),()) 
@@ -95,14 +98,14 @@ addCoverageTicksToBinds dflags mod mod_loc tyCons binds = do
 
      let tabStop = 1 -- <tab> counts as a normal char in GHC's location ranges.
      createDirectoryIfMissing True hpc_mod_dir
-     modTime <- getModificationTime orig_file
+     modTime <- getModificationTime orig_file2
      let entries' = [ (hpcPos, box) 
                     | (span,_,box) <- entries, hpcPos <- [mkHpcPos span] ]
      when (length entries' /= tickBoxCount st) $ do
        panic "the number of .mix entries are inconsistent"
-     let hashNo = mixHash orig_file modTime tabStop entries'
+     let hashNo = mixHash orig_file2 modTime tabStop entries'
      mixCreate hpc_mod_dir mod_name 
-              $ Mix orig_file modTime (toHash hashNo) tabStop entries'
+              $ Mix orig_file2 modTime (toHash hashNo) tabStop entries'
      return $ hashNo 
    else do
      return $ 0
@@ -641,7 +644,7 @@ getFileName = fileName `liftM` getEnv
 sameFileName :: SrcSpan -> TM a -> TM a -> TM a
 sameFileName pos out_of_scope in_scope = do
   file_name <- getFileName
-  case optSrcSpanFileName pos of 
+  case srcSpanFileName_maybe pos of 
     Just file_name2 
       | file_name == file_name2 -> in_scope
     _ -> out_of_scope
@@ -741,7 +744,7 @@ mkHpcPos pos
                     )
 
 hpcSrcSpan :: SrcSpan
-hpcSrcSpan = mkGeneralSrcSpan (FSLIT("Haskell Program Coverage internals"))
+hpcSrcSpan = mkGeneralSrcSpan (fsLit "Haskell Program Coverage internals")
 \end{code}