1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S I N P U T . L -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2014, 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 child package contains the routines used to actually load a source 27-- file and create entries in the source file table. It also contains the 28-- routines to create virtual entries for instantiations. This is separated 29-- off into a child package to avoid a dependence of Sinput on Osint which 30-- would cause trouble in the tree read/write routines. 31 32package Sinput.L is 33 34 ------------------------------------------ 35 -- Subprograms for Loading Source Files -- 36 ------------------------------------------ 37 38 function Load_Source_File (N : File_Name_Type) return Source_File_Index; 39 -- Given a source file name, returns the index of the corresponding entry 40 -- in the source file table. If the file is not currently loaded, then 41 -- this is the call that causes the source file to be read and an entry 42 -- made in the table. A new entry in the table has the file name and time 43 -- stamp entries set and the Casing entries set to Unknown. Version is set 44 -- to all blanks, and the lines table is initialized but only the first 45 -- entry is set (and Last_Line is set to 1). If the given source file 46 -- cannot be opened, then the value returned is No_Source_File. 47 48 function Load_Config_File (N : File_Name_Type) return Source_File_Index; 49 -- Similar to Load_Source_File, except that the file name is always 50 -- interpreted in the context of the current working directory. 51 -- The file is never preprocessed. 52 53 function Load_Definition_File 54 (N : File_Name_Type) return Source_File_Index; 55 -- Loads preprocessing definition file. Similar to Load_Source_File 56 -- except that this file is not itself preprocessed. 57 58 function Load_Preprocessing_Data_File 59 (N : File_Name_Type) return Source_File_Index; 60 -- Loads preprocessing data file. Similar to Load_Source_File except 61 -- that this file is not itself preprocessed. 62 63 procedure Complete_Source_File_Entry; 64 -- Called on completing the parsing of a source file. This call completes 65 -- the source file table entry for the current source file. 66 67 function Source_File_Is_Body (X : Source_File_Index) return Boolean; 68 -- Returns true if the designated source file contains a subprogram body 69 -- or a package body. This is a limited scan just to determine the answer 70 -- to this question.. 71 72 function Source_File_Is_No_Body (X : Source_File_Index) return Boolean; 73 -- Returns true if the designated source file contains pragma No_Body; 74 -- and no other tokens. If the source file contains anything other than 75 -- this sequence of three tokens, then False is returned. 76 77 ------------------------------------------------- 78 -- Subprograms for Dealing With Instantiations -- 79 ------------------------------------------------- 80 81 type Sloc_Adjustment is private; 82 -- Type returned by Create_Instantiation_Source for use in subsequent 83 -- calls to Adjust_Instantiation_Sloc. 84 85 procedure Create_Instantiation_Source 86 (Inst_Node : Entity_Id; 87 Template_Id : Entity_Id; 88 Inlined_Body : Boolean; 89 A : out Sloc_Adjustment); 90 -- This procedure creates the source table entry for an instantiation. 91 -- Inst_Node is the instantiation node, and Template_Id is the defining 92 -- identifier of the generic declaration or body unit as appropriate. 93 -- A is set to an adjustment factor to be used in subsequent calls to 94 -- Adjust_Instantiation_Sloc. The instantiation mechanism is also used 95 -- for inlined function and procedure calls. The parameter Inlined_Body 96 -- is set to True in such cases, and False for a generic instantiation. 97 -- This is used for generating error messages that distinguish these 98 -- two cases, otherwise the two cases are handled identically. 99 100 procedure Adjust_Instantiation_Sloc (N : Node_Id; A : Sloc_Adjustment); 101 -- The instantiation tree is created by copying the tree of the generic 102 -- template (including the original Sloc values), and then applying 103 -- Adjust_Instantiation_Sloc to each copied node to adjust the Sloc 104 -- to reference the source entry for the instantiation. 105 106private 107 108 type Sloc_Adjustment is record 109 Adjust : Source_Ptr; 110 -- Adjustment factor. To be added to source location values in the 111 -- source table entry for the template to get corresponding sloc 112 -- values for the instantiation image of the template. This is not 113 -- really a Source_Ptr value, but rather an offset, but it is more 114 -- convenient to represent it as a Source_Ptr value and this is a 115 -- private type anyway. 116 117 Lo, Hi : Source_Ptr; 118 -- Lo and hi values to which adjustment factor can legitimately 119 -- be applied, used to ensure that no incorrect adjustments are 120 -- made. Really it is a bug if anyone ever tries to adjust outside 121 -- this range, but since we are only doing this anyway for getting 122 -- better error messages, it is not critical 123 124 end record; 125 126end Sinput.L; 127