aboutsummaryrefslogtreecommitdiff
path: root/pretyping/coercionops.mli
diff options
context:
space:
mode:
authorKazuhiko Sakaguchi2021-03-10 13:07:58 +0900
committerKazuhiko Sakaguchi2021-03-13 02:09:53 +0900
commit27270870ea75e77808d8e1b4af4998c0b57255ae (patch)
tree4b56407c589301b70d4153668184e64d0b5a9a19 /pretyping/coercionops.mli
parentd33266649d285b7d8ba5a7093319faa6132d6bc9 (diff)
Minimize the set of multiple inheritance paths to check for conversion
The table of coercion classes (`class_tab`) has been extended with information about reachability. The conversion checking of a pair of multiple inheritance paths (of coercions) will be skipped if these paths can be reduced to smaller adjoining pairs of multiple inheritance paths, and this reduction will be determined based on that reachability information.
Diffstat (limited to 'pretyping/coercionops.mli')
-rw-r--r--pretyping/coercionops.mli12
1 files changed, 11 insertions, 1 deletions
diff --git a/pretyping/coercionops.mli b/pretyping/coercionops.mli
index fb5621dd3a..9236167021 100644
--- a/pretyping/coercionops.mli
+++ b/pretyping/coercionops.mli
@@ -31,9 +31,19 @@ val subst_cl_typ : env -> substitution -> cl_typ -> cl_typ
(** Comparison of [cl_typ] *)
val cl_typ_ord : cl_typ -> cl_typ -> int
+module ClTypSet : Set.S with type elt = cl_typ
+
(** This is the type of infos for declared classes *)
type cl_info_typ = {
- cl_param : int }
+ (* The number of parameters of the coercion class. *)
+ cl_param : int;
+ (* The sets of coercion classes respectively reachable from and to the
+ coercion class. *)
+ cl_reachable_from : ClTypSet.t;
+ cl_reachable_to : ClTypSet.t;
+ (* The representative class of the strongly connected component. *)
+ cl_repr : cl_typ;
+}
(** This is the type of coercion kinds *)
type coe_typ = GlobRef.t