let rec check_term m t =
if m < 0 then raise Huge ;
match t with
| Tconst _ | Tvar _ -> pred m
| Tapp(_,ts) -> List.fold_left check_term (pred m) ts
| Tgetfield(_,r) -> check_term (pred m) r
| Tsetfield(_,r,v) -> check_term (check_term (pred m) r) v
| Taccess(t,i) -> check_term (check_term (pred m) t) i
| Tupdate(t,i,v) -> check_term (check_term (check_term (pred m) t) i) v
| Tif(a,b,c) -> check_term (check_term (check_term (pred m) a) b) c
| Tlet(_,a,b) -> check_term (check_term (pred m) a) b