let blocks_closed_by_edge cfg e =
  let v_before = edge_src e in
  let blocks = match node_type v_before with
    | Vstmt s | Vtest (true, s, _) | Vloop (_, s) | Vswitch (s,_) ->
      Cfg.clearFileCFG ~clear_id:false (Ast.get ());
      Cfg.computeFileCFG (Ast.get ());

      begin match s.succs with
      | [s'] -> Kernel_function.blocks_closed_by_edge s s'
      | [] | _ :: _ ->
        let s' = get_edge_next_stmt cfg e in
        match s' with
        | None -> []
        | Some s' ->
          debug
            "[blocks_closed_by_edge] found sid:%d -> sid:%d@."
            s.sid s'.sid;
          Kernel_function.blocks_closed_by_edge s s'
      end
    | _ -> (* TODO ? *) []
  in
  let v_after = edge_dst e in
  let blocks = match node_type v_after with
    | VblkOut (Bfct, b) -> b::blocks
    | _ -> blocks
  in blocks