Re-working of the breakpoint support
[ghc-hetmet.git] / compiler / main / TidyPgm.lhs
index b04830b..b001e1d 100644 (file)
@@ -21,14 +21,15 @@ import VarSet
 import Var             ( Id, Var )
 import Id              ( idType, idInfo, idName, idCoreRules, isGlobalId,
                          isExportedId, mkVanillaGlobal, isLocalId, isNaughtyRecordSelector,
-                         idArity, idCafInfo, idUnfolding, isImplicitId, setIdInfo
+                         idArity, idCafInfo, idUnfolding, isImplicitId, setIdInfo,
+                         isTickBoxOp
                        ) 
 import IdInfo          {- loads of stuff -}
 import InstEnv         ( Instance, DFunId, instanceDFunId, setInstanceDFunId )
 import NewDemand       ( isBottomingSig, topSig )
 import BasicTypes      ( Arity, isNeverActive, isNonRuleLoopBreaker )
 import Name            ( Name, getOccName, nameOccName, mkInternalName,
-                         localiseName, isExternalName, nameSrcLoc, nameParent_maybe,
+                         localiseName, isExternalName, nameSrcLoc,
                          isWiredInName, getName
                        )
 import NameSet         ( NameSet, elemNameSet )
@@ -43,21 +44,17 @@ import TyCon                ( TyCon, makeTyConAbstract, tyConDataCons, isNewTyCon,
                          isEnumerationTyCon, isOpenTyCon )
 import Class           ( classSelIds )
 import Module          ( Module )
-import HscTypes                ( HscEnv(..), NameCache( nsUniqs ), CgGuts(..),
-                         TypeEnv, typeEnvIds, typeEnvElts, typeEnvTyCons, 
-                         extendTypeEnvWithIds, lookupTypeEnv,
-                         ModGuts(..), TyThing(..), ModDetails(..),
-                         Dependencies(..)
-                       )
+import HscTypes
 import Maybes          ( orElse, mapCatMaybes )
 import ErrUtils                ( showPass, dumpIfSet_core )
 import PackageConfig   ( PackageId )
 import UniqSupply      ( splitUniqSupply, uniqFromSupply )
-import List            ( partition )
-import Maybe           ( isJust )
 import Outputable
-import DATA_IOREF      ( IORef, readIORef, writeIORef )
 import FastTypes  hiding ( fastOr )
+
+import Data.List       ( partition )
+import Data.Maybe      ( isJust )
+import Data.IORef      ( IORef, readIORef, writeIORef )
 \end{code}
 
 
@@ -127,7 +124,9 @@ mkBootModDetails hsc_env (ModGuts { mg_module    = mod
                                  , mg_exports   = exports
                                  , mg_types     = type_env
                                  , mg_insts     = insts
-                                 , mg_fam_insts = fam_insts })
+                                 , mg_fam_insts = fam_insts
+                                  , mg_modBreaks = modBreaks   
+                                  })
   = do { let dflags = hsc_dflags hsc_env 
        ; showPass dflags "Tidy [hoot] type env"
 
@@ -141,7 +140,9 @@ mkBootModDetails hsc_env (ModGuts { mg_module    = mod
                             , md_insts     = insts'
                             , md_fam_insts = fam_insts
                             , md_rules     = []
-                            , md_exports   = exports })
+                            , md_exports   = exports
+                             , md_modBreaks = modBreaks 
+                             })
        }
   where
 
@@ -243,7 +244,9 @@ tidyProgram hsc_env
                                mg_binds = binds, 
                                mg_rules = imp_rules,
                                mg_dir_imps = dir_imps, mg_deps = deps, 
-                               mg_foreign = foreign_stubs })
+                               mg_foreign = foreign_stubs,
+                               mg_hpc_info = hpc_info,
+                                mg_modBreaks = modBreaks })
 
   = do { let dflags = hsc_dflags hsc_env
        ; showPass dflags "Tidy Core"
@@ -264,7 +267,8 @@ tidyProgram hsc_env
        ; (tidy_env, tidy_binds) <- tidyTopBinds hsc_env mod type_env ext_ids 
                                                 binds
 
-       ; let { tidy_type_env = tidyTypeEnv omit_prags exports type_env 
+       ; let { export_set = availsToNameSet exports
+              ; tidy_type_env = tidyTypeEnv omit_prags export_set type_env 
                                            tidy_binds
              ; tidy_insts    = tidyInstances (lookup_dfun tidy_type_env) insts
                -- A DFunId will have a binding in tidy_binds, and so
@@ -293,13 +297,16 @@ tidyProgram hsc_env
                           cg_binds    = all_tidy_binds,
                           cg_dir_imps = dir_imps,
                           cg_foreign  = foreign_stubs,
-                          cg_dep_pkgs = dep_pkgs deps }, 
+                          cg_dep_pkgs = dep_pkgs deps,
+                          cg_hpc_info = hpc_info }, 
 
                   ModDetails { md_types     = tidy_type_env,
                                md_rules     = tidy_rules,
                                md_insts     = tidy_insts,
                                md_fam_insts = fam_insts,
-                               md_exports   = exports })
+                               md_exports   = exports,
+                                md_modBreaks = modBreaks })
+
        }
 
 lookup_dfun type_env dfun_id
@@ -664,7 +671,6 @@ tidyTopName mod nc_var ext_ids occ_env id
     global     = isExternalName name
     local      = not global
     internal   = not external
-    mb_parent   = nameParent_maybe name
     loc                = nameSrcLoc name
 
     (occ_env', occ') = tidyOccName occ_env (nameOccName name)
@@ -674,7 +680,7 @@ tidyTopName mod nc_var ext_ids occ_env id
                      (us1, us2) = splitUniqSupply (nsUniqs nc)
                      uniq       = uniqFromSupply us1
 
-    mk_new_external nc = allocateGlobalBinder nc mod occ' mb_parent loc
+    mk_new_external nc = allocateGlobalBinder nc mod occ' loc
        -- If we want to externalise a currently-local name, check
        -- whether we have already assigned a unique for it.
        -- If so, use it; if not, extend the table.
@@ -793,11 +799,13 @@ CAF list to keep track of non-collectable CAFs.
 \begin{code}
 hasCafRefs  :: PackageId -> VarEnv Var -> Arity -> CoreExpr -> CafInfo
 hasCafRefs this_pkg p arity expr 
-  | is_caf || mentions_cafs = MayHaveCafRefs
+  | is_caf || mentions_cafs 
+                            = MayHaveCafRefs
   | otherwise              = NoCafRefs
  where
   mentions_cafs = isFastTrue (cafRefs p expr)
   is_caf = not (arity > 0 || rhsIsStatic this_pkg expr)
+
   -- NB. we pass in the arity of the expression, which is expected
   -- to be calculated by exprArity.  This is because exprArity
   -- knows how much eta expansion is going to be done by