]>
Commit | Line | Data |
---|---|---|
996ae0b0 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNAT COMPILER COMPONENTS -- | |
4 | -- -- | |
5 | -- S E M _ C H 8 -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
8d0d46f4 | 9 | -- Copyright (C) 1992-2021, Free Software Foundation, Inc. -- |
996ae0b0 RK |
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- -- | |
b5c84c3c | 13 | -- ware Foundation; either version 3, or (at your option) any later ver- -- |
996ae0b0 RK |
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 -- | |
b5c84c3c RD |
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. -- | |
996ae0b0 RK |
20 | -- -- |
21 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
71ff80dc | 22 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
996ae0b0 RK |
23 | -- -- |
24 | ------------------------------------------------------------------------------ | |
25 | ||
26 | with Types; use Types; | |
27 | package Sem_Ch8 is | |
28 | ||
29 | ----------------------------------- | |
30 | -- Handling extensions of System -- | |
31 | ----------------------------------- | |
32 | ||
33 | -- For targets that define a much larger System package than given in | |
34 | -- the RM, we use a child package containing additional declarations, | |
35 | -- which is loaded when needed, and whose entities are conceptually | |
36 | -- within System itself. The presence of this auxiliary package is | |
37 | -- controlled with the pragma Extend_System. The following variable | |
38 | -- holds the entity of the auxiliary package, to simplify the special | |
39 | -- visibility rules that apply to it. | |
40 | ||
41 | System_Aux_Id : Entity_Id := Empty; | |
42 | ||
43 | ----------------- | |
44 | -- Subprograms -- | |
45 | ----------------- | |
46 | ||
96691943 AC |
47 | procedure Analyze_Exception_Renaming (N : Node_Id); |
48 | procedure Analyze_Expanded_Name (N : Node_Id); | |
49 | procedure Analyze_Generic_Function_Renaming (N : Node_Id); | |
50 | procedure Analyze_Generic_Package_Renaming (N : Node_Id); | |
51 | procedure Analyze_Generic_Procedure_Renaming (N : Node_Id); | |
52 | procedure Analyze_Object_Renaming (N : Node_Id); | |
53 | procedure Analyze_Package_Renaming (N : Node_Id); | |
54 | procedure Analyze_Subprogram_Renaming (N : Node_Id); | |
851e9f19 | 55 | |
7f5e671b PMR |
56 | procedure Analyze_Use_Package (N : Node_Id; Chain : Boolean := True); |
57 | -- Analyze a use package clause and control (through the Chain parameter) | |
58 | -- whether to add N to the use clause chain for the name denoted within | |
59 | -- use clause N in case we are reanalyzing a use clause because of stack | |
60 | -- manipulation. | |
851e9f19 | 61 | |
7f5e671b PMR |
62 | procedure Analyze_Use_Type (N : Node_Id; Chain : Boolean := True); |
63 | -- Similar to Analyze_Use_Package except the Chain parameter applies to the | |
64 | -- type within N's subtype mark Current_Use_Clause. | |
996ae0b0 | 65 | |
996ae0b0 RK |
66 | procedure End_Scope; |
67 | -- Called at end of scope. On exit from blocks and bodies (subprogram, | |
68 | -- package, task, and protected bodies), the name of the current scope | |
69 | -- must be removed from the scope stack, and the local entities must be | |
70 | -- removed from their homonym chains. On exit from record declarations, | |
71 | -- from package specifications, and from tasks and protected type | |
72 | -- specifications, more specialized procedures are invoked. | |
73 | ||
74 | procedure End_Use_Clauses (Clause : Node_Id); | |
0da2c8ac AC |
75 | -- Invoked on scope exit, to undo the effect of local use clauses. Clause |
76 | -- is the first use-clause of a scope being exited. This can be the current | |
996ae0b0 RK |
77 | -- scope, or some enclosing scopes when building a clean environment to |
78 | -- compile an instance body for inlining. | |
79 | ||
80 | procedure End_Use_Package (N : Node_Id); | |
81 | procedure End_Use_Type (N : Node_Id); | |
96691943 | 82 | -- Subsidiaries of End_Use_Clauses. Also called directly for use clauses |
996ae0b0 RK |
83 | -- appearing in context clauses. |
84 | ||
2bb7741f | 85 | procedure Find_Direct_Name (N : Node_Id); |
11560bcc | 86 | -- Given a direct name (Identifier or Operator_Symbol), this routine scans |
96691943 | 87 | -- the homonym chain for the name, searching for corresponding visible |
6357e162 | 88 | -- entities to find the referenced entity (or in the case of overloading, |
96691943 AC |
89 | -- one candidate interpretation). On return, the Entity and Etype fields |
90 | -- are set. In the non-overloaded case, these are the correct entries. | |
91 | -- In the overloaded case, the flag Is_Overloaded is set, Etype and Entity | |
92 | -- refer to an arbitrary element of the overloads set, and the appropriate | |
93 | -- entries have been added to the overloads table entry for the node. The | |
94 | -- overloading will be disambiguated during type resolution. | |
95 | -- | |
96 | -- Note, when this is called during semantic analysis in the overloaded | |
97 | -- case, the entity set will be the most recently declared homonym. In | |
98 | -- particular, the caller may follow the homonym chain checking for all | |
99 | -- entries in the current scope, and that will give all homonyms that are | |
100 | -- declared before the point of call in the current scope. This is useful | |
101 | -- for example in the processing for pragma Inline. | |
b3b3ada9 HK |
102 | -- |
103 | -- Flag Errors_OK should be set when error diagnostics are desired. Flag | |
104 | -- Marker_OK should be set when a N_Variable_Reference_Marker needs to be | |
105 | -- generated for a SPARK object in order to detect elaboration issues. Flag | |
106 | -- Reference_OK should be set when N must generate a cross reference. | |
996ae0b0 | 107 | |
996ae0b0 RK |
108 | procedure Find_Selected_Component (N : Node_Id); |
109 | -- Resolve various cases of selected components, recognize expanded names | |
110 | ||
111 | procedure Find_Type (N : Node_Id); | |
112 | -- Perform name resolution, and verify that the name found is that of a | |
113 | -- type. On return the Entity and Etype fields of the node N are set | |
114 | -- appropriately. If it is an incomplete type whose full declaration has | |
11560bcc TQ |
115 | -- been seen, they are set to the entity in the full declaration. If it |
116 | -- is an incomplete type associated with an interface visible through a | |
117 | -- limited-with clause, whose full declaration has been seen, they are | |
118 | -- set to the entity in the full declaration. Similarly, if the type is | |
119 | -- private, it has received a full declaration, and we are in the private | |
120 | -- part or body of the package, then the two fields are set to the entity | |
121 | -- of the full declaration as well. This procedure also has special | |
122 | -- processing for 'Class attribute references. | |
996ae0b0 | 123 | |
607d0635 | 124 | function Has_Loop_In_Inner_Open_Scopes (S : Entity_Id) return Boolean; |
8d606a78 RD |
125 | -- S is the entity of an open scope. This function determines if there is |
126 | -- an inner scope of S which is a loop (i.e. it appears somewhere in the | |
127 | -- scope stack after S). | |
607d0635 AC |
128 | |
129 | function In_Open_Scopes (S : Entity_Id) return Boolean; | |
8d606a78 RD |
130 | -- S is the entity of a scope. This function determines if this scope is |
131 | -- currently open (i.e. it appears somewhere in the scope stack). | |
607d0635 | 132 | |
996ae0b0 RK |
133 | procedure Initialize; |
134 | -- Initializes data structures used for visibility analysis. Must be | |
135 | -- called before analyzing each new main source program. | |
136 | ||
0da2c8ac AC |
137 | procedure Install_Use_Clauses |
138 | (Clause : Node_Id; | |
139 | Force_Installation : Boolean := False); | |
140 | -- Applies the use clauses appearing in a given declarative part, | |
996ae0b0 RK |
141 | -- when the corresponding scope has been placed back on the scope |
142 | -- stack after unstacking to compile a different context (subunit or | |
0da2c8ac AC |
143 | -- parent of generic body). Force_Installation is used when called from |
144 | -- Analyze_Subunit.Re_Install_Use_Clauses to insure that, after the | |
145 | -- analysis of the subunit, the parent's environment is again identical. | |
996ae0b0 | 146 | |
851e9f19 PMR |
147 | procedure Mark_Use_Clauses (Id : Node_Or_Entity_Id); |
148 | -- Mark a given entity or node Id's relevant use clauses as effective, | |
149 | -- including redundant ones and ones outside of the current scope. | |
150 | ||
a99ada67 | 151 | procedure Push_Scope (S : Entity_Id); |
8d606a78 RD |
152 | -- Make new scope stack entry, pushing S, the entity for a scope onto the |
153 | -- top of the scope table. The current setting of the scope suppress flags | |
154 | -- is saved for restoration on exit. | |
996ae0b0 RK |
155 | |
156 | procedure Pop_Scope; | |
8d606a78 RD |
157 | -- Remove top entry from scope stack, restoring the saved setting of the |
158 | -- scope suppress flags. | |
996ae0b0 RK |
159 | |
160 | function Present_System_Aux (N : Node_Id := Empty) return Boolean; | |
44d6a706 | 161 | -- Return True if the auxiliary system file has been successfully loaded. |
996ae0b0 | 162 | -- Otherwise attempt to load it, using the name supplied by a previous |
67536dcb RD |
163 | -- Extend_System pragma, and report on the success of the load. If N is |
164 | -- present, it is a selected component whose prefix is System, or else a | |
165 | -- with-clause on system. N is absent when the function is called to find | |
166 | -- the visibility of implicit operators. | |
996ae0b0 | 167 | |
85f6a831 RD |
168 | function Save_Scope_Stack |
169 | (Handle_Use : Boolean := True) return Elist_Id; | |
e530a2d1 AC |
170 | procedure Restore_Scope_Stack |
171 | (List : Elist_Id; | |
172 | Handle_Use : Boolean := True); | |
173 | -- These two subprograms are called from Semantics, when a unit U1 is to | |
67536dcb RD |
174 | -- be compiled in the course of the compilation of another unit U2. This |
175 | -- happens whenever Rtsfind is called. U1, the unit retrieved by Rtsfind, | |
176 | -- must be compiled in its own context, and the current scope stack | |
85f6a831 RD |
177 | -- containing U2 and local scopes must be made unreachable. This is |
178 | -- achieved using a call to Save_Scope_Stack. On return, the contents | |
179 | -- of the scope stack must be made accessible again with a call to | |
180 | -- Restore_Scope_Stack. | |
181 | -- | |
182 | -- The flag Handle_Use indicates whether local use clauses must be removed | |
183 | -- or installed. In the case of inlining of instance bodies, the visibility | |
67536dcb | 184 | -- handling is done fully in Inline_Instance_Body, and use clauses are |
e530a2d1 AC |
185 | -- handled there. Save_Scope_Stack returns the list of entities which have |
186 | -- been temporarily removed from visibility; that list must be passed to | |
187 | -- Restore_Scope_Stack to restore their visibility. | |
996ae0b0 | 188 | |
996ae0b0 RK |
189 | procedure Set_Use (L : List_Id); |
190 | -- Find use clauses that are declarative items in a package declaration | |
f2a54683 | 191 | -- and set the potentially use-visible flags of imported entities before |
996ae0b0 RK |
192 | -- analyzing the corresponding package body. |
193 | ||
851e9f19 PMR |
194 | procedure Update_Use_Clause_Chain; |
195 | -- Called at the end of a declarative region to detect unused use type | |
196 | -- clauses and maintain the Current_Use_Clause for type entities. | |
197 | ||
67536dcb RD |
198 | procedure ws; |
199 | -- Debugging routine for use in gdb: dump all entities on scope stack | |
200 | ||
c1ce0691 ES |
201 | procedure we (S : Entity_Id); |
202 | -- Debugging routine for use in gdb: dump all entities in given scope | |
203 | ||
996ae0b0 | 204 | end Sem_Ch8; |