summaryrefslogtreecommitdiff
path: root/gcc/ada/aa_util.ads
blob: 27b6183248e7d7795c775dd4f91f74b2c1af55bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
------------------------------------------------------------------------------
--                                                                          --
--                        GNAAMP COMPILER COMPONENTS                        --
--                                                                          --
--                              A A _ U T I L                               --
--                                                                          --
--                                 S p e c                                  --
--                                                                          --
--                     Copyright (C) 2001-2011, AdaCore                     --
--                                                                          --
-- GNAT is free software;  you can  redistribute it  and/or modify it under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
-- for  more details.  You should have  received  a copy of the GNU General --
-- Public License  distributed with GNAT; see file COPYING3.  If not, go to --
-- http://www.gnu.org/licenses for a complete copy of the license.          --
--                                                                          --
------------------------------------------------------------------------------

--  This package provides various utility operations used by GNAT back-ends
--  (e.g. AAMP).

--  This package is a messy grab bag of stuff. These routines should be moved
--  to appropriate units (sem_util,sem_aux,exp_util,namet,uintp,urealp). ???

with Namet;  use Namet;
with Types;  use Types;
with Uintp;  use Uintp;
with Urealp; use Urealp;

package AA_Util is

   function Is_Global_Entity (E : Entity_Id) return Boolean;
   --  Returns true if and only if E is a library-level entity (excludes
   --  entities declared within blocks at the outer level of library packages).

   function New_Name_Id (Name : String) return Name_Id;
   --  Returns a Name_Id corresponding to the given name string

   function Name_String (Name : Name_Id) return String;
   --  Returns the name string associated with Name

   function New_String_Id (S : String) return String_Id;
   --  Returns a String_Id corresponding to the given string

   function String_Value (Str_Id : String_Id) return String;
   --  Returns the string associated with Str_Id

   --  Name-generation utilities

   type Name_Sequencer is private;
   --  This type is used to support back-end generation of unique symbol
   --  (e.g., for string literal objects or labels). By declaring an
   --  aliased object of type Name_Sequence and passing that object
   --  to the function Next_Name, a series of names with suffixes
   --  of the form "__n" will be produced, where n is a string denoting
   --  a positive integer.  The sequence starts with "__1", and increases
   --  by one on each successive call to Next_Name for a given Name_Sequencer.

   function Next_Name
     (Name_Seq    : not null access Name_Sequencer;
      Name_Prefix : String) return Name_Id;
   --  Returns the Name_Id for a name composed of the given Name_Prefix
   --  concatentated with a unique number suffix of the form "__n",
   --  as detemined by the current state of Name_Seq.

   function Elab_Spec_Name (Module_Name : Name_Id) return Name_Id;
   --  Returns a name id for the elaboration subprogram to be associated with
   --  the specification of the named module. The denoted name is of the form
   --  "modulename___elabs".

   function Elab_Body_Name (Module_Name : Name_Id) return Name_Id;
   --  Returns a name id for the elaboration subprogram to be associated
   --  with the body of the named module. The denoted name is of the form
   --  "modulename___elabb".

   function File_Name_Without_Suffix (File_Name : String) return String;
   --  Removes the suffix ('.' followed by other characters), if present, from
   --  the end of File_Name and returns the shortened name (otherwise simply
   --  returns File_Name).

   function Source_Name (Sloc : Source_Ptr) return File_Name_Type;
   --  Returns file name corresponding to the source file name associated with
   --  the given source position Sloc.

   function Source_Name_Without_Suffix (Sloc : Source_Ptr) return String;
   --  Returns a string corresponding to the source file name associated with
   --  the given source position Sloc, with its dot-preceded suffix, if any,
   --  removed. As examples, the name "main.adb" is mapped to "main" and the
   --  name "main.2.ada" is mapped to "main.2". As a special case, file names
   --  with a ".dg" suffix will also strip off the ".dg", so "main.adb.dg"
   --  becomes simply "main".

   function Source_Id_String (Unit_Name : Name_Id) return String;
   --  Returns a string that uniquely identifies the unit with the given
   --  Unit_Name. This string is derived from Unit_Name by replacing any
   --  multiple underscores with dot ('.') characters and normalizing the
   --  casing to mixed case (e.g., "ada__strings" is mapped to ("Ada.Strings").

   function Source_Id (Unit_Name : Name_Id) return String_Id;
   --  Returns a String_Id reference to a string that uniquely identifies
   --  the program unit having the given name (as defined for function
   --  Source_Id_String).

   function Source_Id_String (Sloc : Source_Ptr) return String;
   --  Returns a string that uniquely identifies the source file containing
   --  the given source location.  This string is constructed from the
   --  concatentation of the date and time stamp of the file with a
   --  hexadecimal check sum (e.g., "020425143059ABCDEF01").

   function Source_Id (Sloc : Source_Ptr) return String_Id;
   --  Returns a String_Id reference to a string that uniquely identifies the
   --  source file containing the given source location (as defined for
   --  function Source_Id_String).

   function Image (I : Int) return String;
   --  Returns Int'Image (I), but without a leading space in the case where
   --  I is nonnegative. Useful for concatenating integers onto other names.

   type Integer_Image_Format is (Decimal, Ada_Hex, AAMP_Hex);

   function UI_Image (I : Uint; Format : Integer_Image_Format) return String;
   --  Returns the image of the universal integer I, with no leading spaces
   --  and in the format specified. The Format parameter specifies whether
   --  the integer representation should be decimal (the default), or Ada
   --  hexadecimal (Ada_Hex => "16#xxxxx#" format), or AAMP hexadecimal.
   --  In the latter case, the integer will have the form of a sequence of
   --  hexadecimal digits bracketed by '^' characters, and will contain '_'
   --  characters as separators for groups of four hexadecimal digits
   --  (e.g., ^1C_A3CD^). If the format AAMP_Hex is selected, the universal
   --  integer must have a nonnegative value.

   function UR_Image (R : Ureal) return String;
   --  Returns a decimal image of the universal real value R

private

   type Name_Sequencer is record
      Sequence_Number : Natural := 0;
   end record;

end AA_Util;