diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1995-09-02 18:55:37 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1995-09-02 18:55:37 +0000 |
commit | 7e691c81a692de687612225e0485f9b882b1ca5f (patch) | |
tree | 3a5eb6226433376e97963fbfdfbdb0293337f38e /typing/includemod.ml | |
parent | 756ae5b3261705296e960415f48dc8f372d4404d (diff) | |
download | ocaml-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.ml | 20 |
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 |