refactoring only: use the parameterised InstalledPackageInfo
[ghc-hetmet.git] / compiler / profiling / SCCfinal.lhs
index 7aaf109..dd72341 100644 (file)
@@ -23,23 +23,28 @@ This is now a sort-of-normal STG-to-STG pass (WDP 94/06), run by stg2stg.
 * "Distributes" given cost-centres to all as-yet-unmarked RHSs.
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module SCCfinal ( stgMassageForProfiling ) where
 
 #include "HsVersions.h"
 
 import StgSyn
 
-import PackageConfig   ( PackageId )
 import StaticFlags     ( opt_AutoSccsOnIndividualCafs )
 import CostCentre      -- lots of things
 import Id
 import Name
-import Module          ( Module )
+import Module
 import UniqSupply      ( splitUniqSupply, UniqSupply )
 #ifdef PROF_DO_BOXING
 import UniqSupply      ( uniqFromSupply )
 #endif
-import Unique           ( Unique )
 import VarSet
 import ListSetOps      ( removeDups )
 import Outputable      
@@ -137,7 +142,7 @@ stgMassageForProfiling this_pkg mod_name us stg_binds
                          modl | Just m <- nameModule_maybe (idName binder) = m
                               | otherwise = mod_name
                     in
-                    collectCC  cc  `thenMM_`
+                    collectNewCC  cc  `thenMM_`
                     collectCCS ccs `thenMM_`
                     returnMM ccs
                else 
@@ -418,6 +423,14 @@ collectCC cc mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)
     else -- must declare it "extern"
        ((local_ccs, cc : extern_ccs, ccss), ())
 
+-- Version of collectCC used when we definitely want to declare this
+-- CC as local, even if its module name is not the same as the current
+-- module name (eg. the special :Main module) see bug #249, #1472, 
+-- test prof001,prof002.
+collectNewCC :: CostCentre -> MassageM ()
+collectNewCC cc mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)
+  = ((cc : local_ccs, extern_ccs, ccss), ())
+
 collectCCS :: CostCentreStack -> MassageM ()
 
 collectCCS ccs mod_name scope_cc us ids (local_ccs, extern_ccs, ccss)