| C.Appl _ -> raise (AssertFailure (lazy "Appl of length < 2"))
| C.Match (Ref.Ref (_,_,Ref.Ind tyno) as r,outtype,term,pl) ->
let outsort = typeof_aux context outtype in
- let leftno = E.get_indty_leftno r in
+ let inductive,leftno,itl,_,_ = E.get_checked_indtys r in
+ let constructorsno =
+ let _,_,_,cl = List.nth itl tyno in List.length cl
+ in
let parameters, arguments =
let ty = R.whd ~subst context (typeof_aux context term) in
let r',tl =
check_allowed_sort_elimination ~subst ~metasenv r context
sort_of_ind_type type_of_sort_of_ind_ty outsort;
(* let's check if the type of branches are right *)
- let leftno,constructorsno =
- let inductive,leftno,itl,_,i = E.get_checked_indtys r in
- let _,name,ty,cl = List.nth itl i in
- let cl_len = List.length cl in
- leftno, cl_len
- in
if List.length pl <> constructorsno then
raise (TypeCheckerFailure (lazy ("Wrong number of cases in a match")));
let j,branches_ok,p_ty, exp_p_ty =
| (C.Sort (C.CProp | C.Type _), C.Sort _)
| (C.Sort C.Prop, C.Sort C.Prop) -> ()
| (C.Sort C.Prop, C.Sort (C.CProp | C.Type _)) ->
+ (* TODO: we should pass all these parameters since we
+ * have them already *)
let inductive,leftno,itl,_,i = E.get_checked_indtys r in
let itl_len = List.length itl in
let _,name,ty,cl = List.nth itl i in
check_obj_well_typed uobj;
E.add_obj uobj;
!logger (`Type_checking_completed uri);
- if not (fst (E.get_obj uri)) then
- raise (AssertFailure (lazy "environment error"));
uobj
in
match cobj, ref with