import AbsCUtils ( mkAbstractCs, mkAbsCStmts )
import CgTailCall ( performReturn, mkStaticAlgReturnCode )
import ClosureInfo ( layOutStaticConstr, layOutDynConstr, ClosureInfo )
-import DataCon ( DataCon, dataConName, dataConRepArgTys, isNullaryDataCon )
-import Name ( getOccName )
-import OccName ( occNameUserString )
+import DataCon ( DataCon, dataConRepArgTys, isNullaryDataCon )
import TyCon ( tyConDataCons, isEnumerationTyCon, TyCon )
import Type ( typePrimRep )
-import CmdLineOpts ( opt_EnsureSplittableC )
+import CmdLineOpts
\end{code}
For every constructor we generate the following info tables:
-- To allow the debuggers, interpreters, etc to cope with static
-- data structures (ie those built at compile time), we take care that
-- info-table contains the information we need.
- (static_ci,_) = layOutStaticConstr con_name data_con typePrimRep arg_tys
+ (static_ci,_) = layOutStaticConstr data_con typePrimRep arg_tys
- body = initC comp_info (
- profCtrC SLIT("TICK_ENT_CON") [CReg node] `thenC`
- body_code)
+ static_body = initC comp_info (
+ profCtrC FSLIT("TICK_ENT_STATIC_CON") [CReg node] `thenC`
+ ldv_enter_and_body_code)
- con_descr = occNameUserString (getOccName data_con)
+ closure_body = initC comp_info (
+ profCtrC FSLIT("TICK_ENT_DYN_CON") [CReg node] `thenC`
+ ldv_enter_and_body_code)
+
+ ldv_enter_and_body_code = ldvEnter `thenC` body_code
-- Don't need any dynamic closure code for zero-arity constructors
closure_code = if zero_arity_con then
AbsCNop
else
- CClosureInfoAndCode closure_info body Nothing con_descr
+ CClosureInfoAndCode closure_info closure_body
- static_code = CClosureInfoAndCode static_ci body Nothing con_descr
+ static_code = CClosureInfoAndCode static_ci static_body
zero_arity_con = isNullaryDataCon data_con
-- We used to check that all the arg-sizes were zero, but we don't
-- just one more thing to go wrong.
arg_tys = dataConRepArgTys data_con
- con_name = dataConName data_con
\end{code}
\begin{code}
= let
arg_tys = dataConRepArgTys con
- (closure_info, arg_things)
- = layOutDynConstr (dataConName con) con typePrimRep arg_tys
+ (closure_info, arg_things) = layOutDynConstr con typePrimRep arg_tys
body_code
= -- NB: We don't set CC when entering data (WDP 94/06)
- profCtrC SLIT("TICK_RET_OLD")
+ profCtrC FSLIT("TICK_RET_OLD")
[mkIntCLit (length arg_things)] `thenC`
performReturn AbsCNop -- Ptr to thing already in Node