- = do_binding b `thenMM` \ b' ->
- do_expr e `thenMM` \ e' ->
- returnMM (StgLet b' e')
-
- do_expr (StgLetNoEscape lvs1 lvs2 rhs body)
- = do_binding rhs `thenMM` \ rhs' ->
- do_expr body `thenMM` \ body' ->
- returnMM (StgLetNoEscape lvs1 lvs2 rhs' body')
-
- ----------
- do_binding :: StgBinding -> MassageM StgBinding
-
- do_binding (StgNonRec b rhs)
- = do_rhs rhs `thenMM` \ rhs' ->
- returnMM (StgNonRec b rhs')
-
- do_binding (StgRec pairs)
- = mapMM do_pair pairs `thenMM` \ new_pairs ->
- returnMM (StgRec new_pairs)
+ = do_let b e `thenMM` \ (b,e) ->
+ returnMM (StgLet b e)
+
+ do_expr (StgLetNoEscape lvs1 lvs2 b e)
+ = do_let b e `thenMM` \ (b,e) ->
+ returnMM (StgLetNoEscape lvs1 lvs2 b e)
+
+ ----------------------------------
+
+ do_let (StgNonRec srt b rhs) e
+ = do_rhs rhs `thenMM` \ rhs' ->
+ addTopLevelIshId b (
+ do_expr e `thenMM` \ e' ->
+ returnMM (StgNonRec srt b rhs',e')
+ )
+
+ do_let (StgRec srt pairs) e
+ = addTopLevelIshIds binders (
+ mapMM do_pair pairs `thenMM` \ pairs' ->
+ do_expr e `thenMM` \ e' ->
+ returnMM (StgRec srt pairs', e')
+ )