@@ -2266,18 +2266,6 @@ package body Exp_Attr is
case Id is
- -- Attributes related to Ada 2012 iterators. They are only allowed in
- -- attribute definition clauses and should never be expanded.
-
- when Attribute_Constant_Indexing
- | Attribute_Default_Iterator
- | Attribute_Implicit_Dereference
- | Attribute_Iterable
- | Attribute_Iterator_Element
- | Attribute_Variable_Indexing
- =>
- raise Program_Error;
-
-- Internal attributes used to deal with Ada 2012 delayed aspects. These
-- were already rejected by the parser. Thus they shouldn't appear here.
@@ -3423,18 +3423,6 @@ package body Sem_Attr is
case Attr_Id is
- -- Attributes related to Ada 2012 iterators. Attribute specifications
- -- exist for these, but they cannot be queried.
-
- when Attribute_Constant_Indexing
- | Attribute_Default_Iterator
- | Attribute_Implicit_Dereference
- | Attribute_Iterator_Element
- | Attribute_Iterable
- | Attribute_Variable_Indexing
- =>
- Error_Msg_N ("illegal attribute", N);
-
-- Internal attributes used to deal with Ada 2012 delayed aspects. These
-- were already rejected by the parser. Thus they shouldn't appear here.
@@ -9015,19 +9003,6 @@ package body Sem_Attr is
case Id is
- -- Attributes related to Ada 2012 iterators; nothing to evaluate for
- -- these.
-
- when Attribute_Constant_Indexing
- | Attribute_Default_Iterator
- | Attribute_Implicit_Dereference
- | Attribute_Iterator_Element
- | Attribute_Iterable
- | Attribute_Reduce
- | Attribute_Variable_Indexing
- =>
- null;
-
-- Internal attributes used to deal with Ada 2012 delayed aspects.
-- These were already rejected by the parser. Thus they shouldn't
-- appear here.
@@ -10208,6 +10183,13 @@ package body Sem_Attr is
end case;
end Range_Length;
+ ------------
+ -- Reduce --
+ ------------
+
+ when Attribute_Reduce =>
+ null;
+
---------
-- Ref --
---------
@@ -125,15 +125,30 @@ package body Snames is
function Get_Attribute_Id (N : Name_Id) return Attribute_Id is
begin
- if N = Name_CPU then
- return Attribute_CPU;
- elsif N = Name_Dispatching_Domain then
- return Attribute_Dispatching_Domain;
- elsif N = Name_Interrupt_Priority then
- return Attribute_Interrupt_Priority;
- else
- return Attribute_Id'Val (N - First_Attribute_Name);
- end if;
+ case N is
+ when Name_Constant_Indexing =>
+ return Attribute_Constant_Indexing;
+ when Name_CPU =>
+ return Attribute_CPU;
+ when Name_Default_Iterator =>
+ return Attribute_Default_Iterator;
+ when Name_Dispatching_Domain =>
+ return Attribute_Dispatching_Domain;
+ when Name_Implicit_Dereference =>
+ return Attribute_Implicit_Dereference;
+ when Name_Interrupt_Priority =>
+ return Attribute_Interrupt_Priority;
+ when Name_Iterable =>
+ return Attribute_Iterable;
+ when Name_Iterator_Element =>
+ return Attribute_Iterator_Element;
+ when Name_Variable_Indexing =>
+ return Attribute_Variable_Indexing;
+ when First_Attribute_Name .. Last_Attribute_Name =>
+ return Attribute_Id'Val (N - First_Attribute_Name);
+ when others =>
+ raise Program_Error;
+ end case;
end Get_Attribute_Id;
-----------------------
@@ -943,12 +943,10 @@ package Snames is
Name_Compiler_Version : constant Name_Id := N + $; -- GNAT
Name_Component_Size : constant Name_Id := N + $;
Name_Compose : constant Name_Id := N + $;
- Name_Constant_Indexing : constant Name_Id := N + $; -- GNAT
Name_Constrained : constant Name_Id := N + $;
Name_Count : constant Name_Id := N + $;
Name_Default_Bit_Order : constant Name_Id := N + $; -- GNAT
Name_Default_Scalar_Storage_Order : constant Name_Id := N + $; -- GNAT
- Name_Default_Iterator : constant Name_Id := N + $; -- GNAT
Name_Definite : constant Name_Id := N + $;
Name_Delta : constant Name_Id := N + $;
Name_Denorm : constant Name_Id := N + $;
@@ -975,13 +973,10 @@ package Snames is
Name_Has_Same_Storage : constant Name_Id := N + $; -- Ada 12
Name_Has_Tagged_Values : constant Name_Id := N + $; -- GNAT
Name_Identity : constant Name_Id := N + $;
- Name_Implicit_Dereference : constant Name_Id := N + $; -- GNAT
Name_Index : constant Name_Id := N + $; -- Ada 22
Name_Initialized : constant Name_Id := N + $; -- GNAT
Name_Integer_Value : constant Name_Id := N + $; -- GNAT
Name_Invalid_Value : constant Name_Id := N + $; -- GNAT
- Name_Iterator_Element : constant Name_Id := N + $; -- GNAT
- Name_Iterable : constant Name_Id := N + $; -- GNAT
Name_Large : constant Name_Id := N + $; -- Ada 83
Name_Last : constant Name_Id := N + $;
Name_Last_Bit : constant Name_Id := N + $;
@@ -1063,7 +1058,6 @@ package Snames is
Name_Valid : constant Name_Id := N + $;
Name_Valid_Scalars : constant Name_Id := N + $; -- GNAT
Name_Value_Size : constant Name_Id := N + $; -- GNAT
- Name_Variable_Indexing : constant Name_Id := N + $; -- GNAT
Name_Version : constant Name_Id := N + $;
Name_Wchar_T_Size : constant Name_Id := N + $; -- GNAT
Name_Wide_Wide_Width : constant Name_Id := N + $; -- Ada 05
@@ -1152,10 +1146,16 @@ package Snames is
-- internal attributes is not permitted).
First_Internal_Attribute_Name : constant Name_Id := N + $;
+ Name_Constant_Indexing : constant Name_Id := N + $; -- GNAT
Name_CPU : constant Name_Id := N + $;
+ Name_Default_Iterator : constant Name_Id := N + $; -- GNAT
Name_Dispatching_Domain : constant Name_Id := N + $;
+ Name_Implicit_Dereference : constant Name_Id := N + $; -- GNAT
Name_Interrupt_Priority : constant Name_Id := N + $;
+ Name_Iterable : constant Name_Id := N + $; -- GNAT
+ Name_Iterator_Element : constant Name_Id := N + $; -- GNAT
Name_Secondary_Stack_Size : constant Name_Id := N + $; -- GNAT
+ Name_Variable_Indexing : constant Name_Id := N + $; -- GNAT
Last_Internal_Attribute_Name : constant Name_Id := N + $;
-- Names of recognized locking policy identifiers
@@ -1480,12 +1480,10 @@ package Snames is
Attribute_Compiler_Version,
Attribute_Component_Size,
Attribute_Compose,
- Attribute_Constant_Indexing,
Attribute_Constrained,
Attribute_Count,
Attribute_Default_Bit_Order,
Attribute_Default_Scalar_Storage_Order,
- Attribute_Default_Iterator,
Attribute_Definite,
Attribute_Delta,
Attribute_Denorm,
@@ -1512,13 +1510,10 @@ package Snames is
Attribute_Has_Same_Storage,
Attribute_Has_Tagged_Values,
Attribute_Identity,
- Attribute_Implicit_Dereference,
Attribute_Index,
Attribute_Initialized,
Attribute_Integer_Value,
Attribute_Invalid_Value,
- Attribute_Iterator_Element,
- Attribute_Iterable,
Attribute_Large,
Attribute_Last,
Attribute_Last_Bit,
@@ -1600,7 +1595,6 @@ package Snames is
Attribute_Valid,
Attribute_Valid_Scalars,
Attribute_Value_Size,
- Attribute_Variable_Indexing,
Attribute_Version,
Attribute_Wchar_T_Size,
Attribute_Wide_Wide_Width,
@@ -1662,12 +1656,18 @@ package Snames is
-- the special processing required to deal with the fact that their
-- names are not attribute names.
+ Attribute_Constant_Indexing,
Attribute_CPU,
+ Attribute_Default_Iterator,
Attribute_Dispatching_Domain,
- Attribute_Interrupt_Priority);
+ Attribute_Implicit_Dereference,
+ Attribute_Interrupt_Priority,
+ Attribute_Iterable,
+ Attribute_Iterator_Element,
+ Attribute_Variable_Indexing);
subtype Internal_Attribute_Id is Attribute_Id
- range Attribute_CPU .. Attribute_Interrupt_Priority;
+ range Attribute_Constant_Indexing .. Attribute_Variable_Indexing;
type Attribute_Set is array (Attribute_Id) of Boolean;
-- Type used to build attribute classification flag arrays
@@ -2058,9 +2058,7 @@ package Snames is
-- i.e. an attribute reference that returns an entity.
function Is_Internal_Attribute_Name (N : Name_Id) return Boolean;
- -- Test to see if the name N is the name of an INT attribute (Name_CPU,
- -- Name_Dispatching_Domain, Name_Interrupt_Priority,
- -- Name_Secondary_Stack_Size).
+ -- Test to see if the name N is the name of an internal attribute
function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized attribute that