Source file ast_printer.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(** @author Pierre Lermusiaux <pierre.lermusiaux@inria.fr>
Copyright © Inria 2022-2023
*)
open Format
open To_untyped
open Transpose
let format_part (ppf : formatter) : transposed_part -> unit = function
| Partial_structure stru -> Pprintast.structure ppf (demote_structure stru)
| Partial_structure_item str_it ->
Pprintast.structure_item ppf (demote_structure_item str_it)
| Partial_expression expr ->
Pprintast.expression ppf (demote_expression_data expr)
| Partial_value_pattern pat -> Pprintast.pattern ppf (demote_pattern_data pat)
| Partial_general_pattern pat ->
Pprintast.pattern ppf (demote_general_pattern pat)
| Partial_class_expr cl_expr ->
Pprintast.class_expr ppf (demote_class_expr cl_expr)
| Partial_signature sign -> Pprintast.signature ppf (demote_signature sign)
| Partial_signature_item sign_it ->
Pprintast.signature_item ppf (demote_signature_item sign_it)
| Partial_module_type mtype ->
Pprintast.module_type ppf (demote_module_type mtype)
let format_annots (ppf : formatter) : transposed_annots -> unit =
let folder wrapped part f =
wrapped (fun ppf -> fprintf ppf "%a@ %t" format_part part f)
and wrapper = fprintf ppf "@[<v>%t@]" in
function
| Packed (_typ, _vals) -> assert false
| Implementation stru -> Pprintast.structure ppf (demote_structure stru)
| Interface sign -> Pprintast.signature ppf (demote_signature sign)
| Partial_implementation parts ->
List.fold_left folder wrapper parts (fun _ -> ())
| Partial_interface parts -> List.fold_left folder wrapper parts (fun _ -> ())