let iter f = function
    | Ttrue | Tfalse | Tint _ | Treal _ | Tvar _ -> ()
    | Tprim(_,ts) | Tcall(_,ts) -> List.iter f ts
    | Tgetfield(a,_) -> f a
    | Tsetfield(a,_,b) | Taccess(a,b) | Tlet(_,a,b) -> f a ; f b
    | Tupdate(a,b,c) | Tif(a,b,c) -> f a ; f b ; f c