diff options
| author | herbelin | 2003-04-09 15:58:14 +0000 |
|---|---|---|
| committer | herbelin | 2003-04-09 15:58:14 +0000 |
| commit | 6725bbe3fa7a20941b4ff84c67d7cda7e7988be6 (patch) | |
| tree | acaf39e3e1c10b999d92d0102a6a7e58db1f0f74 /translate | |
| parent | 39cd2e369cc4871bf650e4f4f4a667c0e6b4d2d0 (diff) | |
Mécanisme plus simple et efficace pour traduire les implicites
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@3889 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'translate')
| -rw-r--r-- | translate/ppvernacnew.ml | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/translate/ppvernacnew.ml b/translate/ppvernacnew.ml index bd6648bb4a..30fc771e54 100644 --- a/translate/ppvernacnew.ml +++ b/translate/ppvernacnew.ml @@ -515,15 +515,26 @@ let rec pr_vernac = function (Termops.push_rel_assum (Name id,p) env, (Name id,None,p)::params)) (env0,[]) lparams in - List.iter + let impls = List.map (fun (recname, _,arityc,_) -> let arity = Constrintern.interp_type sigma env_params arityc in let fullarity = - Termops.prod_it arity (List.map (fun (id,_,ty) -> (id,ty)) params) in - if Impargs.is_implicit_args_out() - then - Impargs.set_var_implicits recname - (Impargs.compute_implicits false env_params fullarity)) l; + Termops.prod_it arity (List.map (fun (id,_,ty) -> (id,ty)) params) + in + let impl_in = + if Impargs.is_implicit_args() + then Impargs.compute_implicits false env_params fullarity + else [] in + let impl_out = + if Impargs.is_implicit_args_out() + then Impargs.compute_implicits true env_params fullarity + else [] in + (recname,impl_in,impl_out)) l in + let impls_in = List.map (fun (id,a,_) -> (id,a)) impls in + let impls_out = List.map (fun (id,_,a) -> (id,a)) impls in + Constrintern.set_temporary_implicits_in impls_in; + Constrextern.set_temporary_implicits_out impls_out; + (* Fin calcul implicites *) let pr_constructor (coe,(id,c)) = @@ -547,13 +558,22 @@ let rec pr_vernac = function (* Copie simplifiée de command.ml pour recalculer les implicites *) let sigma = Evd.empty and env0 = Global.env() in - List.iter + let impls = List.map (fun (recname,_,arityc,_) -> let arity = Constrintern.interp_type sigma env0 arityc in - let _ = Declare.declare_variable recname - (Lib.cwd(),Declare.SectionLocalAssum arity, - Decl_kinds.IsAssumption Decl_kinds.Definitional) in ()) - recs; + let impl_in = + if Impargs.is_implicit_args() + then Impargs.compute_implicits false env0 arity + else [] in + let impl_out = + if Impargs.is_implicit_args_out() + then Impargs.compute_implicits true env0 arity + else [] in + (recname,impl_in,impl_out)) recs in + let impls_in = List.map (fun (id,a,_) -> (id,a)) impls in + let impls_out = List.map (fun (id,_,a) -> (id,a)) impls in + Constrintern.set_temporary_implicits_in impls_in; + Constrextern.set_temporary_implicits_out impls_out; let pr_onerec = function | (id,n,type_0,def0) -> |
