gcc/gcc/ada/snames.ads

1497 lines
79 KiB
Ada
Raw Normal View History

g-zstspl.ads: New file. 2005-02-09 Robert Dewar <dewar@adacore.com> Thomas Quinot <quinot@adacore.com> Javier Miranda <miranda@adacore.com> Pascal Obry <obry@adacore.com> Ed Schonberg <schonberg@adacore.com> Doug Rupp <rupp@adacore.com> Gary Dismukes <dismukes@adacore.com> Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * g-zstspl.ads: New file. * a-chahan.ads, a-chahan.adb: Add declarations from AI-285 * a-string.ads: Add pragma Ada_05 for wide_wide_space to get warning in Ada 95 mode Add definition of Wide_Wide_Space for AI-285 * impunit.ads, impunit.adb, sem_ch10.adb: Complete rewrite and new interface (to support Ada 95 and Ada 2005 units). Add Unbounded_IO files Add entries for Wide_Wide packages for AI-285 Add list of containers packages to Ada 2005 unit list * a-swuwti.ads, a-swuwti.adb, a-suteio.ads, a-suteio.adb: Updates to support new Unbounded_IO package cleanly. * g-utf_32.ads, g-utf_32.adb: New files. * Makefile.rtl: Add entry for g-utf_32 Add new files for Unbounded_IO Adjust make file for new AI-285 wide wide packages Add AI-302 containers to the run time. * a-stwibo.adb, a-stwibo.ads, a-stwisu.adb, a-stwisu.ads, a-strbou.ads, a-strbou.adb, a-strsup.ads, a-strsup.adb: New subprograms for AI-301. * a-stwiun.adb, a-stwiun.ads: Minor reformatting. * a-stunau.ads: Minor comment correction * rtsfind.ads, rtsfind.adb: Add definitions for Wide_Wide attributes etc. Also extend Text_IO_Kludge to support Wide_Wide_Text_IO (Check_RPC): Update to match changes in expanded code. Clean up unused entity. * exp_ch3.ads, exp_ch3.adb: Fix various places where Wide_Wide_String was not taken into account. This includes proper initialization with Normalize_Scalars. (Get_Simple_Init_Val): Major rewrite for initialize scalars and normalize scalars cases (particularly the latter) to do a better job of finding invalid representations. * s-scaval.ads, s-scaval.adb: Add values for zero invalid values * s-strops.ads, s-strops.adb: Remove string normalize routines, never used * exp_dist.adb: Add support for wide wide character type (Expand_Receiving_Stubs_Bodies): For a package declaration that has a private part, generate stub bodies at the end of the private part, not the visible part. (Add_RACW_Primitive_Operations_And_Bodies): Add last missing code for PolyORB support. (Add_Obj_RPC_Receiver_Completion): Add PCS-specific subprograms and generic wrapper to execute final processing after completing the expansion of the RPC receiver for an RACW. * snames.h, snames.ads, snames.adb: Add definitions for wide_wide packages and attributes. (Preset_Names): Addition of the new reserved words of Ada 2005, that is interface, overriding and synchronized. (Get_Pragma_Id): Give support to the use of the new reserved word "interface" as a pragma name. (Is_Pragma_Name): Give support to the use of the new reserved word "interface" as a pragma name. (Preset_Names): Add stream_size string for the Stream_Size Ada2005 attribute implementation. * exp_attr.adb (Expand_Attribute_Reference): Do not apply validity checks to entities that are output parameters of Asm operations. Handle the Stream_Size attribute. Add implementation of Wide_Wide_Value, Wide_Wide_Image, Wide_Wide_Width * exp_imgv.ads, exp_imgv.adb: Add support for wide wide character type * sem_attr.adb (Eval_Attribute): Raise compile-time constraint error for second parameter being 0.0. Add support for wide wide character type. (Analyze_Attribute, Eval_Attribute): Handle the Stream_Size attribute. * s-valwch.adb, s-valwch.ads, s-imgwch.ads, s-imgwch.adb, s-wchstw.ads, s-wchstw.adb, s-wchwts.adb, s-wchwts.ads, s-widwch.adb, s-widwch.ads, s-wwdcha.adb, s-wwdcha.ads, s-wwdenu.adb, s-wwdenu.ads, s-wwdwch.adb, s-wwdwch.ads: Add support for wide wide character cases. * cstand.adb: Create entities for Wide_Wide_Character and Wide_Wide_String. * i-c.ads, i-c.adb: Fix not raising CE for null wide strings in accordance with AI-258. Add new declarations for 16/32 bit C character types (Part of AI285) * einfo.ads, einfo.adb (Is_Obsolescent, Is_Ada_2005): New flag (Obsolescent_Warning): New field (Rep_Clause): New local subprogram used to share code. Returns the rep clause for which the name is given in parameter. (Has_Stream_Size_Clause): New routine. (Stream_Size_Clause): Idem. Implementation is based on Rep_Clause. (Address_Clause): Implementation is now using Rep_Clause. (Alignment_Clause): Idem. (Size_Clause): Idem. * lib-xref.adb (Generate_Reference): Test for reference to Ada 2005 entity in non-Ada 2005 mode and generate warning. * par-prag.adb: Add handling of one argument form for pragma Ada_05. (Prag): Code cleanup. Remove old gnat pragma "overriding" * sem_prag.adb: Add handling of one argument form for pragma Ada_05 (Analyze_Pragma, case Elaborate, Elaborate_All): Do not disable warnings on the named unit if the pragma is not in the current compilation unit, so that elaboration calls in the current unit can set up an elaboration dependency on the named unit, as needed. (Analyze_Pragma, case Obsolescent): Allow pragma to be used for library subprogram as well as for subprograms declared within a package. (Analyze_Pragma, Sig_Flags): Code cleanup. Remove support for the GNAT pragma overriding. * krunch.ads, krunch.adb: Add special handling of Wide_Wide (krunched to z) to avoid some instances of duplication for Wide_Wide packages. * namet.ads, namet.adb: Implement encoding (WWhhhhhhhh) for wide wide characters. * scn.adb: Char_Literal_Value field is now a Uint * scng.adb: Significant rewrite to handle new Ada 2005 features allowing wide and wide wide characters in program text, e.g. for identifiers, as described in AI-285. (Set_Reserved): New procedure, makes setting up keywords cleaner. (Initialize_Scanner): Register the new reserved words of Ada 2005. (Scan): Give support to the new reserved words. * par-ch2.adb (P_Identifier): Compiling in Ada95 mode, generate a warning notifying that interface, overriding, and synchronized are new reserved words. (P_Pragma): Allow the use of the new reserved word "interface" as a pragma name. * gnatls.adb, gnatbind.adb, ali-util.adb, binde.adb, ali.ads, ali.adb: Code cleanup. Rename identifiers named "interface" to "SAL_Interface". * bindgen.adb (Gen_Main_Ada): Add support for the new SEH (Structured Exception handling). (Gen_Main_C): Idem. * bindgen.adb: (Gen_Main_Ada): Set the default exit code if specified. (Gen_Main_C): Likewise. Part of *DC20-006. (Gen_Output_File_C): Remove redundant output of gnat_exit_status. Code cleanup. Rename identifiers named "interface" to "SAL_Interface" * switch-b.adb, bindusg.adb, opt.ads, vms_data.ads: Add handling of new -Xnnn switch. * mlib-prj.adb, mlib.adb: Code cleanup. Rename one identifier that has a collision with the new Ada 2005 "interface" reserved word. * par-ch3.adb (P_Defining_Identifier): Compiling in Ada95 mode, generate a warning notifying that interface, overriding, and synchronized are new reserved words. * scans.ads (Token_Type): Addition of the tokens corresponding to the new reserved words of Ada 2005: Tok_Interface, Tok_Overriding and Tok_Synchronized. * sem_res.adb (Resolve_Actuals): Change error messages to refer to "dispatching" rather than "primitive" operations, since dispatching calls are now allowed to abstract formal subprograms (which are not primitive). Char_Literal_Value field is now a Uint (Resolve_Slice): If the prefix is an access to an unconstrained array, compute the actual subtype of the designated object to impose the proper index constraints. (Resolve_Selected_Component): Do not insert an access check if the prefix is an access type: such a node is expanded into an explicit dereference, on which the access check is performed anyway. Removes expensive duplicate checks. (Resolve_Call): Use new flag Is_Obsolescent and field Obsolescent_Warning so that pragma Obsolescent works on library subprograms. Add support for wide wide character type (Resolve_Allocator): Replace the error message on wrong null-exclusion value by a warning message. (Resolve_Type_Conversion): If the mixed-mode expression is interpreted as fixed-point, and one of the operands is non-static and universal, it can only be an illegal exponentiation operation, in which case there is no real value to retrieve. * exp_strm.adb: Add support for wide wide character type (Build_Elementary_Input_Call): Compute the size of the stream element by querying the rep chain to find the Stream_Attribute attribute value. (Build_Elementary_Write_Call): Ditto. * sem_aggr.adb: Char_Literal_Value field is now a Uint Add support for wide wide character type Replace the error messages on wrong null-exclusion value by warnings as described in Ada 2005. (Resolve_Extension_Aggregate): Document the fact that the error message on class-wide expressions in extensions aggregates. * sem_case.adb: Add support for wide wide character type * sem_ch13.adb: Add support for wide wide character type (Analyze_Attribute_Definition_Clause): Handle the Stream_Size attribute. * sem_ch3.adb: Add support for wide wide character type (Process_Subtype): If constraint is illegal for the type, set Ekind of now-useless Itype, to prevent cascaded errors on a compiler built without -gnatp. * sem_ch8.adb: Add with and use of Sem_Disp. (Analyze_Subprogram_Renaming): Replace unclean uses of Corresponding_Spec with Corresponding_Formal_Spec (and delete setting of Corresponding_Spec to Empty). (Attribute_Renaming): Replace use of Corresponding_Spec with Corresponding_ Formal_Spec and simplify condition. (Use_One_Package): Check that scope of homonym of identifier is defined, before checking whether it is a wrapper package. Add support for wide wide character type * sem_eval.adb: Add support for wide wide character type. (Eval_Arithmetic_Op): Check for compile time known signed integer overflow in the non-static case. (Subtypes_Statically_Match): A formal scalar type and its base type do not statically match. * sem_util.adb (Collect_Primitive_Operations): Minor change of "/=" to "not in" for test of N_Formal_Subprogram_Declaration (which is now a subtype). (Unit_Declaration_Node): Ditto. (Is_Variable_Prefix): For the case of an indexed component whose prefix has a packed array type, the prefix has been rewritten into a type conversion. Determine variable-ness from the converted expression. Handle wide wide character cases. * stand.ads: Add types Wide_Wide_Character and Wide_Wide_String * stringt.ads, stringt.adb: Handle full UTF-32 range. Remove ["0A"] from comment, since it can look like a line terminator. Currently we don't permit this, but this is under discussion by the ARG, and it is easy enough to use a different example. * s-wchcon.ads, s-wchcnv.ads, s-wchcnv.adb: Add new subprograms for handling UTF-32 encoding for wide wide character. Implement new brackets coding ["hhhhhhhh"] Add UTF-8 encodings for full UTF-32 range * ttypes.ads: Add definition of Standard_Wide_Wide_Character_Size * types.h, types.ads, types.adb: Wide_Wide_Character now has full 31 bit range Add full UTF-32 support. (RT_Exception_Code): Addition of CE_Null_Not_Allowed; used to notify that constraint error will be raised at run-time because a null value is assigned to a null-excluding object. Remove some obsolete declarations and make Char_Code unsigned. * a-except.adb (Rcheck_30): New subprogram. Addition of the message corresponding to CE_Null_Not_Allowed, and adjust the output of all the Rcheck subprograms. * checks.adb (Check_Null_Not_Allowed): Replace the error message on wrong null-exclusion value by a warning message. (Enable_Range_Check): Do range check if the prefix is an explicit dereference whose designated object is an unconstrained array. Current algorithm for removing duplicate checks is over-eager in this case. * sem_ch5.adb (Analyze_Assignment): Replace the error messages on wrong null-exclusion value by a warning message * atree.h, atree.ads, atree.adb: Remove Char_Code field support completely. Add support for Uint2 field sem_ch2.adb, exp_ch11.adb, exp_dbug.adb, exp_prag.adb: Char_Literal_Value field is now a Uint. * exp_util.adb (Insert_Actions): Replace N_Formal_Subprogram_Declaration by N_Formal_{Abstract|Concrete}_Subprogram_Declaration. Char_Literal_Value field is now a Uint. * sinfo.ads, sinfo.adb (Corresponding_Formal_Spec): New function defined for subprogram renaming declarations. When set, the field indicates the defining entity of a corresponding formal subprogram when the renaming corresponds to a formal subprogram association in an instantiation. (Set_Corresponding_Formal_Spec): New procedure to return Corresponding_Formal_Spec field. Minor changes of "=" to "in" in tests of N_Formal_Subprogram_Declaration (which is now a subtype). Char_Literal_Value field is now a Uint * exp_disp.ads, exp_disp.adb (Make_DT): Generate code that moves the pointer to the base of the dispatch table. Minor changes to comments. (Controlling_Type): New function for determining the tagged type associated with a tagged primitive subprogram. (Expand_Dispatching_Call): Add support for a controlling actual that is directly a value of type Ada.Tag rather than a tagged object. * i-cpp.ads, i-cpp.adb, a-tags.ads, a-tags.adb: Update documentation describing the new layout. (Dispatch_Table): The expander computes the actual array size, allocates the Dispatch_Table record accordingly, and generates code that displaces the base of the record after the Typeinfo_Ptr component. The access to these components is done by means of local functions. (Offset_To_Top): New function. (Typeinfo_Ptr): New function. (Get_TSD): Modified to access the new position of the TSD. (Set_TSD): Modified to save the TSD in its new position. * par-ch12.adb (P_Formal_Subprogram_Declaration): Add parsing for the case of formal abstract subprograms. Add check and message for -gnat05. Update comments. * sem_ch12.adb: Add with and use for Sem_Disp. (Analyze_Associations): Minor change from "=" to "in" for use of N_Formal_Subtype_Declaration (which is now a subtype). (Set_Analyzed_Formal): Minor changes from "=" to "in" for uses of N_Formal_Subtype_Declaration (which is now a subtype). (Analyze_Formal_Subprogram): Add handling for N_Formal_Abstract_Subprogram, marking the formal as abstract and dispatching, setting the controlling status of the formal parameters and result, and issuing an error if there is no controlling type for the formal subprogram. (Instantiate_Formal_Subprogram): Rather than setting Corresponding_Spec, which is an unclean use of that field, we set the new field Corresponding_Formal_Spec to make the formal subprogram available to processing in Analyze_Subprogram_Declaration. (Analyze_Formal_{Discrete, Decimal_Fixed_Point, Fixed_Point, Floating_Point, Modular_Integer, Signed_Integer}_Type: Make formal type Constrained, so that it is is does not statically match its anonymous base type. * sem_ch6.adb (Analyze_Subprogram_Specification): Include test for abstract formal subprograms in error check for functions returning abstract types. Set scope of new designator for a parameterless subprogram, so that it is available when checking the body for nested subprograms, before full analysis of said body. (Analyze_Subprogram_Body): Warn on inlining bodies with nested subprogram only if inner one comes from source. (Analyze_Function_Call): If the call is given in object notation, the analysis of the name rewrites the node and analyzes it with the proper argument list. After analyzing the name, if the call has been rewritten and the result type is set, no further analysis is needed. (Analyze_Return_Type): Subsidiary to Process_Formals: analyze subtype mark in function specification, in a context where the formals are visible and hide outer homographs. * sem_disp.adb (Check_Controlling_Type): Relax the check for same scope as the tagged type for the cases of abstract formal subprograms and renamings of those. Clean up spec comments. (Check_Dispatching_Context): Add error message to indicate "abstract procedure", covering the case of a call to a formal abstract procedure that has statically tagged operands. (Check_Dispatching_Call): Check for the case of an actual given by a tag-indeterminate function call whose type is an ancestor of the containing call's associated tagged type. This situation can occur for inherited primitives with function defaults. In this case we use the tagged type's tag directly as the controlling argument for the calls. (Expand_Call): Name change on call to Expand_Dispatch_Call. * sprint.adb (Sprint_Node_Actual): Split N_Formal_Subprogram_Declaration into two alternatives for the new cases N_Formal_Abstract_Subprogram_Declaration and N_Formal_Concrete_Subprogram_Declaration. Char_Literal_Value field is now a Uint. * trans.c: Get rid of junk Uint2 reference. Char_Literal_Value field is now a Uint. (gnat_to_gnu, case N_Aggregate): Check TYPE_UNCHECKED_UNION_P. (gigi): Correct third arg to gimplify_body. * ada-tree.h: (TYPE_UNCHECKED_UNION_P): New flag. (TYPE_LANG_FLAG_0): Check for record or union. * treepr.adb: Char_Literal_Value field is now a Uint * uintp.h, uintp.ads, uintp.adb: Add new routines UI_To_CC and UI_From_CC. * widechar.ads, widechar.adb (Is_UTF_32_Non_Graphic): New function Add full UTF-32 support Char_Code is now 32 bits * sinput.ads, sinput.adb (Skip_Line_Terminators): Extend to deal with wide character UTF_32 line terminators. Initialize Main_Source_File to avoid error when no main source is loaded. * errout.adb (Finalize): Do not check Num_SRef_Pragmas (Main_Source_File) when no main source has been loaded, to avoid potential crash. From-SVN: r94809
2005-02-10 14:50:48 +01:00
------------------------------------------------------------------------------
-- --
-- GNAT COMPILER COMPONENTS --
-- --
-- S N A M E S --
-- --
-- S p e c --
-- --
-- Copyright (C) 1992-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, 59 Temple Place - Suite 330, Boston, --
-- MA 02111-1307, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
-- --
-- GNAT was originally developed by the GNAT team at New York University. --
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
with Types; use Types;
package Snames is
-- This package contains definitions of standard names (i.e. entries in the
-- Names table) that are used throughout the GNAT compiler). It also contains
-- the definitions of some enumeration types whose definitions are tied to
-- the order of these preset names.
-- WARNING: There is a C file, a-snames.h which duplicates some of the
-- definitions in this file and must be kept properly synchronized.
------------------
-- Preset Names --
------------------
-- The following are preset entries in the names table, which are
-- entered at the start of every compilation for easy access. Note
-- that the order of initialization of these names in the body must
-- be coordinated with the order of names in this table.
-- Note: a name may not appear more than once in the following list.
-- If additional pragmas or attributes are introduced which might
-- otherwise cause a duplicate, then list it only once in this table,
-- and adjust the definition of the functions for testing for pragma
-- names and attribute names, and returning their ID values. Of course
-- everything is simpler if no such duplications occur!
-- First we have the one character names used to optimize the lookup
-- process for one character identifiers (to avoid the hashing in this
-- case) There are a full 256 of these, but only the entries for lower
-- case and upper case letters have identifiers
-- The lower case letter entries are used for one character identifiers
-- appearing in the source, for example in pragma Interface (C).
Name_A : constant Name_Id := First_Name_Id + Character'Pos ('a');
Name_B : constant Name_Id := First_Name_Id + Character'Pos ('b');
Name_C : constant Name_Id := First_Name_Id + Character'Pos ('c');
Name_D : constant Name_Id := First_Name_Id + Character'Pos ('d');
Name_E : constant Name_Id := First_Name_Id + Character'Pos ('e');
Name_F : constant Name_Id := First_Name_Id + Character'Pos ('f');
Name_G : constant Name_Id := First_Name_Id + Character'Pos ('g');
Name_H : constant Name_Id := First_Name_Id + Character'Pos ('h');
Name_I : constant Name_Id := First_Name_Id + Character'Pos ('i');
Name_J : constant Name_Id := First_Name_Id + Character'Pos ('j');
Name_K : constant Name_Id := First_Name_Id + Character'Pos ('k');
Name_L : constant Name_Id := First_Name_Id + Character'Pos ('l');
Name_M : constant Name_Id := First_Name_Id + Character'Pos ('m');
Name_N : constant Name_Id := First_Name_Id + Character'Pos ('n');
Name_O : constant Name_Id := First_Name_Id + Character'Pos ('o');
Name_P : constant Name_Id := First_Name_Id + Character'Pos ('p');
Name_Q : constant Name_Id := First_Name_Id + Character'Pos ('q');
Name_R : constant Name_Id := First_Name_Id + Character'Pos ('r');
Name_S : constant Name_Id := First_Name_Id + Character'Pos ('s');
Name_T : constant Name_Id := First_Name_Id + Character'Pos ('t');
Name_U : constant Name_Id := First_Name_Id + Character'Pos ('u');
Name_V : constant Name_Id := First_Name_Id + Character'Pos ('v');
Name_W : constant Name_Id := First_Name_Id + Character'Pos ('w');
Name_X : constant Name_Id := First_Name_Id + Character'Pos ('x');
Name_Y : constant Name_Id := First_Name_Id + Character'Pos ('y');
Name_Z : constant Name_Id := First_Name_Id + Character'Pos ('z');
-- The upper case letter entries are used by expander code for local
-- variables that do not require unique names (e.g. formal parameter
-- names in constructed procedures)
Name_uA : constant Name_Id := First_Name_Id + Character'Pos ('A');
Name_uB : constant Name_Id := First_Name_Id + Character'Pos ('B');
Name_uC : constant Name_Id := First_Name_Id + Character'Pos ('C');
Name_uD : constant Name_Id := First_Name_Id + Character'Pos ('D');
Name_uE : constant Name_Id := First_Name_Id + Character'Pos ('E');
Name_uF : constant Name_Id := First_Name_Id + Character'Pos ('F');
Name_uG : constant Name_Id := First_Name_Id + Character'Pos ('G');
Name_uH : constant Name_Id := First_Name_Id + Character'Pos ('H');
Name_uI : constant Name_Id := First_Name_Id + Character'Pos ('I');
Name_uJ : constant Name_Id := First_Name_Id + Character'Pos ('J');
Name_uK : constant Name_Id := First_Name_Id + Character'Pos ('K');
Name_uL : constant Name_Id := First_Name_Id + Character'Pos ('L');
Name_uM : constant Name_Id := First_Name_Id + Character'Pos ('M');
Name_uN : constant Name_Id := First_Name_Id + Character'Pos ('N');
Name_uO : constant Name_Id := First_Name_Id + Character'Pos ('O');
Name_uP : constant Name_Id := First_Name_Id + Character'Pos ('P');
Name_uQ : constant Name_Id := First_Name_Id + Character'Pos ('Q');
Name_uR : constant Name_Id := First_Name_Id + Character'Pos ('R');
Name_uS : constant Name_Id := First_Name_Id + Character'Pos ('S');
Name_uT : constant Name_Id := First_Name_Id + Character'Pos ('T');
Name_uU : constant Name_Id := First_Name_Id + Character'Pos ('U');
Name_uV : constant Name_Id := First_Name_Id + Character'Pos ('V');
Name_uW : constant Name_Id := First_Name_Id + Character'Pos ('W');
Name_uX : constant Name_Id := First_Name_Id + Character'Pos ('X');
Name_uY : constant Name_Id := First_Name_Id + Character'Pos ('Y');
Name_uZ : constant Name_Id := First_Name_Id + Character'Pos ('Z');
-- Note: the following table is read by the utility program XSNAMES and
-- its format should not be changed without coordinating with this program.
N : constant Name_Id := First_Name_Id + 256;
-- Synonym used in standard name definitions
-- Some names that are used by gigi, and whose definitions are reflected
-- in the C header file a-snames.h. They are placed at the start so that
-- the need to modify a-snames.h is minimized.
Name_uParent : constant Name_Id := N + 000;
Name_uTag : constant Name_Id := N + 001;
Name_Off : constant Name_Id := N + 002;
Name_Space : constant Name_Id := N + 003;
Name_Time : constant Name_Id := N + 004;
-- Some special names used by the expander. Note that the lower case u's
-- at the start of these names get translated to extra underscores. These
-- names are only referenced internally by expander generated code.
Name_uAbort_Signal : constant Name_Id := N + 005;
Name_uAlignment : constant Name_Id := N + 006;
Name_uAssign : constant Name_Id := N + 007;
Name_uATCB : constant Name_Id := N + 008;
Name_uChain : constant Name_Id := N + 009;
Name_uClean : constant Name_Id := N + 010;
Name_uController : constant Name_Id := N + 011;
Name_uEntry_Bodies : constant Name_Id := N + 012;
Name_uExpunge : constant Name_Id := N + 013;
Name_uFinal_List : constant Name_Id := N + 014;
Name_uIdepth : constant Name_Id := N + 015;
Name_uInit : constant Name_Id := N + 016;
Name_uLocal_Final_List : constant Name_Id := N + 017;
Name_uMaster : constant Name_Id := N + 018;
Name_uObject : constant Name_Id := N + 019;
Name_uPriority : constant Name_Id := N + 020;
Name_uProcess_ATSD : constant Name_Id := N + 021;
Name_uSecondary_Stack : constant Name_Id := N + 022;
Name_uService : constant Name_Id := N + 023;
Name_uSize : constant Name_Id := N + 024;
Name_uStack : constant Name_Id := N + 025;
Name_uTags : constant Name_Id := N + 026;
Name_uTask : constant Name_Id := N + 027;
Name_uTask_Id : constant Name_Id := N + 028;
Name_uTask_Info : constant Name_Id := N + 029;
Name_uTask_Name : constant Name_Id := N + 030;
Name_uTrace_Sp : constant Name_Id := N + 031;
-- Names of routines in Ada.Finalization, needed by expander
Name_Initialize : constant Name_Id := N + 032;
Name_Adjust : constant Name_Id := N + 033;
Name_Finalize : constant Name_Id := N + 034;
-- Names of fields declared in System.Finalization_Implementation,
-- needed by the expander when generating code for finalization.
Name_Next : constant Name_Id := N + 035;
Name_Prev : constant Name_Id := N + 036;
-- Names of TSS routines for implementation of DSA over PolyORB
Name_uTypeCode : constant Name_Id := N + 037;
Name_uFrom_Any : constant Name_Id := N + 038;
Name_uTo_Any : constant Name_Id := N + 039;
-- Names of allocation routines, also needed by expander
Name_Allocate : constant Name_Id := N + 040;
Name_Deallocate : constant Name_Id := N + 041;
Name_Dereference : constant Name_Id := N + 042;
-- Names of Text_IO generic subpackages (see Rtsfind.Text_IO_Kludge)
First_Text_IO_Package : constant Name_Id := N + 043;
Name_Decimal_IO : constant Name_Id := N + 043;
Name_Enumeration_IO : constant Name_Id := N + 044;
Name_Fixed_IO : constant Name_Id := N + 045;
Name_Float_IO : constant Name_Id := N + 046;
Name_Integer_IO : constant Name_Id := N + 047;
Name_Modular_IO : constant Name_Id := N + 048;
Last_Text_IO_Package : constant Name_Id := N + 048;
subtype Text_IO_Package_Name is Name_Id
range First_Text_IO_Package .. Last_Text_IO_Package;
-- Some miscellaneous names used for error detection/recovery
Name_Const : constant Name_Id := N + 049;
Name_Error : constant Name_Id := N + 050;
Name_Go : constant Name_Id := N + 051;
Name_Put : constant Name_Id := N + 052;
Name_Put_Line : constant Name_Id := N + 053;
Name_To : constant Name_Id := N + 054;
-- Names for packages that are treated specially by the compiler
Name_Finalization : constant Name_Id := N + 055;
Name_Finalization_Root : constant Name_Id := N + 056;
Name_Interfaces : constant Name_Id := N + 057;
Name_Standard : constant Name_Id := N + 058;
Name_System : constant Name_Id := N + 059;
Name_Text_IO : constant Name_Id := N + 060;
Name_Wide_Text_IO : constant Name_Id := N + 061;
Name_Wide_Wide_Text_IO : constant Name_Id := N + 062;
-- Names of implementations of the distributed systems annex
First_PCS_Name : constant Name_Id := N + 063;
Name_No_DSA : constant Name_Id := N + 063;
Name_GARLIC_DSA : constant Name_Id := N + 064;
Name_PolyORB_DSA : constant Name_Id := N + 065;
Last_PCS_Name : constant Name_Id := N + 065;
subtype PCS_Names is Name_Id
range First_PCS_Name .. Last_PCS_Name;
-- Names of identifiers used in expanding distribution stubs
Name_Addr : constant Name_Id := N + 066;
Name_Async : constant Name_Id := N + 067;
Name_Get_Active_Partition_ID : constant Name_Id := N + 068;
Name_Get_RCI_Package_Receiver : constant Name_Id := N + 069;
Name_Get_RCI_Package_Ref : constant Name_Id := N + 070;
Name_Origin : constant Name_Id := N + 071;
Name_Params : constant Name_Id := N + 072;
Name_Partition : constant Name_Id := N + 073;
Name_Partition_Interface : constant Name_Id := N + 074;
Name_Ras : constant Name_Id := N + 075;
Name_Call : constant Name_Id := N + 076;
Name_RCI_Name : constant Name_Id := N + 077;
Name_Receiver : constant Name_Id := N + 078;
Name_Result : constant Name_Id := N + 079;
Name_Rpc : constant Name_Id := N + 080;
Name_Subp_Id : constant Name_Id := N + 081;
Name_Operation : constant Name_Id := N + 082;
Name_Argument : constant Name_Id := N + 083;
Name_Arg_Modes : constant Name_Id := N + 084;
Name_Handler : constant Name_Id := N + 085;
Name_Target : constant Name_Id := N + 086;
Name_Req : constant Name_Id := N + 087;
Name_Obj_TypeCode : constant Name_Id := N + 088;
Name_Stub : constant Name_Id := N + 089;
-- Operator Symbol entries. The actual names have an upper case O at
-- the start in place of the Op_ prefix (e.g. the actual name that
-- corresponds to Name_Op_Abs is "Oabs".
First_Operator_Name : constant Name_Id := N + 090;
Name_Op_Abs : constant Name_Id := N + 090; -- "abs"
Name_Op_And : constant Name_Id := N + 091; -- "and"
Name_Op_Mod : constant Name_Id := N + 092; -- "mod"
Name_Op_Not : constant Name_Id := N + 093; -- "not"
Name_Op_Or : constant Name_Id := N + 094; -- "or"
Name_Op_Rem : constant Name_Id := N + 095; -- "rem"
Name_Op_Xor : constant Name_Id := N + 096; -- "xor"
Name_Op_Eq : constant Name_Id := N + 097; -- "="
Name_Op_Ne : constant Name_Id := N + 098; -- "/="
Name_Op_Lt : constant Name_Id := N + 099; -- "<"
Name_Op_Le : constant Name_Id := N + 100; -- "<="
Name_Op_Gt : constant Name_Id := N + 101; -- ">"
Name_Op_Ge : constant Name_Id := N + 102; -- ">="
Name_Op_Add : constant Name_Id := N + 103; -- "+"
Name_Op_Subtract : constant Name_Id := N + 104; -- "-"
Name_Op_Concat : constant Name_Id := N + 105; -- "&"
Name_Op_Multiply : constant Name_Id := N + 106; -- "*"
Name_Op_Divide : constant Name_Id := N + 107; -- "/"
Name_Op_Expon : constant Name_Id := N + 108; -- "**"
Last_Operator_Name : constant Name_Id := N + 108;
-- Names for all pragmas recognized by GNAT. The entries with the comment
-- "Ada 83" are pragmas that are defined in Ada 83, but not in Ada 95.
-- These pragmas are fully implemented in both Ada 83 and Ada 95 modes
-- in GNAT.
-- The entries marked GNAT are pragmas that are defined by GNAT
-- and implemented in both Ada 83 and Ada 95 modes. Full descriptions
-- of these implementation dependent pragmas may be found in the
-- appropriate section in unit Sem_Prag in file sem-prag.adb.
-- The entries marked Ada05 are technically implementation dependent
-- pragmas, but they correspond to standard proposals for Ada 2005.
-- The entries marked VMS are VMS specific pragmas that are recognized
-- only in OpenVMS versions of GNAT. They are ignored in other versions
-- with an appropriate warning.
-- The entries marked AAMP are AAMP specific pragmas that are recognized
-- only in GNAT for the AAMP. They are ignored in other versions with
-- appropriate warnings.
First_Pragma_Name : constant Name_Id := N + 109;
-- Configuration pragmas are grouped at start
Name_Ada_83 : constant Name_Id := N + 109; -- GNAT
Name_Ada_95 : constant Name_Id := N + 110; -- GNAT
Name_Ada_05 : constant Name_Id := N + 111; -- GNAT
Name_C_Pass_By_Copy : constant Name_Id := N + 112; -- GNAT
Name_Compile_Time_Warning : constant Name_Id := N + 113; -- GNAT
Name_Component_Alignment : constant Name_Id := N + 114; -- GNAT
Name_Convention_Identifier : constant Name_Id := N + 115; -- GNAT
Name_Detect_Blocking : constant Name_Id := N + 116; -- Ada05
Name_Discard_Names : constant Name_Id := N + 117;
Name_Elaboration_Checks : constant Name_Id := N + 118; -- GNAT
Name_Eliminate : constant Name_Id := N + 119; -- GNAT
Name_Explicit_Overriding : constant Name_Id := N + 120;
Name_Extend_System : constant Name_Id := N + 121; -- GNAT
Name_Extensions_Allowed : constant Name_Id := N + 122; -- GNAT
Name_External_Name_Casing : constant Name_Id := N + 123; -- GNAT
Name_Float_Representation : constant Name_Id := N + 124; -- GNAT
Name_Initialize_Scalars : constant Name_Id := N + 125; -- GNAT
Name_Interrupt_State : constant Name_Id := N + 126; -- GNAT
Name_License : constant Name_Id := N + 127; -- GNAT
Name_Locking_Policy : constant Name_Id := N + 128;
Name_Long_Float : constant Name_Id := N + 129; -- VMS
Name_No_Run_Time : constant Name_Id := N + 130; -- GNAT
Name_No_Strict_Aliasing : constant Name_Id := N + 131; -- GNAT
Name_Normalize_Scalars : constant Name_Id := N + 132;
Name_Polling : constant Name_Id := N + 133; -- GNAT
Name_Persistent_Data : constant Name_Id := N + 134; -- GNAT
Name_Persistent_Object : constant Name_Id := N + 135; -- GNAT
Name_Profile : constant Name_Id := N + 136; -- Ada05
Name_Profile_Warnings : constant Name_Id := N + 137; -- GNAT
Name_Propagate_Exceptions : constant Name_Id := N + 138; -- GNAT
Name_Queuing_Policy : constant Name_Id := N + 139;
Name_Ravenscar : constant Name_Id := N + 140;
Name_Restricted_Run_Time : constant Name_Id := N + 141;
Name_Restrictions : constant Name_Id := N + 142;
Name_Restriction_Warnings : constant Name_Id := N + 143; -- GNAT
Name_Reviewable : constant Name_Id := N + 144;
Name_Source_File_Name : constant Name_Id := N + 145; -- GNAT
Name_Source_File_Name_Project : constant Name_Id := N + 146; -- GNAT
Name_Style_Checks : constant Name_Id := N + 147; -- GNAT
Name_Suppress : constant Name_Id := N + 148;
Name_Suppress_Exception_Locations : constant Name_Id := N + 149; -- GNAT
Name_Task_Dispatching_Policy : constant Name_Id := N + 150;
Name_Universal_Data : constant Name_Id := N + 151; -- AAMP
Name_Unsuppress : constant Name_Id := N + 152; -- GNAT
Name_Use_VADS_Size : constant Name_Id := N + 153; -- GNAT
Name_Validity_Checks : constant Name_Id := N + 154; -- GNAT
Name_Warnings : constant Name_Id := N + 155; -- GNAT
Last_Configuration_Pragma_Name : constant Name_Id := N + 155;
-- Remaining pragma names
Name_Abort_Defer : constant Name_Id := N + 156; -- GNAT
Name_All_Calls_Remote : constant Name_Id := N + 157;
Name_Annotate : constant Name_Id := N + 158; -- GNAT
-- Note: AST_Entry is not in this list because its name matches the
-- name of the corresponding attribute. However, it is included in the
-- definition of the type Attribute_Id, and the functions Get_Pragma_Id
-- and Check_Pragma_Id correctly recognize and process Name_AST_Entry.
-- AST_Entry is a VMS specific pragma.
Name_Assert : constant Name_Id := N + 159; -- GNAT
Name_Asynchronous : constant Name_Id := N + 160;
Name_Atomic : constant Name_Id := N + 161;
Name_Atomic_Components : constant Name_Id := N + 162;
Name_Attach_Handler : constant Name_Id := N + 163;
Name_Comment : constant Name_Id := N + 164; -- GNAT
Name_Common_Object : constant Name_Id := N + 165; -- GNAT
Name_Complex_Representation : constant Name_Id := N + 166; -- GNAT
Name_Controlled : constant Name_Id := N + 167;
Name_Convention : constant Name_Id := N + 168;
Name_CPP_Class : constant Name_Id := N + 169; -- GNAT
Name_CPP_Constructor : constant Name_Id := N + 170; -- GNAT
Name_CPP_Virtual : constant Name_Id := N + 171; -- GNAT
Name_CPP_Vtable : constant Name_Id := N + 172; -- GNAT
Name_Debug : constant Name_Id := N + 173; -- GNAT
Name_Elaborate : constant Name_Id := N + 174; -- Ada 83
Name_Elaborate_All : constant Name_Id := N + 175;
Name_Elaborate_Body : constant Name_Id := N + 176;
Name_Export : constant Name_Id := N + 177;
Name_Export_Exception : constant Name_Id := N + 178; -- VMS
Name_Export_Function : constant Name_Id := N + 179; -- GNAT
Name_Export_Object : constant Name_Id := N + 180; -- GNAT
Name_Export_Procedure : constant Name_Id := N + 181; -- GNAT
Name_Export_Value : constant Name_Id := N + 182; -- GNAT
Name_Export_Valued_Procedure : constant Name_Id := N + 183; -- GNAT
Name_External : constant Name_Id := N + 184; -- GNAT
Name_Finalize_Storage_Only : constant Name_Id := N + 185; -- GNAT
Name_Ident : constant Name_Id := N + 186; -- VMS
Name_Import : constant Name_Id := N + 187;
Name_Import_Exception : constant Name_Id := N + 188; -- VMS
Name_Import_Function : constant Name_Id := N + 189; -- GNAT
Name_Import_Object : constant Name_Id := N + 190; -- GNAT
Name_Import_Procedure : constant Name_Id := N + 191; -- GNAT
Name_Import_Valued_Procedure : constant Name_Id := N + 192; -- GNAT
Name_Inline : constant Name_Id := N + 193;
Name_Inline_Always : constant Name_Id := N + 194; -- GNAT
Name_Inline_Generic : constant Name_Id := N + 195; -- GNAT
Name_Inspection_Point : constant Name_Id := N + 196;
Name_Interface_Name : constant Name_Id := N + 197; -- GNAT
Name_Interrupt_Handler : constant Name_Id := N + 198;
Name_Interrupt_Priority : constant Name_Id := N + 199;
Name_Java_Constructor : constant Name_Id := N + 200; -- GNAT
Name_Java_Interface : constant Name_Id := N + 201; -- GNAT
Name_Keep_Names : constant Name_Id := N + 202; -- GNAT
Name_Link_With : constant Name_Id := N + 203; -- GNAT
Name_Linker_Alias : constant Name_Id := N + 204; -- GNAT
Name_Linker_Options : constant Name_Id := N + 205;
Name_Linker_Section : constant Name_Id := N + 206; -- GNAT
Name_List : constant Name_Id := N + 207;
Name_Machine_Attribute : constant Name_Id := N + 208; -- GNAT
Name_Main : constant Name_Id := N + 209; -- GNAT
Name_Main_Storage : constant Name_Id := N + 210; -- GNAT
Name_Memory_Size : constant Name_Id := N + 211; -- Ada 83
Name_No_Return : constant Name_Id := N + 212; -- GNAT
Name_Obsolescent : constant Name_Id := N + 213; -- GNAT
Name_Optimize : constant Name_Id := N + 214;
Name_Optional_Overriding : constant Name_Id := N + 215;
Name_Pack : constant Name_Id := N + 216;
Name_Page : constant Name_Id := N + 217;
Name_Passive : constant Name_Id := N + 218; -- GNAT
Name_Preelaborate : constant Name_Id := N + 219;
Name_Priority : constant Name_Id := N + 220;
Name_Psect_Object : constant Name_Id := N + 221; -- VMS
Name_Pure : constant Name_Id := N + 222;
Name_Pure_Function : constant Name_Id := N + 223; -- GNAT
Name_Remote_Call_Interface : constant Name_Id := N + 224;
Name_Remote_Types : constant Name_Id := N + 225;
Name_Share_Generic : constant Name_Id := N + 226; -- GNAT
Name_Shared : constant Name_Id := N + 227; -- Ada 83
Name_Shared_Passive : constant Name_Id := N + 228;
-- Note: Storage_Size is not in this list because its name matches the
-- name of the corresponding attribute. However, it is included in the
-- definition of the type Attribute_Id, and the functions Get_Pragma_Id
-- and Check_Pragma_Id correctly recognize and process Name_Storage_Size.
-- Note: Storage_Unit is also omitted from the list because of a clash
-- with an attribute name, and is treated similarly.
Name_Source_Reference : constant Name_Id := N + 229; -- GNAT
Name_Stream_Convert : constant Name_Id := N + 230; -- GNAT
Name_Subtitle : constant Name_Id := N + 231; -- GNAT
Name_Suppress_All : constant Name_Id := N + 232; -- GNAT
Name_Suppress_Debug_Info : constant Name_Id := N + 233; -- GNAT
Name_Suppress_Initialization : constant Name_Id := N + 234; -- GNAT
Name_System_Name : constant Name_Id := N + 235; -- Ada 83
Name_Task_Info : constant Name_Id := N + 236; -- GNAT
Name_Task_Name : constant Name_Id := N + 237; -- GNAT
Name_Task_Storage : constant Name_Id := N + 238; -- VMS
Name_Thread_Body : constant Name_Id := N + 239; -- GNAT
Name_Time_Slice : constant Name_Id := N + 240; -- GNAT
Name_Title : constant Name_Id := N + 241; -- GNAT
Name_Unchecked_Union : constant Name_Id := N + 242; -- GNAT
Name_Unimplemented_Unit : constant Name_Id := N + 243; -- GNAT
Name_Unreferenced : constant Name_Id := N + 244; -- GNAT
Name_Unreserve_All_Interrupts : constant Name_Id := N + 245; -- GNAT
Name_Volatile : constant Name_Id := N + 246;
Name_Volatile_Components : constant Name_Id := N + 247;
Name_Weak_External : constant Name_Id := N + 248; -- GNAT
Last_Pragma_Name : constant Name_Id := N + 248;
-- Language convention names for pragma Convention/Export/Import/Interface
-- Note that Name_C is not included in this list, since it was already
-- declared earlier in the context of one-character identifier names
-- (where the order is critical to the fast look up process).
-- Note: there are no convention names corresponding to the conventions
-- Entry and Protected, this is because these conventions cannot be
-- specified by a pragma.
First_Convention_Name : constant Name_Id := N + 249;
Name_Ada : constant Name_Id := N + 249;
Name_Assembler : constant Name_Id := N + 250;
Name_COBOL : constant Name_Id := N + 251;
Name_CPP : constant Name_Id := N + 252;
Name_Fortran : constant Name_Id := N + 253;
Name_Intrinsic : constant Name_Id := N + 254;
Name_Java : constant Name_Id := N + 255;
Name_Stdcall : constant Name_Id := N + 256;
Name_Stubbed : constant Name_Id := N + 257;
Last_Convention_Name : constant Name_Id := N + 257;
-- The following names are preset as synonyms for Assembler
Name_Asm : constant Name_Id := N + 258;
Name_Assembly : constant Name_Id := N + 259;
-- The following names are preset as synonyms for C
Name_Default : constant Name_Id := N + 260;
-- Name_Exernal (previously defined as pragma)
-- The following names are present as synonyms for Stdcall
Name_DLL : constant Name_Id := N + 261;
Name_Win32 : constant Name_Id := N + 262;
-- Other special names used in processing pragmas
Name_As_Is : constant Name_Id := N + 263;
Name_Body_File_Name : constant Name_Id := N + 264;
Name_Boolean_Entry_Barriers : constant Name_Id := N + 265;
Name_Casing : constant Name_Id := N + 266;
Name_Code : constant Name_Id := N + 267;
Name_Component : constant Name_Id := N + 268;
Name_Component_Size_4 : constant Name_Id := N + 269;
Name_Copy : constant Name_Id := N + 270;
Name_D_Float : constant Name_Id := N + 271;
Name_Descriptor : constant Name_Id := N + 272;
Name_Dot_Replacement : constant Name_Id := N + 273;
Name_Dynamic : constant Name_Id := N + 274;
Name_Entity : constant Name_Id := N + 275;
Name_External_Name : constant Name_Id := N + 276;
Name_First_Optional_Parameter : constant Name_Id := N + 277;
Name_Form : constant Name_Id := N + 278;
Name_G_Float : constant Name_Id := N + 279;
Name_Gcc : constant Name_Id := N + 280;
Name_Gnat : constant Name_Id := N + 281;
Name_GPL : constant Name_Id := N + 282;
Name_IEEE_Float : constant Name_Id := N + 283;
Name_Internal : constant Name_Id := N + 284;
Name_Link_Name : constant Name_Id := N + 285;
Name_Lowercase : constant Name_Id := N + 286;
Name_Max_Entry_Queue_Depth : constant Name_Id := N + 287;
Name_Max_Entry_Queue_Length : constant Name_Id := N + 288;
Name_Max_Size : constant Name_Id := N + 289;
Name_Mechanism : constant Name_Id := N + 290;
Name_Mixedcase : constant Name_Id := N + 291;
Name_Modified_GPL : constant Name_Id := N + 292;
Name_Name : constant Name_Id := N + 293;
Name_NCA : constant Name_Id := N + 294;
Name_No : constant Name_Id := N + 295;
Name_No_Dependence : constant Name_Id := N + 296;
Name_No_Dynamic_Attachment : constant Name_Id := N + 297;
Name_No_Dynamic_Interrupts : constant Name_Id := N + 298;
Name_No_Requeue : constant Name_Id := N + 299;
Name_No_Requeue_Statements : constant Name_Id := N + 300;
Name_No_Task_Attributes : constant Name_Id := N + 301;
Name_No_Task_Attributes_Package : constant Name_Id := N + 302;
Name_On : constant Name_Id := N + 303;
Name_Parameter_Types : constant Name_Id := N + 304;
Name_Reference : constant Name_Id := N + 305;
Name_Restricted : constant Name_Id := N + 306;
Name_Result_Mechanism : constant Name_Id := N + 307;
Name_Result_Type : constant Name_Id := N + 308;
Name_Runtime : constant Name_Id := N + 309;
Name_SB : constant Name_Id := N + 310;
Name_Secondary_Stack_Size : constant Name_Id := N + 311;
Name_Section : constant Name_Id := N + 312;
Name_Semaphore : constant Name_Id := N + 313;
Name_Simple_Barriers : constant Name_Id := N + 314;
Name_Spec_File_Name : constant Name_Id := N + 315;
Name_Static : constant Name_Id := N + 316;
Name_Stack_Size : constant Name_Id := N + 317;
Name_Subunit_File_Name : constant Name_Id := N + 318;
Name_Task_Stack_Size_Default : constant Name_Id := N + 319;
Name_Task_Type : constant Name_Id := N + 320;
Name_Time_Slicing_Enabled : constant Name_Id := N + 321;
Name_Top_Guard : constant Name_Id := N + 322;
Name_UBA : constant Name_Id := N + 323;
Name_UBS : constant Name_Id := N + 324;
Name_UBSB : constant Name_Id := N + 325;
Name_Unit_Name : constant Name_Id := N + 326;
Name_Unknown : constant Name_Id := N + 327;
Name_Unrestricted : constant Name_Id := N + 328;
Name_Uppercase : constant Name_Id := N + 329;
Name_User : constant Name_Id := N + 330;
Name_VAX_Float : constant Name_Id := N + 331;
Name_VMS : constant Name_Id := N + 332;
Name_Working_Storage : constant Name_Id := N + 333;
-- Names of recognized attributes. The entries with the comment "Ada 83"
-- are attributes that are defined in Ada 83, but not in Ada 95. These
-- attributes are implemented in both Ada 83 and Ada 95 modes in GNAT.
-- The entries marked GNAT are attributes that are defined by GNAT
-- and implemented in both Ada 83 and Ada 95 modes. Full descriptions
-- of these implementation dependent attributes may be found in the
-- appropriate section in package Sem_Attr in file sem-attr.ads.
-- The entries marked VMS are recognized only in OpenVMS implementations
-- of GNAT, and are treated as illegal in all other contexts.
First_Attribute_Name : constant Name_Id := N + 334;
Name_Abort_Signal : constant Name_Id := N + 334; -- GNAT
Name_Access : constant Name_Id := N + 335;
Name_Address : constant Name_Id := N + 336;
Name_Address_Size : constant Name_Id := N + 337; -- GNAT
Name_Aft : constant Name_Id := N + 338;
Name_Alignment : constant Name_Id := N + 339;
Name_Asm_Input : constant Name_Id := N + 340; -- GNAT
Name_Asm_Output : constant Name_Id := N + 341; -- GNAT
Name_AST_Entry : constant Name_Id := N + 342; -- VMS
Name_Bit : constant Name_Id := N + 343; -- GNAT
Name_Bit_Order : constant Name_Id := N + 344;
Name_Bit_Position : constant Name_Id := N + 345; -- GNAT
Name_Body_Version : constant Name_Id := N + 346;
Name_Callable : constant Name_Id := N + 347;
Name_Caller : constant Name_Id := N + 348;
Name_Code_Address : constant Name_Id := N + 349; -- GNAT
Name_Component_Size : constant Name_Id := N + 350;
Name_Compose : constant Name_Id := N + 351;
Name_Constrained : constant Name_Id := N + 352;
Name_Count : constant Name_Id := N + 353;
Name_Default_Bit_Order : constant Name_Id := N + 354; -- GNAT
Name_Definite : constant Name_Id := N + 355;
Name_Delta : constant Name_Id := N + 356;
Name_Denorm : constant Name_Id := N + 357;
Name_Digits : constant Name_Id := N + 358;
Name_Elaborated : constant Name_Id := N + 359; -- GNAT
Name_Emax : constant Name_Id := N + 360; -- Ada 83
Name_Enum_Rep : constant Name_Id := N + 361; -- GNAT
Name_Epsilon : constant Name_Id := N + 362; -- Ada 83
Name_Exponent : constant Name_Id := N + 363;
Name_External_Tag : constant Name_Id := N + 364;
Name_First : constant Name_Id := N + 365;
Name_First_Bit : constant Name_Id := N + 366;
Name_Fixed_Value : constant Name_Id := N + 367; -- GNAT
Name_Fore : constant Name_Id := N + 368;
Name_Has_Access_Values : constant Name_Id := N + 369; -- GNAT
Name_Has_Discriminants : constant Name_Id := N + 370; -- GNAT
Name_Identity : constant Name_Id := N + 371;
Name_Img : constant Name_Id := N + 372; -- GNAT
Name_Integer_Value : constant Name_Id := N + 373; -- GNAT
Name_Large : constant Name_Id := N + 374; -- Ada 83
Name_Last : constant Name_Id := N + 375;
Name_Last_Bit : constant Name_Id := N + 376;
Name_Leading_Part : constant Name_Id := N + 377;
Name_Length : constant Name_Id := N + 378;
Name_Machine_Emax : constant Name_Id := N + 379;
Name_Machine_Emin : constant Name_Id := N + 380;
Name_Machine_Mantissa : constant Name_Id := N + 381;
Name_Machine_Overflows : constant Name_Id := N + 382;
Name_Machine_Radix : constant Name_Id := N + 383;
Name_Machine_Rounds : constant Name_Id := N + 384;
Name_Machine_Size : constant Name_Id := N + 385; -- GNAT
Name_Mantissa : constant Name_Id := N + 386; -- Ada 83
Name_Max_Size_In_Storage_Elements : constant Name_Id := N + 387;
Name_Maximum_Alignment : constant Name_Id := N + 388; -- GNAT
Name_Mechanism_Code : constant Name_Id := N + 389; -- GNAT
Name_Mod : constant Name_Id := N + 390;
Name_Model_Emin : constant Name_Id := N + 391;
Name_Model_Epsilon : constant Name_Id := N + 392;
Name_Model_Mantissa : constant Name_Id := N + 393;
Name_Model_Small : constant Name_Id := N + 394;
Name_Modulus : constant Name_Id := N + 395;
Name_Null_Parameter : constant Name_Id := N + 396; -- GNAT
Name_Object_Size : constant Name_Id := N + 397; -- GNAT
Name_Partition_ID : constant Name_Id := N + 398;
Name_Passed_By_Reference : constant Name_Id := N + 399; -- GNAT
Name_Pool_Address : constant Name_Id := N + 400;
Name_Pos : constant Name_Id := N + 401;
Name_Position : constant Name_Id := N + 402;
Name_Range : constant Name_Id := N + 403;
Name_Range_Length : constant Name_Id := N + 404; -- GNAT
Name_Round : constant Name_Id := N + 405;
Name_Safe_Emax : constant Name_Id := N + 406; -- Ada 83
Name_Safe_First : constant Name_Id := N + 407;
Name_Safe_Large : constant Name_Id := N + 408; -- Ada 83
Name_Safe_Last : constant Name_Id := N + 409;
Name_Safe_Small : constant Name_Id := N + 410; -- Ada 83
Name_Scale : constant Name_Id := N + 411;
Name_Scaling : constant Name_Id := N + 412;
Name_Signed_Zeros : constant Name_Id := N + 413;
Name_Size : constant Name_Id := N + 414;
Name_Small : constant Name_Id := N + 415;
Name_Storage_Size : constant Name_Id := N + 416;
Name_Storage_Unit : constant Name_Id := N + 417; -- GNAT
Name_Stream_Size : constant Name_Id := N + 418; -- Ada 05
Name_Tag : constant Name_Id := N + 419;
Name_Target_Name : constant Name_Id := N + 420; -- GNAT
Name_Terminated : constant Name_Id := N + 421;
Name_To_Address : constant Name_Id := N + 422; -- GNAT
Name_Type_Class : constant Name_Id := N + 423; -- GNAT
Name_UET_Address : constant Name_Id := N + 424; -- GNAT
Name_Unbiased_Rounding : constant Name_Id := N + 425;
Name_Unchecked_Access : constant Name_Id := N + 426;
Name_Unconstrained_Array : constant Name_Id := N + 427;
Name_Universal_Literal_String : constant Name_Id := N + 428; -- GNAT
Name_Unrestricted_Access : constant Name_Id := N + 429; -- GNAT
Name_VADS_Size : constant Name_Id := N + 430; -- GNAT
Name_Val : constant Name_Id := N + 431;
Name_Valid : constant Name_Id := N + 432;
Name_Value_Size : constant Name_Id := N + 433; -- GNAT
Name_Version : constant Name_Id := N + 434;
Name_Wchar_T_Size : constant Name_Id := N + 435; -- GNAT
Name_Wide_Wide_Width : constant Name_Id := N + 436; -- Ada 05
Name_Wide_Width : constant Name_Id := N + 437;
Name_Width : constant Name_Id := N + 438;
Name_Word_Size : constant Name_Id := N + 439; -- GNAT
-- Attributes that designate attributes returning renamable functions,
-- i.e. functions that return other than a universal value and that
-- have non-universal arguments.
First_Renamable_Function_Attribute : constant Name_Id := N + 440;
Name_Adjacent : constant Name_Id := N + 440;
Name_Ceiling : constant Name_Id := N + 441;
Name_Copy_Sign : constant Name_Id := N + 442;
Name_Floor : constant Name_Id := N + 443;
Name_Fraction : constant Name_Id := N + 444;
Name_Image : constant Name_Id := N + 445;
Name_Input : constant Name_Id := N + 446;
Name_Machine : constant Name_Id := N + 447;
Name_Max : constant Name_Id := N + 448;
Name_Min : constant Name_Id := N + 449;
Name_Model : constant Name_Id := N + 450;
Name_Pred : constant Name_Id := N + 451;
Name_Remainder : constant Name_Id := N + 452;
Name_Rounding : constant Name_Id := N + 453;
Name_Succ : constant Name_Id := N + 454;
Name_Truncation : constant Name_Id := N + 455;
Name_Value : constant Name_Id := N + 456;
Name_Wide_Image : constant Name_Id := N + 457;
Name_Wide_Wide_Image : constant Name_Id := N + 458;
Name_Wide_Value : constant Name_Id := N + 459;
Name_Wide_Wide_Value : constant Name_Id := N + 460;
Last_Renamable_Function_Attribute : constant Name_Id := N + 460;
-- Attributes that designate procedures
First_Procedure_Attribute : constant Name_Id := N + 461;
Name_Output : constant Name_Id := N + 461;
Name_Read : constant Name_Id := N + 462;
Name_Write : constant Name_Id := N + 463;
Last_Procedure_Attribute : constant Name_Id := N + 463;
-- Remaining attributes are ones that return entities
First_Entity_Attribute_Name : constant Name_Id := N + 464;
Name_Elab_Body : constant Name_Id := N + 464; -- GNAT
Name_Elab_Spec : constant Name_Id := N + 465; -- GNAT
Name_Storage_Pool : constant Name_Id := N + 466;
-- These attributes are the ones that return types
First_Type_Attribute_Name : constant Name_Id := N + 467;
Name_Base : constant Name_Id := N + 467;
Name_Class : constant Name_Id := N + 468;
Last_Type_Attribute_Name : constant Name_Id := N + 468;
Last_Entity_Attribute_Name : constant Name_Id := N + 468;
Last_Attribute_Name : constant Name_Id := N + 468;
-- Names of recognized locking policy identifiers
-- Note: policies are identified by the first character of the
-- name (e.g. C for Ceiling_Locking). If new policy names are added,
-- the first character must be distinct.
First_Locking_Policy_Name : constant Name_Id := N + 469;
Name_Ceiling_Locking : constant Name_Id := N + 469;
Name_Inheritance_Locking : constant Name_Id := N + 470;
Last_Locking_Policy_Name : constant Name_Id := N + 470;
-- Names of recognized queuing policy identifiers.
-- Note: policies are identified by the first character of the
-- name (e.g. F for FIFO_Queuing). If new policy names are added,
-- the first character must be distinct.
First_Queuing_Policy_Name : constant Name_Id := N + 471;
Name_FIFO_Queuing : constant Name_Id := N + 471;
Name_Priority_Queuing : constant Name_Id := N + 472;
Last_Queuing_Policy_Name : constant Name_Id := N + 472;
-- Names of recognized task dispatching policy identifiers
-- Note: policies are identified by the first character of the
-- name (e.g. F for FIFO_WIthinn_Priorities). If new policy names
-- are added, the first character must be distinct.
First_Task_Dispatching_Policy_Name : constant Name_Id := N + 473;
Name_FIFO_Within_Priorities : constant Name_Id := N + 473;
Last_Task_Dispatching_Policy_Name : constant Name_Id := N + 473;
-- Names of recognized checks for pragma Suppress
First_Check_Name : constant Name_Id := N + 474;
Name_Access_Check : constant Name_Id := N + 474;
Name_Accessibility_Check : constant Name_Id := N + 475;
Name_Discriminant_Check : constant Name_Id := N + 476;
Name_Division_Check : constant Name_Id := N + 477;
Name_Elaboration_Check : constant Name_Id := N + 478;
Name_Index_Check : constant Name_Id := N + 479;
Name_Length_Check : constant Name_Id := N + 480;
Name_Overflow_Check : constant Name_Id := N + 481;
Name_Range_Check : constant Name_Id := N + 482;
Name_Storage_Check : constant Name_Id := N + 483;
Name_Tag_Check : constant Name_Id := N + 484;
Name_All_Checks : constant Name_Id := N + 485;
Last_Check_Name : constant Name_Id := N + 485;
-- Names corresponding to reserved keywords, excluding those already
-- declared in the attribute list (Access, Delta, Digits, Mod, Range).
Name_Abort : constant Name_Id := N + 486;
Name_Abs : constant Name_Id := N + 487;
Name_Accept : constant Name_Id := N + 488;
Name_And : constant Name_Id := N + 489;
Name_All : constant Name_Id := N + 490;
Name_Array : constant Name_Id := N + 491;
Name_At : constant Name_Id := N + 492;
Name_Begin : constant Name_Id := N + 493;
Name_Body : constant Name_Id := N + 494;
Name_Case : constant Name_Id := N + 495;
Name_Constant : constant Name_Id := N + 496;
Name_Declare : constant Name_Id := N + 497;
Name_Delay : constant Name_Id := N + 498;
Name_Do : constant Name_Id := N + 499;
Name_Else : constant Name_Id := N + 500;
Name_Elsif : constant Name_Id := N + 501;
Name_End : constant Name_Id := N + 502;
Name_Entry : constant Name_Id := N + 503;
Name_Exception : constant Name_Id := N + 504;
Name_Exit : constant Name_Id := N + 505;
Name_For : constant Name_Id := N + 506;
Name_Function : constant Name_Id := N + 507;
Name_Generic : constant Name_Id := N + 508;
Name_Goto : constant Name_Id := N + 509;
Name_If : constant Name_Id := N + 510;
Name_In : constant Name_Id := N + 511;
Name_Is : constant Name_Id := N + 512;
Name_Limited : constant Name_Id := N + 513;
Name_Loop : constant Name_Id := N + 514;
Name_New : constant Name_Id := N + 515;
Name_Not : constant Name_Id := N + 516;
Name_Null : constant Name_Id := N + 517;
Name_Of : constant Name_Id := N + 518;
Name_Or : constant Name_Id := N + 519;
Name_Others : constant Name_Id := N + 520;
Name_Out : constant Name_Id := N + 521;
Name_Package : constant Name_Id := N + 522;
Name_Pragma : constant Name_Id := N + 523;
Name_Private : constant Name_Id := N + 524;
Name_Procedure : constant Name_Id := N + 525;
Name_Raise : constant Name_Id := N + 526;
Name_Record : constant Name_Id := N + 527;
Name_Rem : constant Name_Id := N + 528;
Name_Renames : constant Name_Id := N + 529;
Name_Return : constant Name_Id := N + 530;
Name_Reverse : constant Name_Id := N + 531;
Name_Select : constant Name_Id := N + 532;
Name_Separate : constant Name_Id := N + 533;
Name_Subtype : constant Name_Id := N + 534;
Name_Task : constant Name_Id := N + 535;
Name_Terminate : constant Name_Id := N + 536;
Name_Then : constant Name_Id := N + 537;
Name_Type : constant Name_Id := N + 538;
Name_Use : constant Name_Id := N + 539;
Name_When : constant Name_Id := N + 540;
Name_While : constant Name_Id := N + 541;
Name_With : constant Name_Id := N + 542;
Name_Xor : constant Name_Id := N + 543;
-- Names of intrinsic subprograms
-- Note: Asm is missing from this list, since Asm is a legitimate
-- convention name. So is To_Adress, which is a GNAT attribute.
First_Intrinsic_Name : constant Name_Id := N + 544;
Name_Divide : constant Name_Id := N + 544;
Name_Enclosing_Entity : constant Name_Id := N + 545;
Name_Exception_Information : constant Name_Id := N + 546;
Name_Exception_Message : constant Name_Id := N + 547;
Name_Exception_Name : constant Name_Id := N + 548;
Name_File : constant Name_Id := N + 549;
Name_Import_Address : constant Name_Id := N + 550;
Name_Import_Largest_Value : constant Name_Id := N + 551;
Name_Import_Value : constant Name_Id := N + 552;
Name_Is_Negative : constant Name_Id := N + 553;
Name_Line : constant Name_Id := N + 554;
Name_Rotate_Left : constant Name_Id := N + 555;
Name_Rotate_Right : constant Name_Id := N + 556;
Name_Shift_Left : constant Name_Id := N + 557;
Name_Shift_Right : constant Name_Id := N + 558;
Name_Shift_Right_Arithmetic : constant Name_Id := N + 559;
Name_Source_Location : constant Name_Id := N + 560;
Name_Unchecked_Conversion : constant Name_Id := N + 561;
Name_Unchecked_Deallocation : constant Name_Id := N + 562;
Name_To_Pointer : constant Name_Id := N + 563;
Last_Intrinsic_Name : constant Name_Id := N + 563;
-- Reserved words used only in Ada 95
First_95_Reserved_Word : constant Name_Id := N + 564;
Name_Abstract : constant Name_Id := N + 564;
Name_Aliased : constant Name_Id := N + 565;
Name_Protected : constant Name_Id := N + 566;
Name_Until : constant Name_Id := N + 567;
Name_Requeue : constant Name_Id := N + 568;
Name_Tagged : constant Name_Id := N + 569;
Last_95_Reserved_Word : constant Name_Id := N + 569;
subtype Ada_95_Reserved_Words is
Name_Id range First_95_Reserved_Word .. Last_95_Reserved_Word;
-- Miscellaneous names used in semantic checking
Name_Raise_Exception : constant Name_Id := N + 570;
-- Additional reserved words and identifiers used in GNAT Project Files
-- Note that Name_External is already previously declared
Name_Ada_Roots : constant Name_Id := N + 571;
Name_Binder : constant Name_Id := N + 572;
Name_Binder_Driver : constant Name_Id := N + 573;
Name_Body_Suffix : constant Name_Id := N + 574;
Name_Builder : constant Name_Id := N + 575;
Name_Compiler : constant Name_Id := N + 576;
Name_Compiler_Driver : constant Name_Id := N + 577;
Name_Compiler_Kind : constant Name_Id := N + 578;
Name_Compute_Dependency : constant Name_Id := N + 579;
Name_Cross_Reference : constant Name_Id := N + 580;
Name_Default_Linker : constant Name_Id := N + 581;
Name_Default_Switches : constant Name_Id := N + 582;
Name_Dependency_Option : constant Name_Id := N + 583;
Name_Exec_Dir : constant Name_Id := N + 584;
Name_Executable : constant Name_Id := N + 585;
Name_Executable_Suffix : constant Name_Id := N + 586;
Name_Extends : constant Name_Id := N + 587;
Name_Externally_Built : constant Name_Id := N + 588;
Name_Finder : constant Name_Id := N + 589;
Name_Global_Configuration_Pragmas : constant Name_Id := N + 590;
Name_Gnatls : constant Name_Id := N + 591;
Name_Gnatstub : constant Name_Id := N + 592;
Name_Implementation : constant Name_Id := N + 593;
Name_Implementation_Exceptions : constant Name_Id := N + 594;
Name_Implementation_Suffix : constant Name_Id := N + 595;
Name_Include_Option : constant Name_Id := N + 596;
Name_Language_Processing : constant Name_Id := N + 597;
Name_Languages : constant Name_Id := N + 598;
Name_Library_Dir : constant Name_Id := N + 599;
Name_Library_Auto_Init : constant Name_Id := N + 600;
Name_Library_GCC : constant Name_Id := N + 601;
Name_Library_Interface : constant Name_Id := N + 602;
Name_Library_Kind : constant Name_Id := N + 603;
Name_Library_Name : constant Name_Id := N + 604;
Name_Library_Options : constant Name_Id := N + 605;
Name_Library_Reference_Symbol_File : constant Name_Id := N + 606;
Name_Library_Src_Dir : constant Name_Id := N + 607;
Name_Library_Symbol_File : constant Name_Id := N + 608;
Name_Library_Symbol_Policy : constant Name_Id := N + 609;
Name_Library_Version : constant Name_Id := N + 610;
Name_Linker : constant Name_Id := N + 611;
Name_Local_Configuration_Pragmas : constant Name_Id := N + 612;
Name_Locally_Removed_Files : constant Name_Id := N + 613;
Name_Metrics : constant Name_Id := N + 614;
Name_Naming : constant Name_Id := N + 615;
Name_Object_Dir : constant Name_Id := N + 616;
Name_Pretty_Printer : constant Name_Id := N + 617;
Name_Project : constant Name_Id := N + 618;
Name_Separate_Suffix : constant Name_Id := N + 619;
Name_Source_Dirs : constant Name_Id := N + 620;
Name_Source_Files : constant Name_Id := N + 621;
Name_Source_List_File : constant Name_Id := N + 622;
Name_Spec : constant Name_Id := N + 623;
Name_Spec_Suffix : constant Name_Id := N + 624;
Name_Specification : constant Name_Id := N + 625;
Name_Specification_Exceptions : constant Name_Id := N + 626;
Name_Specification_Suffix : constant Name_Id := N + 627;
Name_Switches : constant Name_Id := N + 628;
-- Other miscellaneous names used in front end
Name_Unaligned_Valid : constant Name_Id := N + 629;
-- ----------------------------------------------------------------
First_2005_Reserved_Word : constant Name_Id := N + 630;
Name_Interface : constant Name_Id := N + 630;
Name_Overriding : constant Name_Id := N + 631;
Name_Synchronized : constant Name_Id := N + 632;
Last_2005_Reserved_Word : constant Name_Id := N + 632;
subtype Ada_2005_Reserved_Words is
Name_Id range First_2005_Reserved_Word .. Last_2005_Reserved_Word;
-- Mark last defined name for consistency check in Snames body
Last_Predefined_Name : constant Name_Id := N + 632;
subtype Any_Operator_Name is Name_Id range
First_Operator_Name .. Last_Operator_Name;
------------------------------
-- Attribute ID Definitions --
------------------------------
type Attribute_Id is (
Attribute_Abort_Signal,
Attribute_Access,
Attribute_Address,
Attribute_Address_Size,
Attribute_Aft,
Attribute_Alignment,
Attribute_Asm_Input,
Attribute_Asm_Output,
Attribute_AST_Entry,
Attribute_Bit,
Attribute_Bit_Order,
Attribute_Bit_Position,
Attribute_Body_Version,
Attribute_Callable,
Attribute_Caller,
Attribute_Code_Address,
Attribute_Component_Size,
Attribute_Compose,
Attribute_Constrained,
Attribute_Count,
Attribute_Default_Bit_Order,
Attribute_Definite,
Attribute_Delta,
Attribute_Denorm,
Attribute_Digits,
Attribute_Elaborated,
Attribute_Emax,
Attribute_Enum_Rep,
Attribute_Epsilon,
Attribute_Exponent,
Attribute_External_Tag,
Attribute_First,
Attribute_First_Bit,
Attribute_Fixed_Value,
Attribute_Fore,
Attribute_Has_Access_Values,
Attribute_Has_Discriminants,
Attribute_Identity,
Attribute_Img,
Attribute_Integer_Value,
Attribute_Large,
Attribute_Last,
Attribute_Last_Bit,
Attribute_Leading_Part,
Attribute_Length,
Attribute_Machine_Emax,
Attribute_Machine_Emin,
Attribute_Machine_Mantissa,
Attribute_Machine_Overflows,
Attribute_Machine_Radix,
Attribute_Machine_Rounds,
Attribute_Machine_Size,
Attribute_Mantissa,
Attribute_Max_Size_In_Storage_Elements,
Attribute_Maximum_Alignment,
Attribute_Mechanism_Code,
Attribute_Mod,
Attribute_Model_Emin,
Attribute_Model_Epsilon,
Attribute_Model_Mantissa,
Attribute_Model_Small,
Attribute_Modulus,
Attribute_Null_Parameter,
Attribute_Object_Size,
Attribute_Partition_ID,
Attribute_Passed_By_Reference,
Attribute_Pool_Address,
Attribute_Pos,
Attribute_Position,
Attribute_Range,
Attribute_Range_Length,
Attribute_Round,
Attribute_Safe_Emax,
Attribute_Safe_First,
Attribute_Safe_Large,
Attribute_Safe_Last,
Attribute_Safe_Small,
Attribute_Scale,
Attribute_Scaling,
Attribute_Signed_Zeros,
Attribute_Size,
Attribute_Small,
Attribute_Storage_Size,
Attribute_Storage_Unit,
Attribute_Stream_Size,
Attribute_Tag,
Attribute_Target_Name,
Attribute_Terminated,
Attribute_To_Address,
Attribute_Type_Class,
Attribute_UET_Address,
Attribute_Unbiased_Rounding,
Attribute_Unchecked_Access,
Attribute_Unconstrained_Array,
Attribute_Universal_Literal_String,
Attribute_Unrestricted_Access,
Attribute_VADS_Size,
Attribute_Val,
Attribute_Valid,
Attribute_Value_Size,
Attribute_Version,
Attribute_Wchar_T_Size,
Attribute_Wide_Wide_Width,
Attribute_Wide_Width,
Attribute_Width,
Attribute_Word_Size,
-- Attributes designating renamable functions
Attribute_Adjacent,
Attribute_Ceiling,
Attribute_Copy_Sign,
Attribute_Floor,
Attribute_Fraction,
Attribute_Image,
Attribute_Input,
Attribute_Machine,
Attribute_Max,
Attribute_Min,
Attribute_Model,
Attribute_Pred,
Attribute_Remainder,
Attribute_Rounding,
Attribute_Succ,
Attribute_Truncation,
Attribute_Value,
Attribute_Wide_Image,
Attribute_Wide_Wide_Image,
Attribute_Wide_Value,
Attribute_Wide_Wide_Value,
-- Attributes designating procedures
Attribute_Output,
Attribute_Read,
Attribute_Write,
-- Entity attributes (includes type attributes)
Attribute_Elab_Body,
Attribute_Elab_Spec,
Attribute_Storage_Pool,
-- Type attributes
Attribute_Base,
Attribute_Class);
------------------------------------
-- Convention Name ID Definitions --
------------------------------------
type Convention_Id is (
-- The conventions that are defined by the RM come first
Convention_Ada,
Convention_Intrinsic,
Convention_Entry,
Convention_Protected,
-- The remaining conventions are foreign language conventions
Convention_Assembler, -- also Asm, Assembly
Convention_C, -- also Default, External
Convention_COBOL,
Convention_CPP,
Convention_Fortran,
Convention_Java,
Convention_Stdcall, -- also DLL, Win32
Convention_Stubbed);
-- Note: Convention C_Pass_By_Copy is allowed only for record
-- types (where it is treated like C except that the appropriate
-- flag is set in the record type). Recognizion of this convention
-- is specially handled in Sem_Prag.
for Convention_Id'Size use 8;
-- Plenty of space for expansion
subtype Foreign_Convention is
Convention_Id range Convention_Assembler .. Convention_Stdcall;
-----------------------------------
-- Locking Policy ID Definitions --
-----------------------------------
type Locking_Policy_Id is (
Locking_Policy_Inheritance_Locking,
Locking_Policy_Ceiling_Locking);
---------------------------
-- Pragma ID Definitions --
---------------------------
type Pragma_Id is (
-- Configuration pragmas
Pragma_Ada_83,
Pragma_Ada_95,
Pragma_Ada_05,
Pragma_C_Pass_By_Copy,
Pragma_Compile_Time_Warning,
Pragma_Component_Alignment,
Pragma_Convention_Identifier,
Pragma_Detect_Blocking,
Pragma_Discard_Names,
Pragma_Elaboration_Checks,
Pragma_Eliminate,
Pragma_Explicit_Overriding,
Pragma_Extend_System,
Pragma_Extensions_Allowed,
Pragma_External_Name_Casing,
Pragma_Float_Representation,
Pragma_Initialize_Scalars,
Pragma_Interrupt_State,
Pragma_License,
Pragma_Locking_Policy,
Pragma_Long_Float,
Pragma_No_Run_Time,
Pragma_No_Strict_Aliasing,
Pragma_Normalize_Scalars,
Pragma_Polling,
Pragma_Persistent_Data,
Pragma_Persistent_Object,
Pragma_Profile,
Pragma_Profile_Warnings,
Pragma_Propagate_Exceptions,
Pragma_Queuing_Policy,
Pragma_Ravenscar,
Pragma_Restricted_Run_Time,
Pragma_Restrictions,
Pragma_Restriction_Warnings,
Pragma_Reviewable,
Pragma_Source_File_Name,
Pragma_Source_File_Name_Project,
Pragma_Style_Checks,
Pragma_Suppress,
Pragma_Suppress_Exception_Locations,
Pragma_Task_Dispatching_Policy,
Pragma_Universal_Data,
Pragma_Unsuppress,
Pragma_Use_VADS_Size,
Pragma_Validity_Checks,
Pragma_Warnings,
-- Remaining (non-configuration) pragmas
Pragma_Abort_Defer,
Pragma_All_Calls_Remote,
Pragma_Annotate,
Pragma_Assert,
Pragma_Asynchronous,
Pragma_Atomic,
Pragma_Atomic_Components,
Pragma_Attach_Handler,
Pragma_Comment,
Pragma_Common_Object,
Pragma_Complex_Representation,
Pragma_Controlled,
Pragma_Convention,
Pragma_CPP_Class,
Pragma_CPP_Constructor,
Pragma_CPP_Virtual,
Pragma_CPP_Vtable,
Pragma_Debug,
Pragma_Elaborate,
Pragma_Elaborate_All,
Pragma_Elaborate_Body,
Pragma_Export,
Pragma_Export_Exception,
Pragma_Export_Function,
Pragma_Export_Object,
Pragma_Export_Procedure,
Pragma_Export_Value,
Pragma_Export_Valued_Procedure,
Pragma_External,
Pragma_Finalize_Storage_Only,
Pragma_Ident,
Pragma_Import,
Pragma_Import_Exception,
Pragma_Import_Function,
Pragma_Import_Object,
Pragma_Import_Procedure,
Pragma_Import_Valued_Procedure,
Pragma_Inline,
Pragma_Inline_Always,
Pragma_Inline_Generic,
Pragma_Inspection_Point,
Pragma_Interface_Name,
Pragma_Interrupt_Handler,
Pragma_Interrupt_Priority,
Pragma_Java_Constructor,
Pragma_Java_Interface,
Pragma_Keep_Names,
Pragma_Link_With,
Pragma_Linker_Alias,
Pragma_Linker_Options,
Pragma_Linker_Section,
Pragma_List,
Pragma_Machine_Attribute,
Pragma_Main,
Pragma_Main_Storage,
Pragma_Memory_Size,
Pragma_No_Return,
Pragma_Obsolescent,
Pragma_Optimize,
Pragma_Optional_Overriding,
Pragma_Pack,
Pragma_Page,
Pragma_Passive,
Pragma_Preelaborate,
Pragma_Priority,
Pragma_Psect_Object,
Pragma_Pure,
Pragma_Pure_Function,
Pragma_Remote_Call_Interface,
Pragma_Remote_Types,
Pragma_Share_Generic,
Pragma_Shared,
Pragma_Shared_Passive,
Pragma_Source_Reference,
Pragma_Stream_Convert,
Pragma_Subtitle,
Pragma_Suppress_All,
Pragma_Suppress_Debug_Info,
Pragma_Suppress_Initialization,
Pragma_System_Name,
Pragma_Task_Info,
Pragma_Task_Name,
Pragma_Task_Storage,
Pragma_Thread_Body,
Pragma_Time_Slice,
Pragma_Title,
Pragma_Unchecked_Union,
Pragma_Unimplemented_Unit,
Pragma_Unreferenced,
Pragma_Unreserve_All_Interrupts,
Pragma_Volatile,
Pragma_Volatile_Components,
Pragma_Weak_External,
-- The following pragmas are on their own, out of order, because of
-- the special processing required to deal with the fact that their
-- names match existing attribute names.
Pragma_AST_Entry,
Pragma_Interface,
Pragma_Storage_Size,
Pragma_Storage_Unit,
-- The value to represent an unknown or unrecognized pragma
Unknown_Pragma);
-----------------------------------
-- Queuing Policy ID definitions --
-----------------------------------
type Queuing_Policy_Id is (
Queuing_Policy_FIFO_Queuing,
Queuing_Policy_Priority_Queuing);
--------------------------------------------
-- Task Dispatching Policy ID definitions --
--------------------------------------------
type Task_Dispatching_Policy_Id is (
Task_Dispatching_FIFO_Within_Priorities);
-- Id values used to identify task dispatching policies
-----------------
-- Subprograms --
-----------------
procedure Initialize;
-- Called to initialize the preset names in the names table.
function Is_Attribute_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized attribute
function Is_Entity_Attribute_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized entity attribute,
-- i.e. an attribute reference that returns an entity.
function Is_Procedure_Attribute_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized attribute that
-- designates a procedure (and can therefore appear as a statement).
function Is_Function_Attribute_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized attribute
-- that designates a renameable function, and can therefore appear in
-- a renaming statement. Note that not all attributes designating
-- functions are renamable, in particular, thos returning a universal
-- value cannot be renamed.
function Is_Type_Attribute_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized type attribute,
-- i.e. an attribute reference that returns a type
function Is_Check_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized suppress check
-- as required by pragma Suppress.
function Is_Convention_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of one of the recognized
-- language conventions, as required by pragma Convention, Import,
-- Export, Interface. Returns True if so. Also returns True for a
-- name that has been specified by a Convention_Identifier pragma.
-- If neither case holds, returns False.
function Is_Locking_Policy_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized locking policy
function Is_Operator_Symbol_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of an operator symbol
function Is_Pragma_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized pragma. Note
-- that pragmas AST_Entry, Storage_Size, and Storage_Unit are recognized
-- as pragmas by this function even though their names are separate from
-- the other pragma names.
function Is_Queuing_Policy_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized queuing policy
function Is_Task_Dispatching_Policy_Name (N : Name_Id) return Boolean;
-- Test to see if the name N is the name of a recognized task
-- dispatching policy.
function Get_Attribute_Id (N : Name_Id) return Attribute_Id;
-- Returns Id of attribute corresponding to given name. It is an error to
-- call this function with a name that is not the name of a attribute.
function Get_Convention_Id (N : Name_Id) return Convention_Id;
-- Returns Id of language convention corresponding to given name. It is an
-- to call this function with a name that is not the name of a convention,
-- or one previously given in a call to Record_Convention_Identifier.
function Get_Check_Id (N : Name_Id) return Check_Id;
-- Returns Id of suppress check corresponding to given name. It is an error
-- to call this function with a name that is not the name of a check.
function Get_Locking_Policy_Id (N : Name_Id) return Locking_Policy_Id;
-- Returns Id of locking policy corresponding to given name. It is an error
-- to call this function with a name that is not the name of a check.
function Get_Pragma_Id (N : Name_Id) return Pragma_Id;
-- Returns Id of pragma corresponding to given name. Returns Unknown_Pragma
-- if N is not a name of a known (Ada defined or GNAT-specific) pragma.
-- Note that the function also works correctly for names of pragmas that
-- are not in the main list of pragma Names (AST_Entry, Storage_Size, and
-- Storage_Unit (e.g. Name_Storage_Size returns Pragma_Storage_Size).
function Get_Queuing_Policy_Id (N : Name_Id) return Queuing_Policy_Id;
-- Returns Id of queuing policy corresponding to given name. It is an error
-- to call this function with a name that is not the name of a check.
function Get_Task_Dispatching_Policy_Id
(N : Name_Id)
return Task_Dispatching_Policy_Id;
-- Returns Id of task dispatching policy corresponding to given name.
-- It is an error to call this function with a name that is not the
-- name of a check.
procedure Record_Convention_Identifier
(Id : Name_Id;
Convention : Convention_Id);
-- A call to this procedure, resulting from an occurrence of a pragma
-- Convention_Identifier, records that from now on an occurrence of
-- Id will be recognized as a name for the specified convention.
private
pragma Inline (Is_Attribute_Name);
pragma Inline (Is_Entity_Attribute_Name);
pragma Inline (Is_Type_Attribute_Name);
pragma Inline (Is_Check_Name);
pragma Inline (Is_Locking_Policy_Name);
pragma Inline (Is_Operator_Symbol_Name);
pragma Inline (Is_Queuing_Policy_Name);
pragma Inline (Is_Pragma_Name);
pragma Inline (Is_Task_Dispatching_Policy_Name);
end Snames;