annotate gcc/ada/ceinfo.adb @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
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 SYSTEM UTILITIES --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- C E I N F O --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
9 -- Copyright (C) 1998-2018, 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 -- Check consistency of einfo.ads and einfo.adb. Checks that field name usage
kono
parents:
diff changeset
27 -- is consistent, including comments mentioning fields.
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 -- Note that this is used both as a standalone program, and as a procedure
kono
parents:
diff changeset
30 -- called by XEinfo. This raises an unhandled exception if it finds any
kono
parents:
diff changeset
31 -- errors; we don't attempt any sophisticated error recovery.
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
kono
parents:
diff changeset
34 with Ada.Strings.Unbounded.Text_IO; use Ada.Strings.Unbounded.Text_IO;
kono
parents:
diff changeset
35 with Ada.Text_IO; use Ada.Text_IO;
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 with GNAT.Spitbol; use GNAT.Spitbol;
kono
parents:
diff changeset
38 with GNAT.Spitbol.Patterns; use GNAT.Spitbol.Patterns;
kono
parents:
diff changeset
39 with GNAT.Spitbol.Table_VString;
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 procedure CEinfo is
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 package TV renames GNAT.Spitbol.Table_VString;
kono
parents:
diff changeset
44 use TV;
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 Infil : File_Type;
kono
parents:
diff changeset
47 Lineno : Natural := 0;
kono
parents:
diff changeset
48
kono
parents:
diff changeset
49 Err : exception;
kono
parents:
diff changeset
50 -- Raised on error
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 Fieldnm : VString;
kono
parents:
diff changeset
53 Accessfunc : VString;
kono
parents:
diff changeset
54 Line : VString;
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 Fields : GNAT.Spitbol.Table_VString.Table (500);
kono
parents:
diff changeset
57 -- Maps field names to underlying field access name
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 UC : constant Pattern := Any ("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
kono
parents:
diff changeset
60
kono
parents:
diff changeset
61 Fnam : constant Pattern := (UC & Break (' ')) * Fieldnm;
kono
parents:
diff changeset
62
kono
parents:
diff changeset
63 Field_Def : constant Pattern :=
kono
parents:
diff changeset
64 "-- " & Fnam & " (" & Break (')') * Accessfunc;
kono
parents:
diff changeset
65
kono
parents:
diff changeset
66 Field_Ref : constant Pattern :=
kono
parents:
diff changeset
67 " -- " & Fnam & Break ('(') & Len (1) &
kono
parents:
diff changeset
68 Break (')') * Accessfunc;
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70 Field_Com : constant Pattern := " -- " & Fnam & Span (' ') &
kono
parents:
diff changeset
71 (Break (' ') or Rest) * Accessfunc;
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 Func_Hedr : constant Pattern := " function " & Fnam;
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 Func_Retn : constant Pattern := " return " & Break (' ') * Accessfunc;
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 Proc_Hedr : constant Pattern := " procedure " & Fnam;
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 Proc_Setf : constant Pattern := " Set_" & Break (' ') * Accessfunc;
kono
parents:
diff changeset
80
kono
parents:
diff changeset
81 procedure Next_Line;
kono
parents:
diff changeset
82 -- Read next line trimmed from Infil into Line and bump Lineno
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 procedure Next_Line is
kono
parents:
diff changeset
85 begin
kono
parents:
diff changeset
86 Line := Get_Line (Infil);
kono
parents:
diff changeset
87 Trim (Line);
kono
parents:
diff changeset
88 Lineno := Lineno + 1;
kono
parents:
diff changeset
89 end Next_Line;
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 -- Start of processing for CEinfo
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 begin
kono
parents:
diff changeset
94 Anchored_Mode := True;
kono
parents:
diff changeset
95 New_Line;
kono
parents:
diff changeset
96 Open (Infil, In_File, "einfo.ads");
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 Put_Line ("Acquiring field names from spec");
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 loop
kono
parents:
diff changeset
101 Next_Line;
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 -- Old format of einfo.ads
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 exit when Match (Line, " -- Access Kinds --");
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 -- New format of einfo.ads
kono
parents:
diff changeset
108
kono
parents:
diff changeset
109 exit when Match (Line, "-- Access Kinds --");
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 if Match (Line, Field_Def) then
kono
parents:
diff changeset
112 Set (Fields, Fieldnm, Accessfunc);
kono
parents:
diff changeset
113 end if;
kono
parents:
diff changeset
114 end loop;
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 Put_Line ("Checking consistent references in spec");
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 loop
kono
parents:
diff changeset
119 Next_Line;
kono
parents:
diff changeset
120 exit when Match (Line, " -- Description of Defined");
kono
parents:
diff changeset
121 end loop;
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 loop
kono
parents:
diff changeset
124 Next_Line;
kono
parents:
diff changeset
125 exit when Match (Line, " -- Component_Alignment Control");
kono
parents:
diff changeset
126
kono
parents:
diff changeset
127 if Match (Line, Field_Ref) then
kono
parents:
diff changeset
128 if Accessfunc /= "synth"
kono
parents:
diff changeset
129 and then
kono
parents:
diff changeset
130 Accessfunc /= "special"
kono
parents:
diff changeset
131 and then
kono
parents:
diff changeset
132 Accessfunc /= Get (Fields, Fieldnm)
kono
parents:
diff changeset
133 then
kono
parents:
diff changeset
134 if Present (Fields, Fieldnm) then
kono
parents:
diff changeset
135 Put_Line ("*** field name incorrect at line " & Lineno);
kono
parents:
diff changeset
136 Put_Line (" found field " & Accessfunc);
kono
parents:
diff changeset
137 Put_Line (" expecting field " & Get (Fields, Fieldnm));
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 else
kono
parents:
diff changeset
140 Put_Line
kono
parents:
diff changeset
141 ("*** unknown field name " & Fieldnm & " at line " & Lineno);
kono
parents:
diff changeset
142 end if;
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 raise Err;
kono
parents:
diff changeset
145 end if;
kono
parents:
diff changeset
146 end if;
kono
parents:
diff changeset
147 end loop;
kono
parents:
diff changeset
148
kono
parents:
diff changeset
149 Close (Infil);
kono
parents:
diff changeset
150 Open (Infil, In_File, "einfo.adb");
kono
parents:
diff changeset
151 Lineno := 0;
kono
parents:
diff changeset
152
kono
parents:
diff changeset
153 Put_Line ("Check listing of fields in body");
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 loop
kono
parents:
diff changeset
156 Next_Line;
kono
parents:
diff changeset
157 exit when Match (Line, " -- Attribute Access Functions --");
kono
parents:
diff changeset
158
kono
parents:
diff changeset
159 if Match (Line, Field_Com)
kono
parents:
diff changeset
160 and then Fieldnm /= "(unused)"
kono
parents:
diff changeset
161 and then Accessfunc /= Get (Fields, Fieldnm)
kono
parents:
diff changeset
162 then
kono
parents:
diff changeset
163 if Present (Fields, Fieldnm) then
kono
parents:
diff changeset
164 Put_Line ("*** field name incorrect at line " & Lineno);
kono
parents:
diff changeset
165 Put_Line (" found field " & Accessfunc);
kono
parents:
diff changeset
166 Put_Line (" expecting field " & Get (Fields, Fieldnm));
kono
parents:
diff changeset
167
kono
parents:
diff changeset
168 else
kono
parents:
diff changeset
169 Put_Line
kono
parents:
diff changeset
170 ("*** unknown field name " & Fieldnm & " at line " & Lineno);
kono
parents:
diff changeset
171 end if;
kono
parents:
diff changeset
172
kono
parents:
diff changeset
173 raise Err;
kono
parents:
diff changeset
174 end if;
kono
parents:
diff changeset
175 end loop;
kono
parents:
diff changeset
176
kono
parents:
diff changeset
177 Put_Line ("Check references in access routines in body");
kono
parents:
diff changeset
178
kono
parents:
diff changeset
179 loop
kono
parents:
diff changeset
180 Next_Line;
kono
parents:
diff changeset
181 exit when Match (Line, " -- Classification Functions --");
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 if Match (Line, Func_Hedr) then
kono
parents:
diff changeset
184 null;
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 elsif Match (Line, Func_Retn)
kono
parents:
diff changeset
187 and then Accessfunc /= Get (Fields, Fieldnm)
kono
parents:
diff changeset
188 and then Fieldnm /= "Mechanism"
kono
parents:
diff changeset
189 then
kono
parents:
diff changeset
190 Put_Line ("*** incorrect field at line " & Lineno);
kono
parents:
diff changeset
191 Put_Line (" found field " & Accessfunc);
kono
parents:
diff changeset
192 Put_Line (" expecting field " & Get (Fields, Fieldnm));
kono
parents:
diff changeset
193 raise Err;
kono
parents:
diff changeset
194 end if;
kono
parents:
diff changeset
195 end loop;
kono
parents:
diff changeset
196
kono
parents:
diff changeset
197 Put_Line ("Check references in set routines in body");
kono
parents:
diff changeset
198
kono
parents:
diff changeset
199 loop
kono
parents:
diff changeset
200 Next_Line;
kono
parents:
diff changeset
201 exit when Match (Line, " -- Attribute Set Procedures");
kono
parents:
diff changeset
202 end loop;
kono
parents:
diff changeset
203
kono
parents:
diff changeset
204 loop
kono
parents:
diff changeset
205 Next_Line;
kono
parents:
diff changeset
206 exit when Match (Line, " ------------");
kono
parents:
diff changeset
207
kono
parents:
diff changeset
208 if Match (Line, Proc_Hedr) then
kono
parents:
diff changeset
209 null;
kono
parents:
diff changeset
210
kono
parents:
diff changeset
211 elsif Match (Line, Proc_Setf)
kono
parents:
diff changeset
212 and then Accessfunc /= Get (Fields, Fieldnm)
kono
parents:
diff changeset
213 and then Fieldnm /= "Mechanism"
kono
parents:
diff changeset
214 then
kono
parents:
diff changeset
215 Put_Line ("*** incorrect field at line " & Lineno);
kono
parents:
diff changeset
216 Put_Line (" found field " & Accessfunc);
kono
parents:
diff changeset
217 Put_Line (" expecting field " & Get (Fields, Fieldnm));
kono
parents:
diff changeset
218 raise Err;
kono
parents:
diff changeset
219 end if;
kono
parents:
diff changeset
220 end loop;
kono
parents:
diff changeset
221
kono
parents:
diff changeset
222 Close (Infil);
kono
parents:
diff changeset
223
kono
parents:
diff changeset
224 Put_Line ("All tests completed successfully, no errors detected");
kono
parents:
diff changeset
225
kono
parents:
diff changeset
226 end CEinfo;