DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦eb2ccab40⟧ Ada Source

    Length: 32768 (0x8000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, function Get_Attribute_Info, seg_04cfa5, separate Mc68k_Bare_Vads

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



--with Get_Attributes;

separate (Mc68k_Bare_Vads)

function Get_Attribute_Info return Attributes.Object is

    package Attr renames Attributes;

    -- GENERAL NOTES PERTAINING TO ATTRIBUTES DEFINED HERE
    --
    -- There are three "implementation dependant" attributes documented in
    -- the Appendix F found in the "M68000 Family  -  Version 6.2.1"
    -- Programmer's Guide.  These include:
    --
    --   X'Address,
    --   X'Ref and System.Address'Ref(N)
    --   X'Task_Id
    --   X'Long_Address
    --   X'Compiler_Key
    --   X'Compiler_Version
    --   X'Dope_Adress
    --   X'Dope_Size
    --   X'Entry_Number
    --   X'Homogeneous
    --   X'Type_Key
    --
    -- The implementation for the X'Address attribute is already provided
    -- by the R1000 semanticist and is therefore not defined here.
    --
    -- 'Ref is "overloaded" in that it has two permitted forms. The form
    -- X'Ref is used only in machine code insertions.  Both forms could not
    -- be implemented in the RCI. Because machine code insertions should be
    -- used somewhat infrequently, this customization implements only the
    -- System.Address'Ref(N) form.
    --
    -- In the case of both System.Address'Ref(N) and X'Task_Id a known bug
    -- in the Rev1_0_0 release of the RCI prevents usages of these
    -- attributes in a view using this customization from semantizing
    -- properly.  The bug has reportedly been fixed in the upcoming
    -- maintanence release.  Once this release becomes available, the use
    -- of these attributes will have to be tested.  It is believed that
    -- they are properly defined here.


-----------------------------------------------------------------------------------

    -- P'Long_Address
    --
    -- For a prefix P that denotes an object, a program unit, a label or an entry
    --
    -- Yields the address of the first of the storage units allocated to P
    -- The only difference betwen 'Address and 'Long_Address is that the value of
    -- the second one is of the type Long_address.

    Long_Address_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types => Checking.All_Structural_Types,
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Long_Address_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Long_Address_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Long_Address_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (Checking.Task_Kind => False,
                                       Checking.Named_Statement_Kind => False,
                                       others => True),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Long_Address_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Long_Address_Objects,
                   Valid_Miscellaneous_Names => Long_Address_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Long_Address_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "system.long_address", For_Target => T_Name);


    Long_Address_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Long_Address_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Long_Address",
                   The_Prefix => Long_Address_Prefix,
                   The_Result => Long_Address_Result,
                   The_Designator => Long_Address_Designator,
                   For_Target => T_Name);

-----------------------------------------------------------------------------------

    --[ Dess16 defined ]

    -- P'Compiler_Key
    --
    -- For a prefix P that denotes the name of an entity, P'Compiler_Key yields
    -- the full pathname of the compiler key, which indicates the compiler that
    -- was used to generate code for the unit containing the definition of P.
    --
    -- The value returned by this attribute is of type String
    --
    -- The entity can be a program unit (package, subprogram, task or generic),
    -- an object (variable, constant, named number, or parameter), a type or
    -- subtype (but not an incomplete type), or an exception
    --

    Compiler_Key_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types =>
                          (Checking.Access_Type => False, others => True),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Compiler_Key_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Compiler_Key_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Compiler_Key_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (Checking.Entry_Kind => False,
                                       Checking.Label_Kind => False,
                                       others => True),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Compiler_Key_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Compiler_Key_Objects,
                   Valid_Miscellaneous_Names => Compiler_Key_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Compiler_Key_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "String", For_Target => T_Name);


    Compiler_Key_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Compiler_Key_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Compiler_Key",
                   The_Prefix => Compiler_Key_Prefix,
                   The_Result => Compiler_Key_Result,
                   The_Designator => Compiler_Key_Designator,
                   For_Target => T_Name);

-----------------------------------------------------------------------------------

    --[ Dess16 defined ]
    -- P'Compiler_Version
    --
    -- For a prefix P that denotes the name of an entity, P'Compiler_Version yields
    -- the version of the compiler key that was used to generate code for the unit
    -- containing the definition of P.
    --
    -- The value returned by this attribute is of type String
    --
    -- The entity can be a program unit (package, subprogram, task or generic),
    -- an object (variable, constant, named number, or parameter), a type or
    -- subtype (but not an incomplete type), or an exception
    --

    Compiler_Version_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types =>
                          (Checking.Access_Type => False, others => True),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Compiler_Version_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Compiler_Version_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Compiler_Version_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (Checking.Entry_Kind => False,
                                       Checking.Label_Kind => False,
                                       others => True),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Compiler_Version_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Compiler_Version_Objects,
                   Valid_Miscellaneous_Names => Compiler_Version_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Compiler_Version_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "String", For_Target => T_Name);


    Compiler_Version_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Compiler_Version_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Compiler_Version",
                   The_Prefix => Compiler_Version_Prefix,
                   The_Result => Compiler_Version_Result,
                   The_Designator => Compiler_Version_Designator,
                   For_Target => T_Name);

-----------------------------------------------------------------------------------

    --[ Dess16 defined ]
    --
    -- P'Dope_Address
    --
    -- For an array object P
    --
    -- Yields the address of the first of the dope vector that describes P. It
    -- returns a value of type System_Address.

    Dope_Address_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types =>
                          (Checking.Array_Type => True, others => False),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Dope_Address_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Dope_Address_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Dope_Address_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (others => False),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Dope_Address_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Dope_Address_Objects,
                   Valid_Miscellaneous_Names => Dope_Address_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Dope_Address_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "System.Address", For_Target => T_Name);


    Dope_Address_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Dope_Address_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Dope_Address",
                   The_Prefix => Dope_Address_Prefix,
                   The_Result => Dope_Address_Result,
                   The_Designator => Dope_Address_Designator,
                   For_Target => T_Name);


-----------------------------------------------------------------------------------

    --[ Dess16 defined ]
    --
    -- P'Dope_Size
    --
    -- For an array object P
    --
    -- Yields the size in bits of the dope vector that describes P. It returns
    -- a value of type Universal_Integer.

    Dope_Size_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types =>
                          (Checking.Array_Type => True, others => False),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Dope_Size_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Dope_Size_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Dope_Size_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (others => False),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Dope_Size_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Dope_Size_Objects,
                   Valid_Miscellaneous_Names => Dope_Size_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Dope_Size_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "Universal_Integer", For_Target => T_Name);


    Dope_Size_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Dope_Size_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Dope_Size",
                   The_Prefix => Dope_Size_Prefix,
                   The_Result => Dope_Size_Result,
                   The_Designator => Dope_Size_Designator,
                   For_Target => T_Name);



-----------------------------------------------------------------------------------

    --[ Dess16 defined ]
    --
    -- P'Entry_Number
    --
    -- For a task entry or generic formal subprogram
    --
    -- Yields a Universal_Integer value the uniquely identifies the entity P

    Entry_Number_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types => (others => False),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Entry_Number_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Entry_Number_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Entry_Number_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds =>
                          (Checking.Entry_Kind => True,
                           Checking.Generic_Formal_Procedure => True,
                           Checking.Generic_Formal_Function => True,
                           others => False),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Entry_Number_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Entry_Number_Objects,
                   Valid_Miscellaneous_Names => Entry_Number_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Entry_Number_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "Universal_Integer", For_Target => T_Name);


    Entry_Number_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Entry_Number_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Entry_Number",
                   The_Prefix => Entry_Number_Prefix,
                   The_Result => Entry_Number_Result,
                   The_Designator => Entry_Number_Designator,
                   For_Target => T_Name);

    -----------------------------------------------------------------------------------

    --[ Dess16 defined ]
    --
    -- P'Homogeneous
    --
    -- For an access type
    --
    -- Yields the boolean value TRUE if all objects in the collection will have the
    -- same constraints. The converse, however, is not true

    Homogeneous_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types =>
                          (Checking.Access_Type => True, others => False),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Homogeneous_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Homogeneous_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Homogeneous_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (others => False),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Homogeneous_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Homogeneous_Objects,
                   Valid_Miscellaneous_Names => Homogeneous_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Homogeneous_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "Boolean", For_Target => T_Name);


    Homogeneous_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Homogeneous_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Homogeneous",
                   The_Prefix => Homogeneous_Prefix,
                   The_Result => Homogeneous_Result,
                   The_Designator => Homogeneous_Designator,
                   For_Target => T_Name);


    -----------------------------------------------------------------------------------

    --[ Dess16 defined ]
    --
    -- P'Type_Key
    --
    -- For a type name.
    --
    -- Yields a string that uniquely identifies type P. This attribute typically is
    -- used when passing messages over a network to ensure that the reader and
    -- writer agree on the type to use when interpreting the message.

    Type_Key_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types => (others => True),
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Type_Key_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Type_Key_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Type_Key_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (others => False),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Type_Key_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Type_Key_Objects,
                   Valid_Miscellaneous_Names => Type_Key_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Type_Key_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "String", For_Target => T_Name);


    Type_Key_Designator : constant Attr.Designator :=
       Attributes.Null_Designator;

    Type_Key_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Type_Key",
                   The_Prefix => Type_Key_Prefix,
                   The_Result => Type_Key_Result,
                   The_Designator => Type_Key_Designator,
                   For_Target => T_Name);


-----------------------------------------------------------------------------------

    -- 'Ref has two permitted forms
    --
    -- X'Ref -  Used only in machine_code procedures
    --    X must be either a constant, variable, procedure, function, or
    --      label.
    --    Returns a value of type Machine_Code.Operand.
    --    May be used only to designate an operand within a code-statement.
    --
    -- System.Address'Ref(N) - Used anywhere to convert the
    --      Universal_Integer value N to an Address.
    --    Returns a type of System.Address.
    --    N must be a static value of type Universal_Integer.
    --
    -- Of the two permitted forms, only System.Address'Ref(N) is
    -- implemented at this time.


    Ref_Textual_Types : constant Checking.Type_Name_Array :=
       (1 => Text.Build (S => "System.Address", For_Target => T_Name));

    Ref_Type_Set : constant Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.All_Type_Restrictions,
                       Valid_Structural_Types => Checking.No_Structural_Types,
                       Valid_Textual_Types => Ref_Textual_Types,
                       For_Target => T_Name);


    Ref_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Checking.Null_Object_Set,
                   Valid_Miscellaneous_Names =>
                      Checking.Null_Miscellaneous_Name_Set,
                   Valid_Types => Ref_Type_Set,
                   For_Target => T_Name);

    Ref_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "System.Address", For_Target => T_Name);


    Ref_Designator : constant Attr.Designator :=
       Attr.Build (Function_Parameter =>
                      Checking.Build
                         (Expression_Type => "Universal_Integer",
                          Constraint => Checking.Null_Constraint (T_Name),
                          For_Target => T_Name),
                   For_Target => T_Name);

    Ref_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Ref",
                   The_Prefix => Ref_Prefix,
                   The_Result => Ref_Result,
                   The_Designator => Ref_Designator,
                   For_Target => T_Name);

-----------------------------------------------------------------------------------

    Xref_Type_Set : Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types => Checking.No_Structural_Types,
                       Valid_Textual_Types => Checking.No_Type_Names,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Xref_Objects : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => (Checking.Constant_Kind => True,
                                       Checking.Variable => True,
                                       others => False),
                       Allowed_Types => Xref_Type_Set,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Xref_Misc_Names : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds => (Checking.Function_Kind => True,
                                       Checking.Procedure_Kind => True,
                                       Checking.Label_Kind => True,
                                       others => False),
                       Ambiguity_Allowed => False,
                       Required_Pragmas => Checking.No_Pragmas,
                       Prohibited_Pragmas => Checking.No_Pragmas,
                       For_Target => T_Name);

    Xref_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Xref_Objects,
                   Valid_Miscellaneous_Names => Xref_Misc_Names,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Xref_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "Machine_Code.Operand", For_Target => T_Name);


    Xref_Designator : constant Attr.Designator := Attributes.Null_Designator;

    Xref_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Ref",
                   The_Prefix => Xref_Prefix,
                   The_Result => Xref_Result,
                   The_Designator => Xref_Designator,
                   For_Target => T_Name);


-----------------------------------------------------------------------------------

    -- X'Task_Id
    -- X is supposed to be limited to a "task object or a value".  However,
    -- the SunAda documentation is unclear as to what they mean by "a
    -- value" in this context.  At this time, the implementation limits use
    -- of the 'Task_Id to objects which are task types or are derived from
    -- task types.

    Task_Id_Types_Set : constant Checking.Type_Set :=
       Checking.Build (Enforced_Type_Restrictions =>
                          Checking.No_Type_Restrictions,
                       Valid_Structural_Types =>
                          (Checking.Task_Type => True, others => False),
                       For_Target => T_Name);

    Task_Id_Object_Set : constant Checking.Object_Set :=
       Checking.Build (Valid_Kinds => Checking.All_Object_Kinds,
                       Allowed_Types => Task_Id_Types_Set,
                       For_Target => T_Name);

    Task_Id_Misc_Name_Set : constant Checking.Miscellaneous_Name_Set :=
       Checking.Build (Valid_Kinds =>
                          (Checking.Task_Kind => True, others => False),
                       For_Target => T_Name);


    Task_Id_Prefix : constant Attr.Prefix :=
       Attr.Build (Valid_Objects => Task_Id_Object_Set,
                   Valid_Miscellaneous_Names => Task_Id_Misc_Name_Set,
                   Valid_Types => Checking.Null_Type_Set,
                   For_Target => T_Name);

    Task_Id_Result : constant Attr.Result :=
       Attr.Build_With_Value_Result
          (Type_Name => "System.Task_Id", For_Target => T_Name);


    Task_Id_Designator : constant Attr.Designator := Attr.Null_Designator;

    Task_Id_Attr : constant Attr.Attribute :=
       Attr.Build (The_Name => "Task_Id",
                   The_Prefix => Task_Id_Prefix,
                   The_Result => Task_Id_Result,
                   The_Designator => Task_Id_Designator,
                   For_Target => T_Name);



-----------------------------------------------------------------------------------


    Attr_List : constant Attr.Attribute_Array := (1 => Ref_Attr,
                                                  2 => Xref_Attr,
                                                  3 => Task_Id_Attr,
                                                  4 => Long_Address_Attr,
                                                  5 => Compiler_Key_Attr,
                                                  6 => Compiler_Version_Attr,
                                                  7 => Dope_Address_Attr,
                                                  8 => Dope_Size_Attr,
                                                  9 => Entry_Number_Attr,
                                                  10 => Homogeneous_Attr,
                                                  11 => Type_Key_Attr);

begin

    -- for I in Attr_List'Range loop
    --     Io.Put_Line (Attr.Get_Name (Attr_List (I)));
    --     Io.Put_Line ("  Result: " & Attr.Get_Name
    --                                    (Attr.Get_Result (Attr_List (I))));
    -- end loop;

    return Attr.Build (Attribute_List => Attr_List, For_Target => T_Name);

--    return Get_Attributes (T_Name);
end Get_Attribute_Info;

E3 Meta Data

    nblk1=1f
    nid=0
    hdr6=3e
        [0x00] rec0=20 rec1=00 rec2=01 rec3=068
        [0x01] rec0=15 rec1=00 rec2=02 rec3=01c
        [0x02] rec0=13 rec1=00 rec2=03 rec3=012
        [0x03] rec0=14 rec1=00 rec2=04 rec3=052
        [0x04] rec0=17 rec1=00 rec2=05 rec3=08c
        [0x05] rec0=15 rec1=00 rec2=06 rec3=00a
        [0x06] rec0=14 rec1=00 rec2=07 rec3=072
        [0x07] rec0=17 rec1=00 rec2=08 rec3=052
        [0x08] rec0=14 rec1=00 rec2=09 rec3=056
        [0x09] rec0=15 rec1=00 rec2=0a rec3=01a
        [0x0a] rec0=19 rec1=00 rec2=0b rec3=026
        [0x0b] rec0=13 rec1=00 rec2=0c rec3=038
        [0x0c] rec0=1c rec1=00 rec2=0d rec3=004
        [0x0d] rec0=13 rec1=00 rec2=0e rec3=068
        [0x0e] rec0=18 rec1=00 rec2=0f rec3=046
        [0x0f] rec0=19 rec1=00 rec2=10 rec3=070
        [0x10] rec0=13 rec1=00 rec2=11 rec3=032
        [0x11] rec0=19 rec1=00 rec2=12 rec3=014
        [0x12] rec0=16 rec1=00 rec2=13 rec3=03e
        [0x13] rec0=16 rec1=00 rec2=14 rec3=05a
        [0x14] rec0=1a rec1=00 rec2=15 rec3=052
        [0x15] rec0=12 rec1=00 rec2=16 rec3=058
        [0x16] rec0=1c rec1=00 rec2=17 rec3=04a
        [0x17] rec0=16 rec1=00 rec2=18 rec3=036
        [0x18] rec0=19 rec1=00 rec2=19 rec3=042
        [0x19] rec0=14 rec1=00 rec2=1a rec3=048
        [0x1a] rec0=13 rec1=00 rec2=1b rec3=00e
        [0x1b] rec0=18 rec1=00 rec2=1c rec3=064
        [0x1c] rec0=17 rec1=00 rec2=1d rec3=042
        [0x1d] rec0=1a rec1=00 rec2=1e rec3=038
        [0x1e] rec0=15 rec1=00 rec2=1f rec3=000
    tail 0x2175436b487503f5a1330 0x42a00088462060003