1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
9 -- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception, --
20 -- version 3.1, as published by the Free Software Foundation. --
22 -- You should have received a copy of the GNU General Public License and --
23 -- a copy of the GCC Runtime Library Exception along with this program; --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25 -- <http://www.gnu.org/licenses/>. --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
30 ------------------------------------------------------------------------------
32 -- This package contains the declarations of entities in package Standard,
33 -- These values are initialized either by calling CStand.Create_Standard,
34 -- or by calling Stand.Tree_Read.
36 with Types; use Types;
38 -- Do we really need the with of Namet?
40 pragma Warnings (Off);
41 with Namet; use Namet;
42 pragma Elaborate_All (Namet);
47 type Standard_Entity_Type is (
48 -- This enumeration type contains an entry for each name in Standard
55 -- Types and subtypes defined in package Standard (in the order in which
56 -- they appear in the RM, so that the declarations are in the right
57 -- order for the purposes of ASIS traversals
61 S_Short_Short_Integer,
77 S_Wide_Wide_Character,
85 -- Enumeration literals for type Boolean
90 -- Exceptions declared in package Standard
98 -- Binary Operators declared in package Standard
120 -- Unary operators declared in package Standard
127 -- Constants defined in package ASCII (with value in hex).
128 -- First the thirty-two C0 control characters)
163 -- Here are the ones for Colonel Whitaker's O26 keypunch!
166 S_Quotation, -- 16#22#
170 S_Ampersand, -- 16#26#
173 S_Semicolon, -- 16#3B#
178 S_L_Bracket, -- 16#5B#
179 S_Back_Slash, -- 16#5C#
180 S_R_Bracket, -- 16#5D#
181 S_Circumflex, -- 16#5E#
182 S_Underline, -- 16#5F#
217 -- And one more control character, all on its own
222 Standard_Entity_Type range S_Boolean .. S_Duration;
224 subtype S_Exceptions is
225 Standard_Entity_Type range S_Constraint_Error .. S_Tasking_Error;
227 subtype S_ASCII_Names is
228 Standard_Entity_Type range S_NUL .. S_DEL;
230 subtype S_Binary_Ops is
231 Standard_Entity_Type range S_Op_Add .. S_Op_Xor;
233 subtype S_Unary_Ops is
234 Standard_Entity_Type range S_Op_Abs .. S_Op_Plus;
236 type Standard_Entity_Array_Type is array (Standard_Entity_Type) of Node_Id;
238 Standard_Entity : Standard_Entity_Array_Type;
239 -- This array contains pointers to the Defining Identifier nodes
240 -- for each of the entities defined in Standard_Entities_Type. It
241 -- is initialized by the Create_Standard procedure.
243 Standard_Package_Node : Node_Id;
244 -- Points to the N_Package_Declaration node for standard. Also
245 -- initialized by the Create_Standard procedure.
247 -- The following Entities are the pointers to the Defining Identifier
248 -- nodes for some visible entities defined in Standard_Entities_Type.
250 SE : Standard_Entity_Array_Type renames Standard_Entity;
252 Standard_Standard : Entity_Id renames SE (S_Standard);
254 Standard_ASCII : Entity_Id renames SE (S_ASCII);
255 Standard_Character : Entity_Id renames SE (S_Character);
256 Standard_Wide_Character : Entity_Id renames SE (S_Wide_Character);
257 Standard_Wide_Wide_Character : Entity_Id renames SE (S_Wide_Wide_Character);
258 Standard_String : Entity_Id renames SE (S_String);
259 Standard_Wide_String : Entity_Id renames SE (S_Wide_String);
260 Standard_Wide_Wide_String : Entity_Id renames SE (S_Wide_Wide_String);
262 Standard_Boolean : Entity_Id renames SE (S_Boolean);
263 Standard_False : Entity_Id renames SE (S_False);
264 Standard_True : Entity_Id renames SE (S_True);
266 Standard_Duration : Entity_Id renames SE (S_Duration);
268 Standard_Natural : Entity_Id renames SE (S_Natural);
269 Standard_Positive : Entity_Id renames SE (S_Positive);
271 Standard_Constraint_Error : Entity_Id renames SE (S_Constraint_Error);
272 Standard_Numeric_Error : Entity_Id renames SE (S_Numeric_Error);
273 Standard_Program_Error : Entity_Id renames SE (S_Program_Error);
274 Standard_Storage_Error : Entity_Id renames SE (S_Storage_Error);
275 Standard_Tasking_Error : Entity_Id renames SE (S_Tasking_Error);
277 Standard_Short_Float : Entity_Id renames SE (S_Short_Float);
278 Standard_Float : Entity_Id renames SE (S_Float);
279 Standard_Long_Float : Entity_Id renames SE (S_Long_Float);
280 Standard_Long_Long_Float : Entity_Id renames SE (S_Long_Long_Float);
282 Standard_Short_Short_Integer : Entity_Id renames SE (S_Short_Short_Integer);
283 Standard_Short_Integer : Entity_Id renames SE (S_Short_Integer);
284 Standard_Integer : Entity_Id renames SE (S_Integer);
285 Standard_Long_Integer : Entity_Id renames SE (S_Long_Integer);
286 Standard_Long_Long_Integer : Entity_Id renames SE (S_Long_Long_Integer);
288 Standard_Op_Add : Entity_Id renames SE (S_Op_Add);
289 Standard_Op_And : Entity_Id renames SE (S_Op_And);
290 Standard_Op_Concat : Entity_Id renames SE (S_Op_Concat);
291 Standard_Op_Concatw : Entity_Id renames SE (S_Op_Concatw);
292 Standard_Op_Concatww : Entity_Id renames SE (S_Op_Concatww);
293 Standard_Op_Divide : Entity_Id renames SE (S_Op_Divide);
294 Standard_Op_Eq : Entity_Id renames SE (S_Op_Eq);
295 Standard_Op_Expon : Entity_Id renames SE (S_Op_Expon);
296 Standard_Op_Ge : Entity_Id renames SE (S_Op_Ge);
297 Standard_Op_Gt : Entity_Id renames SE (S_Op_Gt);
298 Standard_Op_Le : Entity_Id renames SE (S_Op_Le);
299 Standard_Op_Lt : Entity_Id renames SE (S_Op_Lt);
300 Standard_Op_Mod : Entity_Id renames SE (S_Op_Mod);
301 Standard_Op_Multiply : Entity_Id renames SE (S_Op_Multiply);
302 Standard_Op_Ne : Entity_Id renames SE (S_Op_Ne);
303 Standard_Op_Or : Entity_Id renames SE (S_Op_Or);
304 Standard_Op_Rem : Entity_Id renames SE (S_Op_Rem);
305 Standard_Op_Subtract : Entity_Id renames SE (S_Op_Subtract);
306 Standard_Op_Xor : Entity_Id renames SE (S_Op_Xor);
308 Standard_Op_Abs : Entity_Id renames SE (S_Op_Abs);
309 Standard_Op_Minus : Entity_Id renames SE (S_Op_Minus);
310 Standard_Op_Not : Entity_Id renames SE (S_Op_Not);
311 Standard_Op_Plus : Entity_Id renames SE (S_Op_Plus);
313 Last_Standard_Node_Id : Node_Id;
314 -- Highest Node_Id value used by Standard
316 Last_Standard_List_Id : List_Id;
317 -- Highest List_Id value used by Standard (including those used by
318 -- normal list headers, element list headers, and list elements)
320 Boolean_Literals : array (Boolean) of Entity_Id;
321 -- Entities for the two boolean literals, used by the expander
323 -------------------------------------
324 -- Semantic Phase Special Entities --
325 -------------------------------------
327 -- The semantic phase needs a number of entities for internal processing
328 -- that are logically at the level of Standard, and hence defined in this
329 -- package. However, they are never visible to a program, and are not
330 -- chained on to the Decls list of Standard. The names of all these
331 -- types are relevant only in certain debugging and error message
332 -- situations. They have names that are suitable for use in such
333 -- error messages (see body for actual names used).
335 Standard_Void_Type : Entity_Id;
336 -- This is a type used to represent the return type of procedures
338 Standard_Exception_Type : Entity_Id;
339 -- This is a type used to represent the Etype of exceptions
341 Standard_A_String : Entity_Id;
342 -- An access to String type used for building elements of tables
343 -- carrying the enumeration literal names.
345 Standard_A_Char : Entity_Id;
346 -- Access to character, used as a component of the exception type to
347 -- denote a thin pointer component.
349 Standard_Debug_Renaming_Type : Entity_Id;
350 -- A zero-size subtype of Integer, used as the type of variables used
351 -- to provide the debugger with name encodings for renaming declarations.
353 -- The entities labeled Any_xxx are used in situations where the full
354 -- characteristics of an entity are not yet known, e.g. Any_Character
355 -- is used to label a character literal before resolution is complete.
356 -- These entities are also used to construct appropriate references in
357 -- error messages ("expecting an integer type").
360 -- Used to represent some unknown identifier. Used to label undefined
361 -- identifier references to prevent cascaded errors.
363 Any_Type : Entity_Id;
364 -- Used to represent some unknown type. Plays an important role in
365 -- avoiding cascaded errors, since any node that remains labeled with
366 -- this type corresponds to an already issued error message. Any_Type
367 -- is propagated to avoid cascaded errors from a single type error.
369 Any_Access : Entity_Id;
370 -- Used to resolve the overloaded literal NULL
372 Any_Array : Entity_Id;
373 -- Used to represent some unknown array type
375 Any_Boolean : Entity_Id;
376 -- The context type of conditions in IF and WHILE statements
378 Any_Character : Entity_Id;
379 -- Any_Character is used to label character literals, which in general
380 -- will not have an explicit declaration (this is true of the predefined
383 Any_Composite : Entity_Id;
384 -- The type Any_Composite is used for aggregates before type resolution.
385 -- It is compatible with any array or non-limited record type.
387 Any_Discrete : Entity_Id;
388 -- Used to represent some unknown discrete type
390 Any_Fixed : Entity_Id;
391 -- Used to represent some unknown fixed-point type
393 Any_Integer : Entity_Id;
394 -- Used to represent some unknown integer type
396 Any_Modular : Entity_Id;
397 -- Used to represent the result type of a boolean operation on an
398 -- integer literal. The result is not Universal_Integer, because it is
399 -- only legal in a modular context.
401 Any_Numeric : Entity_Id;
402 -- Used to represent some unknown numeric type
404 Any_Real : Entity_Id;
405 -- Used to represent some unknown real type
407 Any_Scalar : Entity_Id;
408 -- Used to represent some unknown scalar type
410 Any_String : Entity_Id;
411 -- The type Any_String is used for string literals before type
412 -- resolution. It corresponds to array (Positive range <>) of character
413 -- where the component type is compatible with any character type,
414 -- not just Standard_Character.
416 Universal_Integer : Entity_Id;
417 -- Entity for universal integer type. The bounds of this type correspond
418 -- to the largest supported integer type (i.e. Long_Long_Integer). It is
419 -- the type used for runtime calculations in type universal integer.
421 Universal_Real : Entity_Id;
422 -- Entity for universal real type. The bounds of this type correspond to
423 -- to the largest supported real type (i.e. Long_Long_Real). It is the
424 -- type used for runtime calculations in type universal real. Note that
425 -- this type is always IEEE format, even if Long_Long_Real is Vax_Float
426 -- (and in that case the bounds don't correspond exactly).
428 Universal_Fixed : Entity_Id;
429 -- Entity for universal fixed type. This is a type with arbitrary
430 -- precision that can only appear in a context with a specific type.
431 -- Universal_Fixed labels the result of multiplication or division of
432 -- two fixed point numbers, and has no specified bounds (since, unlike
433 -- universal integer and universal real, it is never used for runtime
436 Standard_Integer_8 : Entity_Id;
437 Standard_Integer_16 : Entity_Id;
438 Standard_Integer_32 : Entity_Id;
439 Standard_Integer_64 : Entity_Id;
440 -- These are signed integer types with the indicated sizes, They are
441 -- used for the underlying implementation types for fixed-point and
442 -- enumeration types.
444 Standard_Unsigned : Entity_Id;
445 -- An unsigned type of the same size as Standard_Integer
447 Abort_Signal : Entity_Id;
448 -- Entity for abort signal exception
450 Standard_Op_Rotate_Left : Entity_Id;
451 Standard_Op_Rotate_Right : Entity_Id;
452 Standard_Op_Shift_Left : Entity_Id;
453 Standard_Op_Shift_Right : Entity_Id;
454 Standard_Op_Shift_Right_Arithmetic : Entity_Id;
455 -- These entities are used for shift operators generated by the expander
462 -- Initializes entity values in this package from the current tree
463 -- file using Osint.Tree_Read. Note that Tree_Read includes all the
464 -- initialization that is carried out by Create_Standard.
466 procedure Tree_Write;
467 -- Writes out the entity values in this package to the current
468 -- tree file using Osint.Tree_Write.