diff options
author | Stephane Glondu <steph@glondu.net> | 2017-07-21 17:35:15 +0200 |
---|---|---|
committer | Stephane Glondu <steph@glondu.net> | 2017-07-21 17:35:15 +0200 |
commit | 730019fc84dc7a417f0c39796d0d68fb8ad8c560 (patch) | |
tree | b1642cd10ca8eb6fa5c265e246126386e34daced /src | |
parent | f61780054cc2f0620f6cb3d06474afabb90a152a (diff) |
New upstream version 4.1
Diffstat (limited to 'src')
-rw-r--r-- | src/ppx_deriving.cppo.ml | 11 | ||||
-rw-r--r-- | src/ppx_deriving.mli | 7 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/ppx_deriving.cppo.ml b/src/ppx_deriving.cppo.ml index 4f8e939..63197f7 100644 --- a/src/ppx_deriving.cppo.ml +++ b/src/ppx_deriving.cppo.ml @@ -34,7 +34,16 @@ type deriver = { let registry : (string, deriver) Hashtbl.t = Hashtbl.create 16 -let register d = Hashtbl.add registry d.name d +let hooks = Queue.create () + +let add_register_hook f = Queue.add f hooks + +let register d = + Hashtbl.add registry d.name d; + Queue.iter (fun f -> f d) hooks + +let derivers () = + Hashtbl.fold (fun _ v acc -> v::acc) registry [] let lookup name = try Some (Hashtbl.find registry name) diff --git a/src/ppx_deriving.mli b/src/ppx_deriving.mli index bde079b..f4d3878 100644 --- a/src/ppx_deriving.mli +++ b/src/ppx_deriving.mli @@ -42,6 +42,13 @@ type deriver = { (** [register deriver] registers [deriver] according to its [name] field. *) val register : deriver -> unit +(** [add_register_hook hook] adds [hook] to be executed whenever a new deriver + is registered. *) +val add_register_hook : (deriver -> unit) -> unit + +(** [derivers ()] returns all currently registered derivers. *) +val derivers : unit -> deriver list + (** Creating {!deriver} structure. *) val create : string -> |