| 1 |
281 |
jeremybenn |
------------------------------------------------------------------------------
|
| 2 |
|
|
-- --
|
| 3 |
|
|
-- GNAT COMPILER COMPONENTS --
|
| 4 |
|
|
-- --
|
| 5 |
|
|
-- O S I N T - C --
|
| 6 |
|
|
-- --
|
| 7 |
|
|
-- S p e c --
|
| 8 |
|
|
-- --
|
| 9 |
|
|
-- Copyright (C) 2001-2008, 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 |
|
|
|
| 29 |
|
|
package 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 |
|
|
--------------------------------
|
| 112 |
|
|
-- Library Information Output --
|
| 113 |
|
|
--------------------------------
|
| 114 |
|
|
|
| 115 |
|
|
-- These routines are used by the compiler to generate the library
|
| 116 |
|
|
-- information file for the main source file being compiled. See section
|
| 117 |
|
|
-- above for a discussion of how library information files are stored.
|
| 118 |
|
|
|
| 119 |
|
|
procedure Create_Output_Library_Info;
|
| 120 |
|
|
-- Creates the output library information file for the source file which
|
| 121 |
|
|
-- is currently being compiled (i.e. the file which was most recently
|
| 122 |
|
|
-- returned by Next_Main_Source).
|
| 123 |
|
|
|
| 124 |
|
|
procedure Write_Library_Info (Info : String);
|
| 125 |
|
|
-- Writes the contents of the referenced string to the library information
|
| 126 |
|
|
-- file for the main source file currently being compiled (i.e. the file
|
| 127 |
|
|
-- which was most recently opened with a call to Read_Next_File). Info
|
| 128 |
|
|
-- represents a single line in the file, but does not contain any line
|
| 129 |
|
|
-- termination characters. The implementation of Write_Library_Info is
|
| 130 |
|
|
-- responsible for adding necessary end of line and end of file control
|
| 131 |
|
|
-- characters to the generated file.
|
| 132 |
|
|
|
| 133 |
|
|
procedure Close_Output_Library_Info;
|
| 134 |
|
|
-- Closes the file created by Create_Output_Library_Info, flushing any
|
| 135 |
|
|
-- buffers etc. from writes by Write_Library_Info.
|
| 136 |
|
|
|
| 137 |
|
|
procedure Read_Library_Info
|
| 138 |
|
|
(Name : out File_Name_Type;
|
| 139 |
|
|
Text : out Text_Buffer_Ptr);
|
| 140 |
|
|
-- The procedure version of Read_Library_Info is used from the compiler
|
| 141 |
|
|
-- to read an existing ali file associated with the main unit. If the
|
| 142 |
|
|
-- ALI file exists, then its file name is returned in Name, and its
|
| 143 |
|
|
-- text is returned in Text. If the file does not exist, then Text is
|
| 144 |
|
|
-- set to null.
|
| 145 |
|
|
|
| 146 |
|
|
----------------------
|
| 147 |
|
|
-- List File Output --
|
| 148 |
|
|
----------------------
|
| 149 |
|
|
|
| 150 |
|
|
procedure Create_List_File (S : String);
|
| 151 |
|
|
-- Creates the file whose name is given by S. If the name starts with a
|
| 152 |
|
|
-- period, then the name is xxx & S, where xxx is the name of the main
|
| 153 |
|
|
-- source file without the extension stripped. Information is written to
|
| 154 |
|
|
-- this file using Write_List_File.
|
| 155 |
|
|
|
| 156 |
|
|
procedure Write_List_Info (S : String);
|
| 157 |
|
|
-- Writes given string to the list file created by Create_List_File
|
| 158 |
|
|
|
| 159 |
|
|
procedure Close_List_File;
|
| 160 |
|
|
-- Close file previously opened by Create_List_File
|
| 161 |
|
|
|
| 162 |
|
|
--------------------------------
|
| 163 |
|
|
-- Semantic Tree Input-Output --
|
| 164 |
|
|
--------------------------------
|
| 165 |
|
|
|
| 166 |
|
|
procedure Tree_Create;
|
| 167 |
|
|
-- Creates the tree output file for the source file which is currently
|
| 168 |
|
|
-- being compiled (i.e. the file which was most recently returned by
|
| 169 |
|
|
-- Next_Main_Source), and initializes Tree_IO.Tree_Write for output.
|
| 170 |
|
|
|
| 171 |
|
|
procedure Tree_Close;
|
| 172 |
|
|
-- Closes the file previously opened by Tree_Create
|
| 173 |
|
|
|
| 174 |
|
|
end Osint.C;
|