aboutsummaryrefslogtreecommitdiffhomepage
path: root/checker/environ.ml
diff options
context:
space:
mode:
authorGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2011-10-26 16:22:35 +0000
committerGravatar letouzey <letouzey@85f007b7-540e-0410-9357-904b9bb8a0f7>2011-10-26 16:22:35 +0000
commit2c8ad1f81c486115fad58553ed15e775ca50de87 (patch)
tree5c2c4ef953ffdf7876ee8618b8bae713b7016a95 /checker/environ.ml
parentcf21be5bfd42720bd1cc8756cfcdb388cdaebd80 (diff)
Checker/subtyping.ml: avoid adding in env a module already there (fix #2609)
When doing a [check_subtypes env mtb1 mtb2], we used to always add [mtb1] in the environment. But since the stricter checks of commit r14150, this is an error if the environment already knows [mtb1] (for instance when doing (F M) and checking that M is compatible with the type of the arg of F. [check_subtypes] now expect [mtb1] to be already in env, and we move the add_module to the unique call site of this function that requires it. Moreover, we solve a second issue : when subtyping a functor, we update the environment once inside the functor, and this is also refused by the checks of commits r14150. So we first remove the module name from the env before doing the update. Since the module added earlier was a functor, there is no inner defs to chase in env. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@14615 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'checker/environ.ml')
-rw-r--r--checker/environ.ml9
1 files changed, 9 insertions, 0 deletions
diff --git a/checker/environ.ml b/checker/environ.ml
index fbe9d9ee2..99b364579 100644
--- a/checker/environ.ml
+++ b/checker/environ.ml
@@ -191,6 +191,15 @@ let shallow_add_module mp mb env =
env_modules = new_mods } in
{ env with env_globals = new_globals }
+let shallow_remove_module mp env =
+ if not (MPmap.mem mp env.env_globals.env_modules) then
+ Printf.ksprintf anomaly "Module %s is unknown"
+ (string_of_mp mp);
+ let new_mods = MPmap.remove mp env.env_globals.env_modules in
+ let new_globals =
+ { env.env_globals with
+ env_modules = new_mods } in
+ { env with env_globals = new_globals }
let lookup_module mp env =
MPmap.find mp env.env_globals.env_modules