aboutsummaryrefslogtreecommitdiff
path: root/dev/vm_printers.ml
diff options
context:
space:
mode:
authorMaxime Dénès2020-02-03 18:19:42 +0100
committerMaxime Dénès2020-07-06 11:22:43 +0200
commit0ea2d0ff4ed84e1cc544c958b8f6e98f6ba2e9b6 (patch)
treefbad060c3c2e29e81751dea414c898b5cb0fa22d /dev/vm_printers.ml
parentcf388fdb679adb88a7e8b3122f65377552d2fb94 (diff)
Primitive persistent arrays
Persistent arrays expose a functional interface but are implemented using an imperative data structure. The OCaml implementation is based on Jean-Christophe Filliâtre's. Co-authored-by: Benjamin Grégoire <Benjamin.Gregoire@inria.fr> Co-authored-by: Gaëtan Gilbert <gaetan.gilbert@skyskimmer.net>
Diffstat (limited to 'dev/vm_printers.ml')
-rw-r--r--dev/vm_printers.ml17
1 files changed, 17 insertions, 0 deletions
diff --git a/dev/vm_printers.ml b/dev/vm_printers.ml
index 73cf1b0195..aa650fbdc8 100644
--- a/dev/vm_printers.ml
+++ b/dev/vm_printers.ml
@@ -17,6 +17,8 @@ let ppripos (ri,pos) =
print_string ("getglob "^(Constant.to_string kn)^"\n")
| Reloc_proj_name p ->
print_string ("proj "^(Projection.Repr.to_string p)^"\n")
+ | Reloc_caml_prim op ->
+ print_string ("caml primitive "^CPrimitives.to_string op)
);
print_flush ()
@@ -85,6 +87,7 @@ and ppwhd whd =
| Vconstr_block b -> ppvblock b
| Vint64 i -> printf "int64(%LiL)" i
| Vfloat64 f -> printf "float64(%.17g)" f
+ | Varray t -> ppvarray t
| Vatom_stk(a,s) ->
open_hbox();ppatom a;close_box();
print_string"@";ppstack s
@@ -100,6 +103,20 @@ and ppvblock b =
print_string")";
close_box()
+and ppvarray t =
+ let length = Parray.length_int t in
+ open_hbox();
+ print_string "[|";
+ for i = 0 to length - 2 do
+ ppvalues (Parray.get t (Uint63.of_int i));
+ print_string "; "
+ done;
+ ppvalues (Parray.get t (Uint63.of_int (length - 1)));
+ print_string " | ";
+ ppvalues (Parray.default t);
+ print_string " |]";
+ close_box()
+
and ppvalues v =
open_hovbox 0;ppwhd (whd_val v);close_box();
print_flush()