
with Asis.Generic_Implicit_Traverse;

package Asis.Toolkit.ObjectAda.Elements is

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

  function Enclosing_Declaration 
	       (Element : in Asis.Element) return Asis.Declaration;

-----------------------------------------------------------------
-- Element - Specifies the element to query
-- 
-- Returns the Declaration that immediately encloses the Element.
--
-- All Element_Kinds are appropriate except Not_An_Element.
--
-----------------------------------------------------------------

  function Element_Image (Element : in Asis.Element) return String;

-----------------------------------------------------------------
-- Element - Specifies the element to query
-- 
-- For A_Declaration elements, returns a string of the declaration name,
-- Declaration_Kind, and the first line number.
--
-- For A_Definition elements, returns a string of the Definition_Kind,
-- and the first line number.
--
-- For all other kinds, returns a string of the first level kind
-- classification.
--
-- All Element_Kinds are appropriate.
--
-----------------------------------------------------------------

  procedure Print_Span (Element : Asis.Element;
		        Verbose : Boolean := True;
		        Show_Lines   : Boolean := False;
		        Show_Image   : Boolean := False);

  procedure Print_Element (Element : in Asis.Element;
			   Verbose : in Boolean := False;
			   span    : in Boolean := True);

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

-- generic
--   type State_Information is limited private;
--   with procedure Traverse_Element  
--                  (Element : in     Asis.Element;
--                   Control : in out Asis.Traverse_Control;
--                   State   : in out State_Information);
-- procedure Asis.Generic_Implicit_Traverse 
--         (Element : in Asis.Element;
--          Control : in out Asis.Traverse_Control;
--          State   : in out State_Information);

  generic
  procedure Implicit_Traverse renames Asis.Generic_Implicit_Traverse;

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

-- This procedure will traverse implicit elements including
-- expanded instance specs and bodies, inherited enumeration literals,
-- inherited record components, and inherited subprograms.
--
-- Asis.Traverse_Element does not traverse implicit elements by
-- default.
--
-- Calling this from the Post_Operation of an instance of
-- Asis_Elements.Traverse_Element causes implicit elements
-- to be traversed as if they followed instances and derived type
-- definitions in the Ada source code.
--
-----------------------------------------------------------------

end Asis.Toolkit.ObjectAda.Elements;

