summaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch3.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/exp_ch3.ads')
-rw-r--r--gcc/ada/exp_ch3.ads104
1 files changed, 104 insertions, 0 deletions
diff --git a/gcc/ada/exp_ch3.ads b/gcc/ada/exp_ch3.ads
new file mode 100644
index 00000000000..ff65667b8e5
--- /dev/null
+++ b/gcc/ada/exp_ch3.ads
@@ -0,0 +1,104 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- E X P _ C H 3 --
+-- --
+-- S p e c --
+-- --
+-- $Revision: 1.36 $
+-- --
+-- Copyright (C) 1992-2001 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 2, 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 COPYING. If not, write --
+-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
+-- MA 02111-1307, USA. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
+-- --
+------------------------------------------------------------------------------
+
+-- Expand routines for chapter 3 constructs
+
+with Types; use Types;
+with Elists; use Elists;
+
+package Exp_Ch3 is
+
+ procedure Expand_N_Object_Declaration (N : Node_Id);
+ procedure Expand_N_Subtype_Indication (N : Node_Id);
+ procedure Expand_N_Variant_Part (N : Node_Id);
+ procedure Expand_N_Full_Type_Declaration (N : Node_Id);
+
+ procedure Expand_Previous_Access_Type (N : Node_Id; Def_Id : Entity_Id);
+ -- For a full type declaration that contains tasks, or that is a task,
+ -- check whether there exists an access type whose designated type is an
+ -- incomplete declarations for the current composite type. If so, build
+ -- the master for that access type, now that it is known to denote an
+ -- object with tasks.
+
+ procedure Expand_Derived_Record (T : Entity_Id; Def : Node_Id);
+ -- Add a field _parent in the extension part of the record.
+
+ procedure Build_Discr_Checking_Funcs (N : Node_Id);
+ -- Builds function which checks whether the component name is consistent
+ -- with the current discriminants. N is the full type declaration node,
+ -- and the discriminant checking functions are inserted after this node.
+
+ function Build_Initialization_Call
+ (Loc : Source_Ptr;
+ Id_Ref : Node_Id;
+ Typ : Entity_Id;
+ In_Init_Proc : Boolean := False;
+ Enclos_Type : Entity_Id := Empty;
+ Discr_Map : Elist_Id := New_Elmt_List)
+ return List_Id;
+ -- Builds a call to the initialization procedure of the Id entity. Id_Ref
+ -- is either a new reference to Id (for record fields), or an indexed
+ -- component (for array elements). Loc is the source location for the
+ -- constructed tree, and Typ is the type of the entity (the initialization
+ -- procedure of the base type is the procedure that actually gets called).
+ -- In_Init_Proc has to be set to True when the call is itself in an Init
+ -- procedure in order to enable the use of discriminals. Enclos_type is
+ -- the type of the init_proc and it is used for various expansion cases
+ -- including the case where Typ is a task type which is a array component,
+ -- the indices of the enclosing type are used to build the string that
+ -- identifies each task at runtime.
+ --
+ -- Discr_Map is used to replace discriminants by their discriminals in
+ -- expressions used to constrain record components. In the presence of
+ -- entry families bounded by discriminants, protected type discriminants
+ -- can appear within expressions in array bounds (not as stand-alone
+ -- identifiers) and a general replacement is necessary.
+
+ procedure Freeze_Type (N : Node_Id);
+ -- This procedure executes the freezing actions associated with the given
+ -- freeze type node N.
+
+ function Needs_Simple_Initialization (T : Entity_Id) return Boolean;
+ -- Certain types need initialization even though there is no specific
+ -- initialization routine. In this category are access types (which
+ -- need initializing to null), packed array types whose implementation
+ -- is a modular type, and all scalar types if Normalize_Scalars is set,
+ -- as well as private types whose underlying type is present and meets
+ -- any of these criteria. Finally, descendants of String and Wide_String
+ -- also need initialization in Initialize/Normalize_Scalars mode.
+
+ function Get_Simple_Init_Val
+ (T : Entity_Id;
+ Loc : Source_Ptr)
+ return Node_Id;
+ -- For a type which Needs_Simple_Initialization (see above), prepares
+ -- the tree for an expression representing the required initial value.
+ -- Loc is the source location used in constructing this tree which is
+ -- returned as the result of the call.
+
+end Exp_Ch3;