diff options
author | Jacques Garrigue <garrigue at math.nagoya-u.ac.jp> | 2010-03-06 05:44:40 +0000 |
---|---|---|
committer | Jacques Garrigue <garrigue at math.nagoya-u.ac.jp> | 2010-03-06 05:44:40 +0000 |
commit | cf391eeac3053e157d9856548bf73612f310aeea (patch) | |
tree | f59d5ccac8079c0e31191fccf3fa98362333e16b | |
parent | ebd107b3ac7714ffae49b3a81fbcc227b0b08d49 (diff) | |
download | ocaml-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.ml | 24 |
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 *) |