annotate gcc/ada/opt.adb @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT COMPILER COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- O P T --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
kono
parents:
diff changeset
9 -- Copyright (C) 1992-2017, Free Software Foundation, Inc. --
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- GNAT is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
12 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
kono
parents:
diff changeset
17 -- --
kono
parents:
diff changeset
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
kono
parents:
diff changeset
19 -- additional permissions described in the GCC Runtime Library Exception, --
kono
parents:
diff changeset
20 -- version 3.1, as published by the Free Software Foundation. --
kono
parents:
diff changeset
21 -- --
kono
parents:
diff changeset
22 -- You should have received a copy of the GNU General Public License and --
kono
parents:
diff changeset
23 -- a copy of the GCC Runtime Library Exception along with this program; --
kono
parents:
diff changeset
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
kono
parents:
diff changeset
25 -- <http://www.gnu.org/licenses/>. --
kono
parents:
diff changeset
26 -- --
kono
parents:
diff changeset
27 -- GNAT was originally developed by the GNAT team at New York University. --
kono
parents:
diff changeset
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
kono
parents:
diff changeset
29 -- --
kono
parents:
diff changeset
30 ------------------------------------------------------------------------------
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 with Gnatvsn; use Gnatvsn;
kono
parents:
diff changeset
33 with System; use System;
kono
parents:
diff changeset
34 with Tree_IO; use Tree_IO;
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 package body Opt is
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 SU : constant := Storage_Unit;
kono
parents:
diff changeset
39 -- Shorthand for System.Storage_Unit
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 -------------------------
kono
parents:
diff changeset
42 -- Back_End_Exceptions --
kono
parents:
diff changeset
43 -------------------------
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 function Back_End_Exceptions return Boolean is
kono
parents:
diff changeset
46 begin
kono
parents:
diff changeset
47 return
kono
parents:
diff changeset
48 Exception_Mechanism = Back_End_SJLJ
kono
parents:
diff changeset
49 or else
kono
parents:
diff changeset
50 Exception_Mechanism = Back_End_ZCX;
kono
parents:
diff changeset
51 end Back_End_Exceptions;
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 -------------------------
kono
parents:
diff changeset
54 -- Front_End_Exceptions --
kono
parents:
diff changeset
55 -------------------------
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 function Front_End_Exceptions return Boolean is
kono
parents:
diff changeset
58 begin
kono
parents:
diff changeset
59 return Exception_Mechanism = Front_End_SJLJ;
kono
parents:
diff changeset
60 end Front_End_Exceptions;
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 --------------------
kono
parents:
diff changeset
63 -- SJLJ_Exceptions --
kono
parents:
diff changeset
64 --------------------
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 function SJLJ_Exceptions return Boolean is
kono
parents:
diff changeset
67 begin
kono
parents:
diff changeset
68 return
kono
parents:
diff changeset
69 Exception_Mechanism = Back_End_SJLJ
kono
parents:
diff changeset
70 or else
kono
parents:
diff changeset
71 Exception_Mechanism = Front_End_SJLJ;
kono
parents:
diff changeset
72 end SJLJ_Exceptions;
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 --------------------
kono
parents:
diff changeset
75 -- ZCX_Exceptions --
kono
parents:
diff changeset
76 --------------------
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 function ZCX_Exceptions return Boolean is
kono
parents:
diff changeset
79 begin
kono
parents:
diff changeset
80 return Exception_Mechanism = Back_End_ZCX;
kono
parents:
diff changeset
81 end ZCX_Exceptions;
kono
parents:
diff changeset
82
kono
parents:
diff changeset
83 ----------------------------------
kono
parents:
diff changeset
84 -- Register_Opt_Config_Switches --
kono
parents:
diff changeset
85 ----------------------------------
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 procedure Register_Opt_Config_Switches is
kono
parents:
diff changeset
88 begin
kono
parents:
diff changeset
89 Ada_Version_Config := Ada_Version;
kono
parents:
diff changeset
90 Ada_Version_Pragma_Config := Ada_Version_Pragma;
kono
parents:
diff changeset
91 Ada_Version_Explicit_Config := Ada_Version_Explicit;
kono
parents:
diff changeset
92 Assertions_Enabled_Config := Assertions_Enabled;
kono
parents:
diff changeset
93 Assume_No_Invalid_Values_Config := Assume_No_Invalid_Values;
kono
parents:
diff changeset
94 Check_Float_Overflow_Config := Check_Float_Overflow;
kono
parents:
diff changeset
95 Check_Policy_List_Config := Check_Policy_List;
kono
parents:
diff changeset
96 Default_Pool_Config := Default_Pool;
kono
parents:
diff changeset
97 Default_SSO_Config := Default_SSO;
kono
parents:
diff changeset
98 Dynamic_Elaboration_Checks_Config := Dynamic_Elaboration_Checks;
kono
parents:
diff changeset
99 Exception_Locations_Suppressed_Config := Exception_Locations_Suppressed;
kono
parents:
diff changeset
100 Extensions_Allowed_Config := Extensions_Allowed;
kono
parents:
diff changeset
101 External_Name_Exp_Casing_Config := External_Name_Exp_Casing;
kono
parents:
diff changeset
102 External_Name_Imp_Casing_Config := External_Name_Imp_Casing;
kono
parents:
diff changeset
103 Fast_Math_Config := Fast_Math;
kono
parents:
diff changeset
104 Initialize_Scalars_Config := Initialize_Scalars;
kono
parents:
diff changeset
105 No_Component_Reordering_Config := No_Component_Reordering;
kono
parents:
diff changeset
106 Optimize_Alignment_Config := Optimize_Alignment;
kono
parents:
diff changeset
107 Persistent_BSS_Mode_Config := Persistent_BSS_Mode;
kono
parents:
diff changeset
108 Polling_Required_Config := Polling_Required;
kono
parents:
diff changeset
109 Prefix_Exception_Messages_Config := Prefix_Exception_Messages;
kono
parents:
diff changeset
110 SPARK_Mode_Config := SPARK_Mode;
kono
parents:
diff changeset
111 SPARK_Mode_Pragma_Config := SPARK_Mode_Pragma;
kono
parents:
diff changeset
112 Uneval_Old_Config := Uneval_Old;
kono
parents:
diff changeset
113 Use_VADS_Size_Config := Use_VADS_Size;
kono
parents:
diff changeset
114 Warnings_As_Errors_Count_Config := Warnings_As_Errors_Count;
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 -- Reset the indication that Optimize_Alignment was set locally, since
kono
parents:
diff changeset
117 -- if we had a pragma in the config file, it would set this flag True,
kono
parents:
diff changeset
118 -- but that's not a local setting.
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 Optimize_Alignment_Local := False;
kono
parents:
diff changeset
121 end Register_Opt_Config_Switches;
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 ---------------------------------
kono
parents:
diff changeset
124 -- Restore_Opt_Config_Switches --
kono
parents:
diff changeset
125 ---------------------------------
kono
parents:
diff changeset
126
kono
parents:
diff changeset
127 procedure Restore_Opt_Config_Switches (Save : Config_Switches_Type) is
kono
parents:
diff changeset
128 begin
kono
parents:
diff changeset
129 Ada_Version := Save.Ada_Version;
kono
parents:
diff changeset
130 Ada_Version_Pragma := Save.Ada_Version_Pragma;
kono
parents:
diff changeset
131 Ada_Version_Explicit := Save.Ada_Version_Explicit;
kono
parents:
diff changeset
132 Assertions_Enabled := Save.Assertions_Enabled;
kono
parents:
diff changeset
133 Assume_No_Invalid_Values := Save.Assume_No_Invalid_Values;
kono
parents:
diff changeset
134 Check_Float_Overflow := Save.Check_Float_Overflow;
kono
parents:
diff changeset
135 Check_Policy_List := Save.Check_Policy_List;
kono
parents:
diff changeset
136 Default_Pool := Save.Default_Pool;
kono
parents:
diff changeset
137 Default_SSO := Save.Default_SSO;
kono
parents:
diff changeset
138 Dynamic_Elaboration_Checks := Save.Dynamic_Elaboration_Checks;
kono
parents:
diff changeset
139 Exception_Locations_Suppressed := Save.Exception_Locations_Suppressed;
kono
parents:
diff changeset
140 Extensions_Allowed := Save.Extensions_Allowed;
kono
parents:
diff changeset
141 External_Name_Exp_Casing := Save.External_Name_Exp_Casing;
kono
parents:
diff changeset
142 External_Name_Imp_Casing := Save.External_Name_Imp_Casing;
kono
parents:
diff changeset
143 Fast_Math := Save.Fast_Math;
kono
parents:
diff changeset
144 Initialize_Scalars := Save.Initialize_Scalars;
kono
parents:
diff changeset
145 No_Component_Reordering := Save.No_Component_Reordering;
kono
parents:
diff changeset
146 Optimize_Alignment := Save.Optimize_Alignment;
kono
parents:
diff changeset
147 Optimize_Alignment_Local := Save.Optimize_Alignment_Local;
kono
parents:
diff changeset
148 Persistent_BSS_Mode := Save.Persistent_BSS_Mode;
kono
parents:
diff changeset
149 Polling_Required := Save.Polling_Required;
kono
parents:
diff changeset
150 Prefix_Exception_Messages := Save.Prefix_Exception_Messages;
kono
parents:
diff changeset
151 SPARK_Mode := Save.SPARK_Mode;
kono
parents:
diff changeset
152 SPARK_Mode_Pragma := Save.SPARK_Mode_Pragma;
kono
parents:
diff changeset
153 Uneval_Old := Save.Uneval_Old;
kono
parents:
diff changeset
154 Use_VADS_Size := Save.Use_VADS_Size;
kono
parents:
diff changeset
155 Warnings_As_Errors_Count := Save.Warnings_As_Errors_Count;
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 -- Update consistently the value of Init_Or_Norm_Scalars. The value of
kono
parents:
diff changeset
158 -- Normalize_Scalars is not saved/restored because after set to True its
kono
parents:
diff changeset
159 -- value is never changed. That is, if a compilation unit has pragma
kono
parents:
diff changeset
160 -- Normalize_Scalars then it forces that value for all with'ed units.
kono
parents:
diff changeset
161
kono
parents:
diff changeset
162 Init_Or_Norm_Scalars := Initialize_Scalars or Normalize_Scalars;
kono
parents:
diff changeset
163 end Restore_Opt_Config_Switches;
kono
parents:
diff changeset
164
kono
parents:
diff changeset
165 ------------------------------
kono
parents:
diff changeset
166 -- Save_Opt_Config_Switches --
kono
parents:
diff changeset
167 ------------------------------
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 procedure Save_Opt_Config_Switches (Save : out Config_Switches_Type) is
kono
parents:
diff changeset
170 begin
kono
parents:
diff changeset
171 Save.Ada_Version := Ada_Version;
kono
parents:
diff changeset
172 Save.Ada_Version_Pragma := Ada_Version_Pragma;
kono
parents:
diff changeset
173 Save.Ada_Version_Explicit := Ada_Version_Explicit;
kono
parents:
diff changeset
174 Save.Assertions_Enabled := Assertions_Enabled;
kono
parents:
diff changeset
175 Save.Assume_No_Invalid_Values := Assume_No_Invalid_Values;
kono
parents:
diff changeset
176 Save.Check_Float_Overflow := Check_Float_Overflow;
kono
parents:
diff changeset
177 Save.Check_Policy_List := Check_Policy_List;
kono
parents:
diff changeset
178 Save.Default_Pool := Default_Pool;
kono
parents:
diff changeset
179 Save.Default_SSO := Default_SSO;
kono
parents:
diff changeset
180 Save.Dynamic_Elaboration_Checks := Dynamic_Elaboration_Checks;
kono
parents:
diff changeset
181 Save.Exception_Locations_Suppressed := Exception_Locations_Suppressed;
kono
parents:
diff changeset
182 Save.Extensions_Allowed := Extensions_Allowed;
kono
parents:
diff changeset
183 Save.External_Name_Exp_Casing := External_Name_Exp_Casing;
kono
parents:
diff changeset
184 Save.External_Name_Imp_Casing := External_Name_Imp_Casing;
kono
parents:
diff changeset
185 Save.Fast_Math := Fast_Math;
kono
parents:
diff changeset
186 Save.Initialize_Scalars := Initialize_Scalars;
kono
parents:
diff changeset
187 Save.No_Component_Reordering := No_Component_Reordering;
kono
parents:
diff changeset
188 Save.Optimize_Alignment := Optimize_Alignment;
kono
parents:
diff changeset
189 Save.Optimize_Alignment_Local := Optimize_Alignment_Local;
kono
parents:
diff changeset
190 Save.Persistent_BSS_Mode := Persistent_BSS_Mode;
kono
parents:
diff changeset
191 Save.Polling_Required := Polling_Required;
kono
parents:
diff changeset
192 Save.Prefix_Exception_Messages := Prefix_Exception_Messages;
kono
parents:
diff changeset
193 Save.SPARK_Mode := SPARK_Mode;
kono
parents:
diff changeset
194 Save.SPARK_Mode_Pragma := SPARK_Mode_Pragma;
kono
parents:
diff changeset
195 Save.Uneval_Old := Uneval_Old;
kono
parents:
diff changeset
196 Save.Use_VADS_Size := Use_VADS_Size;
kono
parents:
diff changeset
197 Save.Warnings_As_Errors_Count := Warnings_As_Errors_Count;
kono
parents:
diff changeset
198 end Save_Opt_Config_Switches;
kono
parents:
diff changeset
199
kono
parents:
diff changeset
200 -----------------------------
kono
parents:
diff changeset
201 -- Set_Opt_Config_Switches --
kono
parents:
diff changeset
202 -----------------------------
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 procedure Set_Opt_Config_Switches
kono
parents:
diff changeset
205 (Internal_Unit : Boolean;
kono
parents:
diff changeset
206 Main_Unit : Boolean)
kono
parents:
diff changeset
207 is
kono
parents:
diff changeset
208 begin
kono
parents:
diff changeset
209 -- Case of internal unit
kono
parents:
diff changeset
210
kono
parents:
diff changeset
211 if Internal_Unit then
kono
parents:
diff changeset
212
kono
parents:
diff changeset
213 -- Set standard switches. Note we do NOT set Ada_Version_Explicit
kono
parents:
diff changeset
214 -- since the whole point of this is that it still properly indicates
kono
parents:
diff changeset
215 -- the configuration setting even in a run time unit.
kono
parents:
diff changeset
216
kono
parents:
diff changeset
217 Ada_Version := Ada_Version_Runtime;
kono
parents:
diff changeset
218 Ada_Version_Pragma := Empty;
kono
parents:
diff changeset
219 Default_SSO := ' ';
kono
parents:
diff changeset
220 Dynamic_Elaboration_Checks := False;
kono
parents:
diff changeset
221 Extensions_Allowed := True;
kono
parents:
diff changeset
222 External_Name_Exp_Casing := As_Is;
kono
parents:
diff changeset
223 External_Name_Imp_Casing := Lowercase;
kono
parents:
diff changeset
224 No_Component_Reordering := False;
kono
parents:
diff changeset
225 Optimize_Alignment := 'O';
kono
parents:
diff changeset
226 Optimize_Alignment_Local := True;
kono
parents:
diff changeset
227 Persistent_BSS_Mode := False;
kono
parents:
diff changeset
228 Prefix_Exception_Messages := True;
kono
parents:
diff changeset
229 Uneval_Old := 'E';
kono
parents:
diff changeset
230 Use_VADS_Size := False;
kono
parents:
diff changeset
231
kono
parents:
diff changeset
232 -- Note: we do not need to worry about Warnings_As_Errors_Count since
kono
parents:
diff changeset
233 -- we do not expect to get any warnings from compiling such a unit.
kono
parents:
diff changeset
234
kono
parents:
diff changeset
235 -- For an internal unit, assertions/debug pragmas are off unless this
kono
parents:
diff changeset
236 -- is the main unit and they were explicitly enabled, or unless the
kono
parents:
diff changeset
237 -- main unit was compiled in GNAT mode. We also make sure we do not
kono
parents:
diff changeset
238 -- assume that values are necessarily valid and that SPARK_Mode is
kono
parents:
diff changeset
239 -- set to its configuration value.
kono
parents:
diff changeset
240
kono
parents:
diff changeset
241 if Main_Unit then
kono
parents:
diff changeset
242 Assertions_Enabled := Assertions_Enabled_Config;
kono
parents:
diff changeset
243 Assume_No_Invalid_Values := Assume_No_Invalid_Values_Config;
kono
parents:
diff changeset
244 Check_Policy_List := Check_Policy_List_Config;
kono
parents:
diff changeset
245 SPARK_Mode := SPARK_Mode_Config;
kono
parents:
diff changeset
246 SPARK_Mode_Pragma := SPARK_Mode_Pragma_Config;
kono
parents:
diff changeset
247 else
kono
parents:
diff changeset
248 if GNAT_Mode_Config then
kono
parents:
diff changeset
249 Assertions_Enabled := Assertions_Enabled_Config;
kono
parents:
diff changeset
250 else
kono
parents:
diff changeset
251 Assertions_Enabled := False;
kono
parents:
diff changeset
252 end if;
kono
parents:
diff changeset
253 Assume_No_Invalid_Values := False;
kono
parents:
diff changeset
254 Check_Policy_List := Empty;
kono
parents:
diff changeset
255 SPARK_Mode := None;
kono
parents:
diff changeset
256 SPARK_Mode_Pragma := Empty;
kono
parents:
diff changeset
257 end if;
kono
parents:
diff changeset
258
kono
parents:
diff changeset
259 -- Case of non-internal unit
kono
parents:
diff changeset
260
kono
parents:
diff changeset
261 else
kono
parents:
diff changeset
262 Ada_Version := Ada_Version_Config;
kono
parents:
diff changeset
263 Ada_Version_Pragma := Ada_Version_Pragma_Config;
kono
parents:
diff changeset
264 Ada_Version_Explicit := Ada_Version_Explicit_Config;
kono
parents:
diff changeset
265 Assertions_Enabled := Assertions_Enabled_Config;
kono
parents:
diff changeset
266 Assume_No_Invalid_Values := Assume_No_Invalid_Values_Config;
kono
parents:
diff changeset
267 Check_Float_Overflow := Check_Float_Overflow_Config;
kono
parents:
diff changeset
268 Check_Policy_List := Check_Policy_List_Config;
kono
parents:
diff changeset
269 Default_SSO := Default_SSO_Config;
kono
parents:
diff changeset
270 Dynamic_Elaboration_Checks := Dynamic_Elaboration_Checks_Config;
kono
parents:
diff changeset
271 Extensions_Allowed := Extensions_Allowed_Config;
kono
parents:
diff changeset
272 External_Name_Exp_Casing := External_Name_Exp_Casing_Config;
kono
parents:
diff changeset
273 External_Name_Imp_Casing := External_Name_Imp_Casing_Config;
kono
parents:
diff changeset
274 Fast_Math := Fast_Math_Config;
kono
parents:
diff changeset
275 Initialize_Scalars := Initialize_Scalars_Config;
kono
parents:
diff changeset
276 No_Component_Reordering := No_Component_Reordering_Config;
kono
parents:
diff changeset
277 Optimize_Alignment := Optimize_Alignment_Config;
kono
parents:
diff changeset
278 Optimize_Alignment_Local := False;
kono
parents:
diff changeset
279 Persistent_BSS_Mode := Persistent_BSS_Mode_Config;
kono
parents:
diff changeset
280 Prefix_Exception_Messages := Prefix_Exception_Messages_Config;
kono
parents:
diff changeset
281 SPARK_Mode := SPARK_Mode_Config;
kono
parents:
diff changeset
282 SPARK_Mode_Pragma := SPARK_Mode_Pragma_Config;
kono
parents:
diff changeset
283 Uneval_Old := Uneval_Old_Config;
kono
parents:
diff changeset
284 Use_VADS_Size := Use_VADS_Size_Config;
kono
parents:
diff changeset
285 Warnings_As_Errors_Count := Warnings_As_Errors_Count_Config;
kono
parents:
diff changeset
286
kono
parents:
diff changeset
287 -- Update consistently the value of Init_Or_Norm_Scalars. The value
kono
parents:
diff changeset
288 -- of Normalize_Scalars is not saved/restored because once set to
kono
parents:
diff changeset
289 -- True its value is never changed. That is, if a compilation unit
kono
parents:
diff changeset
290 -- has pragma Normalize_Scalars then it forces that value for all
kono
parents:
diff changeset
291 -- with'ed units.
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293 Init_Or_Norm_Scalars := Initialize_Scalars or Normalize_Scalars;
kono
parents:
diff changeset
294 end if;
kono
parents:
diff changeset
295
kono
parents:
diff changeset
296 -- Values set for all units
kono
parents:
diff changeset
297
kono
parents:
diff changeset
298 Default_Pool := Default_Pool_Config;
kono
parents:
diff changeset
299 Exception_Locations_Suppressed := Exception_Locations_Suppressed_Config;
kono
parents:
diff changeset
300 Fast_Math := Fast_Math_Config;
kono
parents:
diff changeset
301 Polling_Required := Polling_Required_Config;
kono
parents:
diff changeset
302 end Set_Opt_Config_Switches;
kono
parents:
diff changeset
303
kono
parents:
diff changeset
304 ---------------
kono
parents:
diff changeset
305 -- Tree_Read --
kono
parents:
diff changeset
306 ---------------
kono
parents:
diff changeset
307
kono
parents:
diff changeset
308 procedure Tree_Read is
kono
parents:
diff changeset
309 Tree_Version_String_Len : Nat;
kono
parents:
diff changeset
310 Ada_Version_Config_Val : Nat;
kono
parents:
diff changeset
311 Ada_Version_Explicit_Config_Val : Nat;
kono
parents:
diff changeset
312 Assertions_Enabled_Config_Val : Nat;
kono
parents:
diff changeset
313
kono
parents:
diff changeset
314 begin
kono
parents:
diff changeset
315 Tree_Read_Int (Tree_ASIS_Version_Number);
kono
parents:
diff changeset
316
kono
parents:
diff changeset
317 Tree_Read_Bool (Address_Is_Private);
kono
parents:
diff changeset
318 Tree_Read_Bool (Brief_Output);
kono
parents:
diff changeset
319 Tree_Read_Bool (GNAT_Mode);
kono
parents:
diff changeset
320 Tree_Read_Char (Identifier_Character_Set);
kono
parents:
diff changeset
321 Tree_Read_Bool (Ignore_Rep_Clauses);
kono
parents:
diff changeset
322 Tree_Read_Bool (Ignore_Style_Checks_Pragmas);
kono
parents:
diff changeset
323 Tree_Read_Int (Maximum_File_Name_Length);
kono
parents:
diff changeset
324 Tree_Read_Data (Suppress_Options'Address,
kono
parents:
diff changeset
325 (Suppress_Options'Size + SU - 1) / SU);
kono
parents:
diff changeset
326 Tree_Read_Bool (Verbose_Mode);
kono
parents:
diff changeset
327 Tree_Read_Data (Warning_Mode'Address,
kono
parents:
diff changeset
328 (Warning_Mode'Size + SU - 1) / SU);
kono
parents:
diff changeset
329 Tree_Read_Int (Ada_Version_Config_Val);
kono
parents:
diff changeset
330 Tree_Read_Int (Ada_Version_Explicit_Config_Val);
kono
parents:
diff changeset
331 Tree_Read_Int (Assertions_Enabled_Config_Val);
kono
parents:
diff changeset
332 Tree_Read_Bool (All_Errors_Mode);
kono
parents:
diff changeset
333 Tree_Read_Bool (Assertions_Enabled);
kono
parents:
diff changeset
334 Tree_Read_Bool (Check_Float_Overflow);
kono
parents:
diff changeset
335 Tree_Read_Int (Int (Check_Policy_List));
kono
parents:
diff changeset
336 Tree_Read_Int (Int (Default_Pool));
kono
parents:
diff changeset
337 Tree_Read_Bool (Full_List);
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339 Ada_Version_Config :=
kono
parents:
diff changeset
340 Ada_Version_Type'Val (Ada_Version_Config_Val);
kono
parents:
diff changeset
341 Ada_Version_Explicit_Config :=
kono
parents:
diff changeset
342 Ada_Version_Type'Val (Ada_Version_Explicit_Config_Val);
kono
parents:
diff changeset
343 Assertions_Enabled_Config :=
kono
parents:
diff changeset
344 Boolean'Val (Assertions_Enabled_Config_Val);
kono
parents:
diff changeset
345
kono
parents:
diff changeset
346 -- Read version string: we have to get the length first
kono
parents:
diff changeset
347
kono
parents:
diff changeset
348 Tree_Read_Int (Tree_Version_String_Len);
kono
parents:
diff changeset
349
kono
parents:
diff changeset
350 declare
kono
parents:
diff changeset
351 Tmp : String (1 .. Integer (Tree_Version_String_Len));
kono
parents:
diff changeset
352 begin
kono
parents:
diff changeset
353 Tree_Read_Data
kono
parents:
diff changeset
354 (Tmp'Address, Tree_Version_String_Len);
kono
parents:
diff changeset
355 System.Strings.Free (Tree_Version_String);
kono
parents:
diff changeset
356 Free (Tree_Version_String);
kono
parents:
diff changeset
357 Tree_Version_String := new String'(Tmp);
kono
parents:
diff changeset
358 end;
kono
parents:
diff changeset
359
kono
parents:
diff changeset
360 Tree_Read_Data (Distribution_Stub_Mode'Address,
kono
parents:
diff changeset
361 (Distribution_Stub_Mode'Size + SU - 1) / Storage_Unit);
kono
parents:
diff changeset
362 Tree_Read_Bool (Inline_Active);
kono
parents:
diff changeset
363 Tree_Read_Bool (Inline_Processing_Required);
kono
parents:
diff changeset
364 Tree_Read_Bool (List_Units);
kono
parents:
diff changeset
365 Tree_Read_Int (Multiple_Unit_Index);
kono
parents:
diff changeset
366 Tree_Read_Bool (Configurable_Run_Time_Mode);
kono
parents:
diff changeset
367 Tree_Read_Data (Operating_Mode'Address,
kono
parents:
diff changeset
368 (Operating_Mode'Size + SU - 1) / Storage_Unit);
kono
parents:
diff changeset
369 Tree_Read_Bool (Suppress_Checks);
kono
parents:
diff changeset
370 Tree_Read_Bool (Try_Semantics);
kono
parents:
diff changeset
371 Tree_Read_Data (Wide_Character_Encoding_Method'Address,
kono
parents:
diff changeset
372 (Wide_Character_Encoding_Method'Size + SU - 1) / SU);
kono
parents:
diff changeset
373 Tree_Read_Bool (Upper_Half_Encoding);
kono
parents:
diff changeset
374 Tree_Read_Bool (Force_ALI_Tree_File);
kono
parents:
diff changeset
375 end Tree_Read;
kono
parents:
diff changeset
376
kono
parents:
diff changeset
377 ----------------
kono
parents:
diff changeset
378 -- Tree_Write --
kono
parents:
diff changeset
379 ----------------
kono
parents:
diff changeset
380
kono
parents:
diff changeset
381 procedure Tree_Write is
kono
parents:
diff changeset
382 Version_String : String := Gnat_Version_String;
kono
parents:
diff changeset
383
kono
parents:
diff changeset
384 begin
kono
parents:
diff changeset
385 Tree_Write_Int (ASIS_Version_Number);
kono
parents:
diff changeset
386
kono
parents:
diff changeset
387 Tree_Write_Bool (Address_Is_Private);
kono
parents:
diff changeset
388 Tree_Write_Bool (Brief_Output);
kono
parents:
diff changeset
389 Tree_Write_Bool (GNAT_Mode);
kono
parents:
diff changeset
390 Tree_Write_Char (Identifier_Character_Set);
kono
parents:
diff changeset
391 Tree_Write_Bool (Ignore_Rep_Clauses);
kono
parents:
diff changeset
392 Tree_Write_Bool (Ignore_Style_Checks_Pragmas);
kono
parents:
diff changeset
393 Tree_Write_Int (Maximum_File_Name_Length);
kono
parents:
diff changeset
394 Tree_Write_Data (Suppress_Options'Address,
kono
parents:
diff changeset
395 (Suppress_Options'Size + SU - 1) / SU);
kono
parents:
diff changeset
396 Tree_Write_Bool (Verbose_Mode);
kono
parents:
diff changeset
397 Tree_Write_Data (Warning_Mode'Address,
kono
parents:
diff changeset
398 (Warning_Mode'Size + SU - 1) / Storage_Unit);
kono
parents:
diff changeset
399 Tree_Write_Int (Ada_Version_Type'Pos (Ada_Version_Config));
kono
parents:
diff changeset
400 Tree_Write_Int (Ada_Version_Type'Pos (Ada_Version_Explicit_Config));
kono
parents:
diff changeset
401 Tree_Write_Int (Boolean'Pos (Assertions_Enabled_Config));
kono
parents:
diff changeset
402 Tree_Write_Bool (All_Errors_Mode);
kono
parents:
diff changeset
403 Tree_Write_Bool (Assertions_Enabled);
kono
parents:
diff changeset
404 Tree_Write_Bool (Check_Float_Overflow);
kono
parents:
diff changeset
405 Tree_Write_Int (Int (Check_Policy_List));
kono
parents:
diff changeset
406 Tree_Write_Int (Int (Default_Pool));
kono
parents:
diff changeset
407 Tree_Write_Bool (Full_List);
kono
parents:
diff changeset
408 Tree_Write_Int (Int (Version_String'Length));
kono
parents:
diff changeset
409 Tree_Write_Data (Version_String'Address, Version_String'Length);
kono
parents:
diff changeset
410 Tree_Write_Data (Distribution_Stub_Mode'Address,
kono
parents:
diff changeset
411 (Distribution_Stub_Mode'Size + SU - 1) / SU);
kono
parents:
diff changeset
412 Tree_Write_Bool (Inline_Active);
kono
parents:
diff changeset
413 Tree_Write_Bool (Inline_Processing_Required);
kono
parents:
diff changeset
414 Tree_Write_Bool (List_Units);
kono
parents:
diff changeset
415 Tree_Write_Int (Multiple_Unit_Index);
kono
parents:
diff changeset
416 Tree_Write_Bool (Configurable_Run_Time_Mode);
kono
parents:
diff changeset
417 Tree_Write_Data (Operating_Mode'Address,
kono
parents:
diff changeset
418 (Operating_Mode'Size + SU - 1) / SU);
kono
parents:
diff changeset
419 Tree_Write_Bool (Suppress_Checks);
kono
parents:
diff changeset
420 Tree_Write_Bool (Try_Semantics);
kono
parents:
diff changeset
421 Tree_Write_Data (Wide_Character_Encoding_Method'Address,
kono
parents:
diff changeset
422 (Wide_Character_Encoding_Method'Size + SU - 1) / SU);
kono
parents:
diff changeset
423 Tree_Write_Bool (Upper_Half_Encoding);
kono
parents:
diff changeset
424 Tree_Write_Bool (Force_ALI_Tree_File);
kono
parents:
diff changeset
425 end Tree_Write;
kono
parents:
diff changeset
426
kono
parents:
diff changeset
427 end Opt;