@@ -762,7 +762,6 @@ let unboxed_float_array_ref arr ofs dbg =
762
762
let float_array_ref arr ofs dbg =
763
763
box_float dbg Alloc_heap (unboxed_float_array_ref arr ofs dbg)
764
764
765
- (* TODO support mutation of local arrays *)
766
765
let addr_array_set arr ofs newval dbg =
767
766
Cop (Cextcall (" caml_modify" , typ_void, [] , false ),
768
767
[array_indexing log2_size_addr arr ofs dbg; newval], dbg)
@@ -773,6 +772,10 @@ let float_array_set arr ofs newval dbg =
773
772
Cop (Cstore (Double , Lambda. Assignment ),
774
773
[array_indexing log2_size_float arr ofs dbg; newval], dbg)
775
774
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
+
776
779
(* String length *)
777
780
778
781
(* Length of string block *)
@@ -844,14 +847,14 @@ let make_alloc_generic ~mode set_fn dbg tag wordsize args =
844
847
fill_fields 1 args)
845
848
end
846
849
847
- let make_alloc ?( mode = Lambda. Alloc_heap ) dbg tag args =
850
+ let make_alloc ~ mode dbg tag args =
848
851
let addr_array_init arr ofs newval dbg =
849
852
Cop (Cextcall (" caml_initialize" , typ_void, [] , false ),
850
853
[array_indexing log2_size_addr arr ofs dbg; newval], dbg)
851
854
in
852
855
make_alloc_generic ~mode addr_array_init dbg tag (List. length args) args
853
856
854
- let make_float_alloc ?( mode = Lambda. Alloc_heap ) dbg tag args =
857
+ let make_float_alloc ~ mode dbg tag args =
855
858
make_alloc_generic ~mode float_array_set dbg tag
856
859
(List. length args * size_float / size_addr) args
857
860
@@ -2489,9 +2492,7 @@ let setfield_computed ptr init arg1 arg2 arg3 dbg =
2489
2492
| Caml_modify ->
2490
2493
return_unit dbg (addr_array_set arg1 arg2 arg3 dbg)
2491
2494
| 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)
2495
2496
| Simple ->
2496
2497
return_unit dbg (int_array_set arg1 arg2 arg3 dbg)
2497
2498
0 commit comments