@@ -443,7 +443,7 @@ let rec transl env e =
443
443
let args = List. map (transl env) args in
444
444
send kind met obj args pos dbg
445
445
| Ulet (str , kind , id , exp , body ) ->
446
- transl_let env str kind id exp body
446
+ transl_let env str kind id exp ( fun env -> transl env body)
447
447
| Uphantom_let (var , defining_expr , body ) ->
448
448
let defining_expr =
449
449
match defining_expr with
@@ -1155,7 +1155,7 @@ and transl_unbox_sized size dbg env exp =
1155
1155
| Thirty_two -> transl_unbox_int dbg env Pint32 exp
1156
1156
| Sixty_four -> transl_unbox_int dbg env Pint64 exp
1157
1157
1158
- and transl_let env str kind id exp body =
1158
+ and transl_let env str kind id exp transl_body =
1159
1159
let dbg = Debuginfo. none in
1160
1160
let cexp = transl env exp in
1161
1161
let unboxing =
@@ -1192,16 +1192,16 @@ and transl_let env str kind id exp body =
1192
1192
(* N.B. [body] must still be traversed even if [exp] will never return:
1193
1193
there may be constant closures inside that need lifting out. *)
1194
1194
begin match str, kind with
1195
- | (Immutable | Immutable_unique ), _ -> Clet (id, cexp, transl env body )
1196
- | Mutable , Pintval -> Clet_mut (id, typ_int, cexp, transl env body )
1197
- | Mutable , _ -> Clet_mut (id, typ_val, cexp, transl env body )
1195
+ | (Immutable | Immutable_unique ), _ -> Clet (id, cexp, transl_body env)
1196
+ | Mutable , Pintval -> Clet_mut (id, typ_int, cexp, transl_body env)
1197
+ | Mutable , _ -> Clet_mut (id, typ_val, cexp, transl_body env)
1198
1198
end
1199
1199
| Boxed (boxed_number , false ) ->
1200
1200
let unboxed_id = V. create_local (VP. name id) in
1201
1201
let v = VP. create unboxed_id in
1202
1202
let cexp = unbox_number dbg boxed_number cexp in
1203
1203
let body =
1204
- transl (add_unboxed_id (VP. var id) unboxed_id boxed_number env) body in
1204
+ transl_body (add_unboxed_id (VP. var id) unboxed_id boxed_number env) in
1205
1205
begin match str, boxed_number with
1206
1206
| (Immutable | Immutable_unique ), _ -> Clet (v, cexp, body)
1207
1207
| Mutable , bn -> Clet_mut (v, typ_of_boxed_number bn, cexp, body)
@@ -1243,6 +1243,9 @@ and transl_if env (approx : then_else)
1243
1243
ifso_dbg arg2
1244
1244
then_dbg then_
1245
1245
else_dbg else_
1246
+ | Ulet (str , kind , id , exp , cond ) ->
1247
+ transl_let env str kind id exp (fun env ->
1248
+ transl_if env approx dbg cond then_dbg then_ else_dbg else_)
1246
1249
| Uprim (Psequand, [arg1 ; arg2 ], inner_dbg ) ->
1247
1250
transl_sequand env approx
1248
1251
inner_dbg arg1
0 commit comments