diff options
Diffstat (limited to 'gcc/ada/namet.h')
-rw-r--r-- | gcc/ada/namet.h | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/gcc/ada/namet.h b/gcc/ada/namet.h new file mode 100644 index 00000000000..feb69b713f2 --- /dev/null +++ b/gcc/ada/namet.h @@ -0,0 +1,141 @@ +/**************************************************************************** + * * + * GNAT COMPILER COMPONENTS * + * * + * N A M E T * + * * + * C Header File * + * * + * $Revision: 1.1 $ + * * + * Copyright (C) 1992-2001 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, 59 Temple Place - Suite 330, Boston, * + * MA 02111-1307, USA. * + * * + * GNAT was originally developed by the GNAT team at New York University. * + * It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). * + * * + ****************************************************************************/ + +/* This is the C file that corresponds to the Ada package specification + Namet. It was created manually from files namet.ads and namet.adb. */ + +/* Structure defining a names table entry. */ + +struct Name_Entry +{ + Int Name_Chars_Index; /* Starting location of char in Name_Chars table. */ + Short Name_Len; /* Length of this name in characters. */ + Byte Byte_Info; /* Byte value associated with this name */ + Byte Spare; /* Unused */ + Name_Id Hash_Link; /* Link to next entry in names table for same hash + code. Not accessed by C routines. */ + Int Int_Info; /* Int value associated with this name */ +}; + +/* Pointer to names table vector. */ +#define Names_Ptr namet__name_entries__table +extern struct Name_Entry *Names_Ptr; + +/* Pointer to name characters table. */ +#define Name_Chars_Ptr namet__name_chars__table +extern char *Name_Chars_Ptr; + +#define Name_Buffer namet__name_buffer +extern char Name_Buffer[]; + +extern Int namet__name_len; +#define Name_Len namet__name_len + +/* Get_Name_String returns a null terminated C string for the specified name. + We could use the official Ada routine for this purpose, but since the + strings we want are sitting in the name strings table in exactly the form + we need them (null terminated), we just point to the name directly. */ + +static char *Get_Name_String PARAMS ((Name_Id)); + +INLINE char * +Get_Name_String (Id) + Name_Id Id; +{ + return Name_Chars_Ptr + Names_Ptr [Id - First_Name_Id].Name_Chars_Index + 1; +} + +/* Get_Decoded_Name_String returns a null terminated C string in the same + manner as Get_Name_String, except that it is decoded (i.e. upper half or + wide characters are put back in their external form, and character literals + are also returned in their external form (with surrounding apostrophes) */ + +extern void namet__get_decoded_name_string PARAMS ((Name_Id)); + +static char *Get_Decoded_Name_String PARAMS ((Name_Id)); + +INLINE char * +Get_Decoded_Name_String (Id) + Name_Id Id; +{ + namet__get_decoded_name_string (Id); + Name_Buffer [Name_Len] = 0; + return Name_Buffer; +} + +/* Like Get_Decoded_Name_String, but the result has all qualification and + package body entity suffixes stripped, and also all letters are upper + cased. This is used fo rbuilding the enumeration literal table. */ + +extern void casing__set_all_upper_case PARAMS ((void)); +extern void namet__get_unqualified_decoded_name_string PARAMS ((Name_Id)); + +static char *Get_Upper_Decoded_Name_String PARAMS ((Name_Id)); + +INLINE char * +Get_Upper_Decoded_Name_String (Id) + Name_Id Id; +{ + namet__get_unqualified_decoded_name_string (Id); + if (Name_Buffer [0] != '\'') + casing__set_all_upper_case (); + Name_Buffer [Name_Len] = 0; + return Name_Buffer; +} + +/* The following routines and variables are not part of Namet, but we + include the header here since it seems the best place for it. */ + +#define Get_Encoded_Type_Name exp_dbug__get_encoded_type_name +extern Boolean Get_Encoded_Type_Name PARAMS ((Entity_Id)); +#define Get_Variant_Encoding exp_dbug__get_variant_encoding +extern void Get_Variant_Encoding PARAMS ((Entity_Id)); + +#define Spec_Context_List exp_dbug__spec_context_list +#define Body_Context_List exp_dbug__body_context_list +extern char *Spec_Context_List, *Body_Context_List; +#define Spec_Filename exp_dbug__spec_filename +#define Body_Filename exp_dbug__body_filename +extern char *Spec_Filename, *Body_Filename; + +#define Is_Non_Ada_Error exp_ch11__is_non_ada_error +extern Boolean Is_Non_Ada_Error PARAMS ((Entity_Id)); + +/* Here are some functions in sinput.adb we call from a-trans.c. */ +typedef Nat Source_File_Index; +typedef Int Logical_Line_Number; + +#define Debug_Source_Name sinput__debug_source_name +#define Reference_Name sinput__reference_name +#define Get_Source_File_Index sinput__get_source_file_index +#define Get_Logical_Line_Number sinput__get_logical_line_number + +extern File_Name_Type Debug_Source_Name PARAMS ((Source_File_Index)); +extern File_Name_Type Reference_Name PARAMS ((Source_File_Index)); +extern Source_File_Index Get_Source_File_Index PARAMS ((Source_Ptr)); +extern Logical_Line_Number Get_Logical_Line_Number PARAMS ((Source_Ptr)); |