------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                              S E M _ C H 4                               --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2025, 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.      --
--                                                                          --
------------------------------------------------------------------------------

with Types; use Types;

package Sem_Ch4  is
   procedure Analyze_Aggregate                 (N : Node_Id);
   procedure Analyze_Allocator                 (N : Node_Id);
   procedure Analyze_Arithmetic_Op             (N : Node_Id);
   procedure Analyze_Call                      (N : Node_Id);
   procedure Analyze_Case_Expression           (N : Node_Id);
   procedure Analyze_Comparison_Equality_Op    (N : Node_Id);
   procedure Analyze_Concatenation             (N : Node_Id);
   procedure Analyze_Explicit_Dereference      (N : Node_Id);
   procedure Analyze_Expression_With_Actions   (N : Node_Id);
   procedure Analyze_If_Expression             (N : Node_Id);
   procedure Analyze_Logical_Op                (N : Node_Id);
   procedure Analyze_Membership_Op             (N : Node_Id);
   procedure Analyze_Mod                       (N : Node_Id);
   procedure Analyze_Negation                  (N : Node_Id);
   procedure Analyze_Null                      (N : Node_Id);
   procedure Analyze_Qualified_Expression      (N : Node_Id);
   procedure Analyze_Quantified_Expression     (N : Node_Id);
   procedure Analyze_Range                     (N : Node_Id);
   procedure Analyze_Reference                 (N : Node_Id);
   procedure Analyze_Selected_Component        (N : Node_Id);
   procedure Analyze_Short_Circuit             (N : Node_Id);
   procedure Analyze_Slice                     (N : Node_Id);
   procedure Analyze_Type_Conversion           (N : Node_Id);
   procedure Analyze_Unary_Op                  (N : Node_Id);
   procedure Analyze_Unchecked_Type_Conversion (N : Node_Id);

   procedure Ambiguous_Operands (N : Node_Id);
   --  Give an error for comparison, equality and membership operators with
   --  ambiguous operands, and list possible interpretations.

   procedure Analyze_Indexed_Component_Form    (N : Node_Id);
   --  Prior to semantic analysis, an indexed component node can denote any
   --  of the following syntactic constructs:
   --    a) An indexed component of an array
   --    b) A function call
   --    c) A conversion
   --    d) A slice
   --  The resolution of the construct requires some semantic information
   --  on the prefix and the indexes.

   procedure Nondispatching_Call_To_Abstract_Operation
     (N           : Node_Id;
      Abstract_Op : Entity_Id);
   --  Give an error, or a warning and rewrite N to raise Program_Error because
   --  it is a nondispatching call to an abstract operation.

   function Try_Object_Operation
     (N                : Node_Id;
      CW_Test_Only     : Boolean := False;
      Allow_Extensions : Boolean := False) return Boolean;
   --  Ada 2005 (AI-252): Support the object.operation notation. If node N is
   --  a call in this notation, it is transformed into a normal subprogram call
   --  where the prefix is a parameter, and True is returned. If node N is not
   --  of this form, it is unchanged, and False is returned. If CW_Test_Only is
   --  true then N is an N_Selected_Component node which is part of a call to
   --  an entry or procedure of a tagged concurrent type and this routine is
   --  invoked to search for class-wide subprograms conflicting with the target
   --  entity. If Allow_Extensions is True, then a prefixed call to a primitive
   --  of an untagged type is allowed (used to give better error messages).

   procedure Unresolved_Operator (N : Node_Id);
   --  Give an error for an unresolved operator

end Sem_Ch4;
