method vterm t =
match t.term_node with
| Told t ->
let l = (LogicLabel "Old") in
let old_label = self#change_label l in
let new_t = {t with term_node = Ttypeof t} in
Cil.ChangeDoChildrenPost (new_t, self#restore_term old_label)
| Tat (t, l) ->
let old_label = self#change_label l in
let new_t = {t with term_node = Ttypeof t} in
Cil.ChangeDoChildrenPost (new_t, self#restore_term old_label)
| TAddrOf (h, _) | TLval (h, _) | TStartOf (h, _) ->
let old_label = current_label in
let at_label = match h with
| TResult _ -> Some (LogicLabel "Post")
| _ -> old_label
in
current_label <- None;
let post t =
current_label <- old_label;
match at_label with
| Some label -> {t with term_node = Tat (t, label)}
| None -> t
in Cil.ChangeDoChildrenPost (t, post)
| _ -> Cil.DoChildren