1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- O S I N T - C -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 2001-2015, 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-- This package contains the low level, operating system routines used only 27-- in the GNAT compiler for command line processing and file input output. 28 29package Osint.C is 30 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. 34 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. 38 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 42 -- been processed. 43 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). 50 51 ------------------------------ 52 -- Debug Source File Output -- 53 ------------------------------ 54 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. 61 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. 65 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. 70 71 procedure Close_Debug_File; 72 -- Close current debug file created by the most recent call to 73 -- Create_Debug_File. 74 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. 78 79 -------------------------------- 80 -- Representation File Output -- 81 -------------------------------- 82 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. 89 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. 96 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. 101 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. 106 107 procedure Close_Repinfo_File; 108 -- Close current debug file created by the most recent call to 109 -- Create_Repinfo_File. 110 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. 115 116 -------------------------------- 117 -- Library Information Output -- 118 -------------------------------- 119 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. 123 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). 128 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. 134 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. 143 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. 147 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 155 -- set to null. 156 157 -------------------------- 158 -- C Translation Output -- 159 -------------------------- 160 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. 166 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). 172 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; 177 178 ---------------------- 179 -- List File Output -- 180 ---------------------- 181 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. 187 188 procedure Write_List_Info (S : String); 189 -- Writes given string to the list file created by Create_List_File 190 191 procedure Close_List_File; 192 -- Close file previously opened by Create_List_File 193 194 -------------------------------- 195 -- Semantic Tree Input-Output -- 196 -------------------------------- 197 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. 202 203 procedure Tree_Close; 204 -- Closes the file previously opened by Tree_Create 205 206end Osint.C; 207