------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                      B I N D O . V A L I D A T O R S                     --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--             Copyright (C) 2019-2021, Free Software Foundation, Inc.      --
--                                                                          --
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- 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 COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
--                                                                          --
-- GNAT was originally developed  by the GNAT team at  New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc.      --
--                                                                          --
------------------------------------------------------------------------------

--  For full architecture, see unit Bindo.

--  The following unit contains facilities to verify the validity of the
--  various graphs used in determining the elaboration order of units.

with Bindo.Graphs;
use  Bindo.Graphs;
use  Bindo.Graphs.Invocation_Graphs;
use  Bindo.Graphs.Library_Graphs;

package Bindo.Validators is

   ----------------------
   -- Cycle_Validators --
   ----------------------

   package Cycle_Validators is
      Invalid_Cycle : exception;
      --  Exception raised when the library graph contains an invalid cycle

      procedure Validate_Cycles (G : Library_Graph);
      --  Ensure that all cycles of library graph G meet the following
      --  requirements:
      --
      --    * Are of proper kind
      --    * Have enough edges to form a circuit
      --    * No edge is repeated
      --
      --  Diagnose issues and raise Invalid_Cycle if this is not the case.

   end Cycle_Validators;

   ----------------------------------
   -- Elaboration_Order_Validators --
   ----------------------------------

   package Elaboration_Order_Validators is
      Invalid_Elaboration_Order : exception;
      --  Exception raised when the elaboration order contains invalid data

      procedure Validate_Elaboration_Order (Order : Unit_Id_Table);
      --  Ensure that elaboration order Order meets the following requirements:
      --
      --    * All units that must be elaborated appear in the order
      --    * No other units appear in the order
      --
      --  Diagnose issues and raise Invalid_Elaboration_Order if this is not
      --  the case.

   end Elaboration_Order_Validators;

   ---------------------------------
   -- Invocation_Graph_Validators --
   ---------------------------------

   package Invocation_Graph_Validators is
      Invalid_Invocation_Graph : exception;
      --  Exception raised when the invocation graph contains invalid data

      procedure Validate_Invocation_Graph (G : Invocation_Graph);
      --  Ensure that invocation graph G meets the following requirements:
      --
      --    * All attributes of edges are properly set
      --    * All attributes of vertices are properly set
      --
      --  Diagnose issues and raise Invalid_Invocation_Graph if this is not the
      --  case.

   end Invocation_Graph_Validators;

   ------------------------------
   -- Library_Graph_Validators --
   ------------------------------

   package Library_Graph_Validators is
      Invalid_Library_Graph : exception;
      --  Exception raised when the library graph contains invalid data

      procedure Validate_Library_Graph (G : Library_Graph);
      --  Ensure that library graph G meets the following requirements:
      --
      --    * All attributes edges are properly set
      --    * All attributes of vertices are properly set
      --
      --  Diagnose issues and raise Invalid_Library_Graph if this is not the
      --  case.

   end Library_Graph_Validators;

end Bindo.Validators;
