diff options
| author | msozeau | 2009-10-09 22:21:30 +0000 |
|---|---|---|
| committer | msozeau | 2009-10-09 22:21:30 +0000 |
| commit | 562c684cd19c37e04901743c73933ea12148940b (patch) | |
| tree | 7257cade7643acce2e3080d5b289960ec6559167 /interp | |
| parent | fa8272263e70535dc8db3c5e296c3635bf4139de (diff) | |
Fix bug #2162 and a name clashing bug in generalized binders.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12383 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'interp')
| -rw-r--r-- | interp/constrintern.ml | 7 | ||||
| -rw-r--r-- | interp/implicit_quantifiers.ml | 4 | ||||
| -rw-r--r-- | interp/implicit_quantifiers.mli | 2 |
3 files changed, 7 insertions, 6 deletions
diff --git a/interp/constrintern.ml b/interp/constrintern.ml index c251ffb24f..aa836ea11e 100644 --- a/interp/constrintern.ml +++ b/interp/constrintern.ml @@ -697,8 +697,9 @@ let push_loc_name_env ?(fail_anonymous=false) lvar (ids,unb,tmpsc,scopes as env) let intern_generalized_binder ?(fail_anonymous=false) intern_type lvar (ids,unb,tmpsc,sc as env) bl (loc, na) b b' t ty = - let ty = - if t then ty else + let ids = match na with Anonymous -> ids | Name na -> Idset.add na ids in + let ty, ids' = + if t then ty, ids else Implicit_quantifiers.implicit_application ids Implicit_quantifiers.combine_params_freevar ty in @@ -715,7 +716,7 @@ let intern_generalized_binder ?(fail_anonymous=false) intern_type lvar match ty with | CApp (_, (_, CRef (Ident (loc,id))), _) -> id | _ -> id_of_string "H" - in Implicit_quantifiers.make_fresh ids (Global.env ()) id + in Implicit_quantifiers.make_fresh ids' (Global.env ()) id in Name name | _ -> na in (push_loc_name_env ~fail_anonymous lvar env' loc na), (na,b',None,ty') :: List.rev bl diff --git a/interp/implicit_quantifiers.ml b/interp/implicit_quantifiers.ml index 7b1a1ff4cc..a55daff364 100644 --- a/interp/implicit_quantifiers.ml +++ b/interp/implicit_quantifiers.ml @@ -225,7 +225,7 @@ let implicit_application env ?(allow_partial=true) f ty = with Not_found -> None in match is_class with - | None -> ty + | None -> ty, env | Some ((loc, id, par), gr) -> let avoid = Idset.union env (ids_of_list (free_vars_of_constr_expr ty ~bound:env [])) in let c, avoid = @@ -241,7 +241,7 @@ let implicit_application env ?(allow_partial=true) f ty = let pars = List.rev (List.combine ci rd) in let args, avoid = combine_params avoid f par pars in CAppExpl (loc, (None, id), args), avoid - in c + in c, avoid let implicits_of_rawterm l = let rec aux i c = diff --git a/interp/implicit_quantifiers.mli b/interp/implicit_quantifiers.mli index 57eff0b863..0d28eccad6 100644 --- a/interp/implicit_quantifiers.mli +++ b/interp/implicit_quantifiers.mli @@ -51,4 +51,4 @@ val combine_params_freevar : val implicit_application : Idset.t -> ?allow_partial:bool -> (Names.Idset.t -> (global_reference * bool) option * (Names.name * Term.constr option * Term.types) -> Topconstr.constr_expr * Names.Idset.t) -> - constr_expr -> constr_expr + constr_expr -> constr_expr * Idset.t |
