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

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
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 -- P U T _ S P A R K _ X R E F S --
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) 2011-2016, 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. 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 SPARK_Xrefs; use SPARK_Xrefs;
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 procedure Put_SPARK_Xrefs is
kono
parents:
diff changeset
29 begin
kono
parents:
diff changeset
30 -- Loop through entries in SPARK_File_Table
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 for J in 1 .. SPARK_File_Table.Last loop
kono
parents:
diff changeset
33 declare
kono
parents:
diff changeset
34 F : SPARK_File_Record renames SPARK_File_Table.Table (J);
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 begin
kono
parents:
diff changeset
37 Write_Info_Initiate ('F');
kono
parents:
diff changeset
38 Write_Info_Char ('D');
kono
parents:
diff changeset
39 Write_Info_Char (' ');
kono
parents:
diff changeset
40 Write_Info_Nat (F.File_Num);
kono
parents:
diff changeset
41 Write_Info_Char (' ');
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 Write_Info_Str (F.File_Name.all);
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 -- If file is a subunit, print the file name for the unit
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 if F.Unit_File_Name /= null then
kono
parents:
diff changeset
48 Write_Info_Str (" -> " & F.Unit_File_Name.all);
kono
parents:
diff changeset
49 end if;
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 Write_Info_Terminate;
kono
parents:
diff changeset
52
kono
parents:
diff changeset
53 -- Loop through scope entries for this file
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 for J in F.From_Scope .. F.To_Scope loop
kono
parents:
diff changeset
56 declare
kono
parents:
diff changeset
57 S : SPARK_Scope_Record renames SPARK_Scope_Table.Table (J);
kono
parents:
diff changeset
58
kono
parents:
diff changeset
59 begin
kono
parents:
diff changeset
60 Write_Info_Initiate ('F');
kono
parents:
diff changeset
61 Write_Info_Char ('S');
kono
parents:
diff changeset
62 Write_Info_Char (' ');
kono
parents:
diff changeset
63 Write_Info_Char ('.');
kono
parents:
diff changeset
64 Write_Info_Nat (S.Scope_Num);
kono
parents:
diff changeset
65 Write_Info_Char (' ');
kono
parents:
diff changeset
66 Write_Info_Nat (S.Line);
kono
parents:
diff changeset
67 Write_Info_Char (S.Stype);
kono
parents:
diff changeset
68 Write_Info_Nat (S.Col);
kono
parents:
diff changeset
69 Write_Info_Char (' ');
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 pragma Assert (S.Scope_Name.all /= "");
kono
parents:
diff changeset
72
kono
parents:
diff changeset
73 Write_Info_Str (S.Scope_Name.all);
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 if S.Spec_File_Num /= 0 then
kono
parents:
diff changeset
76 Write_Info_Str (" -> ");
kono
parents:
diff changeset
77 Write_Info_Nat (S.Spec_File_Num);
kono
parents:
diff changeset
78 Write_Info_Char ('.');
kono
parents:
diff changeset
79 Write_Info_Nat (S.Spec_Scope_Num);
kono
parents:
diff changeset
80 end if;
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 Write_Info_Terminate;
kono
parents:
diff changeset
83 end;
kono
parents:
diff changeset
84 end loop;
kono
parents:
diff changeset
85 end;
kono
parents:
diff changeset
86 end loop;
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 -- Loop through entries in SPARK_File_Table
kono
parents:
diff changeset
89
kono
parents:
diff changeset
90 for J in 1 .. SPARK_File_Table.Last loop
kono
parents:
diff changeset
91 declare
kono
parents:
diff changeset
92 F : SPARK_File_Record renames SPARK_File_Table.Table (J);
kono
parents:
diff changeset
93 File : Nat;
kono
parents:
diff changeset
94 Scope : Nat;
kono
parents:
diff changeset
95 Entity_Line : Nat;
kono
parents:
diff changeset
96 Entity_Col : Nat;
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 begin
kono
parents:
diff changeset
99 -- Loop through scope entries for this file
kono
parents:
diff changeset
100
kono
parents:
diff changeset
101 for K in F.From_Scope .. F.To_Scope loop
kono
parents:
diff changeset
102 Output_One_Scope : declare
kono
parents:
diff changeset
103 S : SPARK_Scope_Record renames SPARK_Scope_Table.Table (K);
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 begin
kono
parents:
diff changeset
106 -- Write only non-empty tables
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 if S.From_Xref <= S.To_Xref then
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 Write_Info_Initiate ('F');
kono
parents:
diff changeset
111 Write_Info_Char ('X');
kono
parents:
diff changeset
112 Write_Info_Char (' ');
kono
parents:
diff changeset
113 Write_Info_Nat (F.File_Num);
kono
parents:
diff changeset
114 Write_Info_Char (' ');
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 Write_Info_Str (F.File_Name.all);
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 Write_Info_Char (' ');
kono
parents:
diff changeset
119 Write_Info_Char ('.');
kono
parents:
diff changeset
120 Write_Info_Nat (S.Scope_Num);
kono
parents:
diff changeset
121 Write_Info_Char (' ');
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 Write_Info_Str (S.Scope_Name.all);
kono
parents:
diff changeset
124
kono
parents:
diff changeset
125 -- Default value of (0,0) is used for the special __HEAP
kono
parents:
diff changeset
126 -- variable so use another default value.
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 Entity_Line := 0;
kono
parents:
diff changeset
129 Entity_Col := 1;
kono
parents:
diff changeset
130
kono
parents:
diff changeset
131 -- Loop through cross reference entries for this scope
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 for X in S.From_Xref .. S.To_Xref loop
kono
parents:
diff changeset
134
kono
parents:
diff changeset
135 Output_One_Xref : declare
kono
parents:
diff changeset
136 R : SPARK_Xref_Record renames
kono
parents:
diff changeset
137 SPARK_Xref_Table.Table (X);
kono
parents:
diff changeset
138
kono
parents:
diff changeset
139 begin
kono
parents:
diff changeset
140 if R.Entity_Line /= Entity_Line
kono
parents:
diff changeset
141 or else R.Entity_Col /= Entity_Col
kono
parents:
diff changeset
142 then
kono
parents:
diff changeset
143 Write_Info_Terminate;
kono
parents:
diff changeset
144
kono
parents:
diff changeset
145 Write_Info_Initiate ('F');
kono
parents:
diff changeset
146 Write_Info_Char (' ');
kono
parents:
diff changeset
147 Write_Info_Nat (R.Entity_Line);
kono
parents:
diff changeset
148 Write_Info_Char (R.Etype);
kono
parents:
diff changeset
149 Write_Info_Nat (R.Entity_Col);
kono
parents:
diff changeset
150 Write_Info_Char (' ');
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 Write_Info_Str (R.Entity_Name.all);
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 Entity_Line := R.Entity_Line;
kono
parents:
diff changeset
155 Entity_Col := R.Entity_Col;
kono
parents:
diff changeset
156 File := F.File_Num;
kono
parents:
diff changeset
157 Scope := S.Scope_Num;
kono
parents:
diff changeset
158 end if;
kono
parents:
diff changeset
159
kono
parents:
diff changeset
160 if Write_Info_Col > 72 then
kono
parents:
diff changeset
161 Write_Info_Terminate;
kono
parents:
diff changeset
162 Write_Info_Initiate ('.');
kono
parents:
diff changeset
163 end if;
kono
parents:
diff changeset
164
kono
parents:
diff changeset
165 Write_Info_Char (' ');
kono
parents:
diff changeset
166
kono
parents:
diff changeset
167 if R.File_Num /= File then
kono
parents:
diff changeset
168 Write_Info_Nat (R.File_Num);
kono
parents:
diff changeset
169 Write_Info_Char ('|');
kono
parents:
diff changeset
170 File := R.File_Num;
kono
parents:
diff changeset
171 Scope := 0;
kono
parents:
diff changeset
172 end if;
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 if R.Scope_Num /= Scope then
kono
parents:
diff changeset
175 Write_Info_Char ('.');
kono
parents:
diff changeset
176 Write_Info_Nat (R.Scope_Num);
kono
parents:
diff changeset
177 Write_Info_Char (':');
kono
parents:
diff changeset
178 Scope := R.Scope_Num;
kono
parents:
diff changeset
179 end if;
kono
parents:
diff changeset
180
kono
parents:
diff changeset
181 Write_Info_Nat (R.Line);
kono
parents:
diff changeset
182 Write_Info_Char (R.Rtype);
kono
parents:
diff changeset
183 Write_Info_Nat (R.Col);
kono
parents:
diff changeset
184 end Output_One_Xref;
kono
parents:
diff changeset
185
kono
parents:
diff changeset
186 end loop;
kono
parents:
diff changeset
187
kono
parents:
diff changeset
188 Write_Info_Terminate;
kono
parents:
diff changeset
189 end if;
kono
parents:
diff changeset
190 end Output_One_Scope;
kono
parents:
diff changeset
191 end loop;
kono
parents:
diff changeset
192 end;
kono
parents:
diff changeset
193 end loop;
kono
parents:
diff changeset
194 end Put_SPARK_Xrefs;