diff options
author | Arnaud Charlet <charlet@adacore.com> | 2012-10-29 09:50:53 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2012-10-29 10:50:53 +0100 |
commit | e63f29e814a7b2d9e4dbac86a8a3780f1bd50f80 (patch) | |
tree | d9304b5967c4c289db26282bf7af9d38f8b3c69d /gcc/ada/aa_util.ads | |
parent | 6e58a0b759bbf4521ffe01406365c74262f56b0e (diff) | |
download | gcc-e63f29e814a7b2d9e4dbac86a8a3780f1bd50f80.zip gcc-e63f29e814a7b2d9e4dbac86a8a3780f1bd50f80.tar.gz gcc-e63f29e814a7b2d9e4dbac86a8a3780f1bd50f80.tar.bz2 |
* adabkend.ads, adabkend.adb, aa_util.ads, aa_util.adb: New.
From-SVN: r192913
Diffstat (limited to 'gcc/ada/aa_util.ads')
-rw-r--r-- | gcc/ada/aa_util.ads | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/gcc/ada/aa_util.ads b/gcc/ada/aa_util.ads new file mode 100644 index 0000000..27b6183 --- /dev/null +++ b/gcc/ada/aa_util.ads @@ -0,0 +1,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; |