


---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
-- 19	package Asis.Clauses
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
package Asis.Clauses is 
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
-- Asis.Clauses
--
-- This package encapsulates a set of queries that operate on A_Clause 
-- elements.
--
--|ER----------------------------------------------------------------------------------
--|ER A_Use_Package_Clause - 8.4
--|ER A_Use_Type_Clause    - 8.4
--|ER A_With_Clause        - 10.1.2
--|CR
--|CR Child elements returned by:
--|CR    function Clause_Names
--|CR
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
-- 19.1	function Clause_Names
---------------------------------------------------------------------------------------

    function Clause_Names (Clause : in Asis.Element) 
                           return Asis.Name_List;

---------------------------------------------------------------------------------------
-- Clause  - Specifies the with_clause or use_clause to query
--
-- Returns a list of the names that appear in the given clause.
-- The names in the list should be in their order of appearance in the
-- original clauses from the compilation text.
--
-- Results of this query may vary across ASIS implementations.  Some
-- implementations normalize all clauses containing multiple names
-- into an equivalent sequence of corresponding single clauses.
-- Similarly, an implementation may keep a name only once even though that
-- name can appear more than once in a clause.
--
-- Appropriate Element_Kinds:
--      A_Use_Package_Clause
--      A_Use_Type_Clause
--      A_With_Clause
--
-- Returns Expression_Kinds:
--      An_Identifier
--      A_Selected_Component
--      An_Attribute_Reference
--
--|ER----------------------------------------------------------------------------------
--|ER A_Representation_Clause - 13.1
--|ER----------------------------------------------------------------------------------
--|ER An_Attribute_Definition_Clause - 13.3
--|ER An_Enumeration_Representation_Clause - 13.4
--|ER An_At_Clause - J.7
--|CR
--|CR Child elements returned by:
--|CR    function Representation_Clause_Name
--|CR    function Representation_Clause_Expression  
--
---------------------------------------------------------------------------------------
-- 19.2	function Representation_Clause_Name
---------------------------------------------------------------------------------------

    function Representation_Clause_Name (Clause : in Asis.Clause)  
                                         return Asis.Name;

---------------------------------------------------------------------------------------
-- Clause  - Specifies the representation_clause to query
--
-- Returns the direct_name expression following the reserved word "for".
--
-- Appropriate Clause_Kinds:
--      A_Representation_Clause
--      A_Component_Clause
--
-- Returns Expression_Kinds:
--      An_Identifier
--      An_Attribute_Reference
--
---------------------------------------------------------------------------------------
-- 19.3	function Representation_Clause_Expression
---------------------------------------------------------------------------------------

    function Representation_Clause_Expression 
                (Clause : in Asis.Representation_Clause)  
                 return Asis.Expression;

---------------------------------------------------------------------------------------
-- Clause  - Specifies the representation_clause to query
--
-- Returns the expression following the reserved word "use" or the reserved
-- words "use at".
--
-- Appropriate Representation_Clause_Kinds:
--      An_Attribute_Definition_Clause
--      An_Enumeration_Representation_Clause
--      An_At_Clause
--
-- Returns Element_Kinds:
--      An_Expression
--
--|ER----------------------------------------------------------------------------------
--|ER A_Record_Representation_Clause - 13.5.1
--|CR
--|CR Child elements returned by:
--|CR    function Representation_Clause_Name
--|CR    function Mod_Clause_Expression
--|CR    function Component_Clauses
--
---------------------------------------------------------------------------------------
-- 19.4	function Mod_Clause_Expression
---------------------------------------------------------------------------------------

    function Mod_Clause_Expression (Clause : in Asis.Representation_Clause) 
                                 return Asis.Expression;

---------------------------------------------------------------------------------------
-- Clause  - Specifies the record representation clause to query
--
-- Returns the static_expression appearing after the reserved words "at mod".
--
-- Returns a Nil_Element if a mod_clause is not present.
--
-- Appropriate Representation_Clause_Kinds:
--      A_Record_Representation_Clause
--
-- Returns Element_Kinds:
--      Not_An_Element
--      An_Expression
--
---------------------------------------------------------------------------------------
-- 19.5	function Component_Clauses
---------------------------------------------------------------------------------------

    function Component_Clauses (Clause : in Asis.Representation_Clause;  
                                Include_Pragmas : in Boolean := False)  
                                return Asis.Component_Clause_List;

---------------------------------------------------------------------------------------
-- Clause          - Specifies the record representation clause to query
-- Include_Pragmas - Specifies whether pragmas are to be returned
--
-- Returns the component_clause and pragma elements from the 
-- record_representation_clause, in their order of appearance.
--
-- Returns a Nil_Element_List if the record_representation_clause has no
-- component_clause or pragma elements.
--
-- Appropriate Representation_Clause_Kinds:
--      A_Record_Representation_Clause
--
-- Returns Element_Kinds:
--      A_Clause
--      A_Pragma
--
-- Returns Clause_Kinds:
--      A_Component_Clause
--
--|ER----------------------------------------------------------------------------------
--|ER A_Component_Clause - 13.5.1
--|CR
--|CR Child elements returned by:
--|CR    function Representation_Clause_Name
--|CR    function Component_Clause_Position
--|CR    function Component_Clause_Range
--
---------------------------------------------------------------------------------------
-- 19.6	function Component_Clause_Position
---------------------------------------------------------------------------------------

    function Component_Clause_Position (Clause : in Asis.Component_Clause)  
                                        return Asis.Expression;

---------------------------------------------------------------------------------------
-- Clause  - Specifies the component_clause to query
--
-- Returns the position expression for the component_clause.
--
-- Appropriate Clause_Kinds:
--      A_Component_Clause
--
-- Returns Element_Kinds:
--      An_Expression
--
---------------------------------------------------------------------------------------
-- 19.7	function Component_Clause_Range
---------------------------------------------------------------------------------------

    function Component_Clause_Range (Clause : in Asis.Component_Clause)
                                     return Asis.Discrete_Range;

---------------------------------------------------------------------------------------
-- Clause  - Specifies the component_clause to query
--
-- Returns the first_bit .. last_bit range for the component_clause.
--
-- Appropriate Clause_Kinds:
--      A_Component_Clause
--
-- Returns Discrete_Range_Kinds:
--      A_Discrete_Simple_Expression_Range
--
---------------------------------------------------------------------------------------

end Asis.Clauses;
