diff options
| author | ppedrot | 2013-06-22 15:21:01 +0000 |
|---|---|---|
| committer | ppedrot | 2013-06-22 15:21:01 +0000 |
| commit | 34e80b356fcccd938f114925e91c53cb33b2bd19 (patch) | |
| tree | 517da7072e340d0c36d05a2908079393e431dc43 /tactics | |
| parent | bd7da353ea503423206e329af7a56174cb39f435 (diff) | |
Generalizing the use of maps instead of lists in the interpretation
of tactics.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@16602 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'tactics')
| -rw-r--r-- | tactics/evar_tactics.ml | 3 | ||||
| -rw-r--r-- | tactics/tacintern.ml | 7 | ||||
| -rw-r--r-- | tactics/tacinterp.ml | 13 | ||||
| -rw-r--r-- | tactics/tacinterp.mli | 3 |
4 files changed, 12 insertions, 14 deletions
diff --git a/tactics/evar_tactics.ml b/tactics/evar_tactics.ml index e096ac4498..64f8e208eb 100644 --- a/tactics/evar_tactics.ml +++ b/tactics/evar_tactics.ml @@ -43,8 +43,7 @@ let instantiate n (ist,rawc) ido gl = let evk,_ = List.nth evl (n-1) in let evi = Evd.find sigma evk in let filtered = Evd.evar_filtered_env evi in - let (bvars, uvars) = Tacinterp.extract_ltac_constr_values ist filtered in - let ltac_vars = (Id.Map.bindings bvars, uvars) in + let ltac_vars = Tacinterp.extract_ltac_constr_values ist filtered in let sigma' = w_refine (evk,evi) (ltac_vars,rawc) sigma in tclTHEN (tclEVARS sigma') diff --git a/tactics/tacintern.ml b/tactics/tacintern.ml index 3e008657fe..cfb96b488f 100644 --- a/tactics/tacintern.ml +++ b/tactics/tacintern.ml @@ -302,8 +302,9 @@ let intern_binding_name ist x = let intern_constr_gen allow_patvar isarity {ltacvars=lfun; gsigma=sigma; genv=env} c = let warn = if !strict_check then fun x -> x else Constrintern.for_grammar in let scope = if isarity then Pretyping.IsType else Pretyping.WithoutTypeConstraint in + let ltacvars = (fst lfun, Id.Map.empty) in let c' = - warn (Constrintern.intern_gen scope ~allow_patvar ~ltacvars:(fst lfun,[]) sigma env) c + warn (Constrintern.intern_gen scope ~allow_patvar ~ltacvars sigma env) c in (c',if !strict_check then None else Some c) @@ -440,11 +441,11 @@ let intern_hyp_location ist ((occs,id),hl) = (* Reads a pattern *) let intern_pattern ist ?(as_type=false) lfun = function | Subterm (b,ido,pc) -> - let ltacvars = (lfun,[]) in + let ltacvars = (lfun, Id.Map.empty) in let (metas,pc) = intern_constr_pattern ist ltacvars pc in ido, metas, Subterm (b,ido,pc) | Term pc -> - let ltacvars = (lfun,[]) in + let ltacvars = (lfun, Id.Map.empty) in let (metas,pc) = intern_constr_pattern ist ltacvars pc in None, metas, Term pc diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml index e0fe2cde41..852348e71e 100644 --- a/tactics/tacinterp.ml +++ b/tactics/tacinterp.ml @@ -399,7 +399,7 @@ let interp_clause ist gl { onhyps=ol; concl_occs=occs } = (* Extract the constr list from lfun *) let extract_ltac_constr_values ist env = - let fold (id, v) (vars1, vars2) = + let fold (vars1, vars2) (id, v) = try let c = coerce_to_constr env v in (Id.Map.add id c vars1, vars2) @@ -412,9 +412,9 @@ let extract_ltac_constr_values ist env = | _ -> None else None in - (vars1, (id, ido) :: vars2) + (vars1, Id.Map.add id ido vars2) in - List.fold_right fold ist.lfun (Id.Map.empty, []) + List.fold_left fold (Id.Map.empty, Id.Map.empty) ist.lfun (* Extract the identifier list from lfun: join all branches (what to do else?)*) let rec intropattern_ids (loc,pat) = match pat with @@ -459,21 +459,20 @@ let pf_interp_fresh_id ist gl = interp_fresh_id ist (pf_env gl) let interp_gen kind ist allow_patvar flags env sigma (c,ce) = let (ltacvars,unbndltacvars as vars) = extract_ltac_constr_values ist env in - let ltacbnd = Id.Map.bindings ltacvars in let c = match ce with | None -> c (* If at toplevel (ce<>None), the error can be due to an incorrect context at globalization time: we retype with the now known intros/lettac/inversion hypothesis names *) | Some c -> - let ltacdata = (List.map fst ltacbnd, unbndltacvars) in + let fold id _ accu = id :: accu in + let ltacvars = Id.Map.fold fold ltacvars [] in + let ltacdata = (ltacvars, unbndltacvars) in intern_gen kind ~allow_patvar ~ltacvars:ltacdata sigma env c in let trace = push_trace (loc_of_glob_constr c,LtacConstrInterp (c,vars)) ist in let (evd,c) = - (** FIXME: we should propagate the use of Id.Map.t everywhere *) - let vars = (ltacbnd, unbndltacvars) in catch_error trace (understand_ltac flags sigma env vars kind) c in db_constr (curr_debug ist) env c; diff --git a/tactics/tacinterp.mli b/tactics/tacinterp.mli index 6affc21a47..32880fd771 100644 --- a/tactics/tacinterp.mli +++ b/tactics/tacinterp.mli @@ -45,8 +45,7 @@ val f_avoid_ids : Id.t list TacStore.field val f_debug : debug_info TacStore.field val extract_ltac_constr_values : interp_sign -> Environ.env -> - Pattern.constr_under_binders Id.Map.t * (Id.Map.key * Id.t option) list -(* should be Pretyping.ltac_var_map *) + Pretyping.ltac_var_map (** Tactic extensions *) val add_tactic : |
