let pretty fmt v =
let pretty_org fmt org =
if not (Origin.is_top org) then
Format.fprintf fmt "@ @[(origin: %a)@]" Origin.pretty org
in
match v with
| Top (Top_Param.Top, a) ->
Format.fprintf fmt "{{ ANYTHING%a }}"
pretty_org a
| Top (t, a) ->
Format.fprintf fmt "{{ garbled mix of &%a%a }}"
Top_Param.pretty t
pretty_org a
| Map m ->
try
Ival.pretty fmt (project_ival v)
with
| Not_based_on_null ->
let print_binding fmt k v =
if Ival.equal Ival.singleton_zero v
then Format.fprintf fmt "@[&%a@]" Base.pretty k
else
Format.fprintf fmt "@[&%a +@ %a@]"
Base.pretty k Ival.pretty v
in
Pretty_utils.pp_iter
~pre:"@[<hov 3>{{ " ~suf:" }}@]" ~sep:" ;@ "
(fun pp map -> M.iter (fun k v -> pp (k, v)) map)
(fun fmt (k, v) -> print_binding fmt k v)
fmt m