1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
9 -- Copyright (C) 2001-2015, Free Software Foundation, Inc. --
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. --
21 -- GNAT was originally developed by the GNAT team at New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
24 ------------------------------------------------------------------------------
26 -- This package contains the low level, operating system routines used only
27 -- in the GNAT compiler for command line processing and file input output.
31 procedure Set_Output_Object_File_Name
(Name
: String);
32 -- Called by the subprogram processing the command line when an
33 -- output object file name is found.
35 function Get_Output_Object_File_Name
return String;
36 -- Returns the name of the output object file as saved by a call to
37 -- Set_Output_Object_File_Name. Only valid to call if name has been set.
39 function More_Source_Files
return Boolean;
40 -- Indicates whether more source file remain to be processed. Returns
41 -- False right away if no source files, or if all source files have
44 function Next_Main_Source
return File_Name_Type
;
45 -- This function returns the name of the next main source file specified
46 -- on the command line. It is an error to call Next_Main_Source if no more
47 -- source files exist (i.e. Next_Main_Source may be called only if a
48 -- previous call to More_Source_Files returned True). This name is the
49 -- simple file name (without any directory information).
51 ------------------------------
52 -- Debug Source File Output --
53 ------------------------------
55 -- These routines are used by the compiler to generate the debug source
56 -- file for the Debug_Generated_Code (-gnatD switch) option. Note that
57 -- debug source file writing occurs at a completely different point in
58 -- the processing from library information output, or representation
59 -- output, so the code in the body can assume that no two of these
60 -- functions are ever used at the same time.
62 function Create_Debug_File
(Src
: File_Name_Type
) return File_Name_Type
;
63 -- Given the simple name of a source file, this routine creates the
64 -- corresponding debug file, and returns its full name.
66 procedure Write_Debug_Info
(Info
: String);
67 -- Writes contents of given string as next line of the current debug
68 -- source file created by the most recent call to Create_Debug_File.
69 -- Info does not contain end of line or other formatting characters.
71 procedure Close_Debug_File
;
72 -- Close current debug file created by the most recent call to
75 function Debug_File_Eol_Length
return Nat
;
76 -- Returns the number of characters (1 for NL, 2 for CR/LF) written
77 -- at the end of each line by Write_Debug_Info.
79 --------------------------------
80 -- Representation File Output --
81 --------------------------------
83 -- These routines are used by the compiler to generate the representation
84 -- information to a file if this option is specified (-gnatR?s switch).
85 -- Note that the writing of this file occurs at a completely different
86 -- point in the processing from library information output, or from
87 -- debug file output, so the code in the body can assume that no two
88 -- of these functions are ever used at the same time.
90 -- Note: these routines are called from Repinfo, but are not called
91 -- directly, since we do not want Repinfo to depend on Osint. That
92 -- would cause a lot of unwanted junk to be dragged into ASIS. So
93 -- what we do is we have Initialize set the addresses of these three
94 -- procedures in appropriate variables in Repinfo, so that they can
95 -- be called indirectly without creating a dependence.
97 procedure Create_Repinfo_File
(Src
: String);
98 -- Given the simple name of a source file, this routine creates the
99 -- corresponding file to hold representation information. Note that the
100 -- call destroys the contents of Name_Buffer and Name_Len.
102 procedure Write_Repinfo_Line
(Info
: String);
103 -- Writes contents of given string as next line of the current debug
104 -- source file created by the most recent call to Create_Repinfo_File.
105 -- Info does not contain end of line or other formatting characters.
107 procedure Close_Repinfo_File
;
108 -- Close current debug file created by the most recent call to
109 -- Create_Repinfo_File.
111 procedure Set_File_Name
(Ext
: String);
112 -- Sets a default file name from the main compiler source name. Ext is the
113 -- extension, e.g. "ali" for a library information file. The name is in
114 -- Name_Buffer (with length in Name_Len) on return.
116 --------------------------------
117 -- Library Information Output --
118 --------------------------------
120 -- These routines are used by the compiler to generate the library
121 -- information file for the main source file being compiled. See section
122 -- above for a discussion of how library information files are stored.
124 procedure Create_Output_Library_Info
;
125 -- Creates the output library information file for the source file which
126 -- is currently being compiled (i.e. the file which was most recently
127 -- returned by Next_Main_Source).
129 procedure Open_Output_Library_Info
;
130 -- Opens the output library information file for the source file which
131 -- is currently being compiled (i.e. the file which was most recently
132 -- returned by Next_Main_Source) for appending. This is used to append
133 -- the globals computed in flow analysis in gnatprove mode.
135 procedure Write_Library_Info
(Info
: String);
136 -- Writes the contents of the referenced string to the library information
137 -- file for the main source file currently being compiled (i.e. the file
138 -- which was most recently opened with a call to Read_Next_File). Info
139 -- represents a single line in the file, but does not contain any line
140 -- termination characters. The implementation of Write_Library_Info is
141 -- responsible for adding necessary end of line and end of file control
142 -- characters to the generated file.
144 procedure Close_Output_Library_Info
;
145 -- Closes the file created by Create_Output_Library_Info, flushing any
146 -- buffers etc. from writes by Write_Library_Info.
148 procedure Read_Library_Info
149 (Name
: out File_Name_Type
;
150 Text
: out Text_Buffer_Ptr
);
151 -- The procedure version of Read_Library_Info is used from the compiler
152 -- to read an existing ali file associated with the main unit. If the
153 -- ALI file exists, then its file name is returned in Name, and its
154 -- text is returned in Text. If the file does not exist, then Text is
157 --------------------------
158 -- C Translation Output --
159 --------------------------
161 -- These routines are used by the compiler when the C translation option
162 -- is activated to write *.c and *.h files to the current object directory.
163 -- Each routine exists in a C and an H form for the two kinds of files.
164 -- Only one of these files can be written at a time. Note that the files
165 -- are written via the Output package routines, using Output_FD.
167 procedure Create_C_File
;
168 procedure Create_H_File
;
169 -- Creates the *.c or *.h file for the source file which is currently
170 -- being compiled (i.e. the file which was most recently returned by
171 -- Next_Main_Source).
173 procedure Close_C_File
;
174 procedure Close_H_File
;
175 -- Closes the file created by Create_C_File or Create_H file, flushing any
176 -- buffers etc. from writes by Write_C_File and Write_H_File;
178 ----------------------
179 -- List File Output --
180 ----------------------
182 procedure Create_List_File
(S
: String);
183 -- Creates the file whose name is given by S. If the name starts with a
184 -- period, then the name is xxx & S, where xxx is the name of the main
185 -- source file without the extension stripped. Information is written to
186 -- this file using Write_List_File.
188 procedure Write_List_Info
(S
: String);
189 -- Writes given string to the list file created by Create_List_File
191 procedure Close_List_File
;
192 -- Close file previously opened by Create_List_File
194 --------------------------------
195 -- Semantic Tree Input-Output --
196 --------------------------------
198 procedure Tree_Create
;
199 -- Creates the tree output file for the source file which is currently
200 -- being compiled (i.e. the file which was most recently returned by
201 -- Next_Main_Source), and initializes Tree_IO.Tree_Write for output.
203 procedure Tree_Close
;
204 -- Closes the file previously opened by Tree_Create