+2010-01-26 Robert Dewar <dewar@adacore.com>
+
+ * par_sco.adb (Is_Logical_Operator): Exclude AND/OR/XOR
+ * scos.ads: Clarify handling of logical operators
+
2010-01-26 Arnaud Charlet <charlet@adacore.com>
* s-tpoben.adb: Update comments.
function Is_Logical_Operator (N : Node_Id) return Boolean;
-- N is the node for a subexpression. This procedure just tests N to see
- -- if it is a logical operator (including short circuit conditions) and
- -- returns True if so, False otherwise, it does no other processing.
+ -- if it is a logical operator (including short circuit conditions, but
+ -- excluding OR and AND) and returns True if so, False otherwise, it does
+ -- no other processing.
procedure Process_Decisions (N : Node_Id; T : Character);
-- If N is Empty, has no effect. Otherwise scans the tree for the node N,
function Is_Logical_Operator (N : Node_Id) return Boolean is
begin
- return Nkind_In (N, N_Op_And,
- N_Op_Or,
- N_Op_Xor,
+ return Nkind_In (N, N_Op_Xor,
N_Op_Not,
N_And_Then,
N_Or_Else);
begin
case Nkind (N) is
- -- Logical operators and short circuit forms, output table
- -- entries and then process operands recursively to deal with
- -- nested conditions.
+ -- Logical operators, output table entries and then process
+ -- operands recursively to deal with nested conditions.
when N_And_Then |
N_Or_Else |
- N_Op_And |
- N_Op_Or |
- N_Op_Xor |
N_Op_Not =>
declare
-- Note: in the following description, logical operator includes only the
-- short circuited forms and NOT (so can be only NOT, AND THEN, OR ELSE).
-- The reason that we can exclude AND/OR/XOR is that we expect SCO's to
- -- be generated using the restriction No_Direct_Boolean_Operators, which
- -- does not permit the use of AND/OR/XOR on boolean operands. These are
- -- permitted on modular integer types, but such operations do not count
- -- as decisions in any case
+ -- be generated using the restriction No_Direct_Boolean_Operators if we
+ -- are interested in decision coverage, which does not permit the use of
+ -- AND/OR/XOR on boolean operands. These are permitted on modular integer
+ -- types, but such operations do not count as decisions in any case. If
+ -- we are generating SCO's only for simple coverage, then we are not
+ -- interested in decisions in any case.
-- Decisions are either simple or complex. A simple decision is a boolean
-- expresssion that occurs in the context of a control structure in the