@@ -762,7 +762,6 @@ let unboxed_float_array_ref arr ofs dbg =
762762let float_array_ref arr ofs dbg =
763763 box_float dbg Alloc_heap (unboxed_float_array_ref arr ofs dbg)
764764
765- (* TODO support mutation of local arrays *)
766765let addr_array_set arr ofs newval dbg =
767766 Cop (Cextcall (" caml_modify" , typ_void, [] , false ),
768767 [array_indexing log2_size_addr arr ofs dbg; newval], dbg)
@@ -773,6 +772,10 @@ let float_array_set arr ofs newval dbg =
773772 Cop (Cstore (Double , Lambda. Assignment ),
774773 [array_indexing log2_size_float arr ofs dbg; newval], dbg)
775774
775+ let addr_array_set_local arr ofs newval dbg =
776+ Cop (Cextcall (" caml_modify_local" , typ_void, [] , false ),
777+ [arr; untag_int ofs dbg; newval], dbg)
778+
776779(* String length *)
777780
778781(* Length of string block *)
@@ -844,14 +847,14 @@ let make_alloc_generic ~mode set_fn dbg tag wordsize args =
844847 fill_fields 1 args)
845848 end
846849
847- let make_alloc ?( mode = Lambda. Alloc_heap ) dbg tag args =
850+ let make_alloc ~ mode dbg tag args =
848851 let addr_array_init arr ofs newval dbg =
849852 Cop (Cextcall (" caml_initialize" , typ_void, [] , false ),
850853 [array_indexing log2_size_addr arr ofs dbg; newval], dbg)
851854 in
852855 make_alloc_generic ~mode addr_array_init dbg tag (List. length args) args
853856
854- let make_float_alloc ?( mode = Lambda. Alloc_heap ) dbg tag args =
857+ let make_float_alloc ~ mode dbg tag args =
855858 make_alloc_generic ~mode float_array_set dbg tag
856859 (List. length args * size_float / size_addr) args
857860
@@ -2489,9 +2492,7 @@ let setfield_computed ptr init arg1 arg2 arg3 dbg =
24892492 | Caml_modify ->
24902493 return_unit dbg (addr_array_set arg1 arg2 arg3 dbg)
24912494 | Caml_modify_local ->
2492- (* TODO: support this, if there are any uses.
2493- (Currently, setfield_computed is only used by classes) *)
2494- Misc. fatal_error " setfield_computed: local"
2495+ return_unit dbg (addr_array_set_local arg1 arg2 arg3 dbg)
24952496 | Simple ->
24962497 return_unit dbg (int_array_set arg1 arg2 arg3 dbg)
24972498
0 commit comments