From 342bf877594fbde8d9f7d395550cc6ade996d40d Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Mon, 26 Sep 2022 22:43:49 -0400 Subject: [PATCH] refactor(core/term): tracer is now a class this way we can inherit it in tracers that can trace many things, including terms. --- src/core/t_tracer.ml | 16 +++++++++++----- src/core/t_tracer.mli | 14 +++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/core/t_tracer.ml b/src/core/t_tracer.ml index 2c73150a..4b935ef4 100644 --- a/src/core/t_tracer.ml +++ b/src/core/t_tracer.ml @@ -15,12 +15,9 @@ type Tr.entry_view += (* FIXME: remove when we decode *) [@@ocaml.warning "-38"] -(* tracer *) -type t = { sink: Tr.Sink.t; emitted: Tr.Entry_id.t T.Weak_map.t } +type state = { sink: Tr.Sink.t; emitted: Tr.Entry_id.t T.Weak_map.t } -let create ~sink () : t = { sink; emitted = T.Weak_map.create 16 } - -let emit (self : t) (t : T.t) : term_ref = +let emit_term_ (self : state) (t : Term.t) = let module V = Ser_value in let rec loop t = match T.Weak_map.find_opt self.emitted t with @@ -58,4 +55,13 @@ let emit (self : t) (t : T.t) : term_ref = in loop t +(* tracer *) +class t ~sink = + object + val state = { sink; emitted = T.Weak_map.create 16 } + method emit_term (t : Term.t) : term_ref = emit_term_ state t + end + +let create ~sink () : t = new t ~sink +let emit (self : #t) (t : T.t) : term_ref = self#emit_term t let emit' self t : unit = ignore (emit self t : term_ref) diff --git a/src/core/t_tracer.mli b/src/core/t_tracer.mli index 394eea0e..300cb7c2 100644 --- a/src/core/t_tracer.mli +++ b/src/core/t_tracer.mli @@ -22,15 +22,15 @@ type Tr.entry_view += (* FIXME: remove *) [@@ocaml.warning "-38"] -type t +class t : + sink:Tr.Sink.t + -> object + method emit_term : Term.t -> term_ref + end val create : sink:Tr.Sink.t -> unit -> t (** [create ~sink ()] makes a tracer that will write terms into the given sink. *) -val emit : t -> Term.t -> term_ref -val emit' : t -> Term.t -> unit - -(* TODO - val reader : Term.store -> Tr.Entry_read.reader -*) +val emit : #t -> Term.t -> term_ref +val emit' : #t -> Term.t -> unit