summaryrefslogtreecommitdiff
path: root/ocamldoc
diff options
context:
space:
mode:
authorMaxence Guesdon <maxence.guesdon@inria.fr>2004-03-26 09:09:50 +0000
committerMaxence Guesdon <maxence.guesdon@inria.fr>2004-03-26 09:09:50 +0000
commitdf89e7e0d2d3366ccea1dd0e78ee6f7c7bf7245c (patch)
treedd2cf40b93c18e521d052419738057f45539bb50 /ocamldoc
parentf415853a119047bc864d749619b0c294c30e26ea (diff)
downloadocaml-df89e7e0d2d3366ccea1dd0e78ee6f7c7bf7245c.tar.gz
improve display of functor parameters, added mp_type_code field to functor parameter
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@6173 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'ocamldoc')
-rw-r--r--ocamldoc/.depend22
-rw-r--r--ocamldoc/odoc_ast.ml89
-rw-r--r--ocamldoc/odoc_html.ml37
-rw-r--r--ocamldoc/odoc_info.mli5
-rw-r--r--ocamldoc/odoc_name.ml40
-rw-r--r--ocamldoc/odoc_name.mli5
-rw-r--r--ocamldoc/odoc_parameter.ml1
-rw-r--r--ocamldoc/odoc_print.ml28
-rw-r--r--ocamldoc/odoc_print.mli4
-rw-r--r--ocamldoc/odoc_sig.ml61
10 files changed, 183 insertions, 109 deletions
diff --git a/ocamldoc/.depend b/ocamldoc/.depend
index d3a3951da1..79a6b7d0be 100644
--- a/ocamldoc/.depend
+++ b/ocamldoc/.depend
@@ -56,11 +56,11 @@ odoc_config.cmo: ../utils/config.cmi odoc_config.cmi
odoc_config.cmx: ../utils/config.cmx odoc_config.cmi
odoc_cross.cmo: odoc_class.cmo odoc_exception.cmo odoc_messages.cmo \
odoc_misc.cmi odoc_module.cmo odoc_name.cmi odoc_parameter.cmo \
- odoc_search.cmi odoc_type.cmo odoc_types.cmi odoc_value.cmo \
+ odoc_scan.cmo odoc_search.cmi odoc_type.cmo odoc_types.cmi odoc_value.cmo \
odoc_cross.cmi
odoc_cross.cmx: odoc_class.cmx odoc_exception.cmx odoc_messages.cmx \
odoc_misc.cmx odoc_module.cmx odoc_name.cmx odoc_parameter.cmx \
- odoc_search.cmx odoc_type.cmx odoc_types.cmx odoc_value.cmx \
+ odoc_scan.cmx odoc_search.cmx odoc_type.cmx odoc_types.cmx odoc_value.cmx \
odoc_cross.cmi
odoc_dag2html.cmo: odoc_info.cmi odoc_dag2html.cmi
odoc_dag2html.cmx: odoc_info.cmx odoc_dag2html.cmi
@@ -104,8 +104,10 @@ odoc_lexer.cmo: odoc_args.cmi odoc_comments_global.cmi odoc_messages.cmo \
odoc_parser.cmi
odoc_lexer.cmx: odoc_args.cmx odoc_comments_global.cmx odoc_messages.cmx \
odoc_parser.cmx
-odoc_man.cmo: odoc_info.cmi odoc_messages.cmo odoc_misc.cmi odoc_str.cmi
-odoc_man.cmx: odoc_info.cmx odoc_messages.cmx odoc_misc.cmx odoc_str.cmx
+odoc_man.cmo: odoc_info.cmi odoc_messages.cmo odoc_misc.cmi odoc_print.cmi \
+ odoc_str.cmi
+odoc_man.cmx: odoc_info.cmx odoc_messages.cmx odoc_misc.cmx odoc_print.cmx \
+ odoc_str.cmx
odoc_merge.cmo: odoc_args.cmi odoc_class.cmo odoc_exception.cmo \
odoc_messages.cmo odoc_module.cmo odoc_name.cmi odoc_parameter.cmo \
odoc_type.cmo odoc_types.cmi odoc_value.cmo odoc_merge.cmi
@@ -168,16 +170,16 @@ odoc_sig.cmo: ../parsing/asttypes.cmi ../typing/btype.cmi \
../parsing/location.cmi ../utils/misc.cmi odoc_args.cmi odoc_class.cmo \
odoc_env.cmi odoc_exception.cmo odoc_global.cmi odoc_merge.cmi \
odoc_messages.cmo odoc_misc.cmi odoc_module.cmo odoc_name.cmi \
- odoc_parameter.cmo odoc_type.cmo odoc_types.cmi odoc_value.cmo \
- ../parsing/parsetree.cmi ../typing/path.cmi ../typing/typedtree.cmi \
- ../typing/types.cmi odoc_sig.cmi
+ odoc_parameter.cmo odoc_print.cmi odoc_type.cmo odoc_types.cmi \
+ odoc_value.cmo ../parsing/parsetree.cmi ../typing/path.cmi \
+ ../typing/typedtree.cmi ../typing/types.cmi odoc_sig.cmi
odoc_sig.cmx: ../parsing/asttypes.cmi ../typing/btype.cmx \
../parsing/location.cmx ../utils/misc.cmx odoc_args.cmx odoc_class.cmx \
odoc_env.cmx odoc_exception.cmx odoc_global.cmx odoc_merge.cmx \
odoc_messages.cmx odoc_misc.cmx odoc_module.cmx odoc_name.cmx \
- odoc_parameter.cmx odoc_type.cmx odoc_types.cmx odoc_value.cmx \
- ../parsing/parsetree.cmi ../typing/path.cmx ../typing/typedtree.cmx \
- ../typing/types.cmx odoc_sig.cmi
+ odoc_parameter.cmx odoc_print.cmx odoc_type.cmx odoc_types.cmx \
+ odoc_value.cmx ../parsing/parsetree.cmi ../typing/path.cmx \
+ ../typing/typedtree.cmx ../typing/types.cmx odoc_sig.cmi
odoc_str.cmo: odoc_exception.cmo odoc_messages.cmo odoc_misc.cmi \
odoc_name.cmi odoc_print.cmi odoc_type.cmo odoc_value.cmo \
../typing/printtyp.cmi ../typing/types.cmi odoc_str.cmi
diff --git a/ocamldoc/odoc_ast.ml b/ocamldoc/odoc_ast.ml
index f7e3a4894f..e433025acd 100644
--- a/ocamldoc/odoc_ast.ml
+++ b/ocamldoc/odoc_ast.ml
@@ -1384,6 +1384,15 @@ module Analyser =
let pos_start = p_module_expr.Parsetree.pmod_loc.Location.loc_start.Lexing.pos_cnum in
let pos_end = p_module_expr.Parsetree.pmod_loc.Location.loc_end.Lexing.pos_cnum in
let modtype = tt_module_expr.Typedtree.mod_type in
+ let m_code_intf =
+ match p_module_expr.Parsetree.pmod_desc with
+ Parsetree.Pmod_constraint (_, pmodule_type) ->
+ let loc_start = pmodule_type.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
+ let loc_end = pmodule_type.Parsetree.pmty_loc.Location.loc_end.Lexing.pos_cnum in
+ Some (get_string_of_file loc_start loc_end)
+ | _ ->
+ None
+ in
let m_base =
{
m_name = complete_name ;
@@ -1395,7 +1404,7 @@ module Analyser =
m_loc = { loc_impl = Some (!file_name, pos_start) ; loc_inter = None } ;
m_top_deps = [] ;
m_code = None ; (* code is set by the caller, after the module is created *)
- m_code_intf = None ;
+ m_code_intf = m_code_intf ;
}
in
match (p_module_expr.Parsetree.pmod_desc, tt_module_expr.Typedtree.mod_desc) with
@@ -1411,30 +1420,35 @@ module Analyser =
let elements2 = replace_dummy_included_modules elements included_modules_from_tt in
{ m_base with m_kind = Module_struct elements2 }
- | (Parsetree.Pmod_functor (_, _, p_module_expr2),
+ | (Parsetree.Pmod_functor (_, pmodule_type, p_module_expr2),
Typedtree.Tmod_functor (ident, mtyp, tt_module_expr2)) ->
- let param =
- {
- mp_name = Name.from_ident ident ;
- mp_type = Odoc_env.subst_module_type env mtyp ;
- }
- in
- let dummy_complete_name = Name.concat "__" param.mp_name in
- let new_env = Odoc_env.add_module env dummy_complete_name in
- let m_base2 = analyse_module
- new_env
- current_module_name
- module_name
- None
- p_module_expr2
- tt_module_expr2
- in
- let kind =
- match m_base2.m_kind with
- Module_functor (params, k) -> Module_functor (param :: params, m_base2.m_kind)
- | k -> Module_functor ([param], k)
- in
- { m_base with m_kind = kind }
+ let loc_start = pmodule_type.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
+ let loc_end = pmodule_type.Parsetree.pmty_loc.Location.loc_end.Lexing.pos_cnum in
+ let mp_type_code = get_string_of_file loc_start loc_end in
+ print_DEBUG (Printf.sprintf "mp_type_code=%s" mp_type_code);
+ let param =
+ {
+ mp_name = Name.from_ident ident ;
+ mp_type = Odoc_env.subst_module_type env mtyp ;
+ mp_type_code = mp_type_code ;
+ }
+ in
+ let dummy_complete_name = Name.concat "__" param.mp_name in
+ let new_env = Odoc_env.add_module env dummy_complete_name in
+ let m_base2 = analyse_module
+ new_env
+ current_module_name
+ module_name
+ None
+ p_module_expr2
+ tt_module_expr2
+ in
+ let kind =
+ match m_base2.m_kind with
+ Module_functor (params, k) -> Module_functor (param :: params, m_base2.m_kind)
+ | k -> Module_functor ([param], k)
+ in
+ { m_base with m_kind = kind }
| (Parsetree.Pmod_apply (p_module_expr1, p_module_expr2),
Typedtree.Tmod_apply (tt_module_expr1, tt_module_expr2, _))
@@ -1552,21 +1566,18 @@ module Analyser =
let included_modules_from_tt = tt_get_included_module_list tree_structure in
let elements2 = replace_dummy_included_modules elements included_modules_from_tt in
let kind = Module_struct elements2 in
- let m =
- {
- m_name = mod_name ;
- m_type = Types.Tmty_signature [] ;
- m_info = info_opt ;
- m_is_interface = false ;
- m_file = !file_name ;
- m_kind = kind ;
- m_loc = { loc_impl = Some (!file_name, 0) ; loc_inter = None } ;
- m_top_deps = [] ;
- m_code = (if !Odoc_args.keep_code then Some !file else None) ;
- m_code_intf = None ;
- }
- in
- m
+ {
+ m_name = mod_name ;
+ m_type = Types.Tmty_signature [] ;
+ m_info = info_opt ;
+ m_is_interface = false ;
+ m_file = !file_name ;
+ m_kind = kind ;
+ m_loc = { loc_impl = Some (!file_name, 0) ; loc_inter = None } ;
+ m_top_deps = [] ;
+ m_code = (if !Odoc_args.keep_code then Some !file else None) ;
+ m_code_intf = None ;
+ }
end
diff --git a/ocamldoc/odoc_html.ml b/ocamldoc/odoc_html.ml
index d56f70f7e5..d81138ba05 100644
--- a/ocamldoc/odoc_html.ml
+++ b/ocamldoc/odoc_html.ml
@@ -964,11 +964,17 @@ class html =
method create_fully_qualified_module_idents_links m_name s =
let f str_t =
let match_s = Str.matched_string str_t in
+ let rel = Name.get_relative m_name match_s in
+ let s_final = Odoc_info.apply_if_equal
+ Odoc_info.use_hidden_modules
+ match_s
+ rel
+ in
if StringSet.mem match_s known_modules_names then
let (html_file, _) = Naming.html_files match_s in
- "<a href=\""^html_file^"\">"^(Name.get_relative m_name match_s)^"</a>"
+ "<a href=\""^html_file^"\">"^s_final^"</a>"
else
- match_s
+ s_final
in
let s2 = Str.global_substitute
(Str.regexp "\\([A-Z]\\([a-zA-Z_'0-9]\\)*\\.\\)+\\([A-Z][a-zA-Z_'0-9]*\\)")
@@ -1022,12 +1028,16 @@ class html =
bs b "</code>"
(** Print html code to display a [Types.module_type]. *)
- method html_of_module_type b m_name t =
- let s = remove_last_newline (Odoc_info.string_of_module_type t) in
+ method html_of_module_type b ?code m_name t =
+ let s = remove_last_newline (Odoc_info.string_of_module_type ?code t) in
bs b "<code class=\"type\">";
bs b (self#create_fully_qualified_module_idents_links m_name s);
bs b "</code>"
-
+
+ (** Print html code to display the type of a module parameter.. *)
+ method html_of_module_parameter_type b m_name p =
+ self#html_of_module_type b m_name ~code: p.mp_type_code p.mp_type
+
(** Generate a file containing the module type in the given file name. *)
method output_module_type in_title file mtyp =
let s = remove_last_newline (Odoc_info.string_of_module_type ~complete: true mtyp) in
@@ -1378,7 +1388,7 @@ class html =
bs b "</code></td>\n" ;
bs b "<td align=\"center\" valign=\"top\">:</td>\n";
bs b "<td>" ;
- self#html_of_module_type b m_name p.mp_type;
+ self#html_of_module_parameter_type b m_name p;
bs b "\n";
(
match desc_opt with
@@ -1857,7 +1867,9 @@ class html =
self#html_of_modtype b ~with_link: false mt;
(* parameters for functors *)
- self#html_of_module_parameter_list b "" (Module.module_type_parameters mt);
+ self#html_of_module_parameter_list b
+ (Name.father mt.mt_name)
+ (Module.module_type_parameters mt);
(* a horizontal line *)
bs b "<hr width=\"100%\">\n";
(* module elements *)
@@ -1950,7 +1962,9 @@ class html =
self#html_of_module b ~with_link: false modu;
(* parameters for functors *)
- self#html_of_module_parameter_list b "" (Module.module_parameters modu);
+ self#html_of_module_parameter_list b
+ (Name.father modu.m_name)
+ (Module.module_parameters modu);
(* a horizontal line *)
bs b "<hr width=\"100%\">\n";
@@ -2192,12 +2206,17 @@ class html =
(* Get the names of all known modules and module types. *)
let module_types = Odoc_info.Search.module_types module_list in
let modules = Odoc_info.Search.modules module_list in
- let module_type_names = List.map (fun mt -> mt.mt_name) module_types in
known_modules_names <-
List.fold_left
(fun acc m -> StringSet.add m.m_name acc)
known_modules_names
modules ;
+ known_modules_names <-
+ List.fold_left
+ (fun acc mt -> StringSet.add mt.mt_name acc)
+ known_modules_names
+ module_types ;
+
(* generate html for each module *)
if not !Args.index_only then
self#generate_elements self#generate_for_module module_list ;
diff --git a/ocamldoc/odoc_info.mli b/ocamldoc/odoc_info.mli
index 852a0c20ae..63300bdd46 100644
--- a/ocamldoc/odoc_info.mli
+++ b/ocamldoc/odoc_info.mli
@@ -143,6 +143,7 @@ module Parameter :
{
mp_name : string ;
mp_type : Types.module_type ;
+ mp_type_code : string ;
}
(** {3 Functions} *)
@@ -632,8 +633,10 @@ val string_of_class_type_param_list : Types.type_expr list -> string
(** This function returns a string representing a [Types.module_type].
@param complete indicates if we must print complete signatures
or just [sig end]. Default if [false].
+ @param code if [complete = false] and the type contains something else
+ than identificators and functors, then the given code is used.
*)
-val string_of_module_type : ?complete: bool -> Types.module_type -> string
+val string_of_module_type : ?code: string -> ?complete: bool -> Types.module_type -> string
(** This function returns a string representing a [Types.class_type].
@param complete indicates if we must print complete signatures
diff --git a/ocamldoc/odoc_name.ml b/ocamldoc/odoc_name.ml
index 9ad6181872..e518d57cf6 100644
--- a/ocamldoc/odoc_name.ml
+++ b/ocamldoc/odoc_name.ml
@@ -79,10 +79,28 @@ let father name = fst (cut name)
let concat n1 n2 = n1^"."^n2
-let head n =
- match Str.split (Str.regexp "\\.") n with
- [] -> n
- | h :: _ -> h
+let head_and_tail n =
+ try
+ let pos = String.index n '.' in
+ if pos > 0 then
+ let h = String.sub n 0 pos in
+ try
+ ignore (String.index h '(');
+ (n, "")
+ with
+ Not_found ->
+ let len = String.length n in
+ if pos >= (len - 1) then
+ (h, "")
+ else
+ (h, String.sub n (pos + 1) (len - pos - 1))
+ else
+ (n, "")
+ with
+ Not_found -> (n, "")
+
+let head n = fst (head_and_tail n)
+let tail n = snd (head_and_tail n)
let depth name =
try
@@ -98,6 +116,20 @@ let prefix n1 n2 =
(n2.[len1] = '.')
with _ -> false)
+let rec get_relative_raw n1 n2 =
+ let (f1,s1) = head_and_tail n1 in
+ let (f2,s2) = head_and_tail n2 in
+ if f1 = f2 then
+ if f2 = s2 or s2 = "" then
+ s2
+ else
+ if f1 = s1 or s1 = "" then
+ s2
+ else
+ get_relative_raw s1 s2
+ else
+ n2
+
let get_relative n1 n2 =
if prefix n1 n2 then
let len1 = String.length n1 in
diff --git a/ocamldoc/odoc_name.mli b/ocamldoc/odoc_name.mli
index b67947fd16..33b661f937 100644
--- a/ocamldoc/odoc_name.mli
+++ b/ocamldoc/odoc_name.mli
@@ -41,9 +41,12 @@ val prefix : t -> t -> bool
(** Take two names n1 and n2 = n3.n4 and return n4 if n3=n1 or else n2. *)
val get_relative : t -> t -> t
+(** Take two names n1=n3.n4 and n2 = n5.n6 and return n6 if n3=n5 or else n2. *)
+val get_relative_raw : t -> t -> t
+
(** Take a list of module names to hide and a name,
and return the name when the module name (or part of it)
- was removedn, according to the list of module names to hide.*)
+ was removed, according to the list of module names to hide.*)
val hide_given_modules : t list -> t -> t
(** Indicate if a name if qualified or not. *)
diff --git a/ocamldoc/odoc_parameter.ml b/ocamldoc/odoc_parameter.ml
index 790250fc82..9b30f3181e 100644
--- a/ocamldoc/odoc_parameter.ml
+++ b/ocamldoc/odoc_parameter.ml
@@ -38,6 +38,7 @@ type parameter = param_info
type module_parameter = {
mp_name : string ;
mp_type : Types.module_type ;
+ mp_type_code : string ;
}
diff --git a/ocamldoc/odoc_print.ml b/ocamldoc/odoc_print.ml
index 409e0523ce..17eb73d3ed 100644
--- a/ocamldoc/odoc_print.ml
+++ b/ocamldoc/odoc_print.ml
@@ -44,22 +44,36 @@ let string_of_type_expr t =
Printtyp.type_scheme_max ~b_reset_names: false type_fmt t;
flush_type_fmt ()
+exception Use_code of string
+
(** Return the given module type where methods and vals have been removed
- from the signatures. Used when we don't want to print a too long module type.*)
-let simpl_module_type t =
+ from the signatures. Used when we don't want to print a too long module type.
+ @param code when the code is given, we raise the [Use_code] exception is we
+ encouter a signature, to that the calling function can use the code rather
+ than the "emptied" type.
+*)
+let simpl_module_type ?code t =
let rec iter t =
match t with
Types.Tmty_ident p -> t
- | Types.Tmty_signature _ -> Types.Tmty_signature []
+ | Types.Tmty_signature _ ->
+ (
+ match code with
+ None -> Types.Tmty_signature []
+ | Some s -> raise (Use_code s)
+ )
| Types.Tmty_functor (id, mt1, mt2) ->
Types.Tmty_functor (id, iter mt1, iter mt2)
in
iter t
-let string_of_module_type ?(complete=false) t =
- let t2 = if complete then t else simpl_module_type t in
- Printtyp.modtype modtype_fmt t2;
- flush_modtype_fmt ()
+let string_of_module_type ?code ?(complete=false) t =
+ try
+ let t2 = if complete then t else simpl_module_type ?code t in
+ Printtyp.modtype modtype_fmt t2;
+ flush_modtype_fmt ()
+ with
+ Use_code s -> s
(** Return the given class type where methods and vals have been removed
from the signatures. Used when we don't want to print a too long class type.*)
diff --git a/ocamldoc/odoc_print.mli b/ocamldoc/odoc_print.mli
index 0e7cc2f9d8..b0b11997d1 100644
--- a/ocamldoc/odoc_print.mli
+++ b/ocamldoc/odoc_print.mli
@@ -20,8 +20,10 @@ val string_of_type_expr : Types.type_expr -> string
(** This function returns a string representing a [Types.module_type].
@param complete indicates if we must print complete signatures
or just [sig end]. Default if [false].
+ @param code if [complete = false] and the type contains something else
+ than identificators and functors, then the given code is used.
*)
-val string_of_module_type : ?complete: bool -> Types.module_type -> string
+val string_of_module_type : ?code: string -> ?complete: bool -> Types.module_type -> string
(** This function returns a string representing a [Types.class_type].
@param complete indicates if we must print complete signatures
diff --git a/ocamldoc/odoc_sig.ml b/ocamldoc/odoc_sig.ml
index 19f2dfdb3a..c8fd543eaa 100644
--- a/ocamldoc/odoc_sig.ml
+++ b/ocamldoc/odoc_sig.ml
@@ -1077,14 +1077,19 @@ module Analyser =
raise (Failure "Parsetree.Pmty_signature signature but not Types.Tmty_signature signat")
)
- | Parsetree.Pmty_functor (_,_, module_type2) ->
+ | Parsetree.Pmty_functor (_,pmodule_type2, module_type2) ->
(
+ let loc_start = pmodule_type2.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
+ let loc_end = pmodule_type2.Parsetree.pmty_loc.Location.loc_end.Lexing.pos_cnum in
+ let mp_type_code = get_string_of_file loc_start loc_end in
+ print_DEBUG (Printf.sprintf "mp_type_code=%s" mp_type_code);
match sig_module_type with
Types.Tmty_functor (ident, param_module_type, body_module_type) ->
let param =
{
mp_name = Name.from_ident ident ;
mp_type = Odoc_env.subst_module_type env param_module_type ;
+ mp_type_code = mp_type_code ;
}
in
(
@@ -1140,14 +1145,19 @@ module Analyser =
(* if we're here something's wrong *)
raise (Failure "Parsetree.Pmty_signature signature but not Types.Tmty_signature signat")
)
- | Parsetree.Pmty_functor (_,_,module_type2) (* of string * module_type * module_type *) ->
+ | Parsetree.Pmty_functor (_,pmodule_type2,module_type2) (* of string * module_type * module_type *) ->
(
match sig_module_type with
Types.Tmty_functor (ident, param_module_type, body_module_type) ->
+ let loc_start = pmodule_type2.Parsetree.pmty_loc.Location.loc_start.Lexing.pos_cnum in
+ let loc_end = pmodule_type2.Parsetree.pmty_loc.Location.loc_end.Lexing.pos_cnum in
+ let mp_type_code = get_string_of_file loc_start loc_end in
+ print_DEBUG (Printf.sprintf "mp_type_code=%s" mp_type_code);
let param =
{
mp_name = Name.from_ident ident ;
mp_type = Odoc_env.subst_module_type env param_module_type ;
+ mp_type_code = mp_type_code ;
}
in
(
@@ -1321,41 +1331,18 @@ module Analyser =
else
None
in
- let m =
- {
- m_name = mod_name ;
- m_type = Types.Tmty_signature signat ;
- m_info = info_opt ;
- m_is_interface = true ;
- m_file = !file_name ;
- m_kind = Module_struct elements ;
- m_loc = { loc_impl = None ; loc_inter = Some (!file_name, 0) } ;
- m_top_deps = [] ;
- m_code = None ;
- m_code_intf = code_intf ;
- }
- in
-
- print_DEBUG "Eléments du module:";
- let f e =
- let s =
- match e with
- Element_module m -> "module "^m.m_name
- | Element_module_type mt -> "module type "^mt.mt_name
- | Element_included_module im -> "included module "^im.im_name
- | Element_class c -> "class "^c.cl_name
- | Element_class_type ct -> "class type "^ct.clt_name
- | Element_value v -> "value "^v.val_name
- | Element_exception e -> "exception "^e.ex_name
- | Element_type t -> "type "^t.ty_name
- | Element_module_comment t -> Odoc_misc.string_of_text t
- in
- print_DEBUG s;
- ()
- in
- List.iter f elements;
-
- m
+ {
+ m_name = mod_name ;
+ m_type = Types.Tmty_signature signat ;
+ m_info = info_opt ;
+ m_is_interface = true ;
+ m_file = !file_name ;
+ m_kind = Module_struct elements ;
+ m_loc = { loc_impl = None ; loc_inter = Some (!file_name, 0) } ;
+ m_top_deps = [] ;
+ m_code = None ;
+ m_code_intf = code_intf ;
+ }
end