method vstmt stmt =
    self#incr_both_metrics self#incr_slocs;
    (match stmt.stmt_node with
      | DEFAULT _ -> () (* The default case is not counted as a path choice
                           point *)

      | CASERANGE _
      | CASE _ ->
        if not !was_case then self#incr_both_metrics self#incr_dpoints;
      | IF _ ->
        self#incr_both_metrics self#incr_ifs;
        self#incr_both_metrics self#incr_dpoints;
      | NOP _
      | COMPUTATION _
      | BLOCK _ -> ()
      (* Next 3 are all loop instructions *)
      | WHILE _
      | DOWHILE _
      | FOR _ ->
        self#incr_both_metrics self#incr_loops;
        self#incr_both_metrics self#incr_dpoints;
      | BREAK _
      | CONTINUE _ -> ()
      | RETURN _ -> self#incr_both_metrics self#incr_exits;
      | SWITCH _ -> ()
      | LABEL _ -> ()
      | GOTO _
      | COMPGOTO _ -> self#incr_both_metrics self#incr_gotos;
      | DEFINITION _
      | ASM _
      | SEQUENCE _
      | TRY_EXCEPT _
      | TRY_FINALLY _
      | CODE_ANNOT _
      | CODE_SPEC _ -> ());
    self#set_case stmt;
    Cil.DoChildren