------------------------------------------------------------------------------
--                                                                          --
--             ASIS Tester And iNTerpreter (ASIStant) COMPONENTS            --
--                                                                          --
--                      A S I S T A N T . F U N C A R R                     --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (c) 1997-2005, Free Software Foundation, Inc.         --
--                                                                          --
-- ASIStant is free software; you can redistribute it and/or modify it      --
-- under terms of the  GNU General Public License  as published by the Free --
-- Software Foundation;  either version 2,  or  (at your option)  any later --
-- version. ASIStant is distributed  in the hope  that it will be useful,   --
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MER-      --
-- CHANTABILITY or  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General  --
-- Public License for more details. You should have received a copy of the  --
-- GNU General Public License distributed with GNAT; see file COPYING. If   --
-- not, write to the Free Software Foundation, 59 Temple Place Suite 330,   --
-- Boston, MA 02111-1307, USA.                                              --
--                                                                          --
-- ASIStant is an evolution of ASIStint tool that was created by            --
-- Vasiliy Fofanov as part of a collaboration between Software Engineering  --
-- Laboratory of the Swiss Federal Institute of Technology in Lausanne,     --
-- Switzerland, and the Scientific Research Computer Center of the Moscow   --
-- University, Russia, supported by the Swiss National Science Foundation   --
-- grant #7SUPJ048247, "Development of ASIS for GNAT with industry quality" --
--                                                                          --
-- ASIStant is distributed as a part of the ASIS implementation for GNAT    --
-- (ASIS-for-GNAT) and is maintained by Ada Core Technologies Inc           --
-- (http ://www.gnat.com).                                                   --
------------------------------------------------------------------------------

with Asis;  use Asis;

with Asis.Ada_Environments;
with Asis.Clauses;
with Asis.Compilation_Units;
with Asis.Compilation_Units.Relations;
with Asis.Data_Decomposition;
with Asis.Declarations;
with Asis.Definitions;
with Asis.Elements;
with Asis.Expressions;
with Asis.Implementation;
with Asis.Implementation.Permissions;
with Asis.Statements;
with Asis.Text;

with ASIStant.Enum_Mapping;

with ASIStant.FuncEnum, ASIStant.FuncTypes;
use  ASIStant.FuncEnum, ASIStant.FuncTypes;

with ASIStant.Add_Ons; use ASIStant.Add_Ons;
with ASIStant.Browser;
with ASIStant.Find_Element;

package ASIStant.FuncArr is

------------------------------------------------------------------------------
--  Arrays of accesses to ASIS queries
------------------------------------------------------------------------------

   package DDA renames Asis.Data_Decomposition;

   FCtxRetBool : array
     (Exists .. Has_Associations)
       of CtxRetBool :=
   (
     Asis.Ada_Environments.Exists'Access,
     Asis.Ada_Environments.Is_Open'Access,
     Asis.Ada_Environments.Has_Associations'Access
   );

   FCtxRetCUnitList : array
     (Compilation_Unit_Bodies .. Library_Unit_Declarations)
       of CtxRetCUnitList :=
   (
     Asis.Compilation_Units.Compilation_Unit_Bodies'Access,
     Asis.Compilation_Units.Compilation_Units'Access,
     Asis.Compilation_Units.Library_Unit_Declarations'Access
   );

   FCtxRetElemList : array
     (Configuration_Pragmas .. Configuration_Pragmas)
       of CtxRetElemList :=
   (others =>
     Asis.Elements.Configuration_Pragmas'Access
   );

   FCtxRetNull : array
     (Close .. Open)
       of CtxRetNull :=
   (
     Asis.Ada_Environments.Close'Access,
     Asis.Ada_Environments.Dissociate'Access,
     Asis.Ada_Environments.Open'Access
   );

   FCtxRetString : array
     (Debug_Image_Ctx .. Parameters)
       of CtxRetString :=
   (
     Asis.Ada_Environments.Debug_Image'Access,
     Asis.Ada_Environments.Name'Access,
     Asis.Ada_Environments.Parameters'Access
   );

   FCtxStringStringRetNull : array
     (Associate .. Associate)
       of CtxStringStringRetNull :=
   (others =>
     Asis.Ada_Environments.Associate'Access
   );

   FCUnitBoolRetElemList : array
     (Context_Clause_Elements .. Context_Clause_Elements)
       of CUnitBoolRetElemList :=
   (others =>
     Asis.Elements.Context_Clause_Elements'Access
   );

   FCUnitCtxRetCUnit : array
     (Corresponding_Body_CU_Ctx .. Corresponding_Subunit_Parent_Body_Ctx)
       of CUnitCtxRetCUnit :=
   (
     Asis.Compilation_Units.Corresponding_Body'Access,
     Asis.Compilation_Units.Corresponding_Declaration'Access,
     Asis.Compilation_Units.Corresponding_Parent_Declaration'Access,
     Asis.Compilation_Units.Corresponding_Subunit_Parent_Body'Access
   );

   FCUnitCtxRetCUnitList : array
     (Corresponding_Children_Ctx .. Subunits_Ctx)
       of CUnitCtxRetCUnitList :=
   (
     Asis.Compilation_Units.Corresponding_Children'Access,
     Asis.Compilation_Units.Subunits'Access
   );

   FCUnitCUnitRetBool : array
     (Is_Equal_CU .. Is_Identical_CU)
       of CUnitCUnitRetBool :=
   (
     Asis.Compilation_Units.Is_Equal'Access,
     Asis.Compilation_Units.Is_Identical'Access
   );

   FCUnitIntIntRetElem : array
     (Find_Element .. Find_Element)
       of CUnitIntIntRetElem :=
   (others =>
     ASIStant.Find_Element'Access
   );

   FCUnitListRetBool : array
     (Is_Nil_CUL .. Is_Nil_CUL)
       of CUnitListRetBool :=
   (others =>
     Asis.Compilation_Units.Is_Nil'Access
   );

   FCUnitListCtxRetRelship : array
     (Elaboration_Order .. Elaboration_Order)
       of CUnitListCtxRetRelship :=
   (others =>
     Asis.Compilation_Units.Relations.Elaboration_Order'Access
   );

   FCUnitListCUnitListCtxStringRetRelship : array
     (Semantic_Dependence_Order .. Semantic_Dependence_Order)
       of CUnitListCUnitListCtxStringRetRelship :=
   (others =>
      ASIStant.Enum_Mapping.Semantic_Dependence_Order'Access
   );

   FCUnitRetBool : array
     (Can_Be_Main_Program .. Is_Nil_CU)
       of CUnitRetBool :=
   (
     Asis.Compilation_Units.Can_Be_Main_Program'Access,
     Asis.Compilation_Units.Exists'Access,
     Asis.Compilation_Units.Is_Body_Required'Access,
     Asis.Compilation_Units.Is_Nil'Access
   );

   FCUnitRetCtx : array
     (Enclosing_Context .. Enclosing_Context)
       of CUnitRetCtx :=
   (others =>
     Asis.Compilation_Units.Enclosing_Context'Access
   );

   FCUnitRetCUnit : array
     (Corresponding_Body_CU .. Corresponding_Subunit_Parent_Body)
       of CUnitRetCUnit :=
   (
     Asis.Compilation_Units.Corresponding_Body'Access,
     Asis.Compilation_Units.Corresponding_Declaration'Access,
     Asis.Compilation_Units.Corresponding_Parent_Declaration'Access,
     Asis.Compilation_Units.Corresponding_Subunit_Parent_Body'Access
   );

   FCUnitRetCUnitList : array
     (Corresponding_Children .. Subunits)
       of CUnitRetCUnitList :=
   (
     Asis.Compilation_Units.Corresponding_Children'Access,
     Asis.Compilation_Units.Subunits'Access
   );

   FCUnitRetElem : array
     (Browse_CU .. Unit_Declaration)
       of CUnitRetElem :=
   (
     ASIStant.Browser.Browse'Access,
     Asis.Elements.Unit_Declaration'Access
   );

   FCUnitRetElemList : array
     (Compilation_Pragmas .. Compilation_Pragmas)
       of CUnitRetElemList :=
   (others =>
     Asis.Elements.Compilation_Pragmas'Access
   );

   FCUnitRetString : array
     (Compilation_Command_Line_Options .. Unique_Name)
       of CUnitRetString :=
   (
     Asis.Compilation_Units.Compilation_Command_Line_Options'Access,
     Asis.Compilation_Units.Debug_Image'Access,
     Asis.Compilation_Units.Object_Form'Access,
     Asis.Compilation_Units.Object_Name'Access,
     Asis.Compilation_Units.Text_Form'Access,
     Asis.Compilation_Units.Text_Name'Access,
     ASIStant.Enum_Mapping.Unit_Class'Access,
     Asis.Compilation_Units.Unit_Full_Name'Access,
     ASIStant.Enum_Mapping.Unit_Kind'Access,
     ASIStant.Enum_Mapping.Unit_Origin'Access,
     Asis.Compilation_Units.Unique_Name'Access
   );

   FCUnitStringRetBool : array
     (Has_Attribute .. Has_Attribute)
       of CUnitStringRetBool :=
   (others =>
     Asis.Compilation_Units.Has_Attribute'Access
   );

   FCUnitStringRetString : array
     (Attribute_Values .. Attribute_Values)
       of CUnitStringRetString :=
   (others =>
     Asis.Compilation_Units.Attribute_Values'Access
   );

   FDDA_ArrCRetDDA_ArrC : array
      (DDA_Array_Components_2 .. DDA_Array_Components_2)
         of DDA_ArrCRetDDA_ArrC :=
   (others =>
      DDA.Array_Components'Access
   );

   FDDA_ArrCRetDDA_RecCList : array
      (DDA_Discriminant_Components_2 .. DDA_Record_Components_2)
         of DDA_ArrCRetDDA_RecCList :=
   (
      DDA.Discriminant_Components'Access,
      DDA.Record_Components'Access
   );

   FDDA_ArrCRetElem : array
      (DDA_Component_Indication .. DDA_Component_Indication)
         of DDA_ArrCRetElem :=
   (others =>
      DDA.Component_Indication'Access
   );

   FDDA_RecCRetDDA_ArrC : array
      (DDA_Array_Components_1 .. DDA_Array_Components_1)
         of DDA_RecCRetDDA_ArrC :=
   (others =>
      DDA.Array_Components'Access
   );

   FDDA_RecCRetDDA_RecCList : array
      (DDA_Discriminant_Components_1 .. DDA_Record_Components_1)
         of DDA_RecCRetDDA_RecCList :=
   (
      DDA.Discriminant_Components'Access,
      DDA.Record_Components'Access
   );

   FDDA_RecCRetElem : array
      (DDA_Component_Declaration .. DDA_Component_Declaration)
         of DDA_RecCRetElem :=
   (others =>
      DDA.Component_Declaration'Access
   );

   FElemBoolRetElemList : array
     (Accept_Body_Exception_Handlers .. Visible_Part_Items)
       of ElemBoolRetElemList :=
   (
     Asis.Statements.Accept_Body_Exception_Handlers'Access,
     Asis.Statements.Accept_Body_Statements'Access,
     Asis.Statements.Block_Declarative_Items'Access,
     Asis.Statements.Block_Exception_Handlers'Access,
     Asis.Statements.Block_Statements'Access,
     Asis.Declarations.Body_Declarative_Items'Access,
     Asis.Declarations.Body_Exception_Handlers'Access,
     Asis.Declarations.Body_Statements'Access,
     Asis.Statements.Call_Statement_Parameters'Access,
     Asis.Clauses.Component_Clauses'Access,
     Asis.Definitions.Discriminant_Associations'Access,
     Asis.Expressions.Function_Call_Parameters'Access,
     Asis.Declarations.Generic_Actual_Part'Access,
     Asis.Declarations.Generic_Formal_Part'Access,
     Asis.Statements.Handler_Statements'Access,
     Asis.Statements.Loop_Statements'Access,
     Asis.Declarations.Private_Part_Declarative_Items'Access,
     Asis.Definitions.Private_Part_Items'Access,
     Asis.Declarations.Protected_Operation_Items'Access,
     Asis.Expressions.Record_Component_Associations'Access,
     Asis.Definitions.Record_Components'Access,
     Asis.Statements.Sequence_Of_Statements'Access,
     Asis.Statements.Statement_Paths'Access,
     Asis.Definitions.Variants'Access,
     Asis.Declarations.Visible_Part_Declarative_Items'Access,
     Asis.Definitions.Visible_Part_Items'Access
   );

   FElemCtxRetElem : array
     (Corresponding_Body_Ctx .. Corresponding_Type_Declaration_Ctx)
       of ElemCtxRetElem :=
   (
     Asis.Declarations.Corresponding_Body'Access,
     Asis.Declarations.Corresponding_Body_Stub'Access,
     Asis.Declarations.Corresponding_Declaration'Access,
     Asis.Declarations.Corresponding_Subunit'Access,
     Asis.Declarations.Corresponding_Type_Declaration'Access
   );

   FElemElemBoolRetBool : array
     (Is_Referenced .. Is_Referenced)
       of ElemElemBoolRetBool :=
   (others =>
      Asis.Expressions.Is_Referenced'Access
   );

   FElemElemBoolRetElemList : array
     (References .. References)
       of ElemElemBoolRetElemList :=
   (others =>
      Asis.Expressions.References'Access
   );

   FElemElemRetBool : array
     (Is_Equal .. Is_Identical)
       of ElemElemRetBool :=
   (
      Asis.Elements.Is_Equal'Access,
      Asis.Elements.Is_Identical'Access
   );

   FElemElemRetElem : array
      (Enclosing_Element_EEE .. Enclosing_Element_EEE)
         of ElemElemRetElem :=
   (others =>
      Asis.Elements.Enclosing_Element'Access
   );

   FElemIntIntRetLineList : array
      (Lines_2 .. Lines_2)
         of ElemIntIntRetLineList :=
   (others =>
      Asis.Text.Lines'Access
   );

   FElemListRetBool : array
      (Is_Nil_EL .. Is_Nil_EL)
         of ElemListRetBool :=
   (others =>
      Asis.Elements.Is_Nil'Access
   );

   FElemRetBool : array
     (Declarations_Is_Private_Present .. Is_Text_Available)
       of ElemRetBool :=
   (
     Asis.Declarations.Is_Private_Present'Access,
     Asis.Definitions.Is_Private_Present'Access,
     Asis.Statements.Is_Declare_Block'Access,
     Asis.Expressions.Is_Defaulted_Association'Access,
     Asis.Declarations.Is_Name_Repeated'Access,
     Asis.Statements.Is_Name_Repeated'Access,
     Asis.Elements.Is_Nil'Access,
     Asis.Expressions.Is_Normalized'Access,
     Asis.Elements.Is_Part_Of_Implicit'Access,
     Asis.Elements.Is_Part_Of_Inherited'Access,
     Asis.Elements.Is_Part_Of_Instance'Access,
     Asis.Expressions.Is_Prefix_Call'Access,
     Asis.Declarations.Is_Private_Present'Access,
     Asis.Declarations.Is_Subunit'Access,
     Text.Is_Text_Available'Access
   );

   FElemRetCUnit : array
     (Enclosing_Compilation_Unit .. Enclosing_Compilation_Unit)
       of ElemRetCUnit :=
   (others =>
     Asis.Elements.Enclosing_Compilation_Unit'Access
   );

   FElemRetDDA_ArrC : array
     (DDA_Array_Components .. DDA_Array_Components)
       of ElemRetDDA_ArrC :=
   (others =>
     DDA.Array_Components'Access
   );

   FElemRetDDA_RecCList : array
     (DDA_Record_Components .. DDA_Record_Components)
       of ElemRetDDA_RecCList :=
   (others =>
     DDA.Record_Components'Access
   );

   FElemRetElem  : array
     (Accept_Entry_Direct_Name .. While_Condition)
       of ElemRetElem :=
   (
     Asis.Statements.Accept_Entry_Direct_Name'Access,
     Asis.Statements.Accept_Entry_Index'Access,
     Asis.Definitions.Access_To_Function_Result_Profile'Access,
     Asis.Definitions.Access_To_Object_Definition'Access,
     Asis.Expressions.Actual_Parameter'Access,
     Asis.Expressions.Allocator_Qualified_Expression'Access,
     Asis.Expressions.Allocator_Subtype_Indication'Access,
     Asis.Definitions.Ancestor_Subtype_Indication'Access,
     Asis.Definitions.Array_Component_Definition'Access,
     Asis.Statements.Assignment_Expression'Access,
     Asis.Statements.Assignment_Variable_Name'Access,
     Asis.Expressions.Attribute_Designator_Identifier'Access,
     Asis.Declarations.Body_Block_Statement'Access,
     ASIStant.Browser.Browse'Access,
     Asis.Statements.Called_Name'Access,
     Asis.Statements.Case_Expression'Access,
     Asis.Statements.Choice_Parameter_Specification'Access,
     Asis.Clauses.Component_Clause_Position'Access,
     Asis.Clauses.Component_Clause_Range'Access,
     Asis.Expressions.Component_Expression'Access,
     Asis.Definitions.Component_Subtype_Indication'Access,
     Asis.Statements.Condition_Expression'Access,
     Asis.Expressions.Converted_Or_Qualified_Expression'Access,
     Asis.Expressions.Converted_Or_Qualified_Subtype_Mark'Access,
     Asis.Declarations.Corresponding_Base_Entity'Access,
     Asis.Declarations.Corresponding_Body'Access,
     Asis.Declarations.Corresponding_Body_Stub'Access,
     Asis.Statements.Corresponding_Called_Entity'Access,
     Asis.Expressions.Corresponding_Called_Function'Access,
     Asis.Declarations.Corresponding_Constant_Declaration'Access,
     Asis.Declarations.Corresponding_Declaration'Access,
     Asis.Statements.Corresponding_Destination_Statement'Access,
     Asis.Statements.Corresponding_Entry'Access,
     Asis.Declarations.Corresponding_Equality_Operator'Access,
     Asis.Expressions.Corresponding_Expression_Type'Access,
     Asis.Declarations.Corresponding_First_Subtype'Access,
     Asis.Declarations.Corresponding_Generic_Element'Access,
     Asis.Declarations.Corresponding_Last_Constraint'Access,
     Asis.Declarations.Corresponding_Last_Subtype'Access,
     Asis.Statements.Corresponding_Loop_Exited'Access,
     Asis.Expressions.Corresponding_Name_Declaration'Access,
     Asis.Expressions.Corresponding_Name_Definition'Access,
     Asis.Definitions.Corresponding_Parent_Subtype'Access,
     Asis.Definitions.Corresponding_Root_Type'Access,
     Asis.Declarations.Corresponding_Subprogram_Derivation'Access,
     Asis.Declarations.Corresponding_Subunit'Access,
     Asis.Declarations.Corresponding_Type'Access,
     Asis.Declarations.Corresponding_Type_Declaration'Access,
     Asis.Definitions.Corresponding_Type_Structure'Access,
     Asis.Declarations.Declaration_Subtype_Mark'Access,
     Asis.Declarations.Defining_Prefix'Access,
     Asis.Declarations.Defining_Selector'Access,
     Asis.Statements.Delay_Expression'Access,
     Asis.Definitions.Delta_Expression'Access,
     Asis.Definitions.Digits_Expression'Access,
     Asis.Definitions.Discriminant_Direct_Name'Access,
     Asis.Expressions.Discriminant_Expression'Access,
     Asis.Declarations.Discriminant_Part'Access,
     Asis.Elements.Enclosing_Element'Access,
     Asis.Declarations.Entry_Barrier'Access,
     Asis.Declarations.Entry_Family_Definition'Access,
     Asis.Declarations.Entry_Index_Specification'Access,
     Asis.Statements.Exit_Condition'Access,
     Asis.Statements.Exit_Loop_Name'Access,
     Asis.Expressions.Expression_Parenthesized'Access,
     Asis.Expressions.Extension_Aggregate_Expression'Access,
     Asis.Statements.For_Loop_Parameter_Specification'Access,
     Asis.Expressions.Formal_Parameter'Access,
     Asis.Declarations.Formal_Subprogram_Default'Access,
     Asis.Declarations.Generic_Unit_Name'Access,
     Asis.Statements.Goto_Label'Access,
     Asis.Statements.Guard'Access,
     Asis.Declarations.Initialization_Expression'Access,
     Asis.Definitions.Integer_Constraint'Access,
     Asis.Definitions.Lower_Bound'Access,
     Asis.Expressions.Membership_Test_Expression'Access,
     Asis.Expressions.Membership_Test_Range'Access,
     Asis.Expressions.Membership_Test_Subtype_Mark'Access,
     Asis.Clauses.Mod_Clause_Expression'Access,
     Asis.Definitions.Mod_Static_Expression'Access,
     Asis.Declarations.Object_Declaration_View'Access,
     Asis.Definitions.Parent_Subtype_Indication'Access,
     Asis.Expressions.Prefix'Access,
     Asis.Statements.Qualified_Expression'Access,
     Asis.Statements.Raised_Exception'Access,
     Asis.Definitions.Range_Attribute'Access,
     Asis.Definitions.Real_Range_Constraint'Access,
     Asis.Definitions.Record_Definition'Access,
     Asis.Declarations.Renamed_Entity'Access,
     Asis.Clauses.Representation_Clause_Expression'Access,
     Asis.Clauses.Representation_Clause_Name'Access,
     Asis.Statements.Requeue_Entry_Name'Access,
     Asis.Declarations.Result_Profile'Access,
     Asis.Statements.Return_Expression'Access,
     Asis.Expressions.Selector'Access,
     Asis.Expressions.Short_Circuit_Operation_Left_Expression'Access,
     Asis.Expressions.Short_Circuit_Operation_Right_Expression'Access,
     Asis.Expressions.Slice_Range'Access,
     Asis.Declarations.Specification_Subtype_Definition'Access,
     Asis.Statements.Statement_Identifier'Access,
     Asis.Definitions.Subtype_Constraint'Access,
     Asis.Definitions.Subtype_Mark'Access,
     Asis.Declarations.Type_Declaration_View'Access,
     Asis.Definitions.Upper_Bound'Access,
     Asis.Statements.While_Condition'Access
   );

   FElemRetElemList : array
     (Aborted_Tasks .. Variant_Choices)
       of ElemRetElemList :=
   (
     Asis.Statements.Aborted_Tasks'Access,
     Asis.Statements.Accept_Parameters'Access,
     Asis.Definitions.Access_To_Subprogram_Parameter_Profile'Access,
     Asis.Expressions.Array_Component_Associations'Access,
     Asis.Expressions.Array_Component_Choices'Access,
     Asis.Expressions.Attribute_Designator_Expressions'Access,
     Asis.Statements.Case_Statement_Alternative_Choices'Access,
     Asis.Clauses.Clause_Names'Access,
     Asis.Expressions.Corresponding_Name_Definition_List'Access,
     Asis.Elements.Corresponding_Pragmas'Access,
     Asis.Declarations.Corresponding_Representation_Clauses'Access,
     Asis.Definitions.Corresponding_Type_Operators'Access,
     DDA.All_Named_Components'Access,
     Asis.Definitions.Discrete_Ranges'Access,
     Asis.Definitions.Discrete_Subtype_Definitions'Access,
     Asis.Expressions.Discriminant_Selector_Names'Access,
     Asis.Definitions.Discriminants'Access,
     Asis.Definitions.Enumeration_Literal_Declarations'Access,
     Asis.Statements.Exception_Choices'Access,
     Asis.Definitions.Implicit_Components'Access,
     Asis.Definitions.Implicit_Inherited_Declarations'Access,
     Asis.Definitions.Implicit_Inherited_Subprograms'Access,
     Asis.Expressions.Index_Expressions'Access,
     Asis.Definitions.Index_Subtype_Definitions'Access,
     Asis.Statements.Label_Names'Access,
     Asis.Declarations.Names'Access,
     Asis.Declarations.Parameter_Profile'Access,
     Asis.Elements.Pragma_Argument_Associations'Access,
     Asis.Elements.Pragmas'Access,
     Asis.Expressions.Record_Component_Choices'Access,
     Asis.Definitions.Variant_Choices'Access
   );

   FElemRetInt : array
     (Hash .. Hash)
       of ElemRetInt :=
   (others =>
--  !!!    Text.First_Line_Number'Access,
     Asis.Elements.Hash'Access
--  !!!    Asis.Text.Last_Line_Number'Access
   );

   FElemRetLineList : array
      (Lines .. Lines)
         of ElemRetLineList :=
   (others =>
      Asis.Text.Lines'Access
   );

   FElemRetSpan : array
     (Compilation_Span .. Element_Span)
       of ElemRetSpan :=
   (
     Text.Compilation_Span'Access,
     Text.Compilation_Unit_Span'Access,
     Text.Element_Span'Access
   );

   FElemRetString : array
     (Access_Type_Kind .. Value_Image)
       of ElemRetString :=
   (
     ASIStant.Enum_Mapping.Access_Type_Kind'Access,
     ASIStant.Enum_Mapping.Association_Kind'Access,
     ASIStant.Enum_Mapping.Attribute_Kind'Access,
     ASIStant.Enum_Mapping.Clause_Kind'Access,
     ASIStant.Enum_Mapping.Constraint_Kind'Access,
     Asis.Elements.Debug_Image'Access,
     ASIStant.Enum_Mapping.Declaration_Kind'Access,
     ASIStant.Enum_Mapping.Declaration_Origin'Access,
     ASIStant.Enum_Mapping.Default_Kind'Access,
     Asis.Declarations.Defining_Name_Image'Access,
     ASIStant.Enum_Mapping.Defining_Name_Kind'Access,
     ASIStant.Enum_Mapping.Definition_Kind'Access,
     ASIStant.Enum_Mapping.Discrete_Range_Kind'Access,
     Text.Element_Image'Access,
     ASIStant.Enum_Mapping.Element_Kind'Access,
     ASIStant.Enum_Mapping.Expression_Kind'Access,
     ASIStant.Enum_Mapping.Formal_Type_Kind'Access,
     ASIStant.Enum_Mapping.Mode_Kind'Access,
     Asis.Expressions.Name_Image'Access,
     ASIStant.Enum_Mapping.Operator_Kind'Access,
     ASIStant.Enum_Mapping.Path_Kind'Access,
     Asis.Declarations.Position_Number_Image'Access,
     ASIStant.Enum_Mapping.Pragma_Kind'Access,
     Asis.Elements.Pragma_Name_Image'Access,
     ASIStant.Enum_Mapping.Representation_Clause_Kind'Access,
     Asis.Declarations.Representation_Value_Image'Access,
     ASIStant.Enum_Mapping.Root_Type_Kind'Access,
     ASIStant.Enum_Mapping.Statement_Kind'Access,
     ASIStant.Enum_Mapping.Trait_Kind'Access,
     ASIStant.Enum_Mapping.Type_Kind'Access,
     Asis.Expressions.Value_Image'Access
   );

   FElemSpanRetLineList : array
      (Lines_1 .. Lines_1)
         of ElemSpanRetLineList :=
   (others =>
      Asis.Text.Lines'Access
   );

   FIntIntRetBool : array
     (Eq .. Lt)
       of IntIntRetBool :=
   (
     Eq'Access,
     Gt'Access,
     Lt'Access
   );

   FIntIntRetInt : array
     (Add .. Sub)
       of IntIntRetInt :=
   (
     Add'Access,
     Sub'Access
   );

   FLineRetString : array
      (Comment_Image .. Non_Comment_Image)
         of LineRetString :=
   (
      Asis.Text.Comment_Image'Access,
      Asis.Text.Debug_Image'Access,
      Asis.Text.Line_Image'Access,
      Asis.Text.Non_Comment_Image'Access
   );

   FRelshipRetCUnitList : array
     (Consistent .. Circular)
       of RelshipRetCUnitList :=
   (
     Consistent'Access,
     Inconsistent'Access,
     Missing'Access,
     Circular'Access
   );

   FRetBool : array
     (Attributes_Are_Supported .. Record_Component_Associations_Normalized)
       of RetBool :=
   (
     Asis.Implementation.Permissions.Attributes_Are_Supported'Access,
     Asis.Implementation.Permissions.Default_In_Mode_Supported'Access,

     Asis.Implementation.Permissions.
        Discriminant_Associations_Normalized'Access,

     Asis.Implementation.Permissions.
        Function_Call_Parameters_Normalized'Access,

     Asis.Implementation.Permissions.Generic_Actual_Part_Normalized'Access,
     Asis.Implementation.Permissions.Generic_Macro_Expansion_Supported'Access,
     Asis.Implementation.Permissions.Implicit_Components_Supported'Access,
     Asis.Implementation.Permissions.Inherited_Declarations_Supported'Access,
     Asis.Implementation.Permissions.Inherited_Subprograms_Supported'Access,
     Asis.Implementation.Permissions.Is_Commentary_Supported'Access,
     Asis.Implementation.Is_Finalized'Access,

     Asis.Implementation.Permissions.
       Is_Formal_Parameter_Named_Notation_Supported'Access,

     Asis.Implementation.Is_Initialized'Access,
     Asis.Implementation.Permissions.Is_Line_Number_Supported'Access,
     Asis.Implementation.Permissions.Is_Prefix_Call_Supported'Access,
     Asis.Implementation.Permissions.Is_Span_Column_Position_Supported'Access,
     Asis.Implementation.Permissions.Object_Declarations_Normalized'Access,
     Asis.Implementation.Permissions.Predefined_Operations_Supported'Access,
     Asis.Implementation.Permissions.
        Record_Component_Associations_Normalized'Access
   );

   FRetCUnit : array
     (FuncEnum.Nil_Compilation_Unit .. FuncEnum.Nil_Compilation_Unit)
       of RetCUnit :=
   (others =>
       ASIStant.Add_Ons.Nil_Compilation_Unit'Access
   );

   FRetCUnitList : array
     (FuncEnum.Nil_Compilation_Unit_List .. FuncEnum.Nil_Compilation_Unit_List)
       of RetCUnitList :=
   (others =>
       ASIStant.Add_Ons.Nil_Compilation_Unit_List'Access
   );

   FRetElem : array
     (FuncEnum.Nil_Element .. FuncEnum.Nil_Element)
       of RetElem :=
   (others =>
       ASIStant.Add_Ons.Nil_Element'Access
   );

   FRetElemList : array
     (FuncEnum.Nil_Element_List .. FuncEnum.Nil_Element_List)
       of RetElemList :=
   (others =>
       ASIStant.Add_Ons.Nil_Element_List'Access
   );

   FRetRelship : array
     (Nil_Relationship .. Nil_Relationship)
       of RetRelship :=
   (others =>
       ASIStant.Add_Ons.Nil_Relationship'Access
   );

   FRetString : array
     (Asis_Implementor .. Status)
       of RetString :=
   (
     Implementation.ASIS_Implementor'Access,
     Implementation.ASIS_Implementor_Information'Access,
     Implementation.ASIS_Implementor_Version'Access,
     Implementation.ASIS_Version'Access,
     Asis.Compilation_Units.Attribute_Value_Delimiter'Access,
     Asis.Ada_Environments.Default_Name'Access,
     Asis.Ada_Environments.Default_Parameters'Access,
     Text.Delimiter_Image'Access,
     Implementation.Diagnosis'Access,
     ASIStant.Enum_Mapping.Status'Access
   );

   FSpanRetBool : array
     (Is_Nil_Sp .. Is_Nil_Sp)
       of SpanRetBool :=
   (others =>
       Text.Is_Nil'Access
   );

   FSpanRetInt : array
     (First_Column .. Last_Line)
       of SpanRetInt :=
   (
     First_Column'Access,
     First_Line'Access,
     Last_Column'Access,
     Last_Line'Access
   );

   FStringCtxRetCUnit : array
     (Compilation_Unit_Body .. Library_Unit_Declaration)
       of StringCtxRetCUnit :=
   (
     Asis.Compilation_Units.Compilation_Unit_Body'Access,
     Asis.Compilation_Units.Library_Unit_Declaration'Access
   );

   FStringRetNull : array
     (Finalize .. Initialize)
       of StringRetNull :=
   (
     Asis.Implementation.Finalize'Access,
     Asis.Implementation.Initialize'Access
   );

   FStringStringRetBool : array
     (Eq_SS .. Lt_SS)
       of StringStringRetBool :=
   (
     Eq'Access,
     Gt'Access,
     Lt'Access
   );

   FStringStringRetString : array
     (Concat .. Concat)
       of StringStringRetString :=
   (others =>
     Concat'Access
   );

end ASIStant.FuncArr;
