method vfunc f =
    currentFuncName:=f.svar.vname;
    let kf = Extlib.the self#current_kf in
    let starting_pre  = (Data_for_aorai.get_func_pre f.svar.vname) in
    let starting_post = (Data_for_aorai.get_func_post f.svar.vname) in

    Aorai_option.debug "Before step 1:";
    Aorai_utils.debug_display_func_status f.svar.vname;


    Hashtbl.clear stmts_spec;
    Hashtbl.clear stmts_to_compute_one_more_time;
    propagation_result := (mk_empty_pre_or_post ());

    (* Pre-condition forward propagation *)
    let cur_pre = (Data_for_aorai.get_func_pre f.svar.vname) in
    let _ = propagates_pre f.sbody.bstmts cur_pre (*lastFuncStatusSet*) in
    let cur_post_st = ref (fst !propagation_result) in
    while (Hashtbl.length stmts_to_compute_one_more_time) > 0 do
      let _ = propagates_pre f.sbody.bstmts cur_pre in
      cur_post_st := fst (!propagation_result)
    done;
    (* Registration of the new post-condition *)
    let post     = Aorai_utils.get_next kf Promelaast.Return !cur_post_st in
    let old_post = (Data_for_aorai.get_func_post f.svar.vname)  in
    let post     = double_bool_array_and post old_post in

    Data_for_aorai.set_func_post f.svar.vname post;

    Aorai_option.debug "Between steps 1 and 2 : ";
    Aorai_utils.debug_display_func_status f.svar.vname;

    (* Post-condition backward propagation *)
    let cur_post = (Data_for_aorai.get_func_post f.svar.vname) in
    let cur_post = Aorai_utils.get_prev kf Promelaast.Return cur_post in
    Hashtbl.clear status_of_labeled_stmts;
    second_computation_needed:=false;
    let cur_pre  = ref (propagates_post f.sbody.bstmts cur_post) in

    while !second_computation_needed do
      Hashtbl.clear status_of_labeled_stmts;
      second_computation_needed:=false;
      cur_pre := propagates_post f.sbody.bstmts cur_post
    done;
    let cur_pre = !cur_pre in
    (* Registration of the new pre-condition *)
    let old_pre = Data_for_aorai.get_func_pre f.svar.vname in
    let pre     = double_bool_array_and cur_pre old_pre in

    Data_for_aorai.set_func_pre f.svar.vname pre;

    Aorai_option.debug "After step 2 for function %s" f.svar.vname;
    Aorai_utils.debug_display_func_status f.svar.vname;

    let ending_pre  = (Data_for_aorai.get_func_pre f.svar.vname) in
    let ending_post = (Data_for_aorai.get_func_post f.svar.vname) in

    if   (not (double_bool_array_eq starting_pre  ending_pre ) )
    then begin spec_modified:=true;  end;
    if   (not (double_bool_array_eq starting_post ending_post) )
    then begin spec_modified:=true;  end;

    DoChildren