* Attribute Bit_Position::
* Attribute Code_Address::
* Attribute Compiler_Version::
-* Attribute Constant_Indexing::
* Attribute Default_Bit_Order::
-* Attribute Default_Iterator::
* Attribute Descriptor_Size::
* Attribute Elaborated::
* Attribute Elab_Body::
* Attribute Integer_Value::
* Attribute Invalid_Value::
* Attribute Iterable::
-* Attribute Iterator_Element::
* Attribute Large::
* Attribute Library_Level::
* Attribute Lock_Free::
* Attribute Bit_Position::
* Attribute Code_Address::
* Attribute Compiler_Version::
-* Attribute Constant_Indexing::
* Attribute Default_Bit_Order::
-* Attribute Default_Iterator::
* Attribute Descriptor_Size::
* Attribute Elaborated::
* Attribute Elab_Body::
* Attribute Implicit_Dereference::
* Attribute Integer_Value::
* Attribute Invalid_Value::
-* Attribute Iterator_Element::
* Attribute Iterable::
* Attribute Large::
* Attribute Library_Level::
@unnumberedsec Attribute Atomic_Always_Lock_Free
@findex Atomic_Always_Lock_Free
@noindent
-PLEASE ADD DOCUMENTATION HERE???
+
+The prefix of the @code{Atomic_Always_Lock_Free} attribute is a type.
+The result is a Boolean value which is True if the type has discriminants,
+and False otherwise. The result indicate whether atomic operations are
+supported by the target for the given type.
@node Attribute Bit
@unnumberedsec Attribute Bit
being used to compile the unit containing the attribute reference. A
typical result would be something like "@value{EDITION} @value{gnat_version} (20090221)".
-@node Attribute Constant_Indexing
-@unnumberedsec Attribute Constant_Indexing
-@findex Constant_Indexing
-@noindent
-PLEASE ADD DOCUMENTATION HERE???
-
@node Attribute Default_Bit_Order
@unnumberedsec Attribute Default_Bit_Order
@cindex Big endian
@code{Low_Order_First}). This is used to construct the definition of
@code{Default_Bit_Order} in package @code{System}.
-@node Attribute Default_Iterator
-@unnumberedsec Attribute Default_Iterator
-@findex Default_Iterator
-@noindent
-PLEASE ADD DOCUMENTATION HERE???
-
@node Attribute Descriptor_Size
@unnumberedsec Attribute Descriptor_Size
@cindex Descriptor
including the ability to modify the value with the binder -Sxx flag and
relevant environment variables at run time.
-@node Attribute Iterator_Element
-@unnumberedsec Attribute Iterator_Element
-@findex Iterator_Element
-@noindent
-PLEASE ADD DOCUMENTATION HERE???
-
@node Attribute Iterable
@unnumberedsec Attribute Iterable
@findex Iterable
procedure Check_Type_Reference
(Ent : Entity_Id;
- List_Interface : Boolean);
+ List_Interface : Boolean;
+ Is_Component : Boolean := False);
-- Find whether there is a meaningful type reference for
-- Ent, and display it accordingly. If List_Interface is
-- true, then Ent is a progenitor interface of the current
-- type entity being listed. In that case list it as is,
- -- without looking for a type reference for it.
+ -- without looking for a type reference for it. Flag is also
+ -- used for index types of an array type, where the caller
+ -- supplies the intended type reference. Is_Component serves
+ -- the same purpose, to display the component type of a
+ -- derived array type, for which only the parent type has
+ -- ben displayed so far.
procedure Output_Instantiation_Refs (Loc : Source_Ptr);
-- Recursive procedure to output instantiation references for
procedure Check_Type_Reference
(Ent : Entity_Id;
- List_Interface : Boolean)
+ List_Interface : Boolean;
+ Is_Component : Boolean := False)
is
begin
if List_Interface then
Left := '<';
Right := '>';
+ -- The following is not documented in lib-xref.ads ???
+
+ elsif Is_Component then
+ Tref := Ent;
+ Left := '(';
+ Right := ')';
+
else
Get_Type_Reference (Ent, Tref, Left, Right);
end if;
if Is_Array_Type (XE.Key.Ent) then
declare
+ A_Typ : constant Entity_Id := XE.Key.Ent;
Indx : Node_Id;
+
begin
+ -- If this is a derived array type, we have
+ -- output the parent type, so add the component
+ -- type now.
+
+ if Is_Derived_Type (A_Typ) then
+ Check_Type_Reference
+ (Component_Type (A_Typ), False, True);
+ end if;
+
+ -- Add references to index types.
+
Indx := First_Index (XE.Key.Ent);
while Present (Indx) loop
Check_Type_Reference