summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStephane Glondu <steph@glondu.net>2017-07-21 17:35:15 +0200
committerStephane Glondu <steph@glondu.net>2017-07-21 17:35:15 +0200
commit730019fc84dc7a417f0c39796d0d68fb8ad8c560 (patch)
treeb1642cd10ca8eb6fa5c265e246126386e34daced /src
parentf61780054cc2f0620f6cb3d06474afabb90a152a (diff)
New upstream version 4.1
Diffstat (limited to 'src')
-rw-r--r--src/ppx_deriving.cppo.ml11
-rw-r--r--src/ppx_deriving.mli7
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 ->