summaryrefslogtreecommitdiff
path: root/typing/includemod.ml
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1995-09-02 18:55:37 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1995-09-02 18:55:37 +0000
commit7e691c81a692de687612225e0485f9b882b1ca5f (patch)
tree3a5eb6226433376e97963fbfdfbdb0293337f38e /typing/includemod.ml
parent756ae5b3261705296e960415f48dc8f372d4404d (diff)
downloadocaml-7e691c81a692de687612225e0485f9b882b1ca5f.tar.gz
Meilleur traitement des variables non generalisables.
Divers nettoyages pendant l'ecriture de la doc. git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@239 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'typing/includemod.ml')
-rw-r--r--typing/includemod.ml20
1 files changed, 19 insertions, 1 deletions
diff --git a/typing/includemod.ml b/typing/includemod.ml
index 61c7597b4b..dcec80c608 100644
--- a/typing/includemod.ml
+++ b/typing/includemod.ml
@@ -26,6 +26,7 @@ type error =
Ident.t * exception_declaration * exception_declaration
| Module_types of module_type * module_type
| Modtype_infos of Ident.t * modtype_declaration * modtype_declaration
+ | Interface_mismatch of string * string
exception Error of error list
@@ -221,6 +222,15 @@ let check_modtype_inclusion env mty1 mty2 =
let _ = Env.check_modtype_inclusion := check_modtype_inclusion
+(* Check that an implementation of a compilation unit meets its
+ interface. *)
+
+let compunit impl_name impl_sig intf_name intf_sig =
+ try
+ signatures Env.initial impl_sig intf_sig
+ with Error reasons ->
+ raise(Error(Interface_mismatch(impl_name, intf_name) :: reasons))
+
(* Error report *)
open Format
@@ -228,7 +238,8 @@ open Printtyp
let include_err = function
Missing_field id ->
- print_string "Missing field "; ident id
+ print_string "The field `"; ident id;
+ print_string "' is required but not provided"
| Value_descriptions(id, d1, d2) ->
open_hvbox 2;
print_string "Values do not match:"; print_space();
@@ -269,6 +280,13 @@ let include_err = function
print_string "is not included in"; print_space();
modtype_declaration id d2;
close_box()
+ | Interface_mismatch(impl_name, intf_name) ->
+ open_hovbox 0;
+ print_string "The implementation "; print_string impl_name;
+ print_space(); print_string "does not match the interface ";
+ print_string intf_name;
+ print_string ":";
+ close_box()
let report_error errlist =
match List.rev errlist with