···7979 | `First
8080 ]
81818282- let equal = Poly.equal
8282+ let to_string = function
8383+ | `Shortest -> "short"
8484+ | `Longest -> "long"
8585+ | `First -> "first"
8686+ ;;
83878484- let pp ch k =
8585- Format.pp_print_string
8686- ch
8787- (match k with
8888- | `Shortest -> "short"
8989- | `Longest -> "long"
9090- | `First -> "first")
9191- ;;
8888+ let to_dyn t : Dyn.t = Enum (to_string t)
8989+ let equal = Poly.equal
9090+ let pp ch k = Format.pp_print_string ch (to_string k)
9291end
93929493module Rep_kind = struct
···109108 val compare : t -> t -> int
110109 val equal : t -> t -> bool
111110 val pp : t Fmt.t
111111+ val to_dyn : t -> Dyn.t
112112 val start : t
113113 val prev : t -> t
114114 val next : t -> t
···121121 let equal = Int.equal
122122 let compare = Int.compare
123123 let pp = Format.pp_print_int
124124+ let to_dyn = Dyn.int
124125 let start = 0
125126 let prev x = pred x
126127 let next x = succ x
···136137 type t = private int
137138138139 val pp : t Fmt.t
140140+ val to_dyn : t -> Dyn.t
139141 val to_int : t -> int
140142 val unknown : t
141143 val initial : t
···145147end = struct
146148 type t = int
147149150150+ let to_dyn = Dyn.int
148151 let to_int x = x
149152 let pp = Format.pp_print_int
150153 let used t = t >= 0
···172175 | After of Category.t
173176 | Pmark of Pmark.t
174177178178+ let rec dyn_of_def =
179179+ let open Dyn in
180180+ function
181181+ | Cst cset -> variant "Cst" [ Cset.to_dyn cset ]
182182+ | Alt alt -> variant "Alt" (List.map ~f:to_dyn alt)
183183+ | Seq (sem, x, y) -> variant "Seq" [ Sem.to_dyn sem; to_dyn x; to_dyn y ]
184184+ | Eps -> Enum "Eps"
185185+ | Rep (_, sem, t) -> variant "Rep" [ Sem.to_dyn sem; to_dyn t ]
186186+ | Mark m -> variant "Mark" [ Mark.to_dyn m ]
187187+ | Pmark m -> variant "Pmark" [ Pmark.to_dyn m ]
188188+ | Erase (x, y) -> variant "Erase" [ Mark.to_dyn x; Mark.to_dyn y ]
189189+ | Before c -> variant "Before" [ Category.to_dyn c ]
190190+ | After c -> variant "After" [ Category.to_dyn c ]
191191+192192+ and to_dyn { id = _; def } = dyn_of_def def
193193+175194 let rec pp ch e =
176195 let open Fmt in
177196 match e.def with
···239258 ; pmarks : Pmark.Set.t
240259 }
241260261261+ let to_dyn { marks; pmarks } : Dyn.t =
262262+ let open Dyn in
263263+ record
264264+ [ ( "marks"
265265+ , List.map marks ~f:(fun (m, idx) -> pair (Mark.to_dyn m) (Idx.to_dyn idx))
266266+ |> list )
267267+ ; "pmarks", Pmark.Set.to_list pmarks |> List.map ~f:Pmark.to_dyn |> list
268268+ ]
269269+ ;;
270270+242271 let equal { marks; pmarks } t =
243272 List.equal
244273 ~eq:(fun (x, y) (x', y') -> Mark.equal x x' && Idx.equal y y')
···318347 | TMatch of Marks.t
319348 end
320349350350+ val to_dyn : t -> Dyn.t
321351 val fold_right : t -> init:'acc -> f:(E.t -> 'acc -> 'acc) -> 'acc
322352 val tseq : Sem.t -> t -> Expr.t -> t -> t
323353 val initial : Expr.t -> t
···368398369399 type t = E.t list
370400401401+ let rec to_dyn t = Dyn.list (List.map ~f:dyn_of_e t)
402402+403403+ and dyn_of_e =
404404+ let open Dyn in
405405+ function
406406+ | E.TSeq (sem, x, y) -> variant "TSeq" [ Sem.to_dyn sem; to_dyn x; Expr.to_dyn y ]
407407+ | TExp (marks, e) -> variant "TExp" [ Marks.to_dyn marks; Expr.to_dyn e ]
408408+ | TMatch m -> variant "TMarks" [ Marks.to_dyn m ]
409409+ ;;
410410+371411 open E
372412373413 let equal = E.equal_list
···507547 }
508548509549 let[@inline] idx t = t.idx
550550+ let to_dyn t = Desc.to_dyn t.desc
510551511552 let dummy =
512553 { idx = Idx.unknown
+1
lib/automata.mli
···100100 val create : Category.t -> expr -> t
101101 val idx : t -> Idx.t
102102 val status : t -> Status.t
103103+ val to_dyn : t -> Dyn.t
103104104105 module Table : Hashtbl.S with type key = t
105106end
+1
lib/category.ml
···1313let newline = 8
1414let lastnewline = 16
1515let search_boundary = 32
1616+let to_dyn = Dyn.int
16171718let from_char = function
1819 (* Should match [cword] definition *)
+1
lib/category.mli
···1919val compare : t -> t -> int
2020val intersect : t -> t -> bool
2121val pp : t Fmt.t
2222+val to_dyn : t -> Dyn.t
+5
lib/cset.ml
···129129130130let pp = Fmt.list ~pp_sep:(Fmt.lit ", ") print_one
131131132132+let to_dyn t =
133133+ let open Dyn in
134134+ List.map t ~f:(fun (x, y) -> pair (int x) (int y)) |> list
135135+;;
136136+132137let rec iter t ~f =
133138 match t with
134139 | [] -> ()
+1
lib/cset.mli
···8181val prepend : t -> 'a list -> (t * 'a list) list -> (t * 'a list) list
8282val pick : t -> c
8383val offset : int -> t -> t
8484+val to_dyn : t -> Dyn.t
+13
lib/dyn.ml
···11+type t =
22+ | Int of int
33+ | Pair of t * t
44+ | Enum of string
55+ | List of t list
66+ | Constructor of string * t list
77+ | Record of (string * t) list
88+99+let variant x y = Constructor (x, y)
1010+let list x = List x
1111+let int x = Int x
1212+let pair x y = Pair (x, y)
1313+let record fields = Record fields
···44val compare : t -> t -> int
55val gen : unit -> t
66val pp : t Fmt.t
77+val to_dyn : t -> Dyn.t
7889module Set : sig
910 include Set.S with type elt = t