|
|
|
@ -46,6 +46,8 @@ module Env = struct
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exception UnexpectedRecord
|
|
|
|
|
exception DeclarationNotFound of tyconstr_id
|
|
|
|
|
exception LabelNotFound of label_id
|
|
|
|
|
|
|
|
|
|
let empty = {
|
|
|
|
|
datatypes = TyConstrMap.empty;
|
|
|
|
@ -64,19 +66,17 @@ module Env = struct
|
|
|
|
|
labels = add_labels e.labels tdescr.labels_descr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let find_label { labels ; _ } (Label l) =
|
|
|
|
|
LabelMap.find (Label l) labels
|
|
|
|
|
|
|
|
|
|
let find_decl { datatypes ; _ } (Type tid) =
|
|
|
|
|
TyConstrMap.find (Type tid) datatypes
|
|
|
|
|
|
|
|
|
|
let label_index { labels_descr ; _ } l =
|
|
|
|
|
let combine i ldescr = (i, ldescr.label_name) in
|
|
|
|
|
List.mapi combine labels_descr
|
|
|
|
|
|> List.find (fun (_, l') -> l = l')
|
|
|
|
|
|> fst
|
|
|
|
|
|
|
|
|
|
let () = ignore label_index
|
|
|
|
|
let find_label { labels ; _ } label =
|
|
|
|
|
try
|
|
|
|
|
LabelMap.find label labels
|
|
|
|
|
with Not_found ->
|
|
|
|
|
raise (LabelNotFound label)
|
|
|
|
|
|
|
|
|
|
let find_decl { datatypes ; _ } tid =
|
|
|
|
|
try
|
|
|
|
|
TyConstrMap.find tid datatypes
|
|
|
|
|
with Not_found ->
|
|
|
|
|
raise (DeclarationNotFound tid)
|
|
|
|
|
|
|
|
|
|
let map (type b1 b2 t1 t2)
|
|
|
|
|
(f : (b1, t1) decl -> (b2, t2) decl)
|
|
|
|
|