145
|
1 ------------------------------------------------------------------------------
|
|
2 -- --
|
|
3 -- GNAT COMPILER COMPONENTS --
|
|
4 -- --
|
|
5 -- B I N D O . W R I T E R S --
|
|
6 -- --
|
|
7 -- S p e c --
|
|
8 -- --
|
|
9 -- Copyright (C) 2019, Free Software Foundation, Inc. --
|
|
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- --
|
|
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
|
|
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 --
|
|
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. --
|
|
20 -- --
|
|
21 -- GNAT was originally developed by the GNAT team at New York University. --
|
|
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
|
|
23 -- --
|
|
24 ------------------------------------------------------------------------------
|
|
25
|
|
26 -- For full architecture, see unit Bindo.
|
|
27
|
|
28 -- The following unit contains facilities to output the various graphs used in
|
|
29 -- determining the elaboration order, as well as the elaboration order itself
|
|
30 -- to standard output.
|
|
31
|
|
32 with Types; use Types;
|
|
33
|
|
34 with Bindo.Graphs;
|
|
35 use Bindo.Graphs;
|
|
36 use Bindo.Graphs.Invocation_Graphs;
|
|
37 use Bindo.Graphs.Library_Graphs;
|
|
38
|
|
39 package Bindo.Writers is
|
|
40
|
|
41 -----------------
|
|
42 -- Indentation --
|
|
43 -----------------
|
|
44
|
|
45 -- The following type defines the level of indentation used in various
|
|
46 -- output routines.
|
|
47
|
|
48 type Indentation_Level is new Natural;
|
|
49 No_Indentation : constant Indentation_Level := Indentation_Level'First;
|
|
50
|
|
51 Nested_Indentation : constant Indentation_Level := 2;
|
|
52 -- The level of indentation for a nested new line
|
|
53
|
|
54 Number_Column : constant Indentation_Level := 6;
|
|
55 -- The level of right justification of numbers
|
|
56
|
|
57 Step_Column : constant Indentation_Level := 4;
|
|
58 -- The level of right justification of the elaboration order step
|
|
59
|
|
60 procedure Indent_By (Indent : Indentation_Level);
|
|
61 pragma Inline (Indent_By);
|
|
62 -- Indent the current line by Indent spaces
|
|
63
|
|
64 procedure Write_Num
|
|
65 (Val : Int;
|
|
66 Val_Indent : Indentation_Level := Number_Column);
|
|
67 pragma Inline (Write_Num);
|
|
68 -- Output integer value Val in a right-justified form based on the value of
|
|
69 -- Val_Col.
|
|
70
|
|
71 -----------------
|
|
72 -- ALI_Writers --
|
|
73 -----------------
|
|
74
|
|
75 package ALI_Writers is
|
|
76 procedure Write_ALI_Tables;
|
|
77 -- Write the contents of the following tables to standard output:
|
|
78 --
|
|
79 -- * ALI.Invocation_Constructs
|
|
80 -- * ALI.Invocation_Relations
|
|
81
|
|
82 end ALI_Writers;
|
|
83
|
|
84 -------------------
|
|
85 -- Cycle_Writers --
|
|
86 -------------------
|
|
87
|
|
88 package Cycle_Writers is
|
|
89 procedure Write_Cycles (G : Library_Graph);
|
|
90 -- Write all cycles of library graph G to standard output
|
|
91
|
|
92 end Cycle_Writers;
|
|
93
|
|
94 ------------------------
|
|
95 -- Dependency_Writers --
|
|
96 ------------------------
|
|
97
|
|
98 package Dependency_Writers is
|
|
99 procedure Write_Dependencies (G : Library_Graph);
|
|
100 -- Write all elaboration dependencies of the units represented by
|
|
101 -- vertices of library graph G.
|
|
102
|
|
103 end Dependency_Writers;
|
|
104
|
|
105 -------------------------------
|
|
106 -- Elaboration_Order_Writers --
|
|
107 -------------------------------
|
|
108
|
|
109 package Elaboration_Order_Writers is
|
|
110 procedure Write_Elaboration_Order (Order : Unit_Id_Table);
|
|
111 -- Write elaboration order Order to standard output
|
|
112
|
|
113 end Elaboration_Order_Writers;
|
|
114
|
|
115 ------------------------------
|
|
116 -- Invocation_Graph_Writers --
|
|
117 ------------------------------
|
|
118
|
|
119 package Invocation_Graph_Writers is
|
|
120 procedure Write_Invocation_Graph (G : Invocation_Graph);
|
|
121 -- Write invocation graph G to standard output
|
|
122
|
|
123 end Invocation_Graph_Writers;
|
|
124
|
|
125 ---------------------------
|
|
126 -- Library_Graph_Writers --
|
|
127 ---------------------------
|
|
128
|
|
129 package Library_Graph_Writers is
|
|
130 procedure Write_Library_Graph (G : Library_Graph);
|
|
131 -- Write library graph G to standard output
|
|
132
|
|
133 end Library_Graph_Writers;
|
|
134
|
|
135 -------------------
|
|
136 -- Phase_Writers --
|
|
137 -------------------
|
|
138
|
|
139 package Phase_Writers is
|
|
140 procedure End_Phase (Phase : Elaboration_Phase);
|
|
141 pragma Inline (End_Phase);
|
|
142 -- Write the end message associated with elaboration phase Phase to
|
|
143 -- standard output.
|
|
144
|
|
145 procedure Start_Phase (Phase : Elaboration_Phase);
|
|
146 pragma Inline (Start_Phase);
|
|
147 -- Write the start message associated with elaboration phase Phase to
|
|
148 -- standard output.
|
|
149
|
|
150 end Phase_Writers;
|
|
151
|
|
152 --------------------------
|
|
153 -- Unit_Closure_Writers --
|
|
154 --------------------------
|
|
155
|
|
156 package Unit_Closure_Writers is
|
|
157 procedure Write_Unit_Closure (Order : Unit_Id_Table);
|
|
158 -- Write all sources in the closure of the main unit as enumerated in
|
|
159 -- elaboration order Order.
|
|
160
|
|
161 end Unit_Closure_Writers;
|
|
162
|
|
163 end Bindo.Writers;
|