projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add a compileToCore function to the GHC API
[ghc-hetmet.git]
/
compiler
/
main
/
TidyPgm.lhs
diff --git
a/compiler/main/TidyPgm.lhs
b/compiler/main/TidyPgm.lhs
index
b04830b
..
f156478
100644
(file)
--- a/
compiler/main/TidyPgm.lhs
+++ b/
compiler/main/TidyPgm.lhs
@@
-21,16
+21,14
@@
import VarSet
import Var ( Id, Var )
import Id ( idType, idInfo, idName, idCoreRules, isGlobalId,
isExportedId, mkVanillaGlobal, isLocalId, isNaughtyRecordSelector,
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 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,
- isWiredInName, getName
- )
+import Name
import NameSet ( NameSet, elemNameSet )
import IfaceEnv ( allocateGlobalBinder )
import NameEnv ( filterNameEnv, mapNameEnv )
import NameSet ( NameSet, elemNameSet )
import IfaceEnv ( allocateGlobalBinder )
import NameEnv ( filterNameEnv, mapNameEnv )
@@
-43,21
+41,17
@@
import TyCon ( TyCon, makeTyConAbstract, tyConDataCons, isNewTyCon,
isEnumerationTyCon, isOpenTyCon )
import Class ( classSelIds )
import Module ( Module )
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 Maybes ( orElse, mapCatMaybes )
import ErrUtils ( showPass, dumpIfSet_core )
import PackageConfig ( PackageId )
import UniqSupply ( splitUniqSupply, uniqFromSupply )
-import List ( partition )
-import Maybe ( isJust )
import Outputable
import Outputable
-import DATA_IOREF ( IORef, readIORef, writeIORef )
import FastTypes hiding ( fastOr )
import FastTypes hiding ( fastOr )
+
+import Data.List ( partition )
+import Data.Maybe ( isJust )
+import Data.IORef ( IORef, readIORef, writeIORef )
\end{code}
\end{code}
@@
-127,7
+121,9
@@
mkBootModDetails hsc_env (ModGuts { mg_module = mod
, mg_exports = exports
, mg_types = type_env
, mg_insts = insts
, 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"
= do { let dflags = hsc_dflags hsc_env
; showPass dflags "Tidy [hoot] type env"
@@
-141,7
+137,10
@@
mkBootModDetails hsc_env (ModGuts { mg_module = mod
, md_insts = insts'
, md_fam_insts = fam_insts
, md_rules = []
, md_insts = insts'
, md_fam_insts = fam_insts
, md_rules = []
- , md_exports = exports })
+ , md_exports = exports
+ , md_modBreaks = modBreaks
+ , md_vect_info = noVectInfo
+ })
}
where
}
where
@@
-242,8
+241,11
@@
tidyProgram hsc_env
mg_insts = insts, mg_fam_insts = fam_insts,
mg_binds = binds,
mg_rules = imp_rules,
mg_insts = insts, mg_fam_insts = fam_insts,
mg_binds = binds,
mg_rules = imp_rules,
+ mg_vect_info = vect_info,
mg_dir_imps = dir_imps, mg_deps = deps,
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"
= do { let dflags = hsc_dflags hsc_env
; showPass dflags "Tidy Core"
@@
-264,7
+266,8
@@
tidyProgram hsc_env
; (tidy_env, tidy_binds) <- tidyTopBinds hsc_env mod type_env ext_ids
binds
; (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
tidy_binds
; tidy_insts = tidyInstances (lookup_dfun tidy_type_env) insts
-- A DFunId will have a binding in tidy_binds, and so
@@
-293,13
+296,17
@@
tidyProgram hsc_env
cg_binds = all_tidy_binds,
cg_dir_imps = dir_imps,
cg_foreign = foreign_stubs,
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,
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,
+ md_vect_info = vect_info -- is already tidy
+ })
}
lookup_dfun type_env dfun_id
}
lookup_dfun type_env dfun_id
@@
-664,8
+671,7
@@
tidyTopName mod nc_var ext_ids occ_env id
global = isExternalName name
local = not global
internal = not external
global = isExternalName name
local = not global
internal = not external
- mb_parent = nameParent_maybe name
- loc = nameSrcLoc name
+ loc = nameSrcSpan name
(occ_env', occ') = tidyOccName occ_env (nameOccName 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
(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.
-- 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
\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)
| 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
-- 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