import CoreSyn
import CostCentre ( pprCostCentreCore )
import Id ( Id, idType, isDataConId_maybe, idLBVarInfo, idArity,
- idInfo, idInlinePragma, idDemandInfo, idOccInfo
+ idInfo, idInlinePragma, idDemandInfo, idOccInfo,
+ globalIdDetails, isGlobalId, isExportedId, isSpecPragmaId
)
import Var ( isTyVar )
import IdInfo ( IdInfo, megaSeqIdInfo,
- arityInfo, ppArityInfo, ppFlavourInfo, flavourInfo,
+ arityInfo, ppArityInfo,
specInfo, cprInfo, ppCprInfo,
- strictnessInfo, ppStrictnessInfo, cafInfo, ppCafInfo,
+ strictnessInfo, ppStrictnessInfo, cgInfo,
cprInfo, ppCprInfo,
workerInfo, ppWorkerInfo,
tyGenInfo, ppTyGenInfo
in
add_par $
hang (ptext SLIT("\\") <+> sep (map (pBndr pe LambdaBind) bndrs) <+> arrow)
- 4 (ppr_noparend_expr pe body)
+ 2 (ppr_noparend_expr pe body)
ppr_expr add_par pe expr@(App fun arg)
= case collectArgs expr of { (fun, args) ->
tc = dataConTyCon dc
saturated = length val_args == idArity f
- other -> add_par (hang (pOcc pe f) 4 pp_args)
+ other -> add_par (hang (pOcc pe f) 2 pp_args)
- other -> add_par (hang (ppr_parend_expr pe fun) 4 pp_args)
+ other -> add_par (hang (ppr_parend_expr pe fun) 2 pp_args)
}
ppr_expr add_par pe (Case expr var [(con,args,rhs)])
= add_par $
sep [sep [ptext SLIT("case") <+> ppr_noparend_expr pe expr,
ptext SLIT("of") <+> ppr_bndr var <+> char '{'],
- nest 4 (sep (punctuate semi (map (ppr_alt pe) alts))),
+ nest 2 (sep (punctuate semi (map (ppr_alt pe) alts))),
char '}'
]
where
= add_par
(hang (ptext SLIT("let {"))
2 (hsep [hang (hsep [pBndr pe LetBind val_bdr, equals])
- 4 (ppr_noparend_expr pe rhs),
+ 2 (ppr_noparend_expr pe rhs),
ptext SLIT("} in")])
$$
ppr_noparend_expr pe expr)
#else
ppr_expr add_par pe (Note (Coerce to_ty from_ty) expr)
= add_par $
- sep [sep [ptext SLIT("__coerce"), nest 4 (pTy pe to_ty)],
+ sep [sep [ptext SLIT("__coerce"), nest 2 (pTy pe to_ty)],
ppr_parend_expr pe expr]
#endif
= add_par $ ptext SLIT("__inline_me") <+> ppr_parend_expr pe expr
ppr_alt pe (con, args, rhs)
- = hang (ppr_case_pat pe con args) 4 (ppr_noparend_expr pe rhs)
+ = hang (ppr_case_pat pe con args) 2 (ppr_noparend_expr pe rhs)
ppr_case_pat pe con@(DataAlt dc) args
| isTupleTyCon tc
\begin{code}
-- Used for printing dump info
pprCoreBinder LetBind binder
- = vcat [sig, pragmas, ppr binder]
+ = vcat [sig, pprIdDetails binder, pragmas, ppr binder]
where
sig = pprTypedBinder binder
pragmas = ppIdInfo binder (idInfo binder)
pprCoreBinder CaseBind bndr = pprUntypedBinder bndr
pprUntypedBinder binder
- | isTyVar binder = ptext SLIT("@") <+> pprTyVarBndr binder
+ | isTyVar binder = ptext SLIT("@") <+> ppr binder -- NB: don't print kind
| otherwise = pprIdBndr binder
pprTypedBinder binder
-- It's important that the type is parenthesised too, at least when
-- printing interfaces, because we get \ x::(a->b) y::(c->d) -> ...
+-- pprIdBndr does *not* print the type
-- When printing any Id binder in debug mode, we print its inline pragma and one-shot-ness
pprIdBndr id = ppr id <+>
(megaSeqIdInfo (idInfo id) `seq`
\begin{code}
+pprIdDetails :: Id -> SDoc
+pprIdDetails id | isGlobalId id = ppr (globalIdDetails id)
+ | isExportedId id = ptext SLIT("[Exported]")
+ | isSpecPragmaId id = ptext SLIT("[SpecPrag]")
+ | otherwise = empty
+
ppIdInfo :: Id -> IdInfo -> SDoc
ppIdInfo b info
- = hsep [
- ppFlavourInfo (flavourInfo info),
- ppArityInfo a,
+ = hsep [ ppArityInfo a,
ppTyGenInfo g,
ppWorkerInfo (workerInfo info),
ppStrictnessInfo s,
- ppCafInfo c,
+-- pprCgInfo c,
ppCprInfo m,
pprCoreRules b p
-- Inline pragma, occ, demand, lbvar info
a = arityInfo info
g = tyGenInfo info
s = strictnessInfo info
- c = cafInfo info
+-- c = cgInfo info
m = cprInfo info
p = specInfo info
\end{code}
= doubleQuotes (ptext name) <+>
sep [
ptext SLIT("__forall") <+> braces (sep (map pprTypedBinder tpl_vars)),
- nest 4 (pp_fn <+> sep (map pprArg tpl_args)),
- nest 4 (ptext SLIT("=") <+> pprCoreExpr rhs)
+ nest 2 (pp_fn <+> sep (map pprArg tpl_args)),
+ nest 2 (ptext SLIT("=") <+> pprCoreExpr rhs)
] <+> semi
\end{code}