!standard 4.4 (3) 09-06-07 AI05-0158-1/01
!standard 4.5.2(3)
!standard 4.5.2(30/2)
!class Amendment 09-06-07
!status work item 09-06-07
!status received 09-03-30
!priority Low
!difficulty Medium
!subject Generalizing membership tests
!summary
Extend the syntax of membership tests to simplify complex conditions that can
be expressed as membership in a subset of values of any type.
!problem
Conditions of the form (X = A) or else (X = B) or else (X = C) where A, B, C
are of some arbitrary type are common, and will be more frequent when
pre- and post-conditions become widely used. If the values of A, B,and C are
contiguous values of some discrete type, the expression can be
written as a membership operation: (X in A..C) . Otherwise this syntactic
shortcut is not available. We propose a simple extension of the syntax of
membership operations, so that the right operand can specify a subset of values
of some type.
!proposal
Extend the syntax of memberships as shown in the wording.
!wording
Modify 4.4(3) as follows:
relation ::=
simple_expression [not] in choice_list
choice_list ::= choice {'|' choice}
choice ::= simple_expression | range | subtype_mark
[Editor's comment: This grammer is ambiguous if the expression is used
in a discrete_choice_list (that is, in a variant part, case statement,
or array aggregate. How that is going to be addressed needs to be described.]
Add after 4.5.2(3): (Name Resolution Rules)
If the choice_list in a membership operation has more that one choice, then
all choices must have a single common type, which is the tested type of the
operation.
Add somewhere in 4.5.2(28-31): (Dynamic Semantics)
The left operand is elaborated first.
If the choice_list has more that one choice, the operation is equivalent to a
short-circuit sequence of tests : if a choice is a simple expression the
corresponding test is an equality operation, otherwise it is a membership test
whose right operand is the corresponding range or subtype_mark.
[Editor's comment: The first sentence contradicts 4.5.2(27). Is that really
what we want? We ought to reword this to fit in with the existing wording.]
!discussion
!example
!ACATS test
Add an ACATS test for this new feature.
!appendix
****************************************************************