Improve existing support for the Ada extension feature of casing on
composite values to handle casing on array values; in particular, casing
on an array value whose subtype is unconstrained (or dynamically
constrained) so that choices in the case statement may have differing
lengths. This commit does not include support for pattern-bound
identifiers in such cases.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * exp_ch5.adb (Expand_General_Case_Statement.Pattern_Match): Add
        new function Indexed_Element to handle array element
        comparisons. Handle case choices that are array aggregates,
        string literals, or names denoting constants.
        * sem_case.adb (Composite_Case_Ops.Array_Case_Ops): New package
        providing utilities needed for casing on arrays.
        (Composite_Case_Ops.Choice_Analysis): If necessary, include
        array length as a "component" (like a discriminant) when
        traversing components. We do not (yet) partition choice analysis
        to deal with unequal length choices separately. Instead, we
        embed everything in the minimum-dimensionality Cartesian product
        space needed to handle all choices properly; this is determined
        by the length of the longest choice pattern.
        (Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
        Include length as a "component" in the traversal if necessary.
        (Composite_Case_Ops.Choice_Analysis.Parse_Choice.Traverse_Choice):
        Add support for case choices that are string literals or names
        denoting constants.
        (Composite_Case_Ops.Choice_Analysis): Include length as a
        "component" in the analysis if necessary.
        
(Check_Choices.Check_Case_Pattern_Choices.Ops.Value_Sets.Value_Index_Count):
        Improve error message when capacity exceeded.
        * doc/gnat_rm/implementation_defined_pragmas.rst: Update
        documentation to reflect current implementation status.
        * gnat_rm.texi: Regenerate.

Attachment: patch.diff.gz
Description: application/gzip

Reply via email to