CVS difference for ai05s/ai05-0183-1.txt

Differences between 1.8 and version 1.9
Log of other versions for file ai05s/ai05-0183-1.txt

--- ai05s/ai05-0183-1.txt	2010/06/14 01:24:50	1.8
+++ ai05s/ai05-0183-1.txt	2010/09/02 06:27:06	1.9
@@ -1,4 +1,4 @@
-!standard 3.2.1(2)                                 10-06-07  AI05-0183-1/04
+!standard 3.2.1(3)                                 10-09-01  AI05-0183-1/05
 !standard 3.2.2(2)
 !standard 3.3.1(2/2)
 !standard 3.8(6)
@@ -17,14 +17,16 @@
 !standard 11.1(2)
 !standard 12.1(3)
 !standard 12.3(2/2)
-!standard 12.4(2/3)
+!standard 12.4(2/2)
 !standard 12.5(2)
-!standard 12.6(2.1-2.2/2)
+!standard 12.6(2.1/2)
+!standard 12.6(2.2/2)
 !standard 12.7(2)
 !standard 13.1(0.1/2)
 !standard 13.3(5/1)
 !standard 13.3.1(0)
 !class amendment 09-11-01
+!status Amendment 2012 10-09-01
 !status work item 09-11-01
 !status received 09-11-01
 !priority Medium
@@ -104,7 +106,7 @@
 
 !wording
 
-Replace 3.2.1(2) by:
+Replace 3.2.1(3) by:
 
     full_type_declaration ::=
      TYPE defining_identifier [known_discriminant_part] IS type_definition
@@ -148,7 +150,7 @@
   subprogram_declaration ::=
     [overriding_indicator]
     subprogram_specification
-      [aspect_specification]
+      [aspect_specification];
 
 Replace 6.7(2/2) by:
 
@@ -185,28 +187,32 @@
 
   task_type_declaration ::=
     TASK TYPE defining_identifier [known_discriminant_part]
-        [aspect_specification] [IS [NEW interface_list WITH]
+        [aspect_specification] [IS
+      [NEW interface_list WITH]
       task_definition];
 
 Replace 9.1(3/2) by:
 
   single_task_declaration ::=
     TASK defining_identifier
-       [aspect_specification] [IS [NEW interface_list WITH]
+       [aspect_specification] [IS
+     [NEW interface_list WITH]
      task_definition];
 
 Replace 9.4(2/2) by:
 
   protected_type_declaration ::=
     PROTECTED TYPE defining_identifier [known_discriminant_part]
-        [aspect_specification] IS [NEW interface_list WITH]
+        [aspect_specification] IS
+      [NEW interface_list WITH]
       protected_definition;
 
 Replace 9.4(3/2) by:
 
   single_protected_declaration ::=
     PROTECTED defining_identifier
-        [aspect_specification] IS [NEW interface_list WITH]
+        [aspect_specification] IS
+       [NEW interface_list WITH]
        protected_definition;
 
 Replace 9.5.2(2/2) by:
@@ -246,7 +252,7 @@
          new generic_function_name [generic_actual_part]
            [aspect_specification];
 
-Replace 12.4(2/3) by:
+Replace 12.4(2/2) by:
 
   formal_object_declaration ::=
     defining_identifier_list : mode [null_exclusion] subtype_mark [:= default_expression]
@@ -295,8 +301,8 @@
   [Redundant: Certain representation or operational aspects of an entity
   may be specified as part of its declaration using an
   aspect_specification, rather than using a separate representation or
-  operational item. The declaration with the aspect_specification is
-  termed the *associated declaration*.]
+  operational item.] The declaration with the aspect_specification is
+  termed the *associated declaration*.
 
             Syntax
 
@@ -308,25 +314,73 @@
 
   aspect_definition ::= name | expression
 
+      AARM NOTE: The aspect_specification is an optional element
+        in most kinds of declarations. Here is a list of all kinds of
+        declarations and an indication of whether or not they allow aspect clauses,
+        and in some cases a short discussion of why (* = allowed, NO = not allowed)
+
+	basic_declaration
+	  type_declaration
+	    full_type_declaration*
+	      ...
+	      task_type_declaration*
+	      protected_type_declaration*
+	    incomplete_type_declaration  --  NO
+	    private_type_declaration*
+	    private_extension_declaration*
+	  subtype_declaration*
+	  object_declaration*
+	    ...
+	    single_task_declaration*
+	    single_protected_declaration*
+	  number_declaration  --  NO
+	  subprogram_declaration*
+	  abstract_subprogram_declaration*
+	  null_procedure_declaration*
+	  package_declaration*
+	  renaming_declaration  --  NO
+	    -- Allowing a renaming to change operational or representational
+	    -- aspects would seem to break the underlying model of renaming.
+	  exception_declaration*
+	  generic_declaration*
+	  generic_instantiation*
+	enumeration_literal_specification  --  NO
+	discriminant_specification  --  NO
+	component_declaration*
+	loop_parameter_specification  --  NO
+	parameter_specification  --  NO
+	subprogram_body  --  NO
+	entry_declaration*
+	entry_index_specification  --  NO
+	choice_parameter_specification  --  NO
+	generic_formal_parameter_declaration*
+	  -- There are no language-defined aspects that
+	  -- may be specified on generic formals, but implementations
+	  -- might support some. The implementation would have to
+	  -- define the matching rule.
+	extended_return_statement  --  NO
+     End of AARM Note.
+
             Name Resolution
 
   An aspect_mark identifies an aspect of the entity defined by the
   associated declaration (the *associated entity*); the aspect denotes
   an object, a value, an expression, a subprogram, or some other kind of
-  entity. If the aspect_mark identifies an aspect that denotes an
-  object, the aspect_definition shall be a name. If the aspect_mark
-  identifies a value or an expression, the aspect_definition shall be an
-  expression. The expected type for the name or expression is the type
-  of the identified aspect of the associated entity.
-
-  If the aspect_mark identifies an aspect that denotes a subprogram, the
-  aspect_definition shall be a name; the expected profile for the name
-  is the profile required for the aspect of the associated entity. If
-  the aspect_mark identifies an entity that denotes some other kind of
-  entity, the aspect_definition shall be a name, and the name shall
-  resolve to denote an entity of the appropriate kind.
+  entity. If the aspect_mark identifies:
+    * an aspect that denotes an object, the aspect_definition shall be a
+      name. The expected type for the name
+      is the type of the identified aspect of the associated entity.
+    * an aspect that is a value or an expression, the aspect_definition
+      shall be an expression. The expected type for the expression
+      is the type of the identified aspect of the associated entity.
+    * an aspect that denotes a subprogram, the aspect_definition shall
+      be a name; the expected profile for the name
+      is the profile required for the aspect of the associated entity.
+    * an aspect that denotes some other kind of entity, the aspect_definition
+      shall be a name, and the name shall resolve to denote an entity of
+      the appropriate kind.
 
-  The names in an aspect_definition [Redundant: are not resolved at the
+  The usage names in an aspect_definition [Redundant: are not resolved at the
   point of the associated declaration, but rather] are resolved at the
   end of the immediately enclosing declaration list, or at the first
   freezing point of the associated entity, whichever comes first.
@@ -384,75 +438,6 @@
   later at points within the execution as specified elsewhere in this
   International Standard for the particular aspect.
 
-      AARM NOTE: The aspect_specification is an optional element
-       in the following kinds of declarations:
-        * object_declaration;
-        * full_type_declaration;
-        * subtype_declaration;
-        * component_declaration;
-        * subprogram_declaration;
-        * abstract_subprogram_declaration;
-        * null_procedure_declaration;
-        * package_declaration;
-        * private_type_declaration;
-        * private_extension_declaration;
-        * task_type_declaration;
-        * single_task_declaration;
-        * protected_type_declaration;
-        * single_protected_declaration;
-        * entry_declaration;
-        * exception_declaration;
-        * generic_declaration;
-        * generic_instantiation;
-        * generic_formal_parameter_declaration.
-
-	Here is a list of all kinds of declarations and an indication
-	of whether or not they allow aspect clauses, and in some cases
-	a short discussion of why (* = allowed, NO = not allowed)
-
-	basic_declaration
-	  type_declaration
-	    full_type_declaration*
-	      ...
-	      task_type_declaration*
-	      protected_type_declaration*
-	    incomplete_type_declaration  --  NO
-	    private_type_declaration*
-	    private_extension_declaration*
-	  subtype_declaration*
-	  object_declaration*
-	    ...
-	    single_task_declaration*
-	    single_protected_declaration*
-	  number_declaration  --  NO
-	  subprogram_declaration*
-	  abstract_subprogram_declaration*
-	  null_procedure_declaration*
-	  package_declaration*
-	  renaming_declaration  --  NO
-	    -- Allowing a renaming to change operational or representational
-	    -- aspects would seem to break the underlying model of renaming.
-	  exception_declaration*
-	  generic_declaration*
-	  generic_instantiation*
-	enumeration_literal_specification  --  NO
-	discriminant_specification  --  NO
-	component_declaration*
-	loop_parameter_specification  --  NO
-	parameter_specification  --  NO
-	subprogram_body  --  NO
-	entry_declaration*
-	entry_index_specification  --  NO
-	choice_parameter_specification  --  NO
-	generic_formal_parameter_declaration*
-	  -- There are no language-defined aspects that
-	  -- may be specified on generic formals, but implementations
-	  -- might support some. The implementation would have to
-	  -- define the matching rule.
-	extended_return_statement  --  NO
-     End of AARM Note.
-
-
 !discussion
 
 This syntax was invented to allow pre- and postconditions to be specified
@@ -514,6 +499,403 @@
 
 Much of the semantics is left to the particular aspects, as it is hard
 to talk about such things in a general way.
+
+!corrigendum 3.2.1(3)
+
+@drepl
+@xcode<@fa<full_type_declaration ::=
+    >@b<@ft<type>>@fa< defining_identifier [known_discriminant_part] >@b<@ft<is>>@fa< type_definition;
+  | task_type_declaration
+  | protected_type_declaration>>
+@dby
+@xcode<@fa<full_type_declaration ::=
+    >@b<@ft<type>>@fa< defining_identifier [known_discriminant_part] >@b<@ft<is>>@fa< type_definition
+       [aspect_specification];
+  | task_type_declaration
+  | protected_type_declaration>>
+
+!corrigendum 3.2.2(2)
+
+@drepl
+@xcode<@fa<subtype_declaration ::=
+   >@b<@ft<subtype>>@fa< defining_identifier >@b<@ft<is>>@fa< subtype_indication;>>
+@dby
+@xcode<@fa<subtype_declaration ::=
+   >@b<@ft<subtype>>@fa< defining_identifier >@b<@ft<is>>@fa< subtype_indication
+      [aspect_specification];>>
+
+!corrigendum 3.3.1(2/2)
+
+@drepl
+@xcode<@fa<object_declaration ::=
+    defining_identifier_list : [>@b<@ft<aliased>>@fa<] [>@b<@ft<constant>>@fa<] subtype_indication [:= expression];
+  | defining_identifier_list : [>@b<@ft<aliased>>@fa<] [>@b<@ft<constant>>@fa<] access_definition [:= expression];
+  | defining_identifier_list : [>@b<@ft<aliased>>@fa<] [>@b<@ft<constant>>@fa<] array_type_definition [:= expression];
+  | single_task_declaration
+  | single_protected_declaration>>
+@dby
+@xcode<@fa<object_declaration ::=
+    defining_identifier_list : [>@b<@ft<aliased>>@fa<] [>@b<@ft<constant>>@fa<] subtype_indication [:= expression]
+      [aspect_specification];
+  | defining_identifier_list : [>@b<@ft<aliased>>@fa<] [>@b<@ft<constant>>@fa<] access_definition [:= expression]
+      [aspect_specification];
+  | defining_identifier_list : [>@b<@ft<aliased>>@fa<] [>@b<@ft<constant>>@fa<] array_type_definition [:= expression]
+      [aspect_specification];
+  | single_task_declaration
+  | single_protected_declaration>>
+
+
+!corrigendum 3.8(6)
+
+@drepl
+@xcode<@fa<component_declaration ::=
+   defining_identifier_list : component_definition [:= default_expression];>>
+@dby
+@xcode<@fa<component_declaration ::=
+   defining_identifier_list : component_definition [:= default_expression]
+      [aspect_specification];>>
+
+!corrigendum 3.9.3(1.1/2)
+
+@drepl
+@xcode<@fa<abstract_subprogram_declaration ::=
+   [overriding_indicator]
+   subprogram_specification >@b<@ft<is abstract>>@fa<;>>
+@dby
+@xcode<@fa<abstract_subprogram_declaration ::=
+   [overriding_indicator]
+   subprogram_specification >@b<@ft<is abstract>>@fa<
+      [aspect_specification];>>
+
+!corrigendum 6.1(2/2)
+
+@drepl
+@xcode<@fa<subprogram_declaration ::=
+    [overriding_indicator]
+    subprogram_specification;>>
+@dby
+@xcode<@fa<subprogram_declaration ::=
+    [overriding_indicator]
+    subprogram_specification
+      [aspect_specification];>>
+
+!corrigendum 6.7(2/2)
+
+@drepl
+@xcode<@fa<null_procedure_declaration ::=
+   [overriding_indicator]
+   procedure_specification >@b<@ft<is null>>@fa<;>>
+@dby
+@xcode<@fa<null_procedure_declaration ::=
+   [overriding_indicator]
+   procedure_specification >@b<@ft<is null>>@fa<
+     [aspect_specification];>>
+
+!corrigendum 7.1(3)
+
+@drepl
+@xcode<@fa<package_specification ::=
+    >@b<@ft<package>>@fa< defining_program_unit_name >@b<@ft<is>>@fa<
+      {basic_declarative_item}
+   [>@b<@ft<private>>@fa<
+      {basic_declarative_item}]
+    >@b<@ft<end>>@fa< [[parent_unit_name.]identifier]>>
+@dby
+@xcode<@fa<package_specification ::=
+    >@b<@ft<package>>@fa< defining_program_unit_name
+        [aspect_specification] >@b<@ft<is>>@fa<
+      {basic_declarative_item}
+   [>@b<@ft<private>>@fa<
+      {basic_declarative_item}]
+    >@b<@ft<end>>@fa< [[parent_unit_name.]identifier]>>
+
+!corrigendum 7.3(2)
+
+@drepl
+@xcode<@fa<private_type_declaration ::=
+   >@b<@ft<type>>@fa< defining_identifier [discriminant_part] >@b<@ft<is>>@fa< [[>@b<@ft<abstract>>@fa<] >@b<@ft<tagged>>@fa<] [>@b<@ft<limited>>@fa<] >@b<@ft<private>>@fa<;>>
+@dby
+@xcode<@fa<private_type_declaration ::=
+   >@b<@ft<type>>@fa< defining_identifier [discriminant_part] >@b<@ft<is>>@fa< [[>@b<@ft<abstract>>@fa<] >@b<@ft<tagged>>@fa<] [>@b<@ft<limited>>@fa<] >@b<@ft<private>>@fa<
+     [aspect_specification];>>
+
+!corrigendum 7.3(3/2)
+
+@drepl
+@xcode<@fa<private_extension_declaration ::=
+   >@b<@ft<type>>@fa< defining_identifier [discriminant_part] >@b<@ft<is>>@fa<
+     [>@b<@ft<abstract>>@fa<] [>@b<@ft<limited>>@fa< | >@b<@ft<synchronized>>@fa<] >@b<@ft<new>>@fa< ancestor_subtype_indication
+     [>@b<@ft<and>>@fa< interface_list] >@b<@ft<with private>>@fa<;>>
+@dby
+@xcode<@fa<private_extension_declaration ::=
+   >@b<@ft<type>>@fa< defining_identifier [discriminant_part] >@b<@ft<is>>@fa<
+     [>@b<@ft<abstract>>@fa<] [>@b<@ft<limited>>@fa< | >@b<@ft<synchronized>>@fa<] >@b<@ft<new>>@fa< ancestor_subtype_indication
+     [>@b<@ft<and>>@fa< interface_list] >@b<@ft<with private>>@fa<
+       [aspect_specification];>>
+
+!corrigendum 9.1(2/2)
+
+@drepl
+@xcode<@fa<task_type_declaration ::=
+   >@b<@ft<task type>>@fa< defining_identifier [known_discriminant_part] [>@b<@ft<is>>@fa< 
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      task_definition];>>
+@dby
+@xcode<@fa<task_type_declaration ::=
+   >@b<@ft<task type>>@fa< defining_identifier [known_discriminant_part]
+         [aspect_specification] [>@b<@ft<is>>@fa<
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      task_definition];>>
+
+!corrigendum 9.1(3/2)
+
+@drepl
+@xcode<@fa<single_task_declaration ::=
+   >@b<@ft<task>>@fa< defining_identifier [>@b<@ft<is>>@fa< 
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      task_definition];>>
+@dby
+@xcode<@fa<single_task_declaration ::=
+   >@b<@ft<task>>@fa< defining_identifier
+         [aspect_specification] [>@b<@ft<is>>@fa<
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      task_definition];>>
+
+!corrigendum 9.4(2/2)
+
+@drepl
+@xcode<@fa<protected_type_declaration ::=
+   >@b<@ft<protected type>>@fa< defining_identifier [known_discriminant_part] >@b<@ft<is>>@fa< 
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      protected_definition;>>
+@dby
+@xcode<@fa<protected_type_declaration ::=
+   >@b<@ft<protected type>>@fa< defining_identifier [known_discriminant_part]
+         [aspect_specification] >@b<@ft<is>>@fa<
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      protected_definition;>>
+
+!corrigendum 9.4(3/2)
+
+@drepl
+@xcode<@fa<single_protected_declaration ::=
+   >@b<@ft<protected>>@fa< defining_identifier >@b<@ft<is>>@fa< 
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      protected_definition;>>
+@dby
+@xcode<@fa<single_protected_declaration ::=
+   >@b<@ft<protected>>@fa< defining_identifier
+         [aspect_specification] >@b<@ft<is>>@fa<
+      [>@b<@ft<new>>@fa< interface_list >@b<@ft<with>>@fa<]
+      protected_definition;>>
+
+!corrigendum 9.5.2(2/2)
+
+@drepl
+@xcode<@fa<entry_declaration ::=
+   [overriding_indicator]
+   >@b<@ft<entry>>@fa< defining_identifier [(discrete_subtype_definition)] parameter_profile;>>
+@dby
+@xcode<@fa<entry_declaration ::=
+   [overriding_indicator]
+   >@b<@ft<entry>>@fa< defining_identifier [(discrete_subtype_definition)] parameter_profile
+      [aspect_specification];>>
+
+!corrigendum 11.1(2)
+
+@drepl
+@xcode<@fa<exception_declaration ::= defining_identifier_list : >@b<@ft<exception>>@fa<;>>
+@dby
+@xcode<@fa<exception_declaration ::= defining_identifier_list : >@b<@ft<exception>>@fa<
+    [aspect_specification];>>
+
+
+!corrigendum 12.1(3)
+
+@drepl
+@xcode<@fa<generic_subprogram_declaration ::=
+   generic_formal_part  subprogram_specification
+      [aspect_specification];>>
+@dby
+@xcode<@fa<generic_subprogram_declaration ::=
+   generic_formal_part  subprogram_specification
+      [aspect_specification];>>
+
+
+!corrigendum 12.3(2/2)
+
+@drepl
+@xcode<@fa<generic_instantiation ::=
+    >@b<@ft<package>>@fa< defining_program_unit_name >@b<@ft<is>>@fa<
+       >@b<@ft<new>>@fa< generic_package_name [generic_actual_part];
+  | [overriding_indicator]
+    >@b<@ft<procedure>>@fa< defining_program_unit_name >@b<@ft<is>>@fa<
+       >@b<@ft<new>>@fa< generic_procedure_name [generic_actual_part];
+  | [overriding_indicator]
+    >@b<@ft<function>>@fa< defining_designator >@b<@ft<is>>@fa<
+       >@b<@ft<new>>@fa< generic_function_name [generic_actual_part];>>
+@dby
+@xcode<@fa<generic_instantiation ::=
+    >@b<@ft<package>>@fa< defining_program_unit_name >@b<@ft<is>>@fa<
+       >@b<@ft<new>>@fa< generic_package_name [generic_actual_part]
+          [aspect_specification];
+  | [overriding_indicator]
+    >@b<@ft<procedure>>@fa< defining_program_unit_name >@b<@ft<is>>@fa<
+       >@b<@ft<new>>@fa< generic_procedure_name [generic_actual_part]
+          [aspect_specification];
+  | [overriding_indicator]
+    >@b<@ft<function>>@fa< defining_designator >@b<@ft<is>>@fa<
+       >@b<@ft<new>>@fa< generic_function_name [generic_actual_part]
+          [aspect_specification];>>
+
+!corrigendum 12.4(2/2)
+
+@drepl
+@xcode<@fa<formal_object_declaration ::=
+    defining_identifier_list : mode [null_exclusion] subtype_mark [:= default_expression];
+  | defining_identifier_list : mode access_definition [:= default_expression];>>
+@dby
+@xcode<@fa<formal_object_declaration ::=
+    defining_identifier_list : mode [null_exclusion] subtype_mark [:= default_expression]
+      [aspect_specification];
+  | defining_identifier_list : mode access_definition [:= default_expression]
+      [aspect_specification];>>
+
+!corrigendum 12.5(2)
+
+@drepl
+@xcode<@fa<formal_type_declaration ::=
+    >@b<@ft<type>>@fa< defining_identifier[discriminant_part] >@b<@ft<is>>@fa< formal_type_definition;>>
+@dby
+@xcode<@fa<formal_type_declaration ::=
+    >@b<@ft<type>>@fa< defining_identifier[discriminant_part] >@b<@ft<is>>@fa< formal_type_definition
+      [aspect_specification];>>
+
+!corrigendum 12.6(2.1/2)
+
+@drepl
+@xcode<@fa<formal_concrete_subprogram_declaration ::=
+    >@b<@ft<with>>@fa< subprogram_specification [>@b<@ft<is>>@fa< subprogram_default];>>
+@dby
+@xcode<@fa<formal_concrete_subprogram_declaration ::=
+    >@b<@ft<with>>@fa< subprogram_specification [>@b<@ft<is>>@fa< subprogram_default]
+       [aspect_specification];>>
+
+!corrigendum 12.6(2.2/2)
+
+@drepl
+@xcode<@fa<formal_abstract_subprogram_declaration ::=
+    >@b<@ft<with>> @fa<subprogram_specification >@b<@ft<is abstract>>@fa< [subprogram_default];>>
+@dby
+@xcode<@fa<formal_abstract_subprogram_declaration ::=
+    >@b<@ft<with>> @fa<subprogram_specification >@b<@ft<is abstract>>@fa< [subprogram_default]
+       [aspect_specification];>>
+
+!corrigendum 12.7(2)
+
+@drepl
+@xcode<@fa<formal_package_declaration ::=
+    >@b<@ft<with>> @fa<package defining_identifier >@b<@ft<is new>>@fa< generic_package_name formal_package_actual_part;>>
+@dby
+@xcode<@fa<formal_package_declaration ::=
+    >@b<@ft<with>> @fa<package defining_identifier >@b<@ft<is new>>@fa< generic_package_name formal_package_actual_part
+      [aspect_specification];>>
+
+!corrigendum 13.1(0.1/1)
+
+@drepl
+Representation and operational items can
+be used to specify aspects of entities. Two kinds of aspects of entities can be
+specified: aspects of representation and operational aspects. Representation
+items specify how the types and other entities of the language are to be mapped
+onto the underlying machine. Operational items specify other properties of
+entities.
+@dby
+Representation and operational items can
+be used to specify aspects of entities. Two kinds of aspects of entities can be
+specified: aspects of representation and operational aspects. Representation
+items specify how the types and other entities of the language are to be mapped
+onto the underlying machine. Operational items specify other properties of
+entities. In addition to representation and operational
+items, aspects of entities may be specified using an @fa<aspect_specification>
+13.3.1), which is an optional element of certain
+kinds of declarations.
+
+!corrigendum 13.3(5/1)
+
+@drepl
+An @fa<attribute_designator> is allowed in an @fa<attribute_definition_clause>
+only if this International Standard explicitly allows it, or for an
+implementation-defined attribute if the implementation allows it. Each
+specifiable attribute constitutes an operational aspect or an aspect of
+representation.
+@dby
+An @fa<attribute_designator> is allowed in an @fa<attribute_definition_clause>
+only if this International Standard explicitly allows it, or for an
+implementation-defined attribute if the implementation allows it. Each
+specifiable attribute constitutes an operational aspect or an aspect of
+representation; the name of the aspect is that of the
+attribute.
+
+!corrigendum 13.3.1(0)
+
+@dinsc
+
+Certain representation or operational aspects of an entity
+may be specified as part of its declaration using an
+@fa<aspect_specification>, rather than using a separate representation or
+operational item. The declaration with the @fa<aspect_specification> is
+termed the @i<associated declaration>.
+
+@i<@s8<Syntax>>
+
+@xcode<@fa<aspect_specification ::=
+    >@b<@ft<with>>@fa< aspect_mark [=> aspect_definition] {,
+         aspect_mark [=> aspect_definition] }>>
+
+@xcode<@fa<aspect_mark ::= >@i<@ft<aspect_>>@fa<identifier['>@ft<Class>@fa<]>>
+
+@xcode<@fa<aspect_definition ::= name | expression>>
+
+@i<@s8<Name Resolution Rules>>
+
+An @fa<aspect_mark> identifies an aspect of the entity defined by the
+associated declaration (the @i<associated entity>); the aspect denotes
+an object, a value, an expression, a subprogram, or some other kind of
+entity. If the @fa<aspect_mark> identifies:
+
+@xbullet<an aspect that denotes an object, the @fa<aspect_definition> shall be a
+@fa<name>. The expected type for the @fa<name> is the type of the identified
+aspect of the associated entity.>
+
+@xbullet<an aspect that is a value or an expression, the @fa<aspect_definition>
+shall be an @fa<expression>. The expected type for the @fa<expression>
+is the type of the identified aspect of the associated entity.>
+
+@xbullet<an aspect that denotes a subprogram, the @fa<aspect_definition> shall
+be a @fa<name>; the expected profile for the @fa<name> is the profile required
+for the aspect of the associated entity.>
+
+@xbullet<an aspect that denotes some other kind of entity, the @fa<aspect_definition>
+shall be a @fa<name>, and the @fa<name> shall resolve to denote an entity of
+the appropriate kind.>
+
+The usage names in an @fa<aspect_definition> are not resolved at the
+point of the associated declaration, but rather are resolved at the
+end of the immediately enclosing declaration list, or at the first
+freezing point of the associated entity, whichever comes first.
+
+If the associated declaration is for a subprogram or entry, the names of the
+formal parameters are visible within the @fa<aspect_definition>, as are certain
+attributes, as specified elsewhere in this International Standard for the
+identified aspect. If the associated declaration is a @fa<type_declaration>, within
+the @fa<aspect_definition> the names of any components are visible, and the name of
+the first subtype denotes the current instance of the type (see 8.6). If the
+associated declaration is a @fa<subtype_declaration>, within the
+@fa<aspect_definition> the name of the new subtype denotes the current instance
+of the (sub)type.
+
+@i<@b<Rest of this text TBD>>
 
 !example
 

Questions? Ask the ACAA Technical Agent