OSDN Git Service

* Make-lang.in (gnat_ug_unx.info): Add dependency on stmp-docobjdir.
[pf3gnuchains/gcc-fork.git] / gcc / ada / sinput-l.ads
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-2001, 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 2,  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 COPYING.  If not, write --
19 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
20 -- MA 02111-1307, USA.                                                      --
21 --                                                                          --
22 -- GNAT was originally developed  by the GNAT team at  New York University. --
23 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
24 --                                                                          --
25 ------------------------------------------------------------------------------
26
27 --  This child package contains the routines used to actually load a source
28 --  file and create entries in the source file table. It also contains the
29 --  routines to create virtual entries for instantiations. This is separated
30 --  off into a child package to avoid a dependence of Sinput on Osint which
31 --  would cause trouble in the tree read/write routines.
32
33 with Types; use Types;
34
35 package Sinput.L is
36
37    -------------------------------------------
38    --  Subprograms for Loading Source Files --
39    -------------------------------------------
40
41    function Load_Source_File (N : File_Name_Type) return Source_File_Index;
42    --  Given a source file name, returns the index of the corresponding entry
43    --  in the source file table. If the file is not currently loaded, then
44    --  this is the call that causes the source file to be read and an entry
45    --  made in the table. A new entry in the table has the file name and time
46    --  stamp entries set and the Casing entries set to Unknown. Version is set
47    --  to all blanks, and the lines table is initialized but only the first
48    --  entry is set (and Last_Line is set to 1). If the given source file
49    --  cannot be opened, then the value returned is No_Source_File.
50
51    function Load_Config_File (N : File_Name_Type) return Source_File_Index;
52    --  Similar to Load_Source_File, except that the file name is always
53    --  interpreted in the context of the current working directory.
54
55    procedure Complete_Source_File_Entry;
56    --  Called on completing the parsing of a source file. This call completes
57    --  the source file table entry for the current source file.
58
59    function Source_File_Is_Subunit (X : Source_File_Index) return Boolean;
60    --  This function determines if a source file represents a subunit. It
61    --  works by scanning for the first compilation unit token, and returning
62    --  True if it is the token SEPARATE. It will return False otherwise,
63    --  meaning that the file cannot possibly be a legal subunit. This
64    --  function does NOT do a complete parse of the file, or build a
65    --  tree. It is used in the main driver in the check for bad bodies.
66
67    -------------------------------------------------
68    -- Subprograms for Dealing With Instantiations --
69    -------------------------------------------------
70
71    type Sloc_Adjustment is private;
72    --  Type returned by Create_Instantiation_Source for use in subsequent
73    --  calls to Adjust_Instantiation_Sloc.
74
75    procedure Create_Instantiation_Source
76      (Inst_Node   : Entity_Id;
77       Template_Id : Entity_Id;
78       A           : out Sloc_Adjustment);
79    --  This procedure creates the source table entry for an instantiation.
80    --  Inst_Node is the instantiation node, and Template_Id is the defining
81    --  identifier of the generic declaration or body unit as appropriate.
82    --  A is set to an adjustment factor to be used in subsequent calls to
83    --  Adjust_Instantiation_Sloc.
84
85    procedure Adjust_Instantiation_Sloc (N : Node_Id; A : Sloc_Adjustment);
86    --  The instantiation tree is created by copying the tree of the generic
87    --  template (including the original Sloc values), and then applying
88    --  Adjust_Instantiation_Sloc to each copied node to adjust the Sloc
89    --  to reference the source entry for the instantiation.
90
91 private
92
93    type Sloc_Adjustment is record
94       Adjust : Source_Ptr;
95       --  Adjustment factor. To be added to source location values in the
96       --  source table entry for the template to get corresponding sloc
97       --  values for the instantiation image of the template. This is not
98       --  really a Source_Ptr value, but rather an offset, but it is more
99       --  convenient to represent it as a Source_Ptr value and this is a
100       --  private type anyway.
101
102       Lo, Hi : Source_Ptr;
103       --  Lo and hi values to which adjustment factor can legitimately
104       --  be applied, used to ensure that no incorrect adjustments are
105       --  made. Really it is a bug if anyone ever tries to adjust outside
106       --  this range, but since we are only doing this anyway for getting
107       --  better error messages, it is not critical
108
109    end record;
110
111 end Sinput.L;