Mercurial > hg > CbC > CbC_gcc
comparison gcc/ada/exp_ch3.ads @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 ------------------------------------------------------------------------------ | |
2 -- -- | |
3 -- GNAT COMPILER COMPONENTS -- | |
4 -- -- | |
5 -- E X P _ C H 3 -- | |
6 -- -- | |
7 -- S p e c -- | |
8 -- -- | |
9 -- Copyright (C) 1992-2017, Free Software Foundation, Inc. -- | |
10 -- -- | |
11 -- GNAT is free software; you can redistribute it and/or modify it under -- | |
12 -- terms of the GNU General Public License as published by the Free Soft- -- | |
13 -- ware Foundation; either version 3, or (at your option) any later ver- -- | |
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- | |
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- | |
16 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- | |
17 -- for more details. You should have received a copy of the GNU General -- | |
18 -- Public License distributed with GNAT; see file COPYING3. If not, go to -- | |
19 -- http://www.gnu.org/licenses for a complete copy of the license. -- | |
20 -- -- | |
21 -- GNAT was originally developed by the GNAT team at New York University. -- | |
22 -- Extensive contributions were provided by Ada Core Technologies Inc. -- | |
23 -- -- | |
24 ------------------------------------------------------------------------------ | |
25 | |
26 -- Expand routines for chapter 3 constructs | |
27 | |
28 with Types; use Types; | |
29 with Elists; use Elists; | |
30 with Uintp; use Uintp; | |
31 | |
32 package Exp_Ch3 is | |
33 | |
34 procedure Expand_N_Object_Declaration (N : Node_Id); | |
35 procedure Expand_N_Subtype_Indication (N : Node_Id); | |
36 procedure Expand_N_Variant_Part (N : Node_Id); | |
37 procedure Expand_N_Full_Type_Declaration (N : Node_Id); | |
38 | |
39 procedure Expand_Previous_Access_Type (Def_Id : Entity_Id); | |
40 -- For a full type declaration that contains tasks, or that is a task, | |
41 -- check whether there exists an access type whose designated type is an | |
42 -- incomplete declarations for the current composite type. If so, build the | |
43 -- master for that access type, now that it is known to denote an object | |
44 -- with tasks. | |
45 | |
46 procedure Expand_Record_Extension (T : Entity_Id; Def : Node_Id); | |
47 -- Add a field _parent in the extension part of the record | |
48 | |
49 procedure Build_Discr_Checking_Funcs (N : Node_Id); | |
50 -- Builds function which checks whether the component name is consistent | |
51 -- with the current discriminants. N is the full type declaration node, | |
52 -- and the discriminant checking functions are inserted after this node. | |
53 | |
54 function Build_Initialization_Call | |
55 (Loc : Source_Ptr; | |
56 Id_Ref : Node_Id; | |
57 Typ : Entity_Id; | |
58 In_Init_Proc : Boolean := False; | |
59 Enclos_Type : Entity_Id := Empty; | |
60 Discr_Map : Elist_Id := New_Elmt_List; | |
61 With_Default_Init : Boolean := False; | |
62 Constructor_Ref : Node_Id := Empty) return List_Id; | |
63 -- Builds a call to the initialization procedure for the base type of Typ, | |
64 -- passing it the object denoted by Id_Ref, plus additional parameters as | |
65 -- appropriate for the type (the _Master, for task types, for example). | |
66 -- Loc is the source location for the constructed tree. In_Init_Proc has | |
67 -- to be set to True when the call is itself in an init proc in order to | |
68 -- enable the use of discriminals. Enclos_Type is the enclosing type when | |
69 -- initializing a component in an outer init proc, and it is used for | |
70 -- various expansion cases including the case where Typ is a task type | |
71 -- which is an array component, the indexes of the enclosing type are | |
72 -- used to build the string that identifies each task at runtime. | |
73 -- | |
74 -- Discr_Map is used to replace discriminants by their discriminals in | |
75 -- expressions used to constrain record components. In the presence of | |
76 -- entry families bounded by discriminants, protected type discriminants | |
77 -- can appear within expressions in array bounds (not as stand-alone | |
78 -- identifiers) and a general replacement is necessary. | |
79 -- | |
80 -- Ada 2005 (AI-287): With_Default_Init is used to indicate that the | |
81 -- initialization call corresponds to a default initialized component | |
82 -- of an aggregate. | |
83 -- | |
84 -- Constructor_Ref is a call to a constructor subprogram. It is currently | |
85 -- used only to support C++ constructors. | |
86 | |
87 function Freeze_Type (N : Node_Id) return Boolean; | |
88 -- This function executes the freezing actions associated with the given | |
89 -- freeze type node N and returns True if the node is to be deleted. We | |
90 -- delete the node if it is present just for front end purpose and we don't | |
91 -- want Gigi to see the node. This function can't delete the node itself | |
92 -- since it would confuse any remaining processing of the freeze node. | |
93 | |
94 procedure Init_Secondary_Tags | |
95 (Typ : Entity_Id; | |
96 Target : Node_Id; | |
97 Init_Tags_List : List_Id; | |
98 Stmts_List : List_Id; | |
99 Fixed_Comps : Boolean := True; | |
100 Variable_Comps : Boolean := True); | |
101 -- Ada 2005 (AI-251): Initialize the tags of the secondary dispatch tables | |
102 -- of Typ. The generated code referencing tag fields of Target is appended | |
103 -- to Init_Tags_List and the code required to complete the elaboration of | |
104 -- the dispatch tables of Typ is appended to Stmts_List. If Fixed_Comps is | |
105 -- True then the tag components located at fixed positions of Target are | |
106 -- initialized; if Variable_Comps is True then tags components located at | |
107 -- variable positions of Target are initialized. | |
108 | |
109 function Make_Tag_Assignment (N : Node_Id) return Node_Id; | |
110 -- An object declaration that has an initialization for a tagged object | |
111 -- requires a separate reassignment of the tag of the given type, because | |
112 -- the expression may include an unchecked conversion. This tag assignment | |
113 -- is inserted after the declaration, but if the object has an address | |
114 -- clause the assignment is handled as part of the freezing of the object, | |
115 -- see Check_Address_Clause. | |
116 | |
117 function Needs_Simple_Initialization | |
118 (T : Entity_Id; | |
119 Consider_IS : Boolean := True) return Boolean; | |
120 -- Certain types need initialization even though there is no specific | |
121 -- initialization routine: | |
122 -- Access types (which need initializing to null) | |
123 -- All scalar types if Normalize_Scalars mode set | |
124 -- Descendants of standard string types if Normalize_Scalars mode set | |
125 -- Scalar types having a Default_Value attribute | |
126 -- Regarding Initialize_Scalars mode, this is ignored if Consider_IS is | |
127 -- set to False, but if Consider_IS is set to True, then the cases above | |
128 -- mentioning Normalize_Scalars also apply for Initialize_Scalars mode. | |
129 | |
130 function Get_Simple_Init_Val | |
131 (T : Entity_Id; | |
132 N : Node_Id; | |
133 Size : Uint := No_Uint) return Node_Id; | |
134 -- For a type which Needs_Simple_Initialization (see above), prepares the | |
135 -- tree for an expression representing the required initial value. N is a | |
136 -- node whose source location used in constructing this tree which is | |
137 -- returned as the result of the call. The Size parameter indicates the | |
138 -- target size of the object if it is known (indicated by a value that is | |
139 -- not No_Uint and is greater than zero). If Size is not given (Size set to | |
140 -- No_Uint, or non-positive), then the Esize of T is used as an estimate of | |
141 -- the Size. The object size is needed to prepare a known invalid value for | |
142 -- use by Normalize_Scalars. A call to this routine where T is a scalar | |
143 -- type is only valid if we are in Normalize_Scalars or Initialize_Scalars | |
144 -- mode, or if N is the node for a 'Invalid_Value attribute node. | |
145 | |
146 end Exp_Ch3; |