diff options
Diffstat (limited to '')
-rw-r--r-- | src/Modules.ml | 46 |
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 |