annotate gcc/ada/binderr.adb @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
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 -- B I N D E R R --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
9 -- Copyright (C) 1992-2019, Free Software Foundation, Inc. --
111
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. See the GNU General Public License --
kono
parents:
diff changeset
17 -- for more details. You should have received a copy of the GNU General --
kono
parents:
diff changeset
18 -- Public License distributed with GNAT; see file COPYING3. If not, go to --
kono
parents:
diff changeset
19 -- http://www.gnu.org/licenses for a complete copy of the license. --
kono
parents:
diff changeset
20 -- --
kono
parents:
diff changeset
21 -- GNAT was originally developed by the GNAT team at New York University. --
kono
parents:
diff changeset
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
kono
parents:
diff changeset
23 -- --
kono
parents:
diff changeset
24 ------------------------------------------------------------------------------
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 with Butil; use Butil;
kono
parents:
diff changeset
27 with Opt; use Opt;
kono
parents:
diff changeset
28 with Output; use Output;
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 package body Binderr is
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 ---------------
kono
parents:
diff changeset
33 -- Error_Msg --
kono
parents:
diff changeset
34 ---------------
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 procedure Error_Msg (Msg : String) is
kono
parents:
diff changeset
37 begin
kono
parents:
diff changeset
38 if Msg (Msg'First) = '?' then
kono
parents:
diff changeset
39 if Warning_Mode = Suppress then
kono
parents:
diff changeset
40 return;
kono
parents:
diff changeset
41 end if;
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 if Warning_Mode = Treat_As_Error then
kono
parents:
diff changeset
44 Errors_Detected := Errors_Detected + 1;
kono
parents:
diff changeset
45 else
kono
parents:
diff changeset
46 Warnings_Detected := Warnings_Detected + 1;
kono
parents:
diff changeset
47 end if;
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 else
kono
parents:
diff changeset
50 Errors_Detected := Errors_Detected + 1;
kono
parents:
diff changeset
51 end if;
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 if Brief_Output or else (not Verbose_Mode) then
kono
parents:
diff changeset
54 Set_Standard_Error;
kono
parents:
diff changeset
55 Error_Msg_Output (Msg, Info => False);
kono
parents:
diff changeset
56 Set_Standard_Output;
kono
parents:
diff changeset
57 end if;
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 if Verbose_Mode then
kono
parents:
diff changeset
60 if Errors_Detected + Warnings_Detected = 0 then
kono
parents:
diff changeset
61 Write_Eol;
kono
parents:
diff changeset
62 end if;
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 Error_Msg_Output (Msg, Info => False);
kono
parents:
diff changeset
65 end if;
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 -- If too many warnings print message and then turn off warnings
kono
parents:
diff changeset
68
kono
parents:
diff changeset
69 if Warnings_Detected = Maximum_Messages then
kono
parents:
diff changeset
70 Set_Standard_Error;
kono
parents:
diff changeset
71 Write_Line ("maximum number of warnings reached");
kono
parents:
diff changeset
72 Write_Line ("further warnings will be suppressed");
kono
parents:
diff changeset
73 Set_Standard_Output;
kono
parents:
diff changeset
74 Warning_Mode := Suppress;
kono
parents:
diff changeset
75 end if;
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 -- If too many errors print message and give fatal error
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 if Errors_Detected = Maximum_Messages then
kono
parents:
diff changeset
80 Set_Standard_Error;
kono
parents:
diff changeset
81 Write_Line ("fatal error: maximum number of errors exceeded");
kono
parents:
diff changeset
82 Set_Standard_Output;
kono
parents:
diff changeset
83 raise Unrecoverable_Error;
kono
parents:
diff changeset
84 end if;
kono
parents:
diff changeset
85 end Error_Msg;
kono
parents:
diff changeset
86
kono
parents:
diff changeset
87 --------------------
kono
parents:
diff changeset
88 -- Error_Msg_Info --
kono
parents:
diff changeset
89 --------------------
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 procedure Error_Msg_Info (Msg : String) is
kono
parents:
diff changeset
92 begin
kono
parents:
diff changeset
93 if Brief_Output or else (not Verbose_Mode) then
kono
parents:
diff changeset
94 Set_Standard_Error;
kono
parents:
diff changeset
95 Error_Msg_Output (Msg, Info => True);
kono
parents:
diff changeset
96 Set_Standard_Output;
kono
parents:
diff changeset
97 end if;
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 if Verbose_Mode then
kono
parents:
diff changeset
100 Error_Msg_Output (Msg, Info => True);
kono
parents:
diff changeset
101 end if;
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 end Error_Msg_Info;
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 ----------------------
kono
parents:
diff changeset
106 -- Error_Msg_Output --
kono
parents:
diff changeset
107 ----------------------
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 procedure Error_Msg_Output (Msg : String; Info : Boolean) is
kono
parents:
diff changeset
110 Use_Second_File : Boolean := False;
kono
parents:
diff changeset
111 Use_Second_Unit : Boolean := False;
kono
parents:
diff changeset
112 Use_Second_Nat : Boolean := False;
kono
parents:
diff changeset
113 Warning : Boolean := False;
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115 begin
kono
parents:
diff changeset
116 if Warnings_Detected + Errors_Detected > Maximum_Messages then
kono
parents:
diff changeset
117 Write_Str ("error: maximum errors exceeded");
kono
parents:
diff changeset
118 Write_Eol;
kono
parents:
diff changeset
119 return;
kono
parents:
diff changeset
120 end if;
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 -- First, check for warnings
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 for J in Msg'Range loop
kono
parents:
diff changeset
125 if Msg (J) = '?' then
kono
parents:
diff changeset
126 Warning := True;
kono
parents:
diff changeset
127 exit;
kono
parents:
diff changeset
128 end if;
kono
parents:
diff changeset
129 end loop;
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 if Warning then
kono
parents:
diff changeset
132 Write_Str ("warning: ");
kono
parents:
diff changeset
133 elsif Info then
kono
parents:
diff changeset
134 if not Info_Prefix_Suppress then
kono
parents:
diff changeset
135 Write_Str ("info: ");
kono
parents:
diff changeset
136 end if;
kono
parents:
diff changeset
137 else
kono
parents:
diff changeset
138 Write_Str ("error: ");
kono
parents:
diff changeset
139 end if;
kono
parents:
diff changeset
140
kono
parents:
diff changeset
141 for J in Msg'Range loop
kono
parents:
diff changeset
142 if Msg (J) = '%' then
kono
parents:
diff changeset
143 Get_Name_String (Error_Msg_Name_1);
kono
parents:
diff changeset
144 Write_Char ('"');
kono
parents:
diff changeset
145 Write_Str (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
146 Write_Char ('"');
kono
parents:
diff changeset
147
kono
parents:
diff changeset
148 elsif Msg (J) = '{' then
kono
parents:
diff changeset
149 if Use_Second_File then
kono
parents:
diff changeset
150 Get_Name_String (Error_Msg_File_2);
kono
parents:
diff changeset
151 else
kono
parents:
diff changeset
152 Use_Second_File := True;
kono
parents:
diff changeset
153 Get_Name_String (Error_Msg_File_1);
kono
parents:
diff changeset
154 end if;
kono
parents:
diff changeset
155
kono
parents:
diff changeset
156 Write_Char ('"');
kono
parents:
diff changeset
157 Write_Str (Name_Buffer (1 .. Name_Len));
kono
parents:
diff changeset
158 Write_Char ('"');
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 elsif Msg (J) = '$' then
kono
parents:
diff changeset
161 Write_Char ('"');
kono
parents:
diff changeset
162
kono
parents:
diff changeset
163 if Use_Second_Unit then
kono
parents:
diff changeset
164 Write_Unit_Name (Error_Msg_Unit_2);
kono
parents:
diff changeset
165 else
kono
parents:
diff changeset
166 Use_Second_Unit := True;
kono
parents:
diff changeset
167 Write_Unit_Name (Error_Msg_Unit_1);
kono
parents:
diff changeset
168 end if;
kono
parents:
diff changeset
169
kono
parents:
diff changeset
170 Write_Char ('"');
kono
parents:
diff changeset
171
kono
parents:
diff changeset
172 elsif Msg (J) = '#' then
kono
parents:
diff changeset
173 if Use_Second_Nat then
kono
parents:
diff changeset
174 Write_Int (Error_Msg_Nat_2);
kono
parents:
diff changeset
175 else
kono
parents:
diff changeset
176 Use_Second_Nat := True;
kono
parents:
diff changeset
177 Write_Int (Error_Msg_Nat_1);
kono
parents:
diff changeset
178 end if;
kono
parents:
diff changeset
179
kono
parents:
diff changeset
180 elsif Msg (J) /= '?' then
kono
parents:
diff changeset
181 Write_Char (Msg (J));
kono
parents:
diff changeset
182 end if;
kono
parents:
diff changeset
183 end loop;
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 Write_Eol;
kono
parents:
diff changeset
186 end Error_Msg_Output;
kono
parents:
diff changeset
187
kono
parents:
diff changeset
188 ----------------------
kono
parents:
diff changeset
189 -- Finalize_Binderr --
kono
parents:
diff changeset
190 ----------------------
kono
parents:
diff changeset
191
kono
parents:
diff changeset
192 procedure Finalize_Binderr is
kono
parents:
diff changeset
193 begin
kono
parents:
diff changeset
194 -- Message giving number of errors detected (verbose mode only)
kono
parents:
diff changeset
195
kono
parents:
diff changeset
196 if Verbose_Mode then
kono
parents:
diff changeset
197 Write_Eol;
kono
parents:
diff changeset
198
kono
parents:
diff changeset
199 if Errors_Detected = 0 then
kono
parents:
diff changeset
200 Write_Str ("No errors");
kono
parents:
diff changeset
201
kono
parents:
diff changeset
202 elsif Errors_Detected = 1 then
kono
parents:
diff changeset
203 Write_Str ("1 error");
kono
parents:
diff changeset
204
kono
parents:
diff changeset
205 else
kono
parents:
diff changeset
206 Write_Int (Errors_Detected);
kono
parents:
diff changeset
207 Write_Str (" errors");
kono
parents:
diff changeset
208 end if;
kono
parents:
diff changeset
209
kono
parents:
diff changeset
210 if Warnings_Detected = 1 then
kono
parents:
diff changeset
211 Write_Str (", 1 warning");
kono
parents:
diff changeset
212
kono
parents:
diff changeset
213 elsif Warnings_Detected > 1 then
kono
parents:
diff changeset
214 Write_Str (", ");
kono
parents:
diff changeset
215 Write_Int (Warnings_Detected);
kono
parents:
diff changeset
216 Write_Str (" warnings");
kono
parents:
diff changeset
217 end if;
kono
parents:
diff changeset
218
kono
parents:
diff changeset
219 Write_Eol;
kono
parents:
diff changeset
220 end if;
kono
parents:
diff changeset
221 end Finalize_Binderr;
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 ------------------------
kono
parents:
diff changeset
224 -- Initialize_Binderr --
kono
parents:
diff changeset
225 ------------------------
kono
parents:
diff changeset
226
kono
parents:
diff changeset
227 procedure Initialize_Binderr is
kono
parents:
diff changeset
228 begin
kono
parents:
diff changeset
229 Errors_Detected := 0;
kono
parents:
diff changeset
230 Warnings_Detected := 0;
kono
parents:
diff changeset
231 end Initialize_Binderr;
kono
parents:
diff changeset
232
kono
parents:
diff changeset
233 end Binderr;