let rec aux newmeta =
function
C.Cast (he,_) -> aux newmeta he
+(* CSC: patch to generate ?1 : ?2 : Type in place of ?1 : Type
(* If the expected type is a Type, then also Set is OK ==>
* we accept any term of type Type *)
(*CSC: BUG HERE: in this way it is possible for the term of
res,
(newmeta,[],s)::(newmeta+1,context,C.Meta (newmeta,[]))::newmetasenv,
newargument::arguments,lastmeta
+*)
| C.Prod (name,s,t) ->
let irl =
CicMkImplicit.identity_relocation_list_for_metavariable context
CicSubstitution.subst_vars !exp_named_subst_diff ty
| _ -> raise (WrongUriToVariable (UriManager.string_of_uri uri))
in
+(* CSC: patch to generate ?1 : ?2 : Type in place of ?1 : Type
(match ty with
C.Sort C.Type as s ->
let fresh_meta = !next_fresh_meta in
exp_named_subst_diff := !exp_named_subst_diff @ [subst_item] ;
subst_item::(aux (tl,[]))
| _ ->
+*)
let irl =
CicMkImplicit.identity_relocation_list_for_metavariable context
in
(!next_fresh_meta,context,ty)::!newmetasenvfragment ;
exp_named_subst_diff := !exp_named_subst_diff @ [subst_item] ;
incr next_fresh_meta ;
- subst_item::(aux (tl,[])))
+ subst_item::(aux (tl,[]))(*)*)
| uri::tl1,((uri',_) as s)::tl2 ->
assert (UriManager.eq uri uri') ;
s::(aux (tl1,tl2))