method vexpr expr =
(match expr.expr_node with
| NOTHING -> ()
| UNARY (unop, _) ->
begin
match unop with
| PREINCR
| POSINCR
| PREDECR
| POSDECR -> self#incr_both_metrics self#incr_assigns
| MINUS
| PLUS
| NOT
| BNOT -> ()
| MEMOF -> self#incr_both_metrics self#incr_ptrs
| ADDROF -> ()
end
| LABELADDR _ -> ()
| BINARY (bop, _, _) ->
begin
match bop with
| ADD | SUB | MUL | DIV | MOD
| BAND | BOR | XOR
| SHL | SHR | EQ | NE | LT
| GT | LE | GE -> ()
| AND | OR -> self#incr_both_metrics self#incr_dpoints
| ASSIGN
| ADD_ASSIGN | SUB_ASSIGN | MUL_ASSIGN
| DIV_ASSIGN | BOR_ASSIGN | XOR_ASSIGN
| SHL_ASSIGN | SHR_ASSIGN | BAND_ASSIGN
| MOD_ASSIGN ->
self#incr_both_metrics self#incr_assigns;
end
| CAST _ -> ()
| CALL _ -> self#incr_both_metrics self#incr_calls;
| QUESTION _ ->
self#incr_both_metrics self#incr_dpoints;
self#incr_both_metrics self#incr_ifs;
| COMMA _
| CONSTANT _
| PAREN _
| VARIABLE _
| EXPR_SIZEOF _
| TYPE_SIZEOF _
| EXPR_ALIGNOF _
| TYPE_ALIGNOF _
| INDEX _
| MEMBEROF _
| MEMBEROFPTR _
| GNU_BODY _
| EXPR_PATTERN _ -> ());
Cil.DoChildren