summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2010-03-06 05:44:40 +0000
committerJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2010-03-06 05:44:40 +0000
commitcf391eeac3053e157d9856548bf73612f310aeea (patch)
treef59d5ccac8079c0e31191fccf3fa98362333e16b
parentebd107b3ac7714ffae49b3a81fbcc227b0b08d49 (diff)
downloadocaml-cf391eeac3053e157d9856548bf73612f310aeea.tar.gz
override val fields in signatures
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/sigsubst@9634 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--typing/env.ml24
1 files changed, 23 insertions, 1 deletions
diff --git a/typing/env.ml b/typing/env.ml
index 0442479906..c7bcb61daa 100644
--- a/typing/env.ml
+++ b/typing/env.ml
@@ -739,10 +739,32 @@ let add_item comp env =
| Tsig_class(id, decl, _) -> add_class id decl env
| Tsig_cltype(id, decl, _) -> add_cltype id decl env
+(* Remove a previous identifier with same name *)
+let rec filter_value id = function
+ Env_empty -> Env_empty
+ | Env_value (sum, id', vd) ->
+ if Ident.equal id id' then sum
+ else Env_value(filter_value id sum, id', vd)
+ | Env_type (sum, id', td) -> Env_type (filter_value id sum, id', td)
+ | Env_exception (sum, id', ed) -> Env_exception (filter_value id sum, id', ed)
+ | Env_module (sum, id', mty) -> Env_module (filter_value id sum, id', mty)
+ | Env_modtype (sum, id', mty) -> Env_modtype (filter_value id sum, id', mty)
+ | Env_class (sum, id', cty) -> Env_class (filter_value id sum, id', cty)
+ | Env_cltype (sum, id', cty) -> Env_cltype (filter_value id sum, id', cty)
+ | Env_open (sum, path) -> Env_open (filter_value id sum, path)
+
+let remove_value id env =
+ { env with summary = filter_value id env.summary }
+
+let add_item_for_signature comp env =
+ match comp with
+ Tsig_value(id, decl) -> add_value id decl (remove_value id env)
+ | _ -> add_item comp env
+
let rec add_signature sg env =
match sg with
[] -> env
- | comp :: rem -> add_signature rem (add_item comp env)
+ | comp :: rem -> add_signature rem (add_item_for_signature comp env)
(* Open a signature path *)