]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/ada/binderr.adb
[Ada] Bump copyright year
[thirdparty/gcc.git] / gcc / ada / binderr.adb
CommitLineData
70482933
RK
1------------------------------------------------------------------------------
2-- --
3-- GNAT COMPILER COMPONENTS --
4-- --
5-- B I N D E R R --
6-- --
7-- B o d y --
8-- --
4b490c1e 9-- Copyright (C) 1992-2020, Free Software Foundation, Inc. --
70482933
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- --
70482933
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. --
70482933
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. --
70482933
RK
23-- --
24------------------------------------------------------------------------------
25
39f4e199
VC
26with Butil; use Butil;
27with Opt; use Opt;
28with Output; use Output;
70482933
RK
29
30package body Binderr is
31
32 ---------------
33 -- Error_Msg --
34 ---------------
35
36 procedure Error_Msg (Msg : String) is
37 begin
38 if Msg (Msg'First) = '?' then
39 if Warning_Mode = Suppress then
40 return;
41 end if;
42
43 if Warning_Mode = Treat_As_Error then
44 Errors_Detected := Errors_Detected + 1;
45 else
46 Warnings_Detected := Warnings_Detected + 1;
47 end if;
48
49 else
50 Errors_Detected := Errors_Detected + 1;
51 end if;
52
53 if Brief_Output or else (not Verbose_Mode) then
54 Set_Standard_Error;
55 Error_Msg_Output (Msg, Info => False);
56 Set_Standard_Output;
57 end if;
58
59 if Verbose_Mode then
60 if Errors_Detected + Warnings_Detected = 0 then
61 Write_Eol;
62 end if;
63
64 Error_Msg_Output (Msg, Info => False);
65 end if;
66
923e6ff3
RD
67 -- If too many warnings print message and then turn off warnings
68
69 if Warnings_Detected = Maximum_Messages then
70 Set_Standard_Error;
71 Write_Line ("maximum number of warnings reached");
72 Write_Line ("further warnings will be suppressed");
73 Set_Standard_Output;
74 Warning_Mode := Suppress;
70482933
RK
75 end if;
76
923e6ff3
RD
77 -- If too many errors print message and give fatal error
78
79 if Errors_Detected = Maximum_Messages then
80 Set_Standard_Error;
81 Write_Line ("fatal error: maximum number of errors exceeded");
82 Set_Standard_Output;
83 raise Unrecoverable_Error;
84 end if;
70482933
RK
85 end Error_Msg;
86
87 --------------------
88 -- Error_Msg_Info --
89 --------------------
90
91 procedure Error_Msg_Info (Msg : String) is
92 begin
93 if Brief_Output or else (not Verbose_Mode) then
94 Set_Standard_Error;
95 Error_Msg_Output (Msg, Info => True);
96 Set_Standard_Output;
97 end if;
98
99 if Verbose_Mode then
100 Error_Msg_Output (Msg, Info => True);
101 end if;
102
103 end Error_Msg_Info;
104
105 ----------------------
106 -- Error_Msg_Output --
107 ----------------------
108
109 procedure Error_Msg_Output (Msg : String; Info : Boolean) is
39f4e199
VC
110 Use_Second_File : Boolean := False;
111 Use_Second_Unit : Boolean := False;
bcea76b6 112 Use_Second_Nat : Boolean := False;
39f4e199 113 Warning : Boolean := False;
70482933
RK
114
115 begin
923e6ff3 116 if Warnings_Detected + Errors_Detected > Maximum_Messages then
70482933
RK
117 Write_Str ("error: maximum errors exceeded");
118 Write_Eol;
119 return;
120 end if;
121
39f4e199
VC
122 -- First, check for warnings
123
124 for J in Msg'Range loop
125 if Msg (J) = '?' then
126 Warning := True;
127 exit;
128 end if;
129 end loop;
130
131 if Warning then
70482933
RK
132 Write_Str ("warning: ");
133 elsif Info then
134 if not Info_Prefix_Suppress then
135 Write_Str ("info: ");
136 end if;
137 else
138 Write_Str ("error: ");
139 end if;
140
bcea76b6
GB
141 for J in Msg'Range loop
142 if Msg (J) = '%' then
39f4e199
VC
143 Get_Name_String (Error_Msg_Name_1);
144 Write_Char ('"');
145 Write_Str (Name_Buffer (1 .. Name_Len));
146 Write_Char ('"');
70482933 147
39f4e199
VC
148 elsif Msg (J) = '{' then
149 if Use_Second_File then
150 Get_Name_String (Error_Msg_File_2);
70482933 151 else
39f4e199
VC
152 Use_Second_File := True;
153 Get_Name_String (Error_Msg_File_1);
70482933
RK
154 end if;
155
156 Write_Char ('"');
157 Write_Str (Name_Buffer (1 .. Name_Len));
158 Write_Char ('"');
159
39f4e199 160 elsif Msg (J) = '$' then
70482933
RK
161 Write_Char ('"');
162
39f4e199
VC
163 if Use_Second_Unit then
164 Write_Unit_Name (Error_Msg_Unit_2);
70482933 165 else
39f4e199
VC
166 Use_Second_Unit := True;
167 Write_Unit_Name (Error_Msg_Unit_1);
70482933
RK
168 end if;
169
170 Write_Char ('"');
171
bcea76b6
GB
172 elsif Msg (J) = '#' then
173 if Use_Second_Nat then
174 Write_Int (Error_Msg_Nat_2);
175 else
176 Use_Second_Nat := True;
177 Write_Int (Error_Msg_Nat_1);
178 end if;
179
180 elsif Msg (J) /= '?' then
181 Write_Char (Msg (J));
70482933
RK
182 end if;
183 end loop;
184
185 Write_Eol;
186 end Error_Msg_Output;
187
188 ----------------------
189 -- Finalize_Binderr --
190 ----------------------
191
192 procedure Finalize_Binderr is
193 begin
194 -- Message giving number of errors detected (verbose mode only)
195
196 if Verbose_Mode then
197 Write_Eol;
198
199 if Errors_Detected = 0 then
200 Write_Str ("No errors");
201
202 elsif Errors_Detected = 1 then
203 Write_Str ("1 error");
204
205 else
206 Write_Int (Errors_Detected);
207 Write_Str (" errors");
208 end if;
209
210 if Warnings_Detected = 1 then
211 Write_Str (", 1 warning");
212
213 elsif Warnings_Detected > 1 then
214 Write_Str (", ");
215 Write_Int (Warnings_Detected);
216 Write_Str (" warnings");
217 end if;
218
219 Write_Eol;
220 end if;
221 end Finalize_Binderr;
222
223 ------------------------
224 -- Initialize_Binderr --
225 ------------------------
226
227 procedure Initialize_Binderr is
228 begin
229 Errors_Detected := 0;
230 Warnings_Detected := 0;
231 end Initialize_Binderr;
232
233end Binderr;