------------------------------------------------------------------------------
--                                                                          --
--                         GNAT COMPILER COMPONENTS                         --
--                                                                          --
--                             E X P _ A G G R                              --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--          Copyright (C) 1992-2007, 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 Exp_Aggr is

   procedure Expand_N_Aggregate           (N : Node_Id);
   procedure Expand_N_Extension_Aggregate (N : Node_Id);

   function Is_Delayed_Aggregate (N : Node_Id) return Boolean;
   --  Returns True if N is an aggregate of some kind whose Expansion_Delayed
   --  flag is set (see sinfo for meaning of flag).

   procedure Convert_Aggr_In_Object_Decl  (N : Node_Id);
   --  N is a N_Object_Declaration with an expression which must be
   --  an N_Aggregate or N_Extension_Aggregate with Expansion_Delayed
   --  This procedure performs in-place aggregate assignment.

   procedure Convert_Aggr_In_Allocator
     (Alloc : Node_Id;
      Decl  : Node_Id;
      Aggr  : Node_Id);
   --  Alloc is the allocator whose expression is the aggregate Aggr.
   --  Decl is an N_Object_Declaration created during allocator expansion.
   --  This procedure perform in-place aggregate assignment into the
   --  temporary declared in Decl, and the allocator becomes an access to
   --  that temporary.

   procedure Convert_Aggr_In_Assignment (N : Node_Id);
   --  If the right-hand side of an assignment is an aggregate, expand the
   --  statement into a series of individual component assignments. This is
   --  done if there are non-static values involved in either the bounds or
   --  the components, and the aggregate cannot be handled as a whole by the
   --  backend.

   function Static_Array_Aggregate (N : Node_Id) return Boolean;
   --  N is an array aggregate that may have a component association with
   --  an others clause and a range. If bounds are static and the expressions
   --  are compile-time known constants, rewrite N as a purely positional
   --  aggregate, to be use to initialize variables and components of the type
   --  without generating elaboration code.
end Exp_Aggr;
