summaryrefslogtreecommitdiff
path: root/src/Modules.ml
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Modules.ml46
1 files changed, 23 insertions, 23 deletions
diff --git a/src/Modules.ml b/src/Modules.ml
index e4cb06c1..e437ad0a 100644
--- a/src/Modules.ml
+++ b/src/Modules.ml
@@ -1,55 +1,55 @@
open Types
open CfimAst
+type 'id g_declaration_group = NonRec of 'id | Rec of 'id list
+[@@deriving show]
+
+type type_declaration_group = TypeDefId.id g_declaration_group [@@deriving show]
+
+type fun_declaration_group = FunDefId.id g_declaration_group [@@deriving show]
+
(** Module declaration *)
-type declaration =
- | Type of TypeDefId.id
- | Fun of FunDefId.id
- | RecTypes of TypeDefId.id list
- | RecFuns of FunDefId.id list
+type declaration_group =
+ | Type of type_declaration_group
+ | Fun of fun_declaration_group
+[@@deriving show]
type cfim_module = {
- declarations : declaration list;
+ declarations : declaration_group list;
types : type_def list;
functions : fun_def list;
}
(** CFIM module *)
-type 'id decl_group = NonRec of 'id | Rec of 'id list [@@deriving show]
-
-type types_decl_group = TypeDefId.id decl_group [@@deriving show]
-
-type funs_decl_group = FunDefId.id decl_group [@@deriving show]
-
(** Split a module's declarations between types and functions *)
-let split_declarations (decls : declaration list) :
- types_decl_group list * funs_decl_group list =
+let split_declarations (decls : declaration_group list) :
+ type_declaration_group list * fun_declaration_group list =
let rec split decls =
match decls with
| [] -> ([], [])
| d :: decls' -> (
let types, funs = split decls' in
match d with
- | Type id -> (NonRec id :: types, funs)
- | Fun id -> (types, NonRec id :: funs)
- | RecTypes ids -> (Rec ids :: types, funs)
- | RecFuns ids -> (types, Rec ids :: funs))
+ | Type decl -> (decl :: types, funs)
+ | Fun decl -> (types, decl :: funs))
in
split decls
(** Split a module's declarations into two maps from type/fun ids to
declaration groups.
*)
-let split_declarations_to_group_maps (decls : declaration list) :
- types_decl_group TypeDefId.Map.t * funs_decl_group FunDefId.Map.t =
+let split_declarations_to_group_maps (decls : declaration_group list) :
+ type_declaration_group TypeDefId.Map.t
+ * fun_declaration_group FunDefId.Map.t =
let module G (M : Map.S) = struct
- let add_group (map : M.key decl_group M.t) (group : M.key decl_group) :
- M.key decl_group M.t =
+ let add_group (map : M.key g_declaration_group M.t)
+ (group : M.key g_declaration_group) : M.key g_declaration_group M.t =
match group with
| NonRec id -> M.add id group map
| Rec ids -> List.fold_left (fun map id -> M.add id group map) map ids
- let create_map (groups : M.key decl_group list) : M.key decl_group M.t =
+ let create_map (groups : M.key g_declaration_group list) :
+ M.key g_declaration_group M.t =
List.fold_left add_group M.empty groups
end in
let types, funs = split_declarations decls in