@@ -38,6 +38,29 @@ class tuple_value ~scene ~typenv ~obj ?(pos = 0) ?(unboxed = false) ~members ()
3838 else " (‹1›, ‹2›, …)"
3939 end
4040
41+ class label_tuple_value ~scene ~typenv ~obj ?(pos = 0 ) ?(unboxed = false ) ~members ()
42+ =
43+ let member_name i label =
44+ match label with
45+ | None -> " ‹" ^ string_of_int (i + 1 ) ^ " ›"
46+ | Some label -> label
47+ in
48+ let members =
49+ members
50+ |> List. mapi (fun i (label , typ ) -> (member_name i label, typ))
51+ in
52+ object (self )
53+ inherit struct_value ~scene ~typenv ~obj ~pos ~unboxed ~members
54+
55+ method to_short_string =
56+ let num_named = self#num_named in
57+ if num_named = 0 then " ()"
58+ else if num_named = 1 then " ‹1›"
59+ else if num_named = 2 then " (‹1›, ‹2›)"
60+ else if num_named = 3 then " (‹1›, ‹2›, ‹3›)"
61+ else " (‹1›, ‹2›, …)"
62+ end
63+
4164class record_value ~scene ~typenv ~obj ?(pos = 0 ) ?(unboxed = false ) ~members ()
4265 =
4366 object
@@ -200,8 +223,10 @@ let adopter scene typenv obj typ =
200223 Lwt. return (Some (new variant_value ~tag ?payload ~embed: true () ))
201224 in
202225 match Types. get_desc typ with
203- | Ttuple tys ->
226+ | Ttuple tys [ @ if ocaml_version < ( 5 , 4 , 0 )] ->
204227 Lwt. return (Some (new tuple_value ~scene ~typenv ~obj ~members: tys () ))
228+ | Ttuple tys [@ if ocaml_version > = (5 , 4 , 0 )] ->
229+ Lwt. return (Some (new label_tuple_value ~scene ~typenv ~obj ~members: tys () ))
205230 | Tconstr (path , type_args , _ ) -> (
206231 match typenv |> Typenv. find_type path with
207232 | exception Not_found -> Lwt. return None
0 commit comments