aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.2.1/gcc/ada/exp_imgv.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.2.1/gcc/ada/exp_imgv.ads')
-rw-r--r--gcc-4.2.1/gcc/ada/exp_imgv.ads89
1 files changed, 89 insertions, 0 deletions
diff --git a/gcc-4.2.1/gcc/ada/exp_imgv.ads b/gcc-4.2.1/gcc/ada/exp_imgv.ads
new file mode 100644
index 000000000..54d4528d3
--- /dev/null
+++ b/gcc-4.2.1/gcc/ada/exp_imgv.ads
@@ -0,0 +1,89 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- E X P _ I M G V --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2000-2005, Free Software Foundation, Inc. --
+-- --
+-- 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 2, 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 COPYING. If not, write --
+-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
+-- Boston, MA 02110-1301, USA. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- Expand routines for Image, Value and Width attributes. These are the
+-- attributes that make use of enumeration type image tables.
+
+with Types; use Types;
+
+package Exp_Imgv is
+
+ procedure Build_Enumeration_Image_Tables (E : Entity_Id; N : Node_Id);
+ -- Build the enumeration image tables for E, which is an enumeration
+ -- base type. The node N is the point in the tree where the resulting
+ -- declarations are to be inserted.
+ --
+ -- The form of the tables generated is as follows:
+ --
+ -- xxxS : string := "chars";
+ -- xxxI : array (0 .. N) of Natural_8/16/32 := (1, n, .., n);
+ --
+ -- Here xxxS is a string obtained by concatenating all the names
+ -- of the enumeration literals in sequence, representing any wide
+ -- characters according to the current wide character encoding
+ -- method, and with all letters forced to upper case.
+ --
+ -- The array xxxI is an array of ones origin indexes to the start
+ -- of each name, with one extra entry at the end, which is the index
+ -- to the character just past the end of the last literal, i.e. it is
+ -- the length of xxxS + 1. The element type is the shortest of the
+ -- possible types that will hold all the values.
+ --
+ -- For example, for the type
+ --
+ -- type x is (hello,'!',goodbye);
+ --
+ -- the generated tables would consist of
+ --
+ -- xxxS : String := "hello'!'goodbye";
+ -- xxxI : array (0 .. 3) of Natural_8 := (1, 6, 9, 16);
+ --
+ -- Here Natural_8 is used since 16 < 2**(8-1)
+ --
+ -- If the entity E needs the tables constructing, the necessary
+ -- declarations are constructed, and the fields Lit_Strings and
+ -- Lit_Indexes of E are set to point to the corresponding entities.
+ -- If no tables are needed (E is not a user defined enumeration
+ -- root type, or pragma Discard_Names is in effect, then the
+ -- declarations are not constructed, and the fields remain Empty.
+
+ procedure Expand_Image_Attribute (N : Node_Id);
+ -- This procedure is called from Exp_Attr to expand an occurrence
+ -- of the attribute Image.
+
+ procedure Expand_Value_Attribute (N : Node_Id);
+ -- This procedure is called from Exp_Attr to expand an occurrence
+ -- of the attribute Value.
+
+ type Atype is (Normal, Wide, Wide_Wide);
+ -- Type of attribute in call to Expand_Width_Attribute
+
+ procedure Expand_Width_Attribute (N : Node_Id; Attr : Atype := Normal);
+ -- This procedure is called from Exp_Attr to expand an occurrence of the
+ -- attributes Width (Attr = Normal), or Wide_Width (Attr Wide), or
+ -- Wide_Wide_Width (Attr = Wide_Wide).
+
+end Exp_Imgv;