| otherwise
= delSubstEnv env old_id
-simplIdInfo :: Subst -> IdInfo -> Id -> Id
+simplIdInfo :: Subst -> IdInfo -> IdInfo
-- Used by the simplifier to compute new IdInfo for a let(rec) binder,
-- subsequent to simplLetId having zapped its IdInfo
-simplIdInfo subst old_info bndr
+simplIdInfo subst old_info
= case substIdInfo subst isFragileOcc old_info of
- Just new_info -> bndr `setIdInfo` new_info
- Nothing -> bndr `setIdInfo` old_info
+ Just new_info -> new_info
+ Nothing -> old_info
\end{code}
\begin{code}
let
-- simplLetBndr doesn't deal with the IdInfo, so we must
-- do so here (c.f. simplLazyBind)
- bndr'' = simplIdInfo (getSubst env) (idInfo bndr) bndr'
+ bndr'' = bndr' `setIdInfo` simplIdInfo (getSubst env) (idInfo bndr)
env1 = modifyInScope env bndr'' bndr''
in
simplStrictArg AnRhs env1 rhs rhs_se (idType bndr') cont_ty $ \ env rhs1 ->
--
-- NB: does no harm for non-recursive bindings
let
- bndr'' = simplIdInfo (getSubst rhs_se) (idInfo bndr) bndr'
+ bndr'' = bndr' `setIdInfo` simplIdInfo (getSubst env) (idInfo bndr)
env1 = modifyInScope env bndr'' bndr''
rhs_env = setInScope rhs_se env1
is_top_level = isTopLevel top_lvl