1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S I N F O -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2018, Free Software Foundation, Inc. -- 10-- -- 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. -- 17-- -- 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. -- 21-- -- 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/>. -- 26-- -- 27-- GNAT was originally developed by the GNAT team at New York University. -- 28-- Extensive contributions were provided by Ada Core Technologies Inc. -- 29-- -- 30------------------------------------------------------------------------------ 31 32-- This package defines the structure of the abstract syntax tree. The Tree 33-- package provides a basic tree structure. Sinfo describes how this structure 34-- is used to represent the syntax of an Ada program. 35 36-- The grammar in the RM is followed very closely in the tree design, and is 37-- repeated as part of this source file. 38 39-- The tree contains not only the full syntactic representation of the 40-- program, but also the results of semantic analysis. In particular, the 41-- nodes for defining identifiers, defining character literals, and defining 42-- operator symbols, collectively referred to as entities, represent what 43-- would normally be regarded as the symbol table information. In addition a 44-- number of the tree nodes contain semantic information. 45 46-- WARNING: Several files are automatically generated from this package. 47-- See below for details. 48 49with Namet; use Namet; 50with Types; use Types; 51with Uintp; use Uintp; 52with Urealp; use Urealp; 53 54package Sinfo is 55 56 --------------------------------- 57 -- Making Changes to This File -- 58 --------------------------------- 59 60 -- If changes are made to this file, a number of related steps must be 61 -- carried out to ensure consistency. First, if a field access function is 62 -- added, it appears in these places: 63 64 -- In sinfo.ads: 65 -- The documentation associated with the field (if semantic) 66 -- The documentation associated with the node 67 -- The spec of the access function 68 -- The spec of the set procedure 69 -- The entries in Is_Syntactic_Field 70 -- The pragma Inline for the access function 71 -- The pragma Inline for the set procedure 72 -- In sinfo.adb: 73 -- The body of the access function 74 -- The body of the set procedure 75 76 -- The field chosen must be consistent in all places, and, for a node that 77 -- is a subexpression, must not overlap any of the standard expression 78 -- fields. 79 80 -- In addition, if any of the standard expression fields is changed, then 81 -- the utility program which creates the Treeprs spec (in file treeprs.ads) 82 -- must be updated appropriately, since it special cases expression fields. 83 84 -- If a new tree node is added, then the following changes are made: 85 86 -- Add it to the documentation in the appropriate place 87 -- Add its fields to this documentation section 88 -- Define it in the appropriate classification in Node_Kind 89 -- Add an entry in Is_Syntactic_Field 90 -- In the body (sinfo), add entries to the access functions for all 91 -- its fields (except standard expression fields) to include the new 92 -- node in the checks. 93 -- Add an appropriate section to the case statement in sprint.adb 94 -- Add an appropriate section to the case statement in sem.adb 95 -- Add an appropriate section to the case statement in exp_util.adb 96 -- (Insert_Actions procedure) 97 -- For a subexpression, add an appropriate section to the case 98 -- statement in sem_eval.adb 99 -- For a subexpression, add an appropriate section to the case 100 -- statement in sem_res.adb 101 102 -- All back ends must be made aware of the new node kind. 103 104 -- Finally, four utility programs must be run: 105 106 -- (Optional.) Run CSinfo to check that you have made the changes 107 -- consistently. It checks most of the rules given above. This utility 108 -- reads sinfo.ads and sinfo.adb and generates a report to standard 109 -- output. This step is optional because XSinfo runs CSinfo. 110 111 -- Run XSinfo to create sinfo.h, the corresponding C header. This 112 -- utility reads sinfo.ads and generates sinfo.h. Note that it does 113 -- not need to read sinfo.adb, since the contents of the body are 114 -- algorithmically determinable from the spec. 115 116 -- Run XTreeprs to create treeprs.ads, an updated version of the module 117 -- that is used to drive the tree print routine. This utility reads (but 118 -- does not modify) treeprs.adt, the template that provides the basic 119 -- structure of the file, and then fills in the data from the comments 120 -- in sinfo.ads. 121 122 -- Run XNmake to create nmake.ads and nmake.adb, the package body and 123 -- spec of the Nmake package which contains functions for constructing 124 -- nodes. 125 126 -- The above steps are done automatically by the build scripts when you do 127 -- a full bootstrap. 128 129 -- Note: sometime we could write a utility that actually generated the body 130 -- of sinfo from the spec instead of simply checking it, since, as noted 131 -- above, the contents of the body can be determined from the spec. 132 133 -------------------------------- 134 -- Implicit Nodes in the Tree -- 135 -------------------------------- 136 137 -- Generally the structure of the tree very closely follows the grammar as 138 -- defined in the RM. However, certain nodes are omitted to save space and 139 -- simplify semantic processing. Two general classes of such omitted nodes 140 -- are as follows: 141 142 -- If the only possibilities for a non-terminal are one or more other 143 -- non-terminals (i.e. the rule is a "skinny" rule), then usually the 144 -- corresponding node is omitted from the tree, and the target construct 145 -- appears directly. For example, a real type definition is either 146 -- floating point definition or a fixed point definition. No explicit node 147 -- appears for real type definition. Instead either the floating point 148 -- definition or fixed point definition appears directly. 149 150 -- If a non-terminal corresponds to a list of some other non-terminal 151 -- (possibly with separating punctuation), then usually it is omitted from 152 -- the tree, and a list of components appears instead. For example, 153 -- sequence of statements does not appear explicitly in the tree. Instead 154 -- a list of statements appears directly. 155 156 -- Some additional cases of omitted nodes occur and are documented 157 -- individually. In particular, many nodes are omitted in the tree 158 -- generated for an expression. 159 160 ------------------------------------------- 161 -- Handling of Defining Identifier Lists -- 162 ------------------------------------------- 163 164 -- In several declarative forms in the syntax, lists of defining 165 -- identifiers appear (object declarations, component declarations, number 166 -- declarations etc.) 167 168 -- The semantics of such statements are equivalent to a series of identical 169 -- declarations of single defining identifiers (except that conformance 170 -- checks require the same grouping of identifiers in the parameter case). 171 172 -- To simplify semantic processing, the parser breaks down such multiple 173 -- declaration cases into sequences of single declarations, duplicating 174 -- type and initialization information as required. The flags More_Ids and 175 -- Prev_Ids are used to record the original form of the source in the case 176 -- where the original source used a list of names, More_Ids being set on 177 -- all but the last name and Prev_Ids being set on all but the first name. 178 -- These flags are used to reconstruct the original source (e.g. in the 179 -- Sprint package), and also are included in the conformance checks, but 180 -- otherwise have no semantic significance. 181 182 -- Note: the reason that we use More_Ids and Prev_Ids rather than 183 -- First_Name and Last_Name flags is so that the flags are off in the 184 -- normal one identifier case, which minimizes tree print output. 185 186 ----------------------- 187 -- Use of Node Lists -- 188 ----------------------- 189 190 -- With a few exceptions, if a construction of the form {non-terminal} 191 -- appears in the tree, lists are used in the corresponding tree node (see 192 -- package Nlists for handling of node lists). In this case a field of the 193 -- parent node points to a list of nodes for the non-terminal. The field 194 -- name for such fields has a plural name which always ends in "s". For 195 -- example, a case statement has a field Alternatives pointing to list of 196 -- case statement alternative nodes. 197 198 -- Only fields pointing to lists have names ending in "s", so generally the 199 -- structure is strongly typed, fields not ending in s point to single 200 -- nodes, and fields ending in s point to lists. 201 202 -- The following example shows how a traversal of a list is written. We 203 -- suppose here that Stmt points to a N_Case_Statement node which has a 204 -- list field called Alternatives: 205 206 -- Alt := First (Alternatives (Stmt)); 207 -- while Present (Alt) loop 208 -- .. 209 -- -- processing for case statement alternative Alt 210 -- .. 211 -- Alt := Next (Alt); 212 -- end loop; 213 214 -- The Present function tests for Empty, which in this case signals the end 215 -- of the list. First returns Empty immediately if the list is empty. 216 -- Present is defined in Atree; First and Next are defined in Nlists. 217 218 -- The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all 219 -- contexts, which is handled as described in the previous section, and 220 -- with {,library_unit_NAME} in the N_With_Clause mode, which is handled 221 -- using the First_Name and Last_Name flags, as further detailed in the 222 -- description of the N_With_Clause node. 223 224 ------------- 225 -- Pragmas -- 226 ------------- 227 228 -- Pragmas can appear in many different context, but are not included in 229 -- the grammar. Still they must appear in the tree, so they can be properly 230 -- processed. 231 232 -- Two approaches are used. In some cases, an extra field is defined in an 233 -- appropriate node that contains a list of pragmas appearing in the 234 -- expected context. For example pragmas can appear before an 235 -- Accept_Alternative in a Selective_Accept_Statement, and these pragmas 236 -- appear in the Pragmas_Before field of the N_Accept_Alternative node. 237 238 -- The other approach is to simply allow pragmas to appear in syntactic 239 -- lists where the grammar (of course) does not include the possibility. 240 -- For example, the Variants field of an N_Variant_Part node points to a 241 -- list that can contain both N_Pragma and N_Variant nodes. 242 243 -- To make processing easier in the latter case, the Nlists package 244 -- provides a set of routines (First_Non_Pragma, Last_Non_Pragma, 245 -- Next_Non_Pragma, Prev_Non_Pragma) that allow such lists to be handled 246 -- ignoring all pragmas. 247 248 -- In the case of the variants list, we can either write: 249 250 -- Variant := First (Variants (N)); 251 -- while Present (Variant) loop 252 -- ... 253 -- Variant := Next (Variant); 254 -- end loop; 255 256 -- or 257 258 -- Variant := First_Non_Pragma (Variants (N)); 259 -- while Present (Variant) loop 260 -- ... 261 -- Variant := Next_Non_Pragma (Variant); 262 -- end loop; 263 264 -- In the first form of the loop, Variant can either be an N_Pragma or an 265 -- N_Variant node. In the second form, Variant can only be N_Variant since 266 -- all pragmas are skipped. 267 268 --------------------- 269 -- Optional Fields -- 270 --------------------- 271 272 -- Fields which correspond to a section of the syntax enclosed in square 273 -- brackets are generally omitted (and the corresponding field set to Empty 274 -- for a node, or No_List for a list). The documentation of such fields 275 -- notes these cases. One exception to this rule occurs in the case of 276 -- possibly empty statement sequences (such as the sequence of statements 277 -- in an entry call alternative). Such cases appear in the syntax rules as 278 -- [SEQUENCE_OF_STATEMENTS] and the fields corresponding to such optional 279 -- statement sequences always contain an empty list (not No_List) if no 280 -- statements are present. 281 282 -- Note: the utility program that constructs the body and spec of the Nmake 283 -- package relies on the format of the comments to determine if a field 284 -- should have a default value in the corresponding make routine. The rule 285 -- is that if the first line of the description of the field contains the 286 -- string "(set to xxx if", then a default value of xxx is provided for 287 -- this field in the corresponding Make_yyy routine. 288 289 ----------------------------------- 290 -- Note on Body/Spec Terminology -- 291 ----------------------------------- 292 293 -- In informal discussions about Ada, it is customary to refer to package 294 -- and subprogram specs and bodies. However, this is not technically 295 -- correct, what is normally referred to as a spec or specification is in 296 -- fact a package declaration or subprogram declaration. We are careful in 297 -- GNAT to use the correct terminology and in particular, the full word 298 -- specification is never used as an incorrect substitute for declaration. 299 -- The structure and terminology used in the tree also reflects the grammar 300 -- and thus uses declaration and specification in the technically correct 301 -- manner. 302 303 -- However, there are contexts in which the informal terminology is useful. 304 -- We have the word "body" to refer to the Interp_Etype declared by the 305 -- declaration of a unit body, and in some contexts we need similar term to 306 -- refer to the entity declared by the package or subprogram declaration, 307 -- and simply using declaration can be confusing since the body also has a 308 -- declaration. 309 310 -- An example of such a context is the link between the package body and 311 -- its declaration. With_Declaration is confusing, since the package body 312 -- itself is a declaration. 313 314 -- To deal with this problem, we reserve the informal term Spec, i.e. the 315 -- popular abbreviation used in this context, to refer to the entity 316 -- declared by the package or subprogram declaration. So in the above 317 -- example case, the field in the body is called With_Spec. 318 319 -- Another important context for the use of the word Spec is in error 320 -- messages, where a hyper-correct use of declaration would be confusing to 321 -- a typical Ada programmer, and even for an expert programmer can cause 322 -- confusion since the body has a declaration as well. 323 324 -- So, to summarize: 325 326 -- Declaration always refers to the syntactic entity that is called 327 -- a declaration. In particular, subprogram declaration 328 -- and package declaration are used to describe the 329 -- syntactic entity that includes the semicolon. 330 331 -- Specification always refers to the syntactic entity that is called 332 -- a specification. In particular, the terms procedure 333 -- specification, function specification, package 334 -- specification, subprogram specification always refer 335 -- to the syntactic entity that has no semicolon. 336 337 -- Spec is an informal term, used to refer to the entity 338 -- that is declared by a task declaration, protected 339 -- declaration, generic declaration, subprogram 340 -- declaration or package declaration. 341 342 -- This convention is followed throughout the GNAT documentation 343 -- both internal and external, and in all error message text. 344 345 ------------------------ 346 -- Internal Use Nodes -- 347 ------------------------ 348 349 -- These are Node_Kind settings used in the internal implementation which 350 -- are not logically part of the specification. 351 352 -- N_Unused_At_Start 353 -- Completely unused entry at the start of the enumeration type. This 354 -- is inserted so that no legitimate value is zero, which helps to get 355 -- better debugging behavior, since zero is a likely uninitialized value). 356 357 -- N_Unused_At_End 358 -- Completely unused entry at the end of the enumeration type. This is 359 -- handy so that arrays with Node_Kind as the index type have an extra 360 -- entry at the end (see for example the use of the Pchar_Pos_Array in 361 -- Treepr, where the extra entry provides the limit value when dealing with 362 -- the last used entry in the array). 363 364 ----------------------------------------- 365 -- Note on the settings of Sloc fields -- 366 ----------------------------------------- 367 368 -- The Sloc field of nodes that come from the source is set by the parser. 369 -- For internal nodes, and nodes generated during expansion the Sloc is 370 -- usually set in the call to the constructor for the node. In general the 371 -- Sloc value chosen for an internal node is the Sloc of the source node 372 -- whose processing is responsible for the expansion. For example, the Sloc 373 -- of an inherited primitive operation is the Sloc of the corresponding 374 -- derived type declaration. 375 376 -- For the nodes of a generic instantiation, the Sloc value is encoded to 377 -- represent both the original Sloc in the generic unit, and the Sloc of 378 -- the instantiation itself. See Sinput.ads for details. 379 380 -- Subprogram instances create two callable entities: one is the visible 381 -- subprogram instance, and the other is an anonymous subprogram nested 382 -- within a wrapper package that contains the renamings for the actuals. 383 -- Both of these entities have the Sloc of the defining entity in the 384 -- instantiation node. This simplifies some ASIS queries. 385 386 ----------------------- 387 -- Field Definitions -- 388 ----------------------- 389 390 -- In the following node definitions, all fields, both syntactic and 391 -- semantic, are documented. The one exception is in the case of entities 392 -- (defining identifiers, character literals, and operator symbols), where 393 -- the usage of the fields depends on the entity kind. Entity fields are 394 -- fully documented in the separate package Einfo. 395 396 -- In the node definitions, three common sets of fields are abbreviated to 397 -- save both space in the documentation, and also space in the string 398 -- (defined in Tree_Print_Strings) used to print trees. The following 399 -- abbreviations are used: 400 401 -- Note: the utility program that creates the Treeprs spec (in the file 402 -- xtreeprs.adb) knows about the special fields here, so it must be 403 -- modified if any change is made to these fields. 404 405 -- "plus fields for binary operator" 406 -- Chars (Name1) Name_Id for the operator 407 -- Left_Opnd (Node2) left operand expression 408 -- Right_Opnd (Node3) right operand expression 409 -- Entity (Node4-Sem) defining entity for operator 410 -- Associated_Node (Node4-Sem) for generic processing 411 -- Do_Overflow_Check (Flag17-Sem) set if overflow check needed 412 -- Has_Private_View (Flag11-Sem) set in generic units. 413 414 -- "plus fields for unary operator" 415 -- Chars (Name1) Name_Id for the operator 416 -- Right_Opnd (Node3) right operand expression 417 -- Entity (Node4-Sem) defining entity for operator 418 -- Associated_Node (Node4-Sem) for generic processing 419 -- Do_Overflow_Check (Flag17-Sem) set if overflow check needed 420 -- Has_Private_View (Flag11-Sem) set in generic units. 421 422 -- "plus fields for expression" 423 -- Paren_Count number of parentheses levels 424 -- Etype (Node5-Sem) type of the expression 425 -- Is_Overloaded (Flag5-Sem) >1 type interpretation exists 426 -- Is_Static_Expression (Flag6-Sem) set for static expression 427 -- Raises_Constraint_Error (Flag7-Sem) evaluation raises CE 428 -- Must_Not_Freeze (Flag8-Sem) set if must not freeze 429 -- Do_Range_Check (Flag9-Sem) set if a range check needed 430 -- Has_Dynamic_Length_Check (Flag10-Sem) set if length check inserted 431 -- Has_Dynamic_Range_Check (Flag12-Sem) set if range check inserted 432 -- Assignment_OK (Flag15-Sem) set if modification is OK 433 -- Is_Controlling_Actual (Flag16-Sem) set for controlling argument 434 435 -- Note: see under (EXPRESSION) for further details on the use of 436 -- the Paren_Count field to record the number of parentheses levels. 437 438 -- Node_Kind is the type used in the Nkind field to indicate the node kind. 439 -- The actual definition of this type is given later (the reason for this 440 -- is that we want the descriptions ordered by logical chapter in the RM, 441 -- but the type definition is reordered to facilitate the definition of 442 -- some subtype ranges. The individual descriptions of the nodes show how 443 -- the various fields are used in each node kind, as well as providing 444 -- logical names for the fields. Functions and procedures are provided for 445 -- accessing and setting these fields using these logical names. 446 447 ----------------------- 448 -- Gigi Restrictions -- 449 ----------------------- 450 451 -- The tree passed to Gigi is more restricted than the general tree form. 452 -- For example, as a result of expansion, most of the tasking nodes can 453 -- never appear. For each node to which either a complete or partial 454 -- restriction applies, a note entitled "Gigi restriction" appears which 455 -- documents the restriction. 456 457 -- Note that most of these restrictions apply only to trees generated when 458 -- code is being generated, since they involved expander actions that 459 -- destroy the tree. 460 461 --------------- 462 -- ASIS Mode -- 463 --------------- 464 465 -- When a file is compiled in ASIS mode (-gnatct), expansion is skipped, 466 -- and the analysis must generate a tree in a form that meets all ASIS 467 -- requirements. 468 469 -- ASIS must be able to recover the original tree that corresponds to the 470 -- source. It relies heavily on Original_Node for this purpose, which as 471 -- described in Atree, records the history when a node is rewritten. ASIS 472 -- uses Original_Node to recover the original node before the Rewrite. 473 474 -- At least in ASIS mode (not really important in non-ASIS mode), when 475 -- N1 is rewritten as N2: 476 477 -- The subtree rooted by the original node N1 should be fully decorated, 478 -- i.e. all semantic fields noted in sinfo.ads should be set properly 479 -- and any referenced entities should be complete (with exceptions for 480 -- representation information, noted below). 481 482 -- For all the direct descendants of N1 (original node) their Parent 483 -- links should point not to N1, but to N2 (rewriting node). 484 485 -- The Parent links of rewritten nodes (N1 in this example) are set in 486 -- some cases (to point to the rewritten parent), but in other cases 487 -- they are set to Empty. This needs sorting out ??? It would be much 488 -- cleaner if they could always be set in the original node ??? 489 490 -- There are a few cases when ASIS has to use not the original, but the 491 -- rewritten tree structures. This happens when because of some important 492 -- technical reasons it is impossible or very hard to have the original 493 -- structure properly decorated by semantic information, and the rewritten 494 -- structure fully reproduces the original source. Below is the (incomplete 495 -- for the moment???) list of such exceptions: 496 -- 497 -- Generic specifications and generic bodies 498 -- Function calls that use prefixed notation (Operand.Operation [(...)]) 499 500 -- Representation Information 501 502 -- For the purposes of the data description annex, the representation 503 -- information for source declared entities must be complete in the 504 -- ASIS tree. 505 506 -- This requires that the front end call the back end (gigi/gcc) in 507 -- a special "back annotate only" mode to obtain information on layout 508 -- from the back end. 509 510 -- For the purposes of this special "back annotate only" mode, the 511 -- requirements that would normally need to be met to generate code 512 -- are relaxed as follows: 513 514 -- Anonymous types need not have full representation information (e.g. 515 -- sizes need not be set for types where the front end would normally 516 -- set the sizes), since anonymous types can be ignored in this mode. 517 518 -- In this mode, gigi will see at least fragments of a fully annotated 519 -- unexpanded tree. This means that it will encounter nodes it does 520 -- not normally handle (such as stubs, task bodies etc). It should 521 -- simply ignore these nodes, since they are not relevant to the task 522 -- of back annotating representation information. 523 524 -- Some other ASIS-specific issues are covered in specific comments in 525 -- sections for particular nodes or flags. 526 527 ---------------- 528 -- Ghost Mode -- 529 ---------------- 530 531 -- The SPARK RM 6.9 defines two classes of constructs - Ghost entities and 532 -- Ghost statements. The intent of the feature is to treat Ghost constructs 533 -- as non-existent when Ghost assertion policy Ignore is in effect. 534 535 -- The corresponding nodes which map to Ghost constructs are: 536 537 -- Ghost entities 538 -- Declaration nodes 539 -- N_Package_Body 540 -- N_Subprogram_Body 541 542 -- Ghost statements 543 -- N_Assignment_Statement 544 -- N_Procedure_Call_Statement 545 -- N_Pragma 546 547 -- In addition, the compiler treats instantiations as Ghost entities 548 549 -- To achieve the removal of ignored Ghost constructs, the compiler relies 550 -- on global variable Ghost_Mode and a mechanism called "Ghost regions". 551 -- The values of the global variable are as follows: 552 553 -- 1. Check - All static semantics as defined in SPARK RM 6.9 are in 554 -- effect. The Ghost region has mode Check. 555 556 -- 2. Ignore - Same as Check, ignored Ghost code is not present in ALI 557 -- files, object files, and the final executable. The Ghost region 558 -- has mode Ignore. 559 560 -- 3. None - No Ghost region is in effect 561 562 -- A Ghost region is a compiler operating mode, similar to Check_Syntax, 563 -- however a region is much more finely grained and depends on the policy 564 -- in effect. The region starts prior to the analysis of a Ghost construct 565 -- and ends immediately after its expansion. The region is established as 566 -- follows: 567 568 -- 1. Declarations - Prior to analysis, if the declaration is subject to 569 -- pragma Ghost. 570 571 -- 2. Renaming declarations - Same as 1) or when the renamed entity is 572 -- Ghost. 573 574 -- 3. Completing declarations - Same as 1) or when the declaration is 575 -- partially analyzed and the declaration completes a Ghost entity. 576 577 -- 4. N_Package_Body, N_Subprogram_Body - Same as 1) or when the body is 578 -- partially analyzed and completes a Ghost entity. 579 580 -- 5. N_Assignment_Statement - After the left hand side is analyzed and 581 -- references a Ghost entity. 582 583 -- 6. N_Procedure_Call_Statement - After the name is analyzed and denotes 584 -- a Ghost procedure. 585 586 -- 7. N_Pragma - During analysis, when the related entity is Ghost or the 587 -- pragma encloses a Ghost entity. 588 589 -- 8. Instantiations - Save as 1) or when the instantiation is partially 590 -- analyzed and the generic template is Ghost. 591 592 -- Routines Mark_And_Set_Ghost_xxx and Set_Ghost_Mode install a new Ghost 593 -- region and routine Restore_Ghost_Mode ends a Ghost region. A region may 594 -- be reinstalled similarly to scopes for decoupled expansion such as the 595 -- generation of dispatch tables or the creation of a predicate function. 596 597 -- If the mode of a Ghost region is Ignore, any newly created nodes as well 598 -- as source entities are marked as ignored Ghost. In additon, the marking 599 -- process signals all enclosing scopes that an ignored Ghost node resides 600 -- within. The compilation unit where the node resides is also added to an 601 -- auxiliary table for post processing. 602 603 -- After the analysis and expansion of all compilation units takes place 604 -- as well as the instantiation of all inlined [generic] bodies, the GNAT 605 -- driver initiates a separate pass which removes all ignored Ghost nodes 606 -- from all units stored in the auxiliary table. 607 608 -------------------- 609 -- GNATprove Mode -- 610 -------------------- 611 612 -- When a file is compiled in GNATprove mode (-gnatd.F), a very light 613 -- expansion is performed and the analysis must generate a tree in a 614 -- form that meets additional requirements. 615 616 -- This light expansion does two transformations of the tree that cannot 617 -- be postponed till after semantic analysis: 618 619 -- 1. Replace object renamings by renamed object. This requires the 620 -- introduction of temporaries at the point of the renaming, which 621 -- must be properly analyzed. 622 623 -- 2. Fully qualify entity names. This is needed to generate suitable 624 -- local effects and call-graphs in ALI files, with the completely 625 -- qualified names (in particular the suffix to distinguish homonyms). 626 627 -- The tree after this light expansion should be fully analyzed 628 -- semantically, which sometimes requires the insertion of semantic 629 -- pre-analysis, for example for subprogram contracts and pragma 630 -- check/assert. In particular, all expression must have their proper type, 631 -- and semantic links should be set between tree nodes (partial to full 632 -- view, etc.) Some kinds of nodes should be either absent, or can be 633 -- ignored by the formal verification backend: 634 635 -- N_Object_Renaming_Declaration: can be ignored safely 636 -- N_Expression_Function: absent (rewritten) 637 -- N_Expression_With_Actions: absent (not generated) 638 639 -- SPARK cross-references are generated from the regular cross-references 640 -- (used for browsing and code understanding) and additional references 641 -- collected during semantic analysis, in particular on all dereferences. 642 -- These SPARK cross-references are output in a separate section of ALI 643 -- files, as described in spark_xrefs.adb. They are the basis for the 644 -- computation of data dependences in GNATprove. This implies that all 645 -- cross-references should be generated in this mode, even those that would 646 -- not make sense from a user point-of-view, and that cross-references that 647 -- do not lead to data dependences for subprograms can be safely ignored. 648 649 -- GNATprove relies on the following front end behaviors: 650 651 -- 1. The first declarations in the list of visible declarations of 652 -- a package declaration for a generic instance, up to the first 653 -- declaration which comes from source, should correspond to 654 -- the "mappings nodes" between formal and actual generic parameters. 655 656 -- 2. In addition pragma Debug statements are removed from the tree 657 -- (rewritten to NULL stmt), since they should be ignored in formal 658 -- verification. 659 660 -- 3. An error is also issued for missing subunits, similar to the 661 -- warning issued when generating code, to avoid formal verification 662 -- of a partial unit. 663 664 -- 4. Unconstrained types are not replaced by constrained types whose 665 -- bounds are generated from an expression: Expand_Subtype_From_Expr 666 -- should be a no-op. 667 668 -- 5. Errors (instead of warnings) are issued on compile-time-known 669 -- constraint errors even though such cases do not correspond to 670 -- illegalities in the Ada RM (this is simply another case where 671 -- GNATprove implements a subset of the full language). 672 -- 673 -- However, there are a few exceptions to this rule for cases where 674 -- we want to allow the GNATprove analysis to proceed (e.g. range 675 -- checks on empty ranges, which typically appear in deactivated 676 -- code in a particular configuration). 677 678 -- 6. Subtypes should match in the AST, even after a generic is 679 -- instantiated. In particular, GNATprove relies on the fact that, 680 -- on a selected component, the type of the selected component is 681 -- the type of the corresponding component in the prefix of the 682 -- selected component. 683 -- 684 -- Note that, in some cases, we know that this rule is broken by the 685 -- frontend. In particular, if the selected component is a packed 686 -- array depending on a discriminant of a unconstrained formal object 687 -- parameter of a generic. 688 689 ---------------- 690 -- SPARK Mode -- 691 ---------------- 692 693 -- The SPARK RM 1.6.5 defines a mode of operation called "SPARK mode" which 694 -- starts a scope where the SPARK language semantics are either On, Off, or 695 -- Auto, where Auto leaves the choice to the tools. A SPARK mode may be 696 -- specified by means of an aspect or a pragma. 697 698 -- The following entities may be subject to a SPARK mode. Entities marked 699 -- with * may possess two differente SPARK modes. 700 701 -- E_Entry 702 -- E_Entry_Family 703 -- E_Function 704 -- E_Generic_Function 705 -- E_Generic_Package * 706 -- E_Generic_Procedure 707 -- E_Operator 708 -- E_Package * 709 -- E_Package_Body * 710 -- E_Procedure 711 -- E_Protected_Body 712 -- E_Protected_Subtype 713 -- E_Protected_Type * 714 -- E_Subprogram_Body 715 -- E_Task_Body 716 -- E_Task_Subtype 717 -- E_Task_Type * 718 -- E_Variable 719 720 -- In order to manage SPARK scopes, the compiler relies on global variables 721 -- SPARK_Mode and SPARK_Mode_Pragma and a mechanism called "SPARK regions." 722 -- Routines Install_SPARK_Mode and Set_SPARK_Mode create a new SPARK region 723 -- and routine Restore_SPARK_Mode ends a SPARK region. A region may be 724 -- reinstalled similarly to scopes. 725 726 ----------------------- 727 -- Check Flag Fields -- 728 ----------------------- 729 730 -- The following flag fields appear in expression nodes: 731 732 -- Do_Division_Check 733 -- Do_Overflow_Check 734 -- Do_Range_Check 735 736 -- These three flags are always set by the front end during semantic 737 -- analysis, on expression nodes that may trigger the corresponding 738 -- check. The front end then inserts or not the check during expansion. In 739 -- particular, these flags should also be correctly set in ASIS mode and 740 -- GNATprove mode. As a special case, the front end does not insert a 741 -- Do_Division_Check flag on float exponentiation expressions, for the case 742 -- where the value is 0.0 and the exponent is negative, although this case 743 -- does lead to a division check failure. 744 745 -- Note: the expander always takes care of the Do_Range check case, 746 -- so this flag will never be set in the expanded tree passed to the 747 -- back end code generator. 748 749 -- Note that this accounts for all nodes that trigger the corresponding 750 -- checks, except for range checks on subtype_indications, which may be 751 -- required to check that a range_constraint is compatible with the given 752 -- subtype (RM 3.2.2(11)). 753 754 -- The following flag fields appear in various nodes: 755 756 -- Do_Accessibility_Check 757 -- Do_Discriminant_Check 758 -- Do_Length_Check 759 -- Do_Storage_Check 760 -- Do_Tag_Check 761 762 -- These flags are used in some specific cases by the front end, either 763 -- during semantic analysis or during expansion, and cannot be expected 764 -- to be set on all nodes that trigger the corresponding check. 765 766 ------------------------ 767 -- Common Flag Fields -- 768 ------------------------ 769 770 -- The following flag fields appear in all nodes: 771 772 -- Analyzed 773 -- This flag is used to indicate that a node (and all its children) have 774 -- been analyzed. It is used to avoid reanalysis of a node that has 775 -- already been analyzed, both for efficiency and functional correctness 776 -- reasons. 777 778 -- Comes_From_Source 779 -- This flag is set if the node comes directly from an explicit construct 780 -- in the source. It is normally on for any nodes built by the scanner or 781 -- parser from the source program, with the exception that in a few cases 782 -- the parser adds nodes to normalize the representation (in particular 783 -- a null statement is added to a package body if there is no begin/end 784 -- initialization section. 785 -- 786 -- Most nodes inserted by the analyzer or expander are not considered 787 -- as coming from source, so the flag is off for such nodes. In a few 788 -- cases, the expander constructs nodes closely equivalent to nodes 789 -- from the source program (e.g. the allocator built for build-in-place 790 -- case), and the Comes_From_Source flag is deliberately set. 791 792 -- Error_Posted 793 -- This flag is used to avoid multiple error messages being posted on or 794 -- referring to the same node. This flag is set if an error message 795 -- refers to a node or is posted on its source location, and has the 796 -- effect of inhibiting further messages involving this same node. 797 798 ----------------------- 799 -- Modify_Tree_For_C -- 800 ----------------------- 801 802 -- If the flag Opt.Modify_Tree_For_C is set True, then the tree is modified 803 -- in ways that help match the semantics better with C, easing the task of 804 -- interfacing to C code generators (other than GCC, where the work is done 805 -- in gigi, and there is no point in changing that), and also making life 806 -- easier for Cprint in generating C source code. 807 808 -- The current modifications implemented are as follows: 809 810 -- N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic nodes 811 -- are eliminated from the tree (since these operations do not exist in 812 -- C), and the operations are rewritten in terms of logical shifts and 813 -- other logical operations that do exist in C. See Exp_Ch4 expansion 814 -- routines for these operators for details of the transformations made. 815 816 -- The right operand of N_Op_Shift_Right and N_Op_Shift_Left is always 817 -- less than the word size (since other values are not well-defined in 818 -- C). This is done using an explicit test if necessary. 819 820 -- Min and Max attributes are expanded into equivalent if expressions, 821 -- dealing properly with side effect issues. 822 823 -- Mod for signed integer types is expanded into equivalent expressions 824 -- using Rem (which is % in C) and other C-available operators. 825 826 -- Functions returning bounded arrays are transformed into procedures 827 -- with an extra out parameter, and the calls updated accordingly. 828 829 -- Aggregates are only kept unexpanded for object declarations, otherwise 830 -- they are systematically expanded into loops (for arrays) and 831 -- individual assignments (for records). 832 833 -- Unconstrained array types are handled by means of fat pointers. 834 835 -- Postconditions are inlined by the frontend since their body may have 836 -- references to itypes defined in the enclosing subprogram. 837 838 ------------------------------------ 839 -- Description of Semantic Fields -- 840 ------------------------------------ 841 842 -- The meaning of the syntactic fields is generally clear from their names 843 -- without any further description, since the names are chosen to 844 -- correspond very closely to the syntax in the reference manual. This 845 -- section describes the usage of the semantic fields, which are used to 846 -- contain additional information determined during semantic analysis. 847 848 -- Accept_Handler_Records (List5-Sem) 849 -- This field is present only in an N_Accept_Alternative node. It is used 850 -- to temporarily hold the exception handler records from an accept 851 -- statement in a selective accept. These exception handlers will 852 -- eventually be placed in the Handler_Records list of the procedure 853 -- built for this accept (see Expand_N_Selective_Accept procedure in 854 -- Exp_Ch9 for further details). 855 856 -- Access_Types_To_Process (Elist2-Sem) 857 -- Present in N_Freeze_Entity nodes for Incomplete or private types. 858 -- Contains the list of access types which may require specific treatment 859 -- when the nature of the type completion is completely known. An example 860 -- of such treatment is the generation of the associated_final_chain. 861 862 -- Actions (List1-Sem) 863 -- This field contains a sequence of actions that are associated with the 864 -- node holding the field. See the individual node types for details of 865 -- how this field is used, as well as the description of the specific use 866 -- for a particular node type. 867 868 -- Activation_Chain_Entity (Node3-Sem) 869 -- This is used in tree nodes representing task activators (blocks, 870 -- subprogram bodies, package declarations, and task bodies). It is 871 -- initially Empty, and then gets set to point to the entity for the 872 -- declared Activation_Chain variable when the first task is declared. 873 -- When tasks are declared in the corresponding declarative region this 874 -- entity is located by name (its name is always _Chain) and the declared 875 -- tasks are added to the chain. Note that N_Extended_Return_Statement 876 -- does not have this attribute, although it does have an activation 877 -- chain. This chain is used to store the tasks temporarily, and is not 878 -- used for activating them. On successful completion of the return 879 -- statement, the tasks are moved to the caller's chain, and the caller 880 -- activates them. 881 882 -- Acts_As_Spec (Flag4-Sem) 883 -- A flag set in the N_Subprogram_Body node for a subprogram body which 884 -- is acting as its own spec. In the case of a library-level subprogram 885 -- the flag is set as well on the parent compilation unit node. 886 887 -- Actual_Designated_Subtype (Node4-Sem) 888 -- Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi 889 -- needs to known the dynamic constrained subtype of the designated 890 -- object, this attribute is set to that type. This is done for 891 -- N_Free_Statements for access-to-classwide types and access to 892 -- unconstrained packed array types, and for N_Explicit_Dereference when 893 -- the designated type is an unconstrained packed array and the 894 -- dereference is the prefix of a 'Size attribute reference. 895 896 -- Address_Warning_Posted (Flag18-Sem) 897 -- Present in N_Attribute_Definition nodes. Set to indicate that we have 898 -- posted a warning for the address clause regarding size or alignment 899 -- issues. Used to inhibit multiple redundant messages. 900 901 -- Aggregate_Bounds (Node3-Sem) 902 -- Present in array N_Aggregate nodes. If the bounds of the aggregate are 903 -- known at compile time, this field points to an N_Range node with those 904 -- bounds. Otherwise Empty. 905 906 -- Alloc_For_BIP_Return (Flag1-Sem) 907 -- Present in N_Allocator nodes. True if the allocator is one of those 908 -- generated for a build-in-place return statement. 909 910 -- All_Others (Flag11-Sem) 911 -- Present in an N_Others_Choice node. This flag is set for an others 912 -- exception where all exceptions are to be caught, even those that are 913 -- not normally handled (in particular the tasking abort signal). This 914 -- is used for translation of the at end handler into a normal exception 915 -- handler. 916 917 -- Aspect_Rep_Item (Node2-Sem) 918 -- Present in N_Aspect_Specification nodes. Points to the corresponding 919 -- pragma/attribute definition node used to process the aspect. 920 921 -- Assignment_OK (Flag15-Sem) 922 -- This flag is set in a subexpression node for an object, indicating 923 -- that the associated object can be modified, even if this would not 924 -- normally be permissible (either by direct assignment, or by being 925 -- passed as an out or in-out parameter). This is used by the expander 926 -- for a number of purposes, including initialization of constants and 927 -- limited type objects (such as tasks), setting discriminant fields, 928 -- setting tag values, etc. N_Object_Declaration nodes also have this 929 -- flag defined. Here it is used to indicate that an initialization 930 -- expression is valid, even where it would normally not be allowed 931 -- (e.g. where the type involved is limited). It is also used to stop 932 -- a Force_Evaluation call for an unchecked conversion, but this usage 933 -- is unclear and not documented ??? 934 935 -- Associated_Node (Node4-Sem) 936 -- Present in nodes that can denote an entity: identifiers, character 937 -- literals, operator symbols, expanded names, operator nodes, and 938 -- attribute reference nodes (all these nodes have an Entity field). 939 -- This field is also present in N_Aggregate, N_Selected_Component, and 940 -- N_Extension_Aggregate nodes. This field is used in generic processing 941 -- to create links between the generic template and the generic copy. 942 -- See Sem_Ch12.Get_Associated_Node for full details. Note that this 943 -- field overlaps Entity, which is fine, since, as explained in Sem_Ch12, 944 -- the normal function of Entity is not required at the point where the 945 -- Associated_Node is set. Note also, that in generic templates, this 946 -- means that the Entity field does not necessarily point to an Entity. 947 -- Since the back end is expected to ignore generic templates, this is 948 -- harmless. 949 950 -- Atomic_Sync_Required (Flag14-Sem) 951 -- This flag is set on a node for which atomic synchronization is 952 -- required for the corresponding reference or modification. 953 954 -- At_End_Proc (Node1) 955 -- This field is present in an N_Handled_Sequence_Of_Statements node. 956 -- It contains an identifier reference for the cleanup procedure to be 957 -- called. See description of this node for further details. 958 959 -- Backwards_OK (Flag6-Sem) 960 -- A flag present in the N_Assignment_Statement node. It is used only 961 -- if the type being assigned is an array type, and is set if analysis 962 -- determines that it is definitely safe to do the copy backwards, i.e. 963 -- starting at the highest addressed element. This is the case if either 964 -- the operands do not overlap, or they may overlap, but if they do, 965 -- then the left operand is at a higher address than the right operand. 966 -- 967 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 968 -- means that the front end could not determine that either direction is 969 -- definitely safe, and a runtime check may be required if the backend 970 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 971 -- set, it means that the front end can assure no overlap of operands. 972 973 -- Body_To_Inline (Node3-Sem) 974 -- Present in subprogram declarations. Denotes analyzed but unexpanded 975 -- body of subprogram, to be used when inlining calls. Present when the 976 -- subprogram has an Inline pragma and inlining is enabled. If the 977 -- declaration is completed by a renaming_as_body, and the renamed entity 978 -- is a subprogram, the Body_To_Inline is the name of that entity, which 979 -- is used directly in later calls to the original subprogram. 980 981 -- Body_Required (Flag13-Sem) 982 -- A flag that appears in the N_Compilation_Unit node indicating that 983 -- the corresponding unit requires a body. For the package case, this 984 -- indicates that a completion is required. In Ada 95, if the flag is not 985 -- set for the package case, then a body may not be present. In Ada 83, 986 -- if the flag is not set for the package case, then body is optional. 987 -- For a subprogram declaration, the flag is set except in the case where 988 -- a pragma Import or Interface applies, in which case no body is 989 -- permitted (in Ada 83 or Ada 95). 990 991 -- By_Ref (Flag5-Sem) 992 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement, 993 -- this flag is set when the returned expression is already allocated on 994 -- the secondary stack and thus the result is passed by reference rather 995 -- than copied another time. 996 997 -- Cleanup_Actions (List5-Sem) 998 -- Present in block statements created for transient blocks, contains 999 -- additional cleanup actions carried over from the transient scope. 1000 1001 -- Check_Address_Alignment (Flag11-Sem) 1002 -- A flag present in N_Attribute_Definition clause for a 'Address 1003 -- attribute definition. This flag is set if a dynamic check should be 1004 -- generated at the freeze point for the entity to which this address 1005 -- clause applies. The reason that we need this flag is that we want to 1006 -- check for range checks being suppressed at the point where the 1007 -- attribute definition clause is given, rather than testing this at the 1008 -- freeze point. 1009 1010 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 1011 -- Present in N_Simple_Return_Statement nodes. True if this node was 1012 -- constructed as part of the N_Extended_Return_Statement expansion. 1013 1014 -- Compile_Time_Known_Aggregate (Flag18-Sem) 1015 -- Present in N_Aggregate nodes. Set for aggregates which can be fully 1016 -- evaluated at compile time without raising constraint error. Such 1017 -- aggregates can be passed as is to the back end without any expansion. 1018 -- See Exp_Aggr for specific conditions under which this flag gets set. 1019 1020 -- Componentwise_Assignment (Flag14-Sem) 1021 -- Present in N_Assignment_Statement nodes. Set for a record assignment 1022 -- where all that needs doing is to expand it into component-by-component 1023 -- assignments. This is used internally for the case of tagged types with 1024 -- rep clauses, where we need to avoid recursion (we don't want to try to 1025 -- generate a call to the primitive operation, because this is the case 1026 -- where we are compiling the primitive operation). Note that when we are 1027 -- expanding component assignments in this case, we never assign the _tag 1028 -- field, but we recursively assign components of the parent type. 1029 1030 -- Condition_Actions (List3-Sem) 1031 -- This field appears in else-if nodes and in the iteration scheme node 1032 -- for while loops. This field is only used during semantic processing to 1033 -- temporarily hold actions inserted into the tree. In the tree passed 1034 -- to gigi, the condition actions field is always set to No_List. For 1035 -- details on how this field is used, see the routine Insert_Actions in 1036 -- package Exp_Util, and also the expansion routines for the relevant 1037 -- nodes. 1038 1039 -- Context_Pending (Flag16-Sem) 1040 -- This field appears in Compilation_Unit nodes, to indicate that the 1041 -- context of the unit is being compiled. Used to detect circularities 1042 -- that are not otherwise detected by the loading mechanism. Such 1043 -- circularities can occur in the presence of limited and non-limited 1044 -- with_clauses that mention the same units. 1045 1046 -- Controlling_Argument (Node1-Sem) 1047 -- This field is set in procedure and function call nodes if the call 1048 -- is a dispatching call (it is Empty for a non-dispatching call). It 1049 -- indicates the source of the call's controlling tag. For procedure 1050 -- calls, the Controlling_Argument is one of the actuals. For function 1051 -- that has a dispatching result, it is an entity in the context of the 1052 -- call that can provide a tag, or else it is the tag of the root type 1053 -- of the class. It can also specify a tag directly rather than being a 1054 -- tagged object. The latter is needed by the implementations of AI-239 1055 -- and AI-260. 1056 1057 -- Conversion_OK (Flag14-Sem) 1058 -- A flag set on type conversion nodes to indicate that the conversion 1059 -- is to be considered as being valid, even though it is the case that 1060 -- the conversion is not valid Ada. This is used for attributes Enum_Rep, 1061 -- Fixed_Value and Integer_Value, for internal conversions done for 1062 -- fixed-point operations, and for certain conversions for calls to 1063 -- initialization procedures. If Conversion_OK is set, then Etype must be 1064 -- set (the analyzer assumes that Etype has been set). For the case of 1065 -- fixed-point operands, it also indicates that the conversion is to be 1066 -- direct conversion of the underlying integer result, with no regard to 1067 -- the small operand. 1068 1069 -- Convert_To_Return_False (Flag13-Sem) 1070 -- Present in N_Raise_Expression nodes that appear in the body of the 1071 -- special predicateM function used to test a predicate in the context 1072 -- of a membership test, where raise expression results in returning a 1073 -- value of False rather than raising an exception. 1074 1075 -- Corresponding_Aspect (Node3-Sem) 1076 -- Present in N_Pragma node. Used to point back to the source aspect from 1077 -- the corresponding pragma. This field is Empty for source pragmas. 1078 1079 -- Corresponding_Body (Node5-Sem) 1080 -- This field is set in subprogram declarations, package declarations, 1081 -- entry declarations of protected types, and in generic units. It points 1082 -- to the defining entity for the corresponding body (NOT the node for 1083 -- the body itself). 1084 1085 -- Corresponding_Formal_Spec (Node3-Sem) 1086 -- This field is set in subprogram renaming declarations, where it points 1087 -- to the defining entity for a formal subprogram in the case where the 1088 -- renaming corresponds to a generic formal subprogram association in an 1089 -- instantiation. The field is Empty if the renaming does not correspond 1090 -- to such a formal association. 1091 1092 -- Corresponding_Generic_Association (Node5-Sem) 1093 -- This field is defined for object declarations and object renaming 1094 -- declarations. It is set for the declarations within an instance that 1095 -- map generic formals to their actuals. If set, the field points to 1096 -- a generic_association which is the original parent of the expression 1097 -- or name appearing in the declaration. This simplifies ASIS queries. 1098 1099 -- Corresponding_Integer_Value (Uint4-Sem) 1100 -- This field is set in real literals of fixed-point types (it is not 1101 -- used for floating-point types). It contains the integer value used 1102 -- to represent the fixed-point value. It is also set on the universal 1103 -- real literals used to represent bounds of fixed-point base types 1104 -- and their first named subtypes. 1105 1106 -- Corresponding_Spec (Node5-Sem) 1107 -- This field is set in subprogram, package, task, and protected body 1108 -- nodes, where it points to the defining entity in the corresponding 1109 -- spec. The attribute is also set in N_With_Clause nodes where it points 1110 -- to the defining entity for the with'ed spec, and in a subprogram 1111 -- renaming declaration when it is a Renaming_As_Body. The field is Empty 1112 -- if there is no corresponding spec, as in the case of a subprogram body 1113 -- that serves as its own spec. 1114 -- 1115 -- In Ada 2012, Corresponding_Spec is set on expression functions that 1116 -- complete a subprogram declaration. 1117 1118 -- Corresponding_Spec_Of_Stub (Node2-Sem) 1119 -- This field is present in subprogram, package, task, and protected body 1120 -- stubs where it points to the corresponding spec of the stub. Due to 1121 -- clashes in the structure of nodes, we cannot use Corresponding_Spec. 1122 1123 -- Corresponding_Stub (Node3-Sem) 1124 -- This field is present in an N_Subunit node. It holds the node in 1125 -- the parent unit that is the stub declaration for the subunit. It is 1126 -- set when analysis of the stub forces loading of the proper body. If 1127 -- expansion of the proper body creates new declarative nodes, they are 1128 -- inserted at the point of the corresponding_stub. 1129 1130 -- Dcheck_Function (Node5-Sem) 1131 -- This field is present in an N_Variant node, It references the entity 1132 -- for the discriminant checking function for the variant. 1133 1134 -- Default_Expression (Node5-Sem) 1135 -- This field is Empty if there is no default expression. If there is a 1136 -- simple default expression (one with no side effects), then this field 1137 -- simply contains a copy of the Expression field (both point to the tree 1138 -- for the default expression). Default_Expression is used for 1139 -- conformance checking. 1140 1141 -- Default_Storage_Pool (Node3-Sem) 1142 -- This field is present in N_Compilation_Unit_Aux nodes. It is set to a 1143 -- copy of Opt.Default_Pool at the end of the compilation unit. See 1144 -- package Opt for details. This is used for inheriting the 1145 -- Default_Storage_Pool in child units. 1146 1147 -- Discr_Check_Funcs_Built (Flag11-Sem) 1148 -- This flag is present in N_Full_Type_Declaration nodes. It is set when 1149 -- discriminant checking functions are constructed. The purpose is to 1150 -- avoid attempting to set these functions more than once. 1151 1152 -- Do_Accessibility_Check (Flag13-Sem) 1153 -- This flag is set on N_Parameter_Specification nodes to indicate 1154 -- that an accessibility check is required for the parameter. It is 1155 -- not yet decided who takes care of this check (TBD ???). 1156 1157 -- Do_Discriminant_Check (Flag3-Sem) 1158 -- This flag is set on N_Selected_Component nodes to indicate that a 1159 -- discriminant check is required using the discriminant check routine 1160 -- associated with the selector. The actual check is generated by the 1161 -- expander when processing selected components. In the case of 1162 -- Unchecked_Union, the flag is also set, but no discriminant check 1163 -- routine is associated with the selector, and the expander does not 1164 -- generate a check. This flag is also present in assignment statements 1165 -- (and set if the assignment requires a discriminant check), and in type 1166 -- conversion nodes (and set if the conversion requires a check). 1167 1168 -- Do_Division_Check (Flag13-Sem) 1169 -- This flag is set on a division operator (/ mod rem) to indicate 1170 -- that a zero divide check is required. The actual check is dealt 1171 -- with by the backend (all the front end does is to set the flag). 1172 1173 -- Do_Length_Check (Flag4-Sem) 1174 -- This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or, 1175 -- N_Op_Xor, or N_Type_Conversion node to indicate that a length check 1176 -- is required. It is not determined who deals with this flag (???). 1177 1178 -- Do_Overflow_Check (Flag17-Sem) 1179 -- This flag is set on an operator where an overflow check is required on 1180 -- the operation. The actual check is dealt with by the backend (all the 1181 -- front end does is to set the flag). The other cases where this flag is 1182 -- used is on a Type_Conversion node and for attribute reference nodes. 1183 -- For a type conversion, it means that the conversion is from one base 1184 -- type to another, and the value may not fit in the target base type. 1185 -- See also the description of Do_Range_Check for this case. The only 1186 -- attribute references which use this flag are Pred and Succ, where it 1187 -- means that the result should be checked for going outside the base 1188 -- range. Note that this flag is not set for modular types. This flag is 1189 -- also set on if and case expression nodes if we are operating in either 1190 -- MINIMIZED or ELIMINATED overflow checking mode (to make sure that we 1191 -- properly process overflow checking for dependent expressions). 1192 1193 -- Do_Range_Check (Flag9-Sem) 1194 -- This flag is set on an expression which appears in a context where a 1195 -- range check is required. The target type is clear from the context. 1196 -- The contexts in which this flag can appear are the following: 1197 1198 -- Right side of an assignment. In this case the target type is 1199 -- taken from the left side of the assignment, which is referenced 1200 -- by the Name of the N_Assignment_Statement node. 1201 1202 -- Subscript expressions in an indexed component. In this case the 1203 -- target type is determined from the type of the array, which is 1204 -- referenced by the Prefix of the N_Indexed_Component node. 1205 1206 -- Argument expression for a parameter, appearing either directly in 1207 -- the Parameter_Associations list of a call or as the Expression of an 1208 -- N_Parameter_Association node that appears in this list. In either 1209 -- case, the check is against the type of the formal. Note that the 1210 -- flag is relevant only in IN and IN OUT parameters, and will be 1211 -- ignored for OUT parameters, where no check is required in the call, 1212 -- and if a check is required on the return, it is generated explicitly 1213 -- with a type conversion. 1214 1215 -- Initialization expression for the initial value in an object 1216 -- declaration. In this case the Do_Range_Check flag is set on 1217 -- the initialization expression, and the check is against the 1218 -- range of the type of the object being declared. This includes the 1219 -- cases of expressions providing default discriminant values, and 1220 -- expressions used to initialize record components. 1221 1222 -- The expression of a type conversion. In this case the range check is 1223 -- against the target type of the conversion. See also the use of 1224 -- Do_Overflow_Check on a type conversion. The distinction is that the 1225 -- overflow check protects against a value that is outside the range of 1226 -- the target base type, whereas a range check checks that the 1227 -- resulting value (which is a value of the base type of the target 1228 -- type), satisfies the range constraint of the target type. 1229 1230 -- Note: when a range check is required in contexts other than those 1231 -- listed above (e.g. in a return statement), an additional type 1232 -- conversion node is introduced to represent the required check. 1233 1234 -- A special case arises for the arguments of the Pred/Succ attributes. 1235 -- Here the range check needed is against First + 1 .. Last (Pred) or 1236 -- First .. Last - 1 (Succ) of the corresponding base type. Essentially 1237 -- these checks are what would be performed within the implicit body of 1238 -- the functions that correspond to these attributes. In these cases, 1239 -- the Do_Range check flag is set on the argument to the attribute 1240 -- function, and the back end must special case the appropriate range 1241 -- to check against. 1242 1243 -- Do_Storage_Check (Flag17-Sem) 1244 -- This flag is set in an N_Allocator node to indicate that a storage 1245 -- check is required for the allocation, or in an N_Subprogram_Body node 1246 -- to indicate that a stack check is required in the subprogram prologue. 1247 -- The N_Allocator case is handled by the routine that expands the call 1248 -- to the runtime routine. The N_Subprogram_Body case is handled by the 1249 -- backend, and all the semantics does is set the flag. 1250 1251 -- Do_Tag_Check (Flag13-Sem) 1252 -- This flag is set on an N_Assignment_Statement, N_Function_Call, 1253 -- N_Procedure_Call_Statement, N_Type_Conversion, 1254 -- N_Simple_Return_Statement, or N_Extended_Return_Statement 1255 -- node to indicate that the tag check can be suppressed. It is not 1256 -- yet decided how this flag is used (TBD ???). 1257 1258 -- Elaborate_Present (Flag4-Sem) 1259 -- This flag is set in the N_With_Clause node to indicate that pragma 1260 -- Elaborate pragma appears for the with'ed units. 1261 1262 -- Elaborate_All_Desirable (Flag9-Sem) 1263 -- This flag is set in the N_With_Clause mode to indicate that the static 1264 -- elaboration processing has determined that an Elaborate_All pragma is 1265 -- desirable for correct elaboration for this unit. 1266 1267 -- Elaborate_All_Present (Flag14-Sem) 1268 -- This flag is set in the N_With_Clause node to indicate that a 1269 -- pragma Elaborate_All pragma appears for the with'ed units. 1270 1271 -- Elaborate_Desirable (Flag11-Sem) 1272 -- This flag is set in the N_With_Clause mode to indicate that the static 1273 -- elaboration processing has determined that an Elaborate pragma is 1274 -- desirable for correct elaboration for this unit. 1275 1276 -- Else_Actions (List3-Sem) 1277 -- This field is present in if expression nodes. During code 1278 -- expansion we use the Insert_Actions procedure (in Exp_Util) to insert 1279 -- actions at an appropriate place in the tree to get elaborated at the 1280 -- right time. For if expressions, we have to be sure that the actions 1281 -- for the Else branch are only elaborated if the condition is False. 1282 -- The Else_Actions field is used as a temporary parking place for 1283 -- these actions. The final tree is always rewritten to eliminate the 1284 -- need for this field, so in the tree passed to Gigi, this field is 1285 -- always set to No_List. 1286 1287 -- Enclosing_Variant (Node2-Sem) 1288 -- This field is present in the N_Variant node and identifies the Node_Id 1289 -- corresponding to the immediately enclosing variant when the variant is 1290 -- nested, and N_Empty otherwise. Set during semantic processing of the 1291 -- variant part of a record type. 1292 1293 -- Entity (Node4-Sem) 1294 -- Appears in all direct names (identifiers, character literals, and 1295 -- operator symbols), as well as expanded names, and attributes that 1296 -- denote entities, such as 'Class. Points to entity for corresponding 1297 -- defining occurrence. Set after name resolution. For identifiers in a 1298 -- WITH list, the corresponding defining occurrence is in a separately 1299 -- compiled file, and Entity must be set by the library Load procedure. 1300 -- 1301 -- Note: During name resolution, the value in Entity may be temporarily 1302 -- incorrect (e.g. during overload resolution, Entity is initially set to 1303 -- the first possible correct interpretation, and then later modified if 1304 -- necessary to contain the correct value after resolution). 1305 -- 1306 -- Note: This field overlaps Associated_Node, which is used during 1307 -- generic processing (see Sem_Ch12 for details). Note also that in 1308 -- generic templates, this means that the Entity field does not always 1309 -- point to an Entity. Since the back end is expected to ignore generic 1310 -- templates, this is harmless. 1311 -- 1312 -- Note: This field also appears in N_Attribute_Definition_Clause nodes. 1313 -- It is used only for stream attributes definition clauses. In this 1314 -- case, it denotes a (possibly dummy) subprogram entity that is declared 1315 -- conceptually at the point of the clause. Thus the visibility of the 1316 -- attribute definition clause (in the sense of 8.3(23) as amended by 1317 -- AI-195) can be checked by testing the visibility of that subprogram. 1318 -- 1319 -- Note: Normally the Entity field of an identifier points to the entity 1320 -- for the corresponding defining identifier, and hence the Chars field 1321 -- of an identifier will match the Chars field of the entity. However, 1322 -- there is no requirement that these match, and there are obscure cases 1323 -- of generated code where they do not match. 1324 1325 -- Note: Ada 2012 aspect specifications require additional links between 1326 -- identifiers and various attributes. These attributes can be of 1327 -- arbitrary types, and the entity field of identifiers that denote 1328 -- aspects must be used to store arbitrary expressions for later semantic 1329 -- checks. See section on aspect specifications for details. 1330 1331 -- Entity_Or_Associated_Node (Node4-Sem) 1332 -- A synonym for both Entity and Associated_Node. Used by convention in 1333 -- the code when referencing this field in cases where it is not known 1334 -- whether the field contains an Entity or an Associated_Node. 1335 1336 -- Etype (Node5-Sem) 1337 -- Appears in all expression nodes, all direct names, and all entities. 1338 -- Points to the entity for the related type. Set after type resolution. 1339 -- Normally this is the actual subtype of the expression. However, in 1340 -- certain contexts such as the right side of an assignment, subscripts, 1341 -- arguments to calls, returned value in a function, initial value etc. 1342 -- it is the desired target type. In the event that this is different 1343 -- from the actual type, the Do_Range_Check flag will be set if a range 1344 -- check is required. Note: if the Is_Overloaded flag is set, then Etype 1345 -- points to an essentially arbitrary choice from the possible set of 1346 -- types. 1347 1348 -- Exception_Junk (Flag8-Sem) 1349 -- This flag is set in a various nodes appearing in a statement sequence 1350 -- to indicate that the corresponding node is an artifact of the 1351 -- generated code for exception handling, and should be ignored when 1352 -- analyzing the control flow of the relevant sequence of statements 1353 -- (e.g. to check that it does not end with a bad return statement). 1354 1355 -- Exception_Label (Node5-Sem) 1356 -- Appears in N_Push_xxx_Label nodes. Points to the entity of the label 1357 -- to be used for transforming the corresponding exception into a goto, 1358 -- or contains Empty, if this exception is not to be transformed. Also 1359 -- appears in N_Exception_Handler nodes, where, if set, it indicates 1360 -- that there may be a local raise for the handler, so that expansion 1361 -- to allow a goto is required (and this field contains the label for 1362 -- this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details. 1363 1364 -- Expansion_Delayed (Flag11-Sem) 1365 -- Set on aggregates and extension aggregates that need a top-down rather 1366 -- than bottom-up expansion. Typically aggregate expansion happens bottom 1367 -- up. For nested aggregates the expansion is delayed until the enclosing 1368 -- aggregate itself is expanded, e.g. in the context of a declaration. To 1369 -- delay it we set this flag. This is done to avoid creating a temporary 1370 -- for each level of a nested aggregate, and also to prevent the 1371 -- premature generation of constraint checks. This is also a requirement 1372 -- if we want to generate the proper attachment to the internal???? 1373 -- finalization lists (for record with controlled components). Top down 1374 -- expansion of aggregates is also used for in-place array aggregate 1375 -- assignment or initialization. When the full context is known, the 1376 -- target of the assignment or initialization is used to generate the 1377 -- left-hand side of individual assignment to each sub-component. 1378 1379 -- Expression_Copy (Node2-Sem) 1380 -- Present in N_Pragma_Argument_Association nodes. Contains a copy of the 1381 -- original expression. This field is best used to store pragma-dependent 1382 -- modifications performed on the original expression such as replacement 1383 -- of the current type instance or substitutions of primitives. 1384 1385 -- First_Inlined_Subprogram (Node3-Sem) 1386 -- Present in the N_Compilation_Unit node for the main program. Points 1387 -- to a chain of entities for subprograms that are to be inlined. The 1388 -- Next_Inlined_Subprogram field of these entities is used as a link 1389 -- pointer with Empty marking the end of the list. This field is Empty 1390 -- if there are no inlined subprograms or inlining is not active. 1391 1392 -- First_Named_Actual (Node4-Sem) 1393 -- Present in procedure call statement and function call nodes, and also 1394 -- in Intrinsic nodes. Set during semantic analysis to point to the first 1395 -- named parameter where parameters are ordered by declaration order (as 1396 -- opposed to the actual order in the call which may be different due to 1397 -- named associations). Note: this field points to the explicit actual 1398 -- parameter itself, not the N_Parameter_Association node (its parent). 1399 1400 -- First_Real_Statement (Node2-Sem) 1401 -- Present in N_Handled_Sequence_Of_Statements node. Normally set to 1402 -- Empty. Used only when declarations are moved into the statement part 1403 -- of a construct as a result of wrapping an AT END handler that is 1404 -- required to cover the declarations. In this case, this field is used 1405 -- to remember the location in the statements list of the first real 1406 -- statement, i.e. the statement that used to be first in the statement 1407 -- list before the declarations were prepended. 1408 1409 -- First_Subtype_Link (Node5-Sem) 1410 -- Present in N_Freeze_Entity node for an anonymous base type that is 1411 -- implicitly created by the declaration of a first subtype. It points 1412 -- to the entity for the first subtype. 1413 1414 -- Float_Truncate (Flag11-Sem) 1415 -- A flag present in type conversion nodes. This is used for float to 1416 -- integer conversions where truncation is required rather than rounding. 1417 1418 -- Forwards_OK (Flag5-Sem) 1419 -- A flag present in the N_Assignment_Statement node. It is used only 1420 -- if the type being assigned is an array type, and is set if analysis 1421 -- determines that it is definitely safe to do the copy forwards, i.e. 1422 -- starting at the lowest addressed element. This is the case if either 1423 -- the operands do not overlap, or they may overlap, but if they do, 1424 -- then the left operand is at a lower address than the right operand. 1425 -- 1426 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 1427 -- means that the front end could not determine that either direction is 1428 -- definitely safe, and a runtime check may be required if the backend 1429 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 1430 -- set, it means that the front end can assure no overlap of operands. 1431 1432 -- From_Aspect_Specification (Flag13-Sem) 1433 -- Processing of aspect specifications typically results in insertion in 1434 -- the tree of corresponding pragma or attribute definition clause nodes. 1435 -- These generated nodes have the From_Aspect_Specification flag set to 1436 -- indicate that they came from aspect specifications originally. 1437 1438 -- From_At_End (Flag4-Sem) 1439 -- This flag is set on an N_Raise_Statement node if it corresponds to 1440 -- the reraise statement generated as the last statement of an AT END 1441 -- handler when SJLJ exception handling is active. It is used to stop 1442 -- a bogus violation of restriction (No_Exception_Propagation), bogus 1443 -- because if the restriction is set, the reraise is not generated. 1444 1445 -- From_At_Mod (Flag4-Sem) 1446 -- This flag is set on the attribute definition clause node that is 1447 -- generated by a transformation of an at mod phrase in a record 1448 -- representation clause. This is used to give slightly different (Ada 83 1449 -- compatible) semantics to such a clause, namely it is used to specify a 1450 -- minimum acceptable alignment for the base type and all subtypes. In 1451 -- Ada 95 terms, the actual alignment of the base type and all subtypes 1452 -- must be a multiple of the given value, and the representation clause 1453 -- is considered to be type specific instead of subtype specific. 1454 1455 -- From_Conditional_Expression (Flag1-Sem) 1456 -- This flag is set on if and case statements generated by the expansion 1457 -- of if and case expressions respectively. The flag is used to suppress 1458 -- any finalization of controlled objects found within these statements. 1459 1460 -- From_Default (Flag6-Sem) 1461 -- This flag is set on the subprogram renaming declaration created in an 1462 -- instance for a formal subprogram, when the formal is declared with a 1463 -- box, and there is no explicit actual. If the flag is present, the 1464 -- declaration is treated as an implicit reference to the formal in the 1465 -- ali file. 1466 1467 -- Generalized_Indexing (Node4-Sem) 1468 -- Present in N_Indexed_Component nodes. Set for Indexed_Component nodes 1469 -- that are Ada 2012 container indexing operations. The value of the 1470 -- attribute is a function call (possibly dereferenced) that corresponds 1471 -- to the proper expansion of the source indexing operation. Before 1472 -- expansion, the source node is rewritten as the resolved generalized 1473 -- indexing. In ASIS mode, the expansion does not take place, so that 1474 -- the source is preserved and properly annotated with types. 1475 1476 -- Generic_Parent (Node5-Sem) 1477 -- Generic_Parent is defined on declaration nodes that are instances. The 1478 -- value of Generic_Parent is the generic entity from which the instance 1479 -- is obtained. 1480 1481 -- Generic_Parent_Type (Node4-Sem) 1482 -- Generic_Parent_Type is defined on Subtype_Declaration nodes for the 1483 -- actuals of formal private and derived types. Within the instance, the 1484 -- operations on the actual are those inherited from the parent. For a 1485 -- formal private type, the parent type is the generic type itself. The 1486 -- Generic_Parent_Type is also used in an instance to determine whether a 1487 -- private operation overrides an inherited one. 1488 1489 -- Handler_List_Entry (Node2-Sem) 1490 -- This field is present in N_Object_Declaration nodes. It is set only 1491 -- for the Handler_Record entry generated for an exception in zero cost 1492 -- exception handling mode. It references the corresponding item in the 1493 -- handler list, and is used to delete this entry if the corresponding 1494 -- handler is deleted during optimization. For further details on why 1495 -- this is required, see Exp_Ch11.Remove_Handler_Entries. 1496 1497 -- Has_Dereference_Action (Flag13-Sem) 1498 -- This flag is present in N_Explicit_Dereference nodes. It is set to 1499 -- indicate that the expansion has aready produced a call to primitive 1500 -- Dereference of a System.Checked_Pools.Checked_Pool implementation. 1501 -- Such dereference actions are produced for debugging purposes. 1502 1503 -- Has_Dynamic_Length_Check (Flag10-Sem) 1504 -- This flag is present in all expression nodes. It is set to indicate 1505 -- that one of the routines in unit Checks has generated a length check 1506 -- action which has been inserted at the flagged node. This is used to 1507 -- avoid the generation of duplicate checks. 1508 1509 -- Has_Dynamic_Range_Check (Flag12-Sem) 1510 -- This flag is present in N_Subtype_Declaration nodes and on all 1511 -- expression nodes. It is set to indicate that one of the routines in 1512 -- unit Checks has generated a range check action which has been inserted 1513 -- at the flagged node. This is used to avoid the generation of duplicate 1514 -- checks. Why does this occur on N_Subtype_Declaration nodes, what does 1515 -- it mean in that context??? 1516 1517 -- Has_Local_Raise (Flag8-Sem) 1518 -- Present in exception handler nodes. Set if the handler can be entered 1519 -- via a local raise that gets transformed to a goto statement. This will 1520 -- always be set if Local_Raise_Statements is non-empty, but can also be 1521 -- set as a result of generation of N_Raise_xxx nodes, or flags set in 1522 -- nodes requiring generation of back end checks. 1523 1524 -- Has_No_Elaboration_Code (Flag17-Sem) 1525 -- A flag that appears in the N_Compilation_Unit node to indicate whether 1526 -- or not elaboration code is present for this unit. It is initially set 1527 -- true for subprogram specs and bodies and for all generic units and 1528 -- false for non-generic package specs and bodies. Gigi may set the flag 1529 -- in the non-generic package case if it determines that no elaboration 1530 -- code is generated. Note that this flag is not related to the 1531 -- Is_Preelaborated status, there can be preelaborated packages that 1532 -- generate elaboration code, and non-preelaborated packages which do 1533 -- not generate elaboration code. 1534 1535 -- Has_Pragma_Suppress_All (Flag14-Sem) 1536 -- This flag is set in an N_Compilation_Unit node if the Suppress_All 1537 -- pragma appears anywhere in the unit. This accommodates the rather 1538 -- strange placement rules of other compilers (DEC permits it at the 1539 -- end of a unit, and Rational allows it as a program unit pragma). We 1540 -- allow it anywhere at all, and consider it equivalent to a pragma 1541 -- Suppress (All_Checks) appearing at the start of the configuration 1542 -- pragmas for the unit. 1543 1544 -- Has_Private_View (Flag11-Sem) 1545 -- A flag present in generic nodes that have an entity, to indicate that 1546 -- the node has a private type. Used to exchange private and full 1547 -- declarations if the visibility at instantiation is different from the 1548 -- visibility at generic definition. 1549 1550 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 1551 -- A flag present in N_Subprogram_Body and N_Task_Definition nodes to 1552 -- flag the presence of a pragma Relative_Deadline. 1553 1554 -- Has_Self_Reference (Flag13-Sem) 1555 -- Present in N_Aggregate and N_Extension_Aggregate. Indicates that one 1556 -- of the expressions contains an access attribute reference to the 1557 -- enclosing type. Such a self-reference can only appear in default- 1558 -- initialized aggregate for a record type. 1559 1560 -- Has_SP_Choice (Flag15-Sem) 1561 -- Present in all nodes containing a Discrete_Choices field (N_Variant, 1562 -- N_Case_Expression_Alternative, N_Case_Statement_Alternative). Set to 1563 -- True if the Discrete_Choices list has at least one occurrence of a 1564 -- statically predicated subtype. 1565 1566 -- Has_Storage_Size_Pragma (Flag5-Sem) 1567 -- A flag present in an N_Task_Definition node to flag the presence of a 1568 -- Storage_Size pragma. 1569 1570 -- Has_Target_Names (Flag8-Sem) 1571 -- Present in assignment statements. Indicates that the RHS contains 1572 -- target names (see AI12-0125-3) and must be expanded accordingly. 1573 1574 -- Has_Wide_Character (Flag11-Sem) 1575 -- Present in string literals, set if any wide character (i.e. character 1576 -- code outside the Character range but within Wide_Character range) 1577 -- appears in the string. Used to implement pragma preference rules. 1578 1579 -- Has_Wide_Wide_Character (Flag13-Sem) 1580 -- Present in string literals, set if any wide character (i.e. character 1581 -- code outside the Wide_Character range) appears in the string. Used to 1582 -- implement pragma preference rules. 1583 1584 -- Header_Size_Added (Flag11-Sem) 1585 -- Present in N_Attribute_Reference nodes, set only for attribute 1586 -- Max_Size_In_Storage_Elements. The flag indicates that the size of the 1587 -- hidden list header used by the runtime finalization support has been 1588 -- added to the size of the prefix. The flag also prevents the infinite 1589 -- expansion of the same attribute in the said context. 1590 1591 -- Hidden_By_Use_Clause (Elist5-Sem) 1592 -- An entity list present in use clauses that appear within 1593 -- instantiations. For the resolution of local entities, entities 1594 -- introduced by these use clauses have priority over global ones, 1595 -- and outer entities must be explicitly hidden/restored on exit. 1596 1597 -- Implicit_With (Flag16-Sem) 1598 -- Present in N_With_Clause nodes. The flag indicates that the clause 1599 -- does not comes from source and introduces an implicit dependency on 1600 -- a particular unit. Such implicit with clauses are generated by: 1601 -- 1602 -- * ABE mechanism - The static elaboration model of both the default 1603 -- and the legacy ABE mechanism use with clauses to encode implicit 1604 -- Elaborate[_All] pragmas. 1605 -- 1606 -- * Analysis - A with clause for child unit A.B.C is equivalent to 1607 -- a series of clauses that with A, A.B, and A.B.C. Manipulation of 1608 -- contexts utilizes implicit with clauses to emulate the visibility 1609 -- of a particular unit. 1610 -- 1611 -- * RTSfind - The compiler generates code which references entities 1612 -- from the runtime. 1613 1614 -- Import_Interface_Present (Flag16-Sem) 1615 -- This flag is set in an Interface or Import pragma if a matching 1616 -- pragma of the other kind is also present. This is used to avoid 1617 -- generating some unwanted error messages. 1618 1619 -- Includes_Infinities (Flag11-Sem) 1620 -- This flag is present in N_Range nodes. It is set for the range of 1621 -- unconstrained float types defined in Standard, which include not only 1622 -- the given range of values, but also legitimately can include infinite 1623 -- values. This flag is false for any float type for which an explicit 1624 -- range is given by the programmer, even if that range is identical to 1625 -- the range for Float. 1626 1627 -- Incomplete_View (Node2-Sem) 1628 -- Present in full type declarations that are completions of incomplete 1629 -- type declarations. Denotes the corresponding incomplete type 1630 -- declaration. Used to simplify the retrieval of primitive operations 1631 -- that may be declared between the partial and the full view of an 1632 -- untagged type. 1633 1634 -- Inherited_Discriminant (Flag13-Sem) 1635 -- This flag is present in N_Component_Association nodes. It indicates 1636 -- that a given component association in an extension aggregate is the 1637 -- value obtained from a constraint on an ancestor. Used to prevent 1638 -- double expansion when the aggregate has expansion delayed. 1639 1640 -- Instance_Spec (Node5-Sem) 1641 -- This field is present in generic instantiation nodes, and also in 1642 -- formal package declaration nodes (formal package declarations are 1643 -- treated in a manner very similar to package instantiations). It points 1644 -- to the node for the spec of the instance, inserted as part of the 1645 -- semantic processing for instantiations in Sem_Ch12. 1646 1647 -- Is_Abort_Block (Flag4-Sem) 1648 -- Present in N_Block_Statement nodes. True if the block protects a list 1649 -- of statements with an Abort_Defer / Abort_Undefer_Direct pair. 1650 1651 -- Is_Accessibility_Actual (Flag13-Sem) 1652 -- Present in N_Parameter_Association nodes. True if the parameter is 1653 -- an extra actual that carries the accessibility level of the actual 1654 -- for an access parameter, in a function that dispatches on result and 1655 -- is called in a dispatching context. Used to prevent a formal/actual 1656 -- mismatch when the call is rewritten as a dispatching call. 1657 1658 -- Is_Analyzed_Pragma (Flag5-Sem) 1659 -- Present in N_Pragma nodes. Set for delayed pragmas that require a two 1660 -- step analysis. The initial step is peformed by routine Analyze_Pragma 1661 -- and verifies the overall legality of the pragma. The second step takes 1662 -- place in the various Analyze_xxx_In_Decl_Part routines which perform 1663 -- full analysis. The flag prevents the reanalysis of a delayed pragma. 1664 1665 -- Is_Asynchronous_Call_Block (Flag7-Sem) 1666 -- A flag set in a Block_Statement node to indicate that it is the 1667 -- expansion of an asynchronous entry call. Such a block needs cleanup 1668 -- handler to assure that the call is cancelled. 1669 1670 -- Is_Boolean_Aspect (Flag16-Sem) 1671 -- Present in N_Aspect_Specification node. Set if the aspect is for a 1672 -- boolean aspect (i.e. Aspect_Id is in Boolean_Aspect subtype). 1673 1674 -- Is_Checked (Flag11-Sem) 1675 -- Present in N_Aspect_Specification and N_Pragma nodes. Set for an 1676 -- assertion aspect or pragma, or check pragma for an assertion, that 1677 -- is to be checked at run time. If either Is_Checked or Is_Ignored 1678 -- is set (they cannot both be set), then this means that the status of 1679 -- the pragma has been checked at the appropriate point and should not 1680 -- be further modified (in some cases these flags are copied when a 1681 -- pragma is rewritten). 1682 1683 -- Is_Checked_Ghost_Pragma (Flag3-Sem) 1684 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1685 -- related to a checked Ghost entity or encloses a checked Ghost entity. 1686 -- This flag has no relation to Is_Checked. 1687 1688 -- Is_Component_Left_Opnd (Flag13-Sem) 1689 -- Is_Component_Right_Opnd (Flag14-Sem) 1690 -- Present in concatenation nodes, to indicate that the corresponding 1691 -- operand is of the component type of the result. Used in resolving 1692 -- concatenation nodes in instances. 1693 1694 -- Is_Controlling_Actual (Flag16-Sem) 1695 -- This flag is set on an expression that is a controlling argument in 1696 -- a dispatching call. It is off in all other cases. See Sem_Disp for 1697 -- details of its use. 1698 1699 -- Is_Declaration_Level_Node (Flag5-Sem) 1700 -- Present in call marker and instantiation nodes. Set when the constuct 1701 -- appears within the declarations of a block statement, an entry body, 1702 -- a subprogram body, or a task body. The flag aids the ABE Processing 1703 -- phase to catch certain forms of guaranteed ABEs. 1704 1705 -- Is_Delayed_Aspect (Flag14-Sem) 1706 -- Present in N_Pragma and N_Attribute_Definition_Clause nodes which 1707 -- come from aspect specifications, where the evaluation of the aspect 1708 -- must be delayed to the freeze point. This flag is also set True in 1709 -- the corresponding N_Aspect_Specification node. 1710 1711 -- Is_Disabled (Flag15-Sem) 1712 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1713 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1714 -- a Debug_Policy pragma that resulted in totally disabling the flagged 1715 -- aspect or policy as a result of using the GNAT-defined policy DISABLE. 1716 -- If this flag is set, the aspect or policy is not analyzed for semantic 1717 -- correctness, so any expressions etc will not be marked as analyzed. 1718 1719 -- Is_Dispatching_Call (Flag6-Sem) 1720 -- Present in call marker nodes. Set when the related call which prompted 1721 -- the creation of the marker is dispatching. 1722 1723 -- Is_Dynamic_Coextension (Flag18-Sem) 1724 -- Present in allocator nodes, to indicate that this is an allocator 1725 -- for an access discriminant of a dynamically allocated object. The 1726 -- coextension must be deallocated and finalized at the same time as 1727 -- the enclosing object. 1728 1729 -- Is_Effective_Use_Clause (Flag1-Sem) 1730 -- Present in both N_Use_Type_Clause and N_Use_Package_Clause to indicate 1731 -- a use clause is "used" in the current source. 1732 1733 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 1734 -- Present in the following nodes: 1735 -- 1736 -- assignment statement 1737 -- attribute reference 1738 -- call marker 1739 -- entry call statement 1740 -- expanded name 1741 -- function call 1742 -- function instantiation 1743 -- identifier 1744 -- package instantiation 1745 -- procedure call statement 1746 -- procedure instantiation 1747 -- requeue statement 1748 -- 1749 -- Set when the node appears within a context which allows the generation 1750 -- of run-time ABE checks. This flag detemines whether the ABE Processing 1751 -- phase generates conditional ABE checks and guaranteed ABE failures. 1752 1753 -- Is_Elaboration_Code (Flag9-Sem) 1754 -- Present in assignment statements. Set for an assignment which updates 1755 -- the elaboration flag of a package or subprogram when the corresponding 1756 -- body is successfully elaborated. 1757 1758 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 1759 -- Present in the following nodes: 1760 -- 1761 -- call marker 1762 -- entry call statement 1763 -- function call 1764 -- function instantiation 1765 -- package instantiation 1766 -- procedure call statement 1767 -- procedure instantiation 1768 -- requeue statement 1769 -- 1770 -- Set when the node appears within a context where elaboration warnings 1771 -- are enabled. This flag determines whether the ABE processing phase 1772 -- generates diagnostics on various elaboration issues. 1773 1774 -- Is_Entry_Barrier_Function (Flag8-Sem) 1775 -- This flag is set on N_Subprogram_Declaration and N_Subprogram_Body 1776 -- nodes which emulate the barrier function of a protected entry body. 1777 -- The flag is used when checking for incorrect use of Current_Task. 1778 1779 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 1780 -- This flag is set in an N_Function_Call node to indicate that the extra 1781 -- actuals to support a build-in-place style of call have been added to 1782 -- the call. 1783 1784 -- Is_Expanded_Contract (Flag1-Sem) 1785 -- Present in N_Contract nodes. Set if the contract has already undergone 1786 -- expansion activities. 1787 1788 -- Is_Finalization_Wrapper (Flag9-Sem) 1789 -- This flag is present in N_Block_Statement nodes. It is set when the 1790 -- block acts as a wrapper of a handled construct which has controlled 1791 -- objects. The wrapper prevents interference between exception handlers 1792 -- and At_End handlers. 1793 1794 -- Is_Generic_Contract_Pragma (Flag2-Sem) 1795 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1796 -- a source construct, applies to a generic unit or its body, and denotes 1797 -- one of the following contract-related annotations: 1798 -- Abstract_State 1799 -- Contract_Cases 1800 -- Depends 1801 -- Extensions_Visible 1802 -- Global 1803 -- Initial_Condition 1804 -- Initializes 1805 -- Post 1806 -- Post_Class 1807 -- Postcondition 1808 -- Pre 1809 -- Pre_Class 1810 -- Precondition 1811 -- Refined_Depends 1812 -- Refined_Global 1813 -- Refined_Post 1814 -- Refined_State 1815 -- Test_Case 1816 1817 -- Is_Ignored (Flag9-Sem) 1818 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1819 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1820 -- a Debug_Policy pragma that specified a policy of IGNORE, DISABLE, or 1821 -- OFF, for the pragma/aspect. If there was a Policy pragma specifying 1822 -- a Policy of ON or CHECK, then this flag is reset. If no Policy pragma 1823 -- gives a policy for the aspect or pragma, then there are two cases. For 1824 -- an assertion aspect or pragma (one of the assertion kinds allowed in 1825 -- an Assertion_Policy pragma), then Is_Ignored is set if assertions are 1826 -- ignored because of the absence of a -gnata switch. For any other 1827 -- aspects or pragmas, the flag is off. If this flag is set, the 1828 -- aspect/pragma is fully analyzed and checked for other syntactic 1829 -- and semantic errors, but it does not have any semantic effect. 1830 1831 -- Is_Ignored_Ghost_Pragma (Flag8-Sem) 1832 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1833 -- related to an ignored Ghost entity or encloses ignored Ghost entity. 1834 -- This flag has no relation to Is_Ignored. 1835 1836 -- Is_In_Discriminant_Check (Flag11-Sem) 1837 -- This flag is present in a selected component, and is used to indicate 1838 -- that the reference occurs within a discriminant check. The 1839 -- significance is that optimizations based on assuming that the 1840 -- discriminant check has a correct value cannot be performed in this 1841 -- case (or the discriminant check may be optimized away). 1842 1843 -- Is_Inherited_Pragma (Flag4-Sem) 1844 -- This flag is set in an N_Pragma node that appears in a N_Contract node 1845 -- to indicate that the pragma has been inherited from a parent context. 1846 1847 -- Is_Initialization_Block (Flag1-Sem) 1848 -- Defined in block nodes. Set when the block statement was created by 1849 -- the finalization machinery to wrap initialization statements. This 1850 -- flag aids the ABE Processing phase to suppress the diagnostics of 1851 -- finalization actions in initialization contexts. 1852 1853 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 1854 -- NOTE: this flag is shared between the legacy ABE mechanism and the 1855 -- default ABE mechanism. 1856 -- 1857 -- Present in the following nodes: 1858 -- 1859 -- call marker 1860 -- formal package declaration 1861 -- function call 1862 -- function instantiation 1863 -- package instantiation 1864 -- procedure call statement 1865 -- procedure instantiation 1866 -- 1867 -- Set when the elaboration or evaluation of the scenario results in 1868 -- a guaranteed ABE. The flag is used to suppress the instantiation of 1869 -- generic bodies because gigi cannot handle certain forms of premature 1870 -- instantiation, as well as to prevent the reexamination of the node by 1871 -- the ABE Processing phase. 1872 1873 -- Is_Machine_Number (Flag11-Sem) 1874 -- This flag is set in an N_Real_Literal node to indicate that the value 1875 -- is a machine number. This avoids some unnecessary cases of converting 1876 -- real literals to machine numbers. 1877 1878 -- Is_Null_Loop (Flag16-Sem) 1879 -- This flag is set in an N_Loop_Statement node if the corresponding loop 1880 -- can be determined to be null at compile time. This is used to remove 1881 -- the loop entirely at expansion time. 1882 1883 -- Is_Overloaded (Flag5-Sem) 1884 -- A flag present in all expression nodes. Used temporarily during 1885 -- overloading determination. The setting of this flag is not relevant 1886 -- once overloading analysis is complete. 1887 1888 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 1889 -- A flag present only in N_Op_Expon nodes. It is set when the 1890 -- exponentiation is of the form 2 ** N, where the type of N is an 1891 -- unsigned integral subtype whose size does not exceed the size of 1892 -- Standard_Integer (i.e. a type that can be safely converted to 1893 -- Natural), and the exponentiation appears as the right operand of an 1894 -- integer multiplication or an integer division where the dividend is 1895 -- unsigned. It is also required that overflow checking is off for both 1896 -- the exponentiation and the multiply/divide node. If this set of 1897 -- conditions holds, and the flag is set, then the division or 1898 -- multiplication can be (and is) converted to a shift. 1899 1900 -- Is_Prefixed_Call (Flag17-Sem) 1901 -- This flag is set in a selected component within a generic unit, if 1902 -- it resolves to a prefixed call to a primitive operation. The flag 1903 -- is used to prevent accidental overloadings in an instance, when a 1904 -- primitive operation and a private record component may be homographs. 1905 1906 -- Is_Protected_Subprogram_Body (Flag7-Sem) 1907 -- A flag set in a Subprogram_Body block to indicate that it is the 1908 -- implementation of a protected subprogram. Such a body needs cleanup 1909 -- handler to make sure that the associated protected object is unlocked 1910 -- when the subprogram completes. 1911 1912 -- Is_Qualified_Universal_Literal (Flag4-Sem) 1913 -- Present in N_Qualified_Expression nodes. Set when the qualification is 1914 -- converting a universal literal to a specific type. Such qualifiers aid 1915 -- the resolution of accidental overloading of binary or unary operators 1916 -- which may occur in instances. 1917 1918 -- Is_Read (Flag1-Sem) 1919 -- Present in variable reference markers. Set when the original variable 1920 -- reference constitues a read of the variable. 1921 1922 -- Is_Source_Call (Flag4-Sem) 1923 -- Present in call marker nodes. Set when the related call came from 1924 -- source. 1925 1926 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 1927 -- Present in nodes which represent an elaboration scenario. Those are 1928 -- assignment statement, attribute reference, call marker, entry call 1929 -- statement, expanded name, function call, identifier, instantiation, 1930 -- procedure call statement, and requeue statement nodes. Set when the 1931 -- node appears within a context subject to SPARK_Mode On. This flag 1932 -- determines when the SPARK model of elaboration be activated by the 1933 -- ABE Processing phase. 1934 1935 -- Is_Static_Coextension (Flag14-Sem) 1936 -- Present in N_Allocator nodes. Set if the allocator is a coextension 1937 -- of an object allocated on the stack rather than the heap. 1938 1939 -- Is_Static_Expression (Flag6-Sem) 1940 -- Indicates that an expression is a static expression according to the 1941 -- rules in (RM 4.9). Note that it is possible for this flag to be set 1942 -- when Raises_Constraint_Error is also set. In practice almost all cases 1943 -- where a static expression is required do not allow an expression which 1944 -- raises Constraint_Error, so almost always, callers should call the 1945 -- Is_Ok_Static_Expression routine instead of testing this flag. See 1946 -- spec of package Sem_Eval for full details on the use of this flag. 1947 1948 -- Is_Subprogram_Descriptor (Flag16-Sem) 1949 -- Present in N_Object_Declaration, and set only for the object 1950 -- declaration generated for a subprogram descriptor in fast exception 1951 -- mode. See Exp_Ch11 for details of use. 1952 1953 -- Is_Task_Allocation_Block (Flag6-Sem) 1954 -- A flag set in a Block_Statement node to indicate that it is the 1955 -- expansion of a task allocator, or the allocator of an object 1956 -- containing tasks. Such a block requires a cleanup handler to call 1957 -- Expunge_Unactivated_Tasks to complete any tasks that have been 1958 -- allocated but not activated when the allocator completes abnormally. 1959 1960 -- Is_Task_Body_Procedure (Flag1-Sem) 1961 -- This flag is set on N_Subprogram_Declaration and N_Subprogram_Body 1962 -- nodes which emulate the body of a task unit. 1963 1964 -- Is_Task_Master (Flag5-Sem) 1965 -- A flag set in a Subprogram_Body, Block_Statement, or Task_Body node to 1966 -- indicate that the construct is a task master (i.e. has declared tasks 1967 -- or declares an access to a task type). 1968 1969 -- Is_Write (Flag2-Sem) 1970 -- Present in variable reference markers. Set when the original variable 1971 -- reference constitues a write of the variable. 1972 1973 -- Itype (Node1-Sem) 1974 -- Used in N_Itype_Reference node to reference an itype for which it is 1975 -- important to ensure that it is defined. See description of this node 1976 -- for further details. 1977 1978 -- Kill_Range_Check (Flag11-Sem) 1979 -- Used in an N_Unchecked_Type_Conversion node to indicate that the 1980 -- result should not be subjected to range checks. This is used for the 1981 -- implementation of Normalize_Scalars. 1982 1983 -- Label_Construct (Node2-Sem) 1984 -- Used in an N_Implicit_Label_Declaration node. Refers to an N_Label, 1985 -- N_Block_Statement or N_Loop_Statement node to which the label 1986 -- declaration applies. This attribute is used both in the compiler and 1987 -- in the implementation of ASIS queries. The field is left empty for the 1988 -- special labels generated as part of expanding raise statements with a 1989 -- local exception handler. 1990 1991 -- Library_Unit (Node4-Sem) 1992 -- In a stub node, Library_Unit points to the compilation unit node of 1993 -- the corresponding subunit. 1994 -- 1995 -- In a with clause node, Library_Unit points to the spec of the with'ed 1996 -- unit. 1997 -- 1998 -- In a compilation unit node, the usage depends on the unit type: 1999 -- 2000 -- For a library unit body, Library_Unit points to the compilation unit 2001 -- node of the corresponding spec, unless it's a subprogram body with 2002 -- Acts_As_Spec set, in which case it points to itself. 2003 -- 2004 -- For a spec, Library_Unit points to the compilation unit node of the 2005 -- corresponding body, if present. The body will be present if the spec 2006 -- is or contains generics that we needed to instantiate. Similarly, the 2007 -- body will be present if we needed it for inlining purposes. Thus, if 2008 -- we have a spec/body pair, both of which are present, they point to 2009 -- each other via Library_Unit. 2010 -- 2011 -- For a subunit, Library_Unit points to the compilation unit node of 2012 -- the parent body. 2013 -- ??? not (always) true, in (at least some, maybe all?) cases it points 2014 -- to the corresponding spec for the parent body. 2015 -- 2016 -- Note that this field is not used to hold the parent pointer for child 2017 -- unit (which might in any case need to use it for some other purpose as 2018 -- described above). Instead for a child unit, implicit with's are 2019 -- generated for all parents. 2020 2021 -- Local_Raise_Statements (Elist1) 2022 -- This field is present in exception handler nodes. It is set to 2023 -- No_Elist in the normal case. If there is at least one raise statement 2024 -- which can potentially be handled as a local raise, then this field 2025 -- points to a list of raise nodes, which are calls to a routine to raise 2026 -- an exception. These are raise nodes which can be optimized into gotos 2027 -- if the handler turns out to meet the conditions which permit this 2028 -- transformation. Note that this does NOT include instances of the 2029 -- N_Raise_xxx_Error nodes since the transformation of these nodes is 2030 -- handled by the back end (using the N_Push/N_Pop mechanism). 2031 2032 -- Loop_Actions (List2-Sem) 2033 -- A list present in Component_Association nodes in array aggregates. 2034 -- Used to collect actions that must be executed within the loop because 2035 -- they may need to be evaluated anew each time through. 2036 2037 -- Limited_View_Installed (Flag18-Sem) 2038 -- Present in With_Clauses and in package specifications. If set on 2039 -- with_clause, it indicates that this clause has created the current 2040 -- limited view of the designated package. On a package specification, it 2041 -- indicates that the limited view has already been created because the 2042 -- package is mentioned in a limited_with_clause in the closure of the 2043 -- unit being compiled. 2044 2045 -- Local_Raise_Not_OK (Flag7-Sem) 2046 -- Present in N_Exception_Handler nodes. Set if the handler contains 2047 -- a construct (reraise statement, or call to subprogram in package 2048 -- GNAT.Current_Exception) that makes the handler unsuitable as a target 2049 -- for a local raise (one that could otherwise be converted to a goto). 2050 2051 -- Must_Be_Byte_Aligned (Flag14-Sem) 2052 -- This flag is present in N_Attribute_Reference nodes. It can be set 2053 -- only for the Address and Unrestricted_Access attributes. If set it 2054 -- means that the object for which the address/access is given must be on 2055 -- a byte (more accurately a storage unit) boundary. If necessary, a copy 2056 -- of the object is to be made before taking the address (this copy is in 2057 -- the current scope on the stack frame). This is used for certain cases 2058 -- of code generated by the expander that passes parameters by address. 2059 -- 2060 -- The reason the copy is not made by the front end is that the back end 2061 -- has more information about type layout and may be able to (but is not 2062 -- guaranteed to) prevent making unnecessary copies. 2063 2064 -- Must_Not_Freeze (Flag8-Sem) 2065 -- A flag present in all expression nodes. Normally expressions cause 2066 -- freezing as described in the RM. If this flag is set, then this is 2067 -- inhibited. This is used by the analyzer and expander to label nodes 2068 -- that are created by semantic analysis or expansion and which must not 2069 -- cause freezing even though they normally would. This flag is also 2070 -- present in an N_Subtype_Indication node, since we also use these in 2071 -- calls to Freeze_Expression. 2072 2073 -- Next_Entity (Node2-Sem) 2074 -- Present in defining identifiers, defining character literals, and 2075 -- defining operator symbols (i.e. in all entities). The entities of a 2076 -- scope are chained, and this field is used as the forward pointer for 2077 -- this list. See Einfo for further details. 2078 2079 -- Next_Exit_Statement (Node3-Sem) 2080 -- Present in N_Exit_Statement nodes. The exit statements for a loop are 2081 -- chained (in reverse order of appearance) from the First_Exit_Statement 2082 -- field of the E_Loop entity for the loop. Next_Exit_Statement points to 2083 -- the next entry on this chain (Empty = end of list). 2084 2085 -- Next_Implicit_With (Node3-Sem) 2086 -- Present in N_With_Clause. Part of a chain of with_clauses generated 2087 -- in rtsfind to indicate implicit dependencies on predefined units. Used 2088 -- to prevent multiple with_clauses for the same unit in a given context. 2089 -- A postorder traversal of the tree whose nodes are units and whose 2090 -- links are with_clauses defines the order in which CodePeer must 2091 -- examine a compiled unit and its full context. This ordering ensures 2092 -- that any subprogram call is examined after the subprogram declaration 2093 -- has been seen. 2094 2095 -- Next_Named_Actual (Node4-Sem) 2096 -- Present in parameter association nodes. Set during semantic analysis 2097 -- to point to the next named parameter, where parameters are ordered by 2098 -- declaration order (as opposed to the actual order in the call, which 2099 -- may be different due to named associations). Not that this field 2100 -- points to the explicit actual parameter itself, not to the 2101 -- N_Parameter_Association node (its parent). 2102 2103 -- Next_Pragma (Node1-Sem) 2104 -- Present in N_Pragma nodes. Used to create a linked list of pragma 2105 -- nodes. Currently used for two purposes: 2106 -- 2107 -- Create a list of linked Check_Policy pragmas. The head of this list 2108 -- is stored in Opt.Check_Policy_List (which has further details). 2109 -- 2110 -- Used by processing for Pre/Postcondition pragmas to store a list of 2111 -- pragmas associated with the spec of a subprogram (see Sem_Prag for 2112 -- details). 2113 -- 2114 -- Used by processing for pragma SPARK_Mode to store multiple pragmas 2115 -- the apply to the same construct. These are visible/private mode for 2116 -- a package spec and declarative/statement mode for package body. 2117 2118 -- Next_Rep_Item (Node5-Sem) 2119 -- Present in pragma nodes, attribute definition nodes, enumeration rep 2120 -- clauses, record rep clauses, aspect specification nodes. Used to link 2121 -- representation items that apply to an entity. See full description of 2122 -- First_Rep_Item field in Einfo for further details. 2123 2124 -- Next_Use_Clause (Node3-Sem) 2125 -- While use clauses are active during semantic processing, they are 2126 -- chained from the scope stack entry, using Next_Use_Clause as a link 2127 -- pointer, with Empty marking the end of the list. The head pointer is 2128 -- in the scope stack entry (First_Use_Clause). At the end of semantic 2129 -- processing (i.e. when Gigi sees the tree, the contents of this field 2130 -- is undefined and should not be read). 2131 2132 -- No_Ctrl_Actions (Flag7-Sem) 2133 -- Present in N_Assignment_Statement to indicate that no Finalize nor 2134 -- Adjust should take place on this assignment even though the RHS is 2135 -- controlled. Also indicates that the primitive _assign should not be 2136 -- used for a tagged assignment. This is used in init procs and aggregate 2137 -- expansions where the generated assignments are initializations, not 2138 -- real assignments. 2139 2140 -- No_Elaboration_Check (Flag4-Sem) 2141 -- NOTE: this flag is relevant only for the legacy ABE mechanism and 2142 -- should not be used outside of that context. 2143 -- 2144 -- Present in N_Function_Call and N_Procedure_Call_Statement. Indicates 2145 -- that no elaboration check is needed on the call, because it appears in 2146 -- the context of a local Suppress pragma. This is used on calls within 2147 -- task bodies, where the actual elaboration checks are applied after 2148 -- analysis, when the local scope stack is not present 2149 2150 -- No_Entities_Ref_In_Spec (Flag8-Sem) 2151 -- Present in N_With_Clause nodes. Set if the with clause is on the 2152 -- package or subprogram spec where the main unit is the corresponding 2153 -- body, and no entities of the with'ed unit are referenced by the spec 2154 -- (an entity may still be referenced in the body, so this flag is used 2155 -- to generate the proper message (see Sem_Util.Check_Unused_Withs for 2156 -- full details). 2157 2158 -- No_Initialization (Flag13-Sem) 2159 -- Present in N_Object_Declaration and N_Allocator to indicate that the 2160 -- object must not be initialized (by Initialize or call to an init 2161 -- proc). This is needed for controlled aggregates. When the Object 2162 -- declaration has an expression, this flag means that this expression 2163 -- should not be taken into account (needed for in place initialization 2164 -- with aggregates, and for object with an address clause, which are 2165 -- initialized with an assignment at freeze time). 2166 2167 -- No_Minimize_Eliminate (Flag17-Sem) 2168 -- This flag is present in membership operator nodes (N_In/N_Not_In). 2169 -- It is used to indicate that processing for extended overflow checking 2170 -- modes is not required (this is used to prevent infinite recursion). 2171 2172 -- No_Side_Effect_Removal (Flag17-Sem) 2173 -- Present in N_Function_Call nodes. Set when a function call does not 2174 -- require side effect removal. This attribute suppresses the generation 2175 -- of a temporary to capture the result of the function which eventually 2176 -- replaces the function call. 2177 2178 -- No_Truncation (Flag17-Sem) 2179 -- Present in N_Unchecked_Type_Conversion node. This flag has an effect 2180 -- only if the RM_Size of the source is greater than the RM_Size of the 2181 -- target for scalar operands. Normally in such a case we truncate some 2182 -- higher order bits of the source, and then sign/zero extend the result 2183 -- to form the output value. But if this flag is set, then we do not do 2184 -- any truncation, so for example, if an 8 bit input is converted to 5 2185 -- bit result which is in fact stored in 8 bits, then the high order 2186 -- three bits of the target result will be copied from the source. This 2187 -- is used for properly setting out of range values for use by pragmas 2188 -- Initialize_Scalars and Normalize_Scalars. 2189 2190 -- Null_Excluding_Subtype (Flag16) 2191 -- Present in N_Access_To_Object_Definition. Indicates that the subtype 2192 -- indication carries a null-exclusion indicator, which is distinct from 2193 -- the null-exclusion indicator that may precede the access keyword. 2194 2195 -- Original_Discriminant (Node2-Sem) 2196 -- Present in identifiers. Used in references to discriminants that 2197 -- appear in generic units. Because the names of the discriminants may be 2198 -- different in an instance, we use this field to recover the position of 2199 -- the discriminant in the original type, and replace it with the 2200 -- discriminant at the same position in the instantiated type. 2201 2202 -- Original_Entity (Node2-Sem) 2203 -- Present in numeric literals. Used to denote the named number that has 2204 -- been constant-folded into the given literal. If literal is from 2205 -- source, or the result of some other constant-folding operation, then 2206 -- Original_Entity is empty. This field is needed to handle properly 2207 -- named numbers in generic units, where the Associated_Node field 2208 -- interferes with the Entity field, making it impossible to preserve the 2209 -- original entity at the point of instantiation (ASIS problem). 2210 2211 -- Others_Discrete_Choices (List1-Sem) 2212 -- When a case statement or variant is analyzed, the semantic checks 2213 -- determine the actual list of choices that correspond to an others 2214 -- choice. This list is materialized for later use by the expander and 2215 -- the Others_Discrete_Choices field of an N_Others_Choice node points to 2216 -- this materialized list of choices, which is in standard format for a 2217 -- list of discrete choices, except that of course it cannot contain an 2218 -- N_Others_Choice entry. 2219 2220 -- Parent_Spec (Node4-Sem) 2221 -- For a library unit that is a child unit spec (package or subprogram 2222 -- declaration, generic declaration or instantiation, or library level 2223 -- rename) this field points to the compilation unit node for the parent 2224 -- package specification. This field is Empty for library bodies (the 2225 -- parent spec in this case can be found from the corresponding spec). 2226 2227 -- Parent_With (Flag1-Sem) 2228 -- Present in N_With_Clause nodes. The flag indicates that the clause 2229 -- was generated for an ancestor unit to provide proper visibility. A 2230 -- with clause for child unit A.B.C produces two implicit parent with 2231 -- clauses for A and A.B. 2232 2233 -- Premature_Use (Node5-Sem) 2234 -- Present in N_Incomplete_Type_Declaration node. Used for improved 2235 -- error diagnostics: if there is a premature usage of an incomplete 2236 -- type, a subsequently generated error message indicates the position 2237 -- of its full declaration. 2238 2239 -- Present_Expr (Uint3-Sem) 2240 -- Present in an N_Variant node. This has a meaningful value only after 2241 -- Gigi has back annotated the tree with representation information. At 2242 -- this point, it contains a reference to a gcc expression that depends 2243 -- on the values of one or more discriminants. Give a set of discriminant 2244 -- values, this expression evaluates to False (zero) if variant is not 2245 -- present, and True (non-zero) if it is present. See unit Repinfo for 2246 -- further details on gigi back annotation. This field is used during 2247 -- ASIS processing (data decomposition annex) to determine if a field is 2248 -- present or not. 2249 2250 -- Prev_Use_Clause (Node1-Sem) 2251 -- Present in both N_Use_Package_Clause and N_Use_Type_Clause. Used in 2252 -- detection of ineffective use clauses by allowing a chain of related 2253 -- clauses together to avoid traversing the current scope stack. 2254 2255 -- Print_In_Hex (Flag13-Sem) 2256 -- Set on an N_Integer_Literal node to indicate that the value should be 2257 -- printed in hexadecimal in the sprint listing. Has no effect on 2258 -- legality or semantics of program, only on the displayed output. This 2259 -- is used to clarify output from the packed array cases. 2260 2261 -- Procedure_To_Call (Node2-Sem) 2262 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 2263 -- and N_Extended_Return_Statement nodes. References the entity for the 2264 -- declaration of the procedure to be called to accomplish the required 2265 -- operation (i.e. for the Allocate procedure in the case of N_Allocator 2266 -- and N_Simple_Return_Statement and N_Extended_Return_Statement (for 2267 -- allocating the return value), and for the Deallocate procedure in the 2268 -- case of N_Free_Statement. 2269 2270 -- Raises_Constraint_Error (Flag7-Sem) 2271 -- Set on an expression whose evaluation will definitely fail constraint 2272 -- error check. In the case of static expressions, this flag must be set 2273 -- accurately (and if it is set, the expression is typically illegal 2274 -- unless it appears as a non-elaborated branch of a short-circuit form). 2275 -- For a non-static expression, this flag may be set whenever an 2276 -- expression (e.g. an aggregate) is known to raise constraint error. If 2277 -- set, the expression definitely will raise CE if elaborated at runtime. 2278 -- If not set, the expression may or may not raise CE. In other words, on 2279 -- static expressions, the flag is set accurately, on non-static 2280 -- expressions it is set conservatively. 2281 2282 -- Redundant_Use (Flag13-Sem) 2283 -- Present in nodes that can appear as an operand in a use clause or use 2284 -- type clause (identifiers, expanded names, attribute references). Set 2285 -- to indicate that a use is redundant (and therefore need not be undone 2286 -- on scope exit). 2287 2288 -- Renaming_Exception (Node2-Sem) 2289 -- Present in N_Exception_Declaration node. Used to point back to the 2290 -- exception renaming for an exception declared within a subprogram. 2291 -- What happens is that an exception declared in a subprogram is moved 2292 -- to the library level with a unique name, and the original exception 2293 -- becomes a renaming. This link from the library level exception to the 2294 -- renaming declaration allows registering of the proper exception name. 2295 2296 -- Return_Statement_Entity (Node5-Sem) 2297 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement. 2298 -- Points to an E_Return_Statement representing the return statement. 2299 2300 -- Return_Object_Declarations (List3) 2301 -- Present in N_Extended_Return_Statement. Points to a list initially 2302 -- containing a single N_Object_Declaration representing the return 2303 -- object. We use a list (instead of just a pointer to the object decl) 2304 -- because Analyze wants to insert extra actions on this list. 2305 2306 -- Rounded_Result (Flag18-Sem) 2307 -- Present in N_Type_Conversion, N_Op_Divide, and N_Op_Multiply nodes. 2308 -- Used in the fixed-point cases to indicate that the result must be 2309 -- rounded as a result of the use of the 'Round attribute. Also used for 2310 -- integer N_Op_Divide nodes to indicate that the result should be 2311 -- rounded to the nearest integer (breaking ties away from zero), rather 2312 -- than truncated towards zero as usual. These rounded integer operations 2313 -- are the result of expansion of rounded fixed-point divide, conversion 2314 -- and multiplication operations. 2315 2316 -- SCIL_Entity (Node4-Sem) 2317 -- Present in SCIL nodes. References the specific tagged type associated 2318 -- with the SCIL node (for an N_SCIL_Dispatching_Call node, this is 2319 -- the controlling type of the call; for an N_SCIL_Membership_Test node 2320 -- generated as part of testing membership in T'Class, this is T; for an 2321 -- N_SCIL_Dispatch_Table_Tag_Init node, this is the type being declared). 2322 2323 -- SCIL_Controlling_Tag (Node5-Sem) 2324 -- Present in N_SCIL_Dispatching_Call nodes. References the controlling 2325 -- tag of a dispatching call. This is usually an N_Selected_Component 2326 -- node (for a _tag component), but may be an N_Object_Declaration or 2327 -- N_Parameter_Specification node in some cases (e.g., for a call to 2328 -- a classwide streaming operation or a call to an instance of 2329 -- Ada.Tags.Generic_Dispatching_Constructor). 2330 2331 -- SCIL_Tag_Value (Node5-Sem) 2332 -- Present in N_SCIL_Membership_Test nodes. Used to reference the tag 2333 -- of the value that is being tested. 2334 2335 -- SCIL_Target_Prim (Node2-Sem) 2336 -- Present in N_SCIL_Dispatching_Call nodes. References the primitive 2337 -- operation named (statically) in a dispatching call. 2338 2339 -- Scope (Node3-Sem) 2340 -- Present in defining identifiers, defining character literals, and 2341 -- defining operator symbols (i.e. in all entities). The entities of a 2342 -- scope all use this field to reference the corresponding scope entity. 2343 -- See Einfo for further details. 2344 2345 -- Shift_Count_OK (Flag4-Sem) 2346 -- A flag present in shift nodes to indicate that the shift count is 2347 -- known to be in range, i.e. is in the range from zero to word length 2348 -- minus one. If this flag is not set, then the shift count may be 2349 -- outside this range, i.e. larger than the word length, and the code 2350 -- must ensure that such shift counts give the appropriate result. 2351 2352 -- Source_Type (Node1-Sem) 2353 -- Used in an N_Validate_Unchecked_Conversion node to point to the 2354 -- source type entity for the unchecked conversion instantiation 2355 -- which gigi must do size validation for. 2356 2357 -- Split_PPC (Flag17) 2358 -- When a Pre or Post aspect specification is processed, it is broken 2359 -- into AND THEN sections. The left most section has Split_PPC set to 2360 -- False, indicating that it is the original specification (e.g. for 2361 -- posting errors). For other sections, Split_PPC is set to True. 2362 -- This flag is set in both the N_Aspect_Specification node itself, 2363 -- and in the pragma which is generated from this node. 2364 2365 -- Storage_Pool (Node1-Sem) 2366 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 2367 -- and N_Extended_Return_Statement nodes. References the entity for the 2368 -- storage pool to be used for the allocate or free call or for the 2369 -- allocation of the returned value from function. Empty indicates that 2370 -- the global default pool is to be used. Note that in the case 2371 -- of a return statement, this field is set only if the function returns 2372 -- value of a type whose size is not known at compile time on the 2373 -- secondary stack. 2374 2375 -- Suppress_Assignment_Checks (Flag18-Sem) 2376 -- Used in generated N_Assignment_Statement nodes to suppress predicate 2377 -- and range checks in cases where the generated code knows that the 2378 -- value being assigned is in range and satisfies any predicate. Also 2379 -- can be set in N_Object_Declaration nodes, to similarly suppress any 2380 -- checks on the initializing value. In assignment statements it also 2381 -- suppresses access checks in the generated code for out- and in-out 2382 -- parameters in entry calls. 2383 2384 -- Suppress_Loop_Warnings (Flag17-Sem) 2385 -- Used in N_Loop_Statement node to indicate that warnings within the 2386 -- body of the loop should be suppressed. This is set when the range 2387 -- of a FOR loop is known to be null, or is probably null (loop would 2388 -- only execute if invalid values are present). 2389 2390 -- Target (Node1-Sem) 2391 -- Present in call and variable reference marker nodes. References the 2392 -- entity of the original entity, operator, or subprogram being invoked, 2393 -- or the original variable being read or written. 2394 2395 -- Target_Type (Node2-Sem) 2396 -- Used in an N_Validate_Unchecked_Conversion node to point to the target 2397 -- type entity for the unchecked conversion instantiation which gigi must 2398 -- do size validation for. 2399 2400 -- Then_Actions (List3-Sem) 2401 -- This field is present in if expression nodes. During code expansion 2402 -- we use the Insert_Actions procedure (in Exp_Util) to insert actions 2403 -- at an appropriate place in the tree to get elaborated at the right 2404 -- time. For if expressions, we have to be sure that the actions for 2405 -- for the Then branch are only elaborated if the condition is True. 2406 -- The Then_Actions field is used as a temporary parking place for 2407 -- these actions. The final tree is always rewritten to eliminate the 2408 -- need for this field, so in the tree passed to Gigi, this field is 2409 -- always set to No_List. 2410 2411 -- Treat_Fixed_As_Integer (Flag14-Sem) 2412 -- This flag appears in operator nodes for divide, multiply, mod, and rem 2413 -- on fixed-point operands. It indicates that the operands are to be 2414 -- treated as integer values, ignoring small values. This flag is only 2415 -- set as a result of expansion of fixed-point operations. Typically a 2416 -- fixed-point multiplication in the source generates subsidiary 2417 -- multiplication and division operations that work with the underlying 2418 -- integer values and have this flag set. Note that this flag is not 2419 -- needed on other arithmetic operations (add, neg, subtract etc.) since 2420 -- in these cases it is always the case that fixed is treated as integer. 2421 -- The Etype field MUST be set if this flag is set. The analyzer knows to 2422 -- leave such nodes alone, and whoever makes them must set the correct 2423 -- Etype value. 2424 2425 -- TSS_Elist (Elist3-Sem) 2426 -- Present in N_Freeze_Entity nodes. Holds an element list containing 2427 -- entries for each TSS (type support subprogram) associated with the 2428 -- frozen type. The elements of the list are the entities for the 2429 -- subprograms (see package Exp_TSS for further details). Set to No_Elist 2430 -- if there are no type support subprograms for the type or if the freeze 2431 -- node is not for a type. 2432 2433 -- Uneval_Old_Accept (Flag7-Sem) 2434 -- Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'A' 2435 -- (accept) at the point where the pragma is encountered (including the 2436 -- case of a pragma generated from an aspect specification). It is this 2437 -- setting that is relevant, rather than the setting at the point where 2438 -- a contract is finally analyzed after the delay till the freeze point. 2439 2440 -- Uneval_Old_Warn (Flag18-Sem) 2441 -- Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'W' 2442 -- (warn) at the point where the pragma is encountered (including the 2443 -- case of a pragma generated from an aspect specification). It is this 2444 -- setting that is relevant, rather than the setting at the point where 2445 -- a contract is finally analyzed after the delay till the freeze point. 2446 2447 -- Unreferenced_In_Spec (Flag7-Sem) 2448 -- Present in N_With_Clause nodes. Set if the with clause is on the 2449 -- package or subprogram spec where the main unit is the corresponding 2450 -- body, and is not referenced by the spec (it may still be referenced by 2451 -- the body, so this flag is used to generate the proper message (see 2452 -- Sem_Util.Check_Unused_Withs for details) 2453 2454 -- Uninitialized_Variable (Node3-Sem) 2455 -- Present in N_Formal_Private_Type_Definition and in N_Private_ 2456 -- Extension_Declarations. Indicates that a variable in a generic unit 2457 -- whose type is a formal private or derived type is read without being 2458 -- initialized. Used to warn if the corresponding actual type is not 2459 -- a fully initialized type. 2460 2461 -- Used_Operations (Elist2-Sem) 2462 -- Present in N_Use_Type_Clause nodes. Holds the list of operations that 2463 -- are made potentially use-visible by the clause. Simplifies processing 2464 -- on exit from the scope of the use_type_clause, in particular in the 2465 -- case of Use_All_Type, when those operations several scopes. 2466 2467 -- Was_Attribute_Reference (Flag2-Sem) 2468 -- Present in N_Subprogram_Body. Set to True if the original source is an 2469 -- attribute reference which is an actual in a generic instantiation. The 2470 -- instantiation prologue renames these attributes, and expansion later 2471 -- converts them into subprogram bodies. 2472 2473 -- Was_Expression_Function (Flag18-Sem) 2474 -- Present in N_Subprogram_Body. True if the original source had an 2475 -- N_Expression_Function, which was converted to the N_Subprogram_Body 2476 -- by Analyze_Expression_Function. This is needed by ASIS to correctly 2477 -- recreate the expression function (for the instance body) when the 2478 -- completion of a generic function declaration is an expression 2479 -- function. 2480 2481 -- Was_Originally_Stub (Flag13-Sem) 2482 -- This flag is set in the node for a proper body that replaces stub. 2483 -- During the analysis procedure, stubs in some situations get rewritten 2484 -- by the corresponding bodies, and we set this flag to remember that 2485 -- this happened. Note that it is not good enough to rely on the use of 2486 -- Original_Node here because of the case of nested instantiations where 2487 -- the substituted node can be copied. 2488 2489 -- Withed_Body (Node1-Sem) 2490 -- Present in N_With_Clause nodes. Set if the unit in whose context 2491 -- the with_clause appears instantiates a generic contained in the 2492 -- library unit of the with_clause and as a result loads its body. 2493 -- Used for a more precise unit traversal for CodePeer. 2494 2495 -------------------------------------------------- 2496 -- Note on Use of End_Label and End_Span Fields -- 2497 -------------------------------------------------- 2498 2499 -- Several constructs have end lines: 2500 2501 -- Loop Statement end loop [loop_IDENTIFIER]; 2502 -- Package Specification end [[PARENT_UNIT_NAME .] IDENTIFIER] 2503 -- Task Definition end [task_IDENTIFIER] 2504 -- Protected Definition end [protected_IDENTIFIER] 2505 -- Protected Body end [protected_IDENTIFIER] 2506 2507 -- Block Statement end [block_IDENTIFIER]; 2508 -- Subprogram Body end [DESIGNATOR]; 2509 -- Package Body end [[PARENT_UNIT_NAME .] IDENTIFIER]; 2510 -- Task Body end [task_IDENTIFIER]; 2511 -- Accept Statement end [entry_IDENTIFIER]]; 2512 -- Entry Body end [entry_IDENTIFIER]; 2513 2514 -- If Statement end if; 2515 -- Case Statement end case; 2516 2517 -- Record Definition end record; 2518 -- Enumeration Definition ); 2519 2520 -- The End_Label and End_Span fields are used to mark the locations of 2521 -- these lines, and also keep track of the label in the case where a label 2522 -- is present. 2523 2524 -- For the first group above, the End_Label field of the corresponding node 2525 -- is used to point to the label identifier. In the case where there is no 2526 -- label in the source, the parser supplies a dummy identifier (with 2527 -- Comes_From_Source set to False), and the Sloc of this dummy identifier 2528 -- marks the location of the token following the END token. 2529 2530 -- For the second group, the use of End_Label is similar, but the End_Label 2531 -- is found in the N_Handled_Sequence_Of_Statements node. This is done 2532 -- simply because in some cases there is no room in the parent node. 2533 2534 -- For the third group, there is never any label, and instead of using 2535 -- End_Label, we use the End_Span field which gives the location of the 2536 -- token following END, relative to the starting Sloc of the construct, 2537 -- i.e. add Sloc (Node) + End_Span (Node) to get the Sloc of the IF or CASE 2538 -- following the End_Label. 2539 2540 -- The record definition case is handled specially, we treat it as though 2541 -- it required an optional label which is never present, and so the parser 2542 -- always builds a dummy identifier with Comes From Source set False. The 2543 -- reason we do this, rather than using End_Span in this case, is that we 2544 -- want to generate a cross-ref entry for the end of a record, since it 2545 -- represents a scope for name declaration purposes. 2546 2547 -- The enumeration definition case is handled in an exactly similar manner, 2548 -- building a dummy identifier to get a cross-reference. 2549 2550 -- Note: the reason we store the difference as a Uint, instead of storing 2551 -- the Source_Ptr value directly, is that Source_Ptr values cannot be 2552 -- distinguished from other types of values, and we count on all general 2553 -- use fields being self describing. To make things easier for clients, 2554 -- note that we provide function End_Location, and procedure 2555 -- Set_End_Location to allow access to the logical value (which is the 2556 -- Source_Ptr value for the end token). 2557 2558 --------------------- 2559 -- Syntactic Nodes -- 2560 --------------------- 2561 2562 --------------------- 2563 -- 2.3 Identifier -- 2564 --------------------- 2565 2566 -- IDENTIFIER ::= IDENTIFIER_LETTER {[UNDERLINE] LETTER_OR_DIGIT} 2567 -- LETTER_OR_DIGIT ::= IDENTIFIER_LETTER | DIGIT 2568 2569 -- An IDENTIFIER shall not be a reserved word 2570 2571 -- In the Ada grammar identifiers are the bottom level tokens which have 2572 -- very few semantics. Actual program identifiers are direct names. If 2573 -- we were being 100% honest with the grammar, then we would have a node 2574 -- called N_Direct_Name which would point to an identifier. However, 2575 -- that's too many extra nodes, so we just use the N_Identifier node 2576 -- directly as a direct name, and it contains the expression fields and 2577 -- Entity field that correspond to its use as a direct name. In those 2578 -- few cases where identifiers appear in contexts where they are not 2579 -- direct names (pragmas, pragma argument associations, attribute 2580 -- references and attribute definition clauses), the Chars field of the 2581 -- node contains the Name_Id for the identifier name. 2582 2583 -- Note: in GNAT, a reserved word can be treated as an identifier in two 2584 -- cases. First, an incorrect use of a reserved word as an identifier is 2585 -- diagnosed and then treated as a normal identifier. Second, an 2586 -- attribute designator of the form of a reserved word (access, delta, 2587 -- digits, range) is treated as an identifier. 2588 2589 -- Note: The set of letters that is permitted in an identifier depends 2590 -- on the character set in use. See package Csets for full details. 2591 2592 -- N_Identifier 2593 -- Sloc points to identifier 2594 -- Chars (Name1) contains the Name_Id for the identifier 2595 -- Entity (Node4-Sem) 2596 -- Associated_Node (Node4-Sem) 2597 -- Original_Discriminant (Node2-Sem) 2598 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 2599 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 2600 -- Has_Private_View (Flag11-Sem) (set in generic units) 2601 -- Redundant_Use (Flag13-Sem) 2602 -- Atomic_Sync_Required (Flag14-Sem) 2603 -- plus fields for expression 2604 2605 -------------------------- 2606 -- 2.4 Numeric Literal -- 2607 -------------------------- 2608 2609 -- NUMERIC_LITERAL ::= DECIMAL_LITERAL | BASED_LITERAL 2610 2611 ---------------------------- 2612 -- 2.4.1 Decimal Literal -- 2613 ---------------------------- 2614 2615 -- DECIMAL_LITERAL ::= NUMERAL [.NUMERAL] [EXPONENT] 2616 2617 -- NUMERAL ::= DIGIT {[UNDERLINE] DIGIT} 2618 2619 -- EXPONENT ::= E [+] NUMERAL | E - NUMERAL 2620 2621 -- Decimal literals appear in the tree as either integer literal nodes 2622 -- or real literal nodes, depending on whether a period is present. 2623 2624 -- Note: literal nodes appear as a result of direct use of literals 2625 -- in the source program, and also as the result of evaluating 2626 -- expressions at compile time. In the latter case, it is possible 2627 -- to construct real literals that have no syntactic representation 2628 -- using the standard literal format. Such literals are listed by 2629 -- Sprint using the notation [numerator / denominator]. 2630 2631 -- Note: the value of an integer literal node created by the front end 2632 -- is never outside the range of values of the base type. However, it 2633 -- can be the case that the created value is outside the range of the 2634 -- particular subtype. This happens in the case of integer overflows 2635 -- with checks suppressed. 2636 2637 -- N_Integer_Literal 2638 -- Sloc points to literal 2639 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2640 -- has been constant-folded into its literal value. 2641 -- Intval (Uint3) contains integer value of literal 2642 -- Print_In_Hex (Flag13-Sem) 2643 -- plus fields for expression 2644 2645 -- N_Real_Literal 2646 -- Sloc points to literal 2647 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2648 -- has been constant-folded into its literal value. 2649 -- Realval (Ureal3) contains real value of literal 2650 -- Corresponding_Integer_Value (Uint4-Sem) 2651 -- Is_Machine_Number (Flag11-Sem) 2652 -- plus fields for expression 2653 2654 -------------------------- 2655 -- 2.4.2 Based Literal -- 2656 -------------------------- 2657 2658 -- BASED_LITERAL ::= 2659 -- BASE # BASED_NUMERAL [.BASED_NUMERAL] # [EXPONENT] 2660 2661 -- BASE ::= NUMERAL 2662 2663 -- BASED_NUMERAL ::= 2664 -- EXTENDED_DIGIT {[UNDERLINE] EXTENDED_DIGIT} 2665 2666 -- EXTENDED_DIGIT ::= DIGIT | A | B | C | D | E | F 2667 2668 -- Based literals appear in the tree as either integer literal nodes 2669 -- or real literal nodes, depending on whether a period is present. 2670 2671 ---------------------------- 2672 -- 2.5 Character Literal -- 2673 ---------------------------- 2674 2675 -- CHARACTER_LITERAL ::= ' GRAPHIC_CHARACTER ' 2676 2677 -- N_Character_Literal 2678 -- Sloc points to literal 2679 -- Chars (Name1) contains the Name_Id for the identifier 2680 -- Char_Literal_Value (Uint2) contains the literal value 2681 -- Entity (Node4-Sem) 2682 -- Associated_Node (Node4-Sem) 2683 -- Has_Private_View (Flag11-Sem) set in generic units. 2684 -- plus fields for expression 2685 2686 -- Note: the Entity field will be missing (set to Empty) for character 2687 -- literals whose type is Standard.Wide_Character or Standard.Character 2688 -- or a type derived from one of these two. In this case the character 2689 -- literal stands for its own coding. The reason we take this irregular 2690 -- short cut is to avoid the need to build lots of junk defining 2691 -- character literal nodes. 2692 2693 ------------------------- 2694 -- 2.6 String Literal -- 2695 ------------------------- 2696 2697 -- STRING LITERAL ::= "{STRING_ELEMENT}" 2698 2699 -- A STRING_ELEMENT is either a pair of quotation marks ("), or a 2700 -- single GRAPHIC_CHARACTER other than a quotation mark. 2701 -- 2702 -- Is_Folded_In_Parser is True if the parser created this literal by 2703 -- folding a sequence of "&" operators. For example, if the source code 2704 -- says "aaa" & "bbb" & "ccc", and this produces "aaabbbccc", the flag 2705 -- is set. This flag is needed because the parser doesn't know about 2706 -- visibility, so the folded result might be wrong, and semantic 2707 -- analysis needs to check for that. 2708 2709 -- N_String_Literal 2710 -- Sloc points to literal 2711 -- Strval (Str3) contains Id of string value 2712 -- Has_Wide_Character (Flag11-Sem) 2713 -- Has_Wide_Wide_Character (Flag13-Sem) 2714 -- Is_Folded_In_Parser (Flag4) 2715 -- plus fields for expression 2716 2717 ------------------ 2718 -- 2.7 Comment -- 2719 ------------------ 2720 2721 -- A COMMENT starts with two adjacent hyphens and extends up to the 2722 -- end of the line. A COMMENT may appear on any line of a program. 2723 2724 -- Comments are skipped by the scanner and do not appear in the tree. 2725 -- It is possible to reconstruct the position of comments with respect 2726 -- to the elements of the tree by using the source position (Sloc) 2727 -- pointers that appear in every tree node. 2728 2729 ----------------- 2730 -- 2.8 Pragma -- 2731 ----------------- 2732 2733 -- PRAGMA ::= pragma IDENTIFIER 2734 -- [(PRAGMA_ARGUMENT_ASSOCIATION {, PRAGMA_ARGUMENT_ASSOCIATION})]; 2735 2736 -- Note that a pragma may appear in the tree anywhere a declaration 2737 -- or a statement may appear, as well as in some other situations 2738 -- which are explicitly documented. 2739 2740 -- N_Pragma 2741 -- Sloc points to PRAGMA 2742 -- Next_Pragma (Node1-Sem) 2743 -- Pragma_Argument_Associations (List2) (set to No_List if none) 2744 -- Corresponding_Aspect (Node3-Sem) (set to Empty if not present) 2745 -- Pragma_Identifier (Node4) 2746 -- Next_Rep_Item (Node5-Sem) 2747 -- Is_Generic_Contract_Pragma (Flag2-Sem) 2748 -- Is_Checked_Ghost_Pragma (Flag3-Sem) 2749 -- Is_Inherited_Pragma (Flag4-Sem) 2750 -- Is_Analyzed_Pragma (Flag5-Sem) 2751 -- Class_Present (Flag6) set if from Aspect with 'Class 2752 -- Uneval_Old_Accept (Flag7-Sem) 2753 -- Is_Ignored_Ghost_Pragma (Flag8-Sem) 2754 -- Is_Ignored (Flag9-Sem) 2755 -- Is_Checked (Flag11-Sem) 2756 -- From_Aspect_Specification (Flag13-Sem) 2757 -- Is_Delayed_Aspect (Flag14-Sem) 2758 -- Is_Disabled (Flag15-Sem) 2759 -- Import_Interface_Present (Flag16-Sem) 2760 -- Split_PPC (Flag17) set if corresponding aspect had Split_PPC set 2761 -- Uneval_Old_Warn (Flag18-Sem) 2762 2763 -- Note: we should have a section on what pragmas are passed on to 2764 -- the back end to be processed. This section should note that pragma 2765 -- Psect_Object is always converted to Common_Object, but there are 2766 -- undoubtedly many other similar notes required ??? 2767 2768 -- Note: utility functions Pragma_Name_Unmapped and Pragma_Name may be 2769 -- applied to pragma nodes to obtain the Chars or its mapped version. 2770 2771 -- Note: if From_Aspect_Specification is set, then Sloc points to the 2772 -- aspect name, as does the Pragma_Identifier. In this case if the 2773 -- pragma has a local name argument (such as pragma Inline), it is 2774 -- resolved to point to the specific entity affected by the pragma. 2775 2776 -------------------------------------- 2777 -- 2.8 Pragma Argument Association -- 2778 -------------------------------------- 2779 2780 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2781 -- [pragma_argument_IDENTIFIER =>] NAME 2782 -- | [pragma_argument_IDENTIFIER =>] EXPRESSION 2783 2784 -- In Ada 2012, there are two more possibilities: 2785 2786 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2787 -- [pragma_argument_ASPECT_MARK =>] NAME 2788 -- | [pragma_argument_ASPECT_MARK =>] EXPRESSION 2789 2790 -- where the interesting allowed cases (which do not fit the syntax of 2791 -- the first alternative above) are 2792 2793 -- ASPECT_MARK => Pre'Class | 2794 -- Post'Class | 2795 -- Type_Invariant'Class | 2796 -- Invariant'Class 2797 2798 -- We allow this special usage in all Ada modes, but it would be a 2799 -- pain to allow these aspects to pervade the pragma syntax, and the 2800 -- representation of pragma nodes internally. So what we do is to 2801 -- replace these ASPECT_MARK forms with identifiers whose name is one 2802 -- of the special internal names _Pre, _Post, or _Type_Invariant. 2803 2804 -- We do a similar replacement of these Aspect_Mark forms in the 2805 -- Expression of a pragma argument association for the cases of 2806 -- the first arguments of any Check pragmas and Check_Policy pragmas 2807 2808 -- N_Pragma_Argument_Association 2809 -- Sloc points to first token in association 2810 -- Chars (Name1) (set to No_Name if no pragma argument identifier) 2811 -- Expression_Copy (Node2-Sem) 2812 -- Expression (Node3) 2813 2814 ------------------------ 2815 -- 2.9 Reserved Word -- 2816 ------------------------ 2817 2818 -- Reserved words are parsed by the scanner, and returned as the 2819 -- corresponding token types (e.g. PACKAGE is returned as Tok_Package) 2820 2821 ---------------------------- 2822 -- 3.1 Basic Declaration -- 2823 ---------------------------- 2824 2825 -- BASIC_DECLARATION ::= 2826 -- TYPE_DECLARATION | SUBTYPE_DECLARATION 2827 -- | OBJECT_DECLARATION | NUMBER_DECLARATION 2828 -- | SUBPROGRAM_DECLARATION | ABSTRACT_SUBPROGRAM_DECLARATION 2829 -- | PACKAGE_DECLARATION | RENAMING_DECLARATION 2830 -- | EXCEPTION_DECLARATION | GENERIC_DECLARATION 2831 -- | GENERIC_INSTANTIATION 2832 2833 -- Basic declaration also includes IMPLICIT_LABEL_DECLARATION 2834 -- see further description in section on semantic nodes. 2835 2836 -- Also, in the tree that is constructed, a pragma may appear 2837 -- anywhere that a declaration may appear. 2838 2839 ------------------------------ 2840 -- 3.1 Defining Identifier -- 2841 ------------------------------ 2842 2843 -- DEFINING_IDENTIFIER ::= IDENTIFIER 2844 2845 -- A defining identifier is an entity, which has additional fields 2846 -- depending on the setting of the Ekind field. These additional 2847 -- fields are defined (and access subprograms declared) in package 2848 -- Einfo. 2849 2850 -- Note: N_Defining_Identifier is an extended node whose fields are 2851 -- deliberate layed out to match the layout of fields in an ordinary 2852 -- N_Identifier node allowing for easy alteration of an identifier 2853 -- node into a defining identifier node. For details, see procedure 2854 -- Sinfo.CN.Change_Identifier_To_Defining_Identifier. 2855 2856 -- N_Defining_Identifier 2857 -- Sloc points to identifier 2858 -- Chars (Name1) contains the Name_Id for the identifier 2859 -- Next_Entity (Node2-Sem) 2860 -- Scope (Node3-Sem) 2861 -- Etype (Node5-Sem) 2862 2863 ----------------------------- 2864 -- 3.2.1 Type Declaration -- 2865 ----------------------------- 2866 2867 -- TYPE_DECLARATION ::= 2868 -- FULL_TYPE_DECLARATION 2869 -- | INCOMPLETE_TYPE_DECLARATION 2870 -- | PRIVATE_TYPE_DECLARATION 2871 -- | PRIVATE_EXTENSION_DECLARATION 2872 2873 ---------------------------------- 2874 -- 3.2.1 Full Type Declaration -- 2875 ---------------------------------- 2876 2877 -- FULL_TYPE_DECLARATION ::= 2878 -- type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 2879 -- is TYPE_DEFINITION 2880 -- [ASPECT_SPECIFICATIONS]; 2881 -- | TASK_TYPE_DECLARATION 2882 -- | PROTECTED_TYPE_DECLARATION 2883 2884 -- The full type declaration node is used only for the first case. The 2885 -- second case (concurrent type declaration), is represented directly 2886 -- by a task type declaration or a protected type declaration. 2887 2888 -- N_Full_Type_Declaration 2889 -- Sloc points to TYPE 2890 -- Defining_Identifier (Node1) 2891 -- Incomplete_View (Node2-Sem) 2892 -- Discriminant_Specifications (List4) (set to No_List if none) 2893 -- Type_Definition (Node3) 2894 -- Discr_Check_Funcs_Built (Flag11-Sem) 2895 2896 ---------------------------- 2897 -- 3.2.1 Type Definition -- 2898 ---------------------------- 2899 2900 -- TYPE_DEFINITION ::= 2901 -- ENUMERATION_TYPE_DEFINITION | INTEGER_TYPE_DEFINITION 2902 -- | REAL_TYPE_DEFINITION | ARRAY_TYPE_DEFINITION 2903 -- | RECORD_TYPE_DEFINITION | ACCESS_TYPE_DEFINITION 2904 -- | DERIVED_TYPE_DEFINITION | INTERFACE_TYPE_DEFINITION 2905 2906 -------------------------------- 2907 -- 3.2.2 Subtype Declaration -- 2908 -------------------------------- 2909 2910 -- SUBTYPE_DECLARATION ::= 2911 -- subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION 2912 -- [ASPECT_SPECIFICATIONS]; 2913 2914 -- The subtype indication field is set to Empty for subtypes 2915 -- declared in package Standard (Positive, Natural). 2916 2917 -- N_Subtype_Declaration 2918 -- Sloc points to SUBTYPE 2919 -- Defining_Identifier (Node1) 2920 -- Null_Exclusion_Present (Flag11) 2921 -- Subtype_Indication (Node5) 2922 -- Generic_Parent_Type (Node4-Sem) (set for an actual derived type). 2923 -- Exception_Junk (Flag8-Sem) 2924 -- Has_Dynamic_Range_Check (Flag12-Sem) 2925 2926 ------------------------------- 2927 -- 3.2.2 Subtype Indication -- 2928 ------------------------------- 2929 2930 -- SUBTYPE_INDICATION ::= SUBTYPE_MARK [CONSTRAINT] 2931 2932 -- Note: if no constraint is present, the subtype indication appears 2933 -- directly in the tree as a subtype mark. The N_Subtype_Indication 2934 -- node is used only if a constraint is present. 2935 2936 -- Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule 2937 -- with the null-exclusion part (see AI-231), we had to introduce a new 2938 -- attribute in all the parents of subtype_indication nodes to indicate 2939 -- if the null-exclusion is present. 2940 2941 -- Note: the reason that this node has expression fields is that a 2942 -- subtype indication can appear as an operand of a membership test. 2943 2944 -- N_Subtype_Indication 2945 -- Sloc points to first token of subtype mark 2946 -- Subtype_Mark (Node4) 2947 -- Constraint (Node3) 2948 -- Etype (Node5-Sem) 2949 -- Must_Not_Freeze (Flag8-Sem) 2950 2951 -- Note: Depending on context, the Etype is either the entity of the 2952 -- Subtype_Mark field, or it is an itype constructed to reify the 2953 -- subtype indication. In particular, such itypes are created for a 2954 -- subtype indication that appears in an array type declaration. This 2955 -- simplifies constraint checking in indexed components. 2956 2957 -- For subtype indications that appear in scalar type and subtype 2958 -- declarations, the Etype is the entity of the subtype mark. 2959 2960 ------------------------- 2961 -- 3.2.2 Subtype Mark -- 2962 ------------------------- 2963 2964 -- SUBTYPE_MARK ::= subtype_NAME 2965 2966 ----------------------- 2967 -- 3.2.2 Constraint -- 2968 ----------------------- 2969 2970 -- CONSTRAINT ::= SCALAR_CONSTRAINT | COMPOSITE_CONSTRAINT 2971 2972 ------------------------------ 2973 -- 3.2.2 Scalar Constraint -- 2974 ------------------------------ 2975 2976 -- SCALAR_CONSTRAINT ::= 2977 -- RANGE_CONSTRAINT | DIGITS_CONSTRAINT | DELTA_CONSTRAINT 2978 2979 --------------------------------- 2980 -- 3.2.2 Composite Constraint -- 2981 --------------------------------- 2982 2983 -- COMPOSITE_CONSTRAINT ::= 2984 -- INDEX_CONSTRAINT | DISCRIMINANT_CONSTRAINT 2985 2986 ------------------------------- 2987 -- 3.3.1 Object Declaration -- 2988 ------------------------------- 2989 2990 -- OBJECT_DECLARATION ::= 2991 -- DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2992 -- [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION] 2993 -- [ASPECT_SPECIFICATIONS]; 2994 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2995 -- ACCESS_DEFINITION [:= EXPRESSION] 2996 -- [ASPECT_SPECIFICATIONS]; 2997 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2998 -- ARRAY_TYPE_DEFINITION [:= EXPRESSION] 2999 -- [ASPECT_SPECIFICATIONS]; 3000 -- | SINGLE_TASK_DECLARATION 3001 -- | SINGLE_PROTECTED_DECLARATION 3002 3003 -- Note: aliased is not permitted in Ada 83 mode 3004 3005 -- The N_Object_Declaration node is only for the first three cases. 3006 -- Single task declaration is handled by P_Task (9.1) 3007 -- Single protected declaration is handled by P_protected (9.5) 3008 3009 -- Although the syntax allows multiple identifiers in the list, the 3010 -- semantics is as though successive declarations were given with 3011 -- identical type definition and expression components. To simplify 3012 -- semantic processing, the parser represents a multiple declaration 3013 -- case as a sequence of single declarations, using the More_Ids and 3014 -- Prev_Ids flags to preserve the original source form as described 3015 -- in the section on "Handling of Defining Identifier Lists". 3016 3017 -- The flag Has_Init_Expression is set if an initializing expression 3018 -- is present. Normally it is set if and only if Expression contains 3019 -- a non-empty value, but there is an exception to this. When the 3020 -- initializing expression is an aggregate which requires explicit 3021 -- assignments, the Expression field gets set to Empty, but this flag 3022 -- is still set, so we don't forget we had an initializing expression. 3023 3024 -- Note: if a range check is required for the initialization 3025 -- expression then the Do_Range_Check flag is set in the Expression, 3026 -- with the check being done against the type given by the object 3027 -- definition, which is also the Etype of the defining identifier. 3028 3029 -- Note: the contents of the Expression field must be ignored (i.e. 3030 -- treated as though it were Empty) if No_Initialization is set True. 3031 3032 -- Note: the back end places some restrictions on the form of the 3033 -- Expression field. If the object being declared is Atomic, then 3034 -- the Expression may not have the form of an aggregate (since this 3035 -- might cause the back end to generate separate assignments). In this 3036 -- case the front end must generate an extra temporary and initialize 3037 -- this temporary as required (the temporary itself is not atomic). 3038 3039 -- Note: there is no node kind for object definition. Instead, the 3040 -- corresponding field holds a subtype indication, an array type 3041 -- definition, or (Ada 2005, AI-406) an access definition. 3042 3043 -- N_Object_Declaration 3044 -- Sloc points to first identifier 3045 -- Defining_Identifier (Node1) 3046 -- Aliased_Present (Flag4) 3047 -- Constant_Present (Flag17) set if CONSTANT appears 3048 -- Null_Exclusion_Present (Flag11) 3049 -- Object_Definition (Node4) subtype indic./array type def./access def. 3050 -- Expression (Node3) (set to Empty if not present) 3051 -- Handler_List_Entry (Node2-Sem) 3052 -- Corresponding_Generic_Association (Node5-Sem) 3053 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3054 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3055 -- No_Initialization (Flag13-Sem) 3056 -- Assignment_OK (Flag15-Sem) 3057 -- Exception_Junk (Flag8-Sem) 3058 -- Is_Subprogram_Descriptor (Flag16-Sem) 3059 -- Has_Init_Expression (Flag14) 3060 -- Suppress_Assignment_Checks (Flag18-Sem) 3061 3062 ------------------------------------- 3063 -- 3.3.1 Defining Identifier List -- 3064 ------------------------------------- 3065 3066 -- DEFINING_IDENTIFIER_LIST ::= 3067 -- DEFINING_IDENTIFIER {, DEFINING_IDENTIFIER} 3068 3069 ------------------------------- 3070 -- 3.3.2 Number Declaration -- 3071 ------------------------------- 3072 3073 -- NUMBER_DECLARATION ::= 3074 -- DEFINING_IDENTIFIER_LIST : constant := static_EXPRESSION; 3075 3076 -- Although the syntax allows multiple identifiers in the list, the 3077 -- semantics is as though successive declarations were given with 3078 -- identical expressions. To simplify semantic processing, the parser 3079 -- represents a multiple declaration case as a sequence of single 3080 -- declarations, using the More_Ids and Prev_Ids flags to preserve 3081 -- the original source form as described in the section on "Handling 3082 -- of Defining Identifier Lists". 3083 3084 -- N_Number_Declaration 3085 -- Sloc points to first identifier 3086 -- Defining_Identifier (Node1) 3087 -- Expression (Node3) 3088 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3089 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3090 3091 ---------------------------------- 3092 -- 3.4 Derived Type Definition -- 3093 ---------------------------------- 3094 3095 -- DERIVED_TYPE_DEFINITION ::= 3096 -- [abstract] [limited] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION 3097 -- [[and INTERFACE_LIST] RECORD_EXTENSION_PART] 3098 3099 -- Note: ABSTRACT, LIMITED, and record extension part are not permitted 3100 -- in Ada 83 mode. 3101 3102 -- Note: a record extension part is required if ABSTRACT is present 3103 3104 -- N_Derived_Type_Definition 3105 -- Sloc points to NEW 3106 -- Abstract_Present (Flag4) 3107 -- Null_Exclusion_Present (Flag11) (set to False if not present) 3108 -- Subtype_Indication (Node5) 3109 -- Record_Extension_Part (Node3) (set to Empty if not present) 3110 -- Limited_Present (Flag17) 3111 -- Task_Present (Flag5) set in task interfaces 3112 -- Protected_Present (Flag6) set in protected interfaces 3113 -- Synchronized_Present (Flag7) set in interfaces 3114 -- Interface_List (List2) (set to No_List if none) 3115 -- Interface_Present (Flag16) set in abstract interfaces 3116 3117 -- Note: Task_Present, Protected_Present, Synchronized_Present, 3118 -- Interface_List, and Interface_Present are used for abstract 3119 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 3120 3121 --------------------------- 3122 -- 3.5 Range Constraint -- 3123 --------------------------- 3124 3125 -- RANGE_CONSTRAINT ::= range RANGE 3126 3127 -- N_Range_Constraint 3128 -- Sloc points to RANGE 3129 -- Range_Expression (Node4) 3130 3131 ---------------- 3132 -- 3.5 Range -- 3133 ---------------- 3134 3135 -- RANGE ::= 3136 -- RANGE_ATTRIBUTE_REFERENCE 3137 -- | SIMPLE_EXPRESSION .. SIMPLE_EXPRESSION 3138 3139 -- Note: the case of a range given as a range attribute reference 3140 -- appears directly in the tree as an attribute reference. 3141 3142 -- Note: the field name for a reference to a range is Range_Expression 3143 -- rather than Range, because range is a reserved keyword in Ada. 3144 3145 -- Note: the reason that this node has expression fields is that a 3146 -- range can appear as an operand of a membership test. The Etype 3147 -- field is the type of the range (we do NOT construct an implicit 3148 -- subtype to represent the range exactly). 3149 3150 -- N_Range 3151 -- Sloc points to .. 3152 -- Low_Bound (Node1) 3153 -- High_Bound (Node2) 3154 -- Includes_Infinities (Flag11) 3155 -- plus fields for expression 3156 3157 -- Note: if the range appears in a context, such as a subtype 3158 -- declaration, where range checks are required on one or both of 3159 -- the expression fields, then type conversion nodes are inserted 3160 -- to represent the required checks. 3161 3162 ---------------------------------------- 3163 -- 3.5.1 Enumeration Type Definition -- 3164 ---------------------------------------- 3165 3166 -- ENUMERATION_TYPE_DEFINITION ::= 3167 -- (ENUMERATION_LITERAL_SPECIFICATION 3168 -- {, ENUMERATION_LITERAL_SPECIFICATION}) 3169 3170 -- Note: the Literals field in the node described below is null for 3171 -- the case of the standard types CHARACTER and WIDE_CHARACTER, for 3172 -- which special processing handles these types as special cases. 3173 3174 -- N_Enumeration_Type_Definition 3175 -- Sloc points to left parenthesis 3176 -- Literals (List1) (Empty for CHARACTER or WIDE_CHARACTER) 3177 -- End_Label (Node4) (set to Empty if internally generated record) 3178 3179 ---------------------------------------------- 3180 -- 3.5.1 Enumeration Literal Specification -- 3181 ---------------------------------------------- 3182 3183 -- ENUMERATION_LITERAL_SPECIFICATION ::= 3184 -- DEFINING_IDENTIFIER | DEFINING_CHARACTER_LITERAL 3185 3186 --------------------------------------- 3187 -- 3.5.1 Defining Character Literal -- 3188 --------------------------------------- 3189 3190 -- DEFINING_CHARACTER_LITERAL ::= CHARACTER_LITERAL 3191 3192 -- A defining character literal is an entity, which has additional 3193 -- fields depending on the setting of the Ekind field. These 3194 -- additional fields are defined (and access subprograms declared) 3195 -- in package Einfo. 3196 3197 -- Note: N_Defining_Character_Literal is an extended node whose fields 3198 -- are deliberate layed out to match the layout of fields in an ordinary 3199 -- N_Character_Literal node allowing for easy alteration of a character 3200 -- literal node into a defining character literal node. For details, see 3201 -- Sinfo.CN.Change_Character_Literal_To_Defining_Character_Literal. 3202 3203 -- N_Defining_Character_Literal 3204 -- Sloc points to literal 3205 -- Chars (Name1) contains the Name_Id for the identifier 3206 -- Next_Entity (Node2-Sem) 3207 -- Scope (Node3-Sem) 3208 -- Etype (Node5-Sem) 3209 3210 ------------------------------------ 3211 -- 3.5.4 Integer Type Definition -- 3212 ------------------------------------ 3213 3214 -- Note: there is an error in this rule in the latest version of the 3215 -- grammar, so we have retained the old rule pending clarification. 3216 3217 -- INTEGER_TYPE_DEFINITION ::= 3218 -- SIGNED_INTEGER_TYPE_DEFINITION 3219 -- | MODULAR_TYPE_DEFINITION 3220 3221 ------------------------------------------- 3222 -- 3.5.4 Signed Integer Type Definition -- 3223 ------------------------------------------- 3224 3225 -- SIGNED_INTEGER_TYPE_DEFINITION ::= 3226 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 3227 3228 -- Note: the Low_Bound and High_Bound fields are set to Empty 3229 -- for integer types defined in package Standard. 3230 3231 -- N_Signed_Integer_Type_Definition 3232 -- Sloc points to RANGE 3233 -- Low_Bound (Node1) 3234 -- High_Bound (Node2) 3235 3236 ------------------------------------ 3237 -- 3.5.4 Modular Type Definition -- 3238 ------------------------------------ 3239 3240 -- MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION 3241 3242 -- N_Modular_Type_Definition 3243 -- Sloc points to MOD 3244 -- Expression (Node3) 3245 3246 --------------------------------- 3247 -- 3.5.6 Real Type Definition -- 3248 --------------------------------- 3249 3250 -- REAL_TYPE_DEFINITION ::= 3251 -- FLOATING_POINT_DEFINITION | FIXED_POINT_DEFINITION 3252 3253 -------------------------------------- 3254 -- 3.5.7 Floating Point Definition -- 3255 -------------------------------------- 3256 3257 -- FLOATING_POINT_DEFINITION ::= 3258 -- digits static_SIMPLE_EXPRESSION [REAL_RANGE_SPECIFICATION] 3259 3260 -- Note: The Digits_Expression and Real_Range_Specifications fields 3261 -- are set to Empty for floating-point types declared in Standard. 3262 3263 -- N_Floating_Point_Definition 3264 -- Sloc points to DIGITS 3265 -- Digits_Expression (Node2) 3266 -- Real_Range_Specification (Node4) (set to Empty if not present) 3267 3268 ------------------------------------- 3269 -- 3.5.7 Real Range Specification -- 3270 ------------------------------------- 3271 3272 -- REAL_RANGE_SPECIFICATION ::= 3273 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 3274 3275 -- N_Real_Range_Specification 3276 -- Sloc points to RANGE 3277 -- Low_Bound (Node1) 3278 -- High_Bound (Node2) 3279 3280 ----------------------------------- 3281 -- 3.5.9 Fixed Point Definition -- 3282 ----------------------------------- 3283 3284 -- FIXED_POINT_DEFINITION ::= 3285 -- ORDINARY_FIXED_POINT_DEFINITION | DECIMAL_FIXED_POINT_DEFINITION 3286 3287 -------------------------------------------- 3288 -- 3.5.9 Ordinary Fixed Point Definition -- 3289 -------------------------------------------- 3290 3291 -- ORDINARY_FIXED_POINT_DEFINITION ::= 3292 -- delta static_EXPRESSION REAL_RANGE_SPECIFICATION 3293 3294 -- Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 3295 3296 -- N_Ordinary_Fixed_Point_Definition 3297 -- Sloc points to DELTA 3298 -- Delta_Expression (Node3) 3299 -- Real_Range_Specification (Node4) 3300 3301 ------------------------------------------- 3302 -- 3.5.9 Decimal Fixed Point Definition -- 3303 ------------------------------------------- 3304 3305 -- DECIMAL_FIXED_POINT_DEFINITION ::= 3306 -- delta static_EXPRESSION 3307 -- digits static_EXPRESSION [REAL_RANGE_SPECIFICATION] 3308 3309 -- Note: decimal types are not permitted in Ada 83 mode 3310 3311 -- N_Decimal_Fixed_Point_Definition 3312 -- Sloc points to DELTA 3313 -- Delta_Expression (Node3) 3314 -- Digits_Expression (Node2) 3315 -- Real_Range_Specification (Node4) (set to Empty if not present) 3316 3317 ------------------------------ 3318 -- 3.5.9 Digits Constraint -- 3319 ------------------------------ 3320 3321 -- DIGITS_CONSTRAINT ::= 3322 -- digits static_EXPRESSION [RANGE_CONSTRAINT] 3323 3324 -- Note: in Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 3325 -- Note: in Ada 95, reduced accuracy subtypes are obsolescent 3326 3327 -- N_Digits_Constraint 3328 -- Sloc points to DIGITS 3329 -- Digits_Expression (Node2) 3330 -- Range_Constraint (Node4) (set to Empty if not present) 3331 3332 -------------------------------- 3333 -- 3.6 Array Type Definition -- 3334 -------------------------------- 3335 3336 -- ARRAY_TYPE_DEFINITION ::= 3337 -- UNCONSTRAINED_ARRAY_DEFINITION | CONSTRAINED_ARRAY_DEFINITION 3338 3339 ----------------------------------------- 3340 -- 3.6 Unconstrained Array Definition -- 3341 ----------------------------------------- 3342 3343 -- UNCONSTRAINED_ARRAY_DEFINITION ::= 3344 -- array (INDEX_SUBTYPE_DEFINITION {, INDEX_SUBTYPE_DEFINITION}) of 3345 -- COMPONENT_DEFINITION 3346 3347 -- Note: dimensionality of array is indicated by number of entries in 3348 -- the Subtype_Marks list, which has one entry for each dimension. 3349 3350 -- N_Unconstrained_Array_Definition 3351 -- Sloc points to ARRAY 3352 -- Subtype_Marks (List2) 3353 -- Component_Definition (Node4) 3354 3355 ----------------------------------- 3356 -- 3.6 Index Subtype Definition -- 3357 ----------------------------------- 3358 3359 -- INDEX_SUBTYPE_DEFINITION ::= SUBTYPE_MARK range <> 3360 3361 -- There is no explicit node in the tree for an index subtype 3362 -- definition since the N_Unconstrained_Array_Definition node 3363 -- incorporates the type marks which appear in this context. 3364 3365 --------------------------------------- 3366 -- 3.6 Constrained Array Definition -- 3367 --------------------------------------- 3368 3369 -- CONSTRAINED_ARRAY_DEFINITION ::= 3370 -- array (DISCRETE_SUBTYPE_DEFINITION 3371 -- {, DISCRETE_SUBTYPE_DEFINITION}) 3372 -- of COMPONENT_DEFINITION 3373 3374 -- Note: dimensionality of array is indicated by number of entries 3375 -- in the Discrete_Subtype_Definitions list, which has one entry 3376 -- for each dimension. 3377 3378 -- N_Constrained_Array_Definition 3379 -- Sloc points to ARRAY 3380 -- Discrete_Subtype_Definitions (List2) 3381 -- Component_Definition (Node4) 3382 3383 -- Note: although the language allows the full syntax for discrete 3384 -- subtype definitions (i.e. a discrete subtype indication or a range), 3385 -- in the generated tree, we always rewrite these as N_Range nodes. 3386 3387 -------------------------------------- 3388 -- 3.6 Discrete Subtype Definition -- 3389 -------------------------------------- 3390 3391 -- DISCRETE_SUBTYPE_DEFINITION ::= 3392 -- discrete_SUBTYPE_INDICATION | RANGE 3393 3394 ------------------------------- 3395 -- 3.6 Component Definition -- 3396 ------------------------------- 3397 3398 -- COMPONENT_DEFINITION ::= 3399 -- [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION 3400 3401 -- Note: although the syntax does not permit a component definition to 3402 -- be an anonymous array (and the parser will diagnose such an attempt 3403 -- with an appropriate message), it is possible for anonymous arrays 3404 -- to appear as component definitions. The semantics and back end handle 3405 -- this case properly, and the expander in fact generates such cases. 3406 -- Access_Definition is an optional field that gives support to 3407 -- Ada 2005 (AI-230). The parser generates nodes that have either the 3408 -- Subtype_Indication field or else the Access_Definition field. 3409 3410 -- N_Component_Definition 3411 -- Sloc points to ALIASED, ACCESS, or to first token of subtype mark 3412 -- Aliased_Present (Flag4) 3413 -- Null_Exclusion_Present (Flag11) 3414 -- Subtype_Indication (Node5) (set to Empty if not present) 3415 -- Access_Definition (Node3) (set to Empty if not present) 3416 3417 ----------------------------- 3418 -- 3.6.1 Index Constraint -- 3419 ----------------------------- 3420 3421 -- INDEX_CONSTRAINT ::= (DISCRETE_RANGE {, DISCRETE_RANGE}) 3422 3423 -- It is not in general possible to distinguish between discriminant 3424 -- constraints and index constraints at parse time, since a simple 3425 -- name could be either the subtype mark of a discrete range, or an 3426 -- expression in a discriminant association with no name. Either 3427 -- entry appears simply as the name, and the semantic parse must 3428 -- distinguish between the two cases. Thus we use a common tree 3429 -- node format for both of these constraint types. 3430 3431 -- See Discriminant_Constraint for format of node 3432 3433 --------------------------- 3434 -- 3.6.1 Discrete Range -- 3435 --------------------------- 3436 3437 -- DISCRETE_RANGE ::= discrete_SUBTYPE_INDICATION | RANGE 3438 3439 ---------------------------- 3440 -- 3.7 Discriminant Part -- 3441 ---------------------------- 3442 3443 -- DISCRIMINANT_PART ::= 3444 -- UNKNOWN_DISCRIMINANT_PART | KNOWN_DISCRIMINANT_PART 3445 3446 ------------------------------------ 3447 -- 3.7 Unknown Discriminant Part -- 3448 ------------------------------------ 3449 3450 -- UNKNOWN_DISCRIMINANT_PART ::= (<>) 3451 3452 -- Note: unknown discriminant parts are not permitted in Ada 83 mode 3453 3454 -- There is no explicit node in the tree for an unknown discriminant 3455 -- part. Instead the Unknown_Discriminants_Present flag is set in the 3456 -- parent node. 3457 3458 ---------------------------------- 3459 -- 3.7 Known Discriminant Part -- 3460 ---------------------------------- 3461 3462 -- KNOWN_DISCRIMINANT_PART ::= 3463 -- (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION}) 3464 3465 ------------------------------------- 3466 -- 3.7 Discriminant Specification -- 3467 ------------------------------------- 3468 3469 -- DISCRIMINANT_SPECIFICATION ::= 3470 -- DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK 3471 -- [:= DEFAULT_EXPRESSION] 3472 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 3473 -- [:= DEFAULT_EXPRESSION] 3474 3475 -- Although the syntax allows multiple identifiers in the list, the 3476 -- semantics is as though successive specifications were given with 3477 -- identical type definition and expression components. To simplify 3478 -- semantic processing, the parser represents a multiple declaration 3479 -- case as a sequence of single specifications, using the More_Ids and 3480 -- Prev_Ids flags to preserve the original source form as described 3481 -- in the section on "Handling of Defining Identifier Lists". 3482 3483 -- N_Discriminant_Specification 3484 -- Sloc points to first identifier 3485 -- Defining_Identifier (Node1) 3486 -- Null_Exclusion_Present (Flag11) 3487 -- Discriminant_Type (Node5) subtype mark or access parameter definition 3488 -- Expression (Node3) (set to Empty if no default expression) 3489 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3490 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3491 3492 ----------------------------- 3493 -- 3.7 Default Expression -- 3494 ----------------------------- 3495 3496 -- DEFAULT_EXPRESSION ::= EXPRESSION 3497 3498 ------------------------------------ 3499 -- 3.7.1 Discriminant Constraint -- 3500 ------------------------------------ 3501 3502 -- DISCRIMINANT_CONSTRAINT ::= 3503 -- (DISCRIMINANT_ASSOCIATION {, DISCRIMINANT_ASSOCIATION}) 3504 3505 -- It is not in general possible to distinguish between discriminant 3506 -- constraints and index constraints at parse time, since a simple 3507 -- name could be either the subtype mark of a discrete range, or an 3508 -- expression in a discriminant association with no name. Either 3509 -- entry appears simply as the name, and the semantic parse must 3510 -- distinguish between the two cases. Thus we use a common tree 3511 -- node format for both of these constraint types. 3512 3513 -- N_Index_Or_Discriminant_Constraint 3514 -- Sloc points to left paren 3515 -- Constraints (List1) points to list of discrete ranges or 3516 -- discriminant associations 3517 3518 ------------------------------------- 3519 -- 3.7.1 Discriminant Association -- 3520 ------------------------------------- 3521 3522 -- DISCRIMINANT_ASSOCIATION ::= 3523 -- [discriminant_SELECTOR_NAME 3524 -- {| discriminant_SELECTOR_NAME} =>] EXPRESSION 3525 3526 -- Note: a discriminant association that has no selector name list 3527 -- appears directly as an expression in the tree. 3528 3529 -- N_Discriminant_Association 3530 -- Sloc points to first token of discriminant association 3531 -- Selector_Names (List1) (always non-empty, since if no selector 3532 -- names are present, this node is not used, see comment above) 3533 -- Expression (Node3) 3534 3535 --------------------------------- 3536 -- 3.8 Record Type Definition -- 3537 --------------------------------- 3538 3539 -- RECORD_TYPE_DEFINITION ::= 3540 -- [[abstract] tagged] [limited] RECORD_DEFINITION 3541 3542 -- Note: ABSTRACT, TAGGED, LIMITED are not permitted in Ada 83 mode 3543 3544 -- There is no explicit node in the tree for a record type definition. 3545 -- Instead the flags for Tagged_Present and Limited_Present appear in 3546 -- the N_Record_Definition node for a record definition appearing in 3547 -- the context of a record type definition. 3548 3549 ---------------------------- 3550 -- 3.8 Record Definition -- 3551 ---------------------------- 3552 3553 -- RECORD_DEFINITION ::= 3554 -- record 3555 -- COMPONENT_LIST 3556 -- end record 3557 -- | null record 3558 3559 -- Note: the Abstract_Present, Tagged_Present, and Limited_Present 3560 -- flags appear only for a record definition appearing in a record 3561 -- type definition. 3562 3563 -- Note: the NULL RECORD case is not permitted in Ada 83 3564 3565 -- N_Record_Definition 3566 -- Sloc points to RECORD or NULL 3567 -- End_Label (Node4) (set to Empty if internally generated record) 3568 -- Abstract_Present (Flag4) 3569 -- Tagged_Present (Flag15) 3570 -- Limited_Present (Flag17) 3571 -- Component_List (Node1) empty in null record case 3572 -- Null_Present (Flag13) set in null record case 3573 -- Task_Present (Flag5) set in task interfaces 3574 -- Protected_Present (Flag6) set in protected interfaces 3575 -- Synchronized_Present (Flag7) set in interfaces 3576 -- Interface_Present (Flag16) set in abstract interfaces 3577 -- Interface_List (List2) (set to No_List if none) 3578 3579 -- Note: Task_Present, Protected_Present, Synchronized _Present, 3580 -- Interface_List and Interface_Present are used for abstract 3581 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 3582 3583 ------------------------- 3584 -- 3.8 Component List -- 3585 ------------------------- 3586 3587 -- COMPONENT_LIST ::= 3588 -- COMPONENT_ITEM {COMPONENT_ITEM} 3589 -- | {COMPONENT_ITEM} VARIANT_PART 3590 -- | null; 3591 3592 -- N_Component_List 3593 -- Sloc points to first token of component list 3594 -- Component_Items (List3) 3595 -- Variant_Part (Node4) (set to Empty if no variant part) 3596 -- Null_Present (Flag13) 3597 3598 ------------------------- 3599 -- 3.8 Component Item -- 3600 ------------------------- 3601 3602 -- COMPONENT_ITEM ::= COMPONENT_DECLARATION | REPRESENTATION_CLAUSE 3603 3604 -- Note: A component item can also be a pragma, and in the tree 3605 -- that is obtained after semantic processing, a component item 3606 -- can be an N_Null node resulting from a non-recognized pragma. 3607 3608 -------------------------------- 3609 -- 3.8 Component Declaration -- 3610 -------------------------------- 3611 3612 -- COMPONENT_DECLARATION ::= 3613 -- DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION 3614 -- [:= DEFAULT_EXPRESSION] 3615 -- [ASPECT_SPECIFICATIONS]; 3616 3617 -- Note: although the syntax does not permit a component definition to 3618 -- be an anonymous array (and the parser will diagnose such an attempt 3619 -- with an appropriate message), it is possible for anonymous arrays 3620 -- to appear as component definitions. The semantics and back end handle 3621 -- this case properly, and the expander in fact generates such cases. 3622 3623 -- Although the syntax allows multiple identifiers in the list, the 3624 -- semantics is as though successive declarations were given with the 3625 -- same component definition and expression components. To simplify 3626 -- semantic processing, the parser represents a multiple declaration 3627 -- case as a sequence of single declarations, using the More_Ids and 3628 -- Prev_Ids flags to preserve the original source form as described 3629 -- in the section on "Handling of Defining Identifier Lists". 3630 3631 -- N_Component_Declaration 3632 -- Sloc points to first identifier 3633 -- Defining_Identifier (Node1) 3634 -- Component_Definition (Node4) 3635 -- Expression (Node3) (set to Empty if no default expression) 3636 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3637 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3638 3639 ------------------------- 3640 -- 3.8.1 Variant Part -- 3641 ------------------------- 3642 3643 -- VARIANT_PART ::= 3644 -- case discriminant_DIRECT_NAME is 3645 -- VARIANT {VARIANT} 3646 -- end case; 3647 3648 -- Note: the variants list can contain pragmas as well as variants. 3649 -- In a properly formed program there is at least one variant. 3650 3651 -- N_Variant_Part 3652 -- Sloc points to CASE 3653 -- Name (Node2) 3654 -- Variants (List1) 3655 3656 -------------------- 3657 -- 3.8.1 Variant -- 3658 -------------------- 3659 3660 -- VARIANT ::= 3661 -- when DISCRETE_CHOICE_LIST => 3662 -- COMPONENT_LIST 3663 3664 -- N_Variant 3665 -- Sloc points to WHEN 3666 -- Discrete_Choices (List4) 3667 -- Component_List (Node1) 3668 -- Enclosing_Variant (Node2-Sem) 3669 -- Present_Expr (Uint3-Sem) 3670 -- Dcheck_Function (Node5-Sem) 3671 -- Has_SP_Choice (Flag15-Sem) 3672 3673 -- Note: in the list of Discrete_Choices, the tree passed to the back 3674 -- end does not have choice entries corresponding to names of statically 3675 -- predicated subtypes. Such entries are always expanded out to the list 3676 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 3677 -- mode also has this expansion, but done with a proper Rewrite call on 3678 -- the N_Variant node so that ASIS can properly retrieve the original. 3679 3680 --------------------------------- 3681 -- 3.8.1 Discrete Choice List -- 3682 --------------------------------- 3683 3684 -- DISCRETE_CHOICE_LIST ::= DISCRETE_CHOICE {| DISCRETE_CHOICE} 3685 3686 ---------------------------- 3687 -- 3.8.1 Discrete Choice -- 3688 ---------------------------- 3689 3690 -- DISCRETE_CHOICE ::= EXPRESSION | DISCRETE_RANGE | others 3691 3692 -- Note: in Ada 83 mode, the expression must be a simple expression 3693 3694 -- The only choice that appears explicitly is the OTHERS choice, as 3695 -- defined here. Other cases of discrete choice (expression and 3696 -- discrete range) appear directly. This production is also used 3697 -- for the OTHERS possibility of an exception choice. 3698 3699 -- Note: in accordance with the syntax, the parser does not check that 3700 -- OTHERS appears at the end on its own in a choice list context. This 3701 -- is a semantic check. 3702 3703 -- N_Others_Choice 3704 -- Sloc points to OTHERS 3705 -- Others_Discrete_Choices (List1-Sem) 3706 -- All_Others (Flag11-Sem) 3707 3708 ---------------------------------- 3709 -- 3.9.1 Record Extension Part -- 3710 ---------------------------------- 3711 3712 -- RECORD_EXTENSION_PART ::= with RECORD_DEFINITION 3713 3714 -- Note: record extension parts are not permitted in Ada 83 mode 3715 3716 -------------------------------------- 3717 -- 3.9.4 Interface Type Definition -- 3718 -------------------------------------- 3719 3720 -- INTERFACE_TYPE_DEFINITION ::= 3721 -- [limited | task | protected | synchronized] 3722 -- interface [interface_list] 3723 3724 -- Note: Interfaces are implemented with N_Record_Definition and 3725 -- N_Derived_Type_Definition nodes because most of the support 3726 -- for the analysis of abstract types has been reused to 3727 -- analyze abstract interfaces. 3728 3729 ---------------------------------- 3730 -- 3.10 Access Type Definition -- 3731 ---------------------------------- 3732 3733 -- ACCESS_TYPE_DEFINITION ::= 3734 -- ACCESS_TO_OBJECT_DEFINITION 3735 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3736 3737 -------------------------- 3738 -- 3.10 Null Exclusion -- 3739 -------------------------- 3740 3741 -- NULL_EXCLUSION ::= not null 3742 3743 --------------------------------------- 3744 -- 3.10 Access To Object Definition -- 3745 --------------------------------------- 3746 3747 -- ACCESS_TO_OBJECT_DEFINITION ::= 3748 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] 3749 -- SUBTYPE_INDICATION 3750 3751 -- N_Access_To_Object_Definition 3752 -- Sloc points to ACCESS 3753 -- All_Present (Flag15) 3754 -- Null_Exclusion_Present (Flag11) 3755 -- Null_Excluding_Subtype (Flag16) 3756 -- Subtype_Indication (Node5) 3757 -- Constant_Present (Flag17) 3758 3759 ----------------------------------- 3760 -- 3.10 General Access Modifier -- 3761 ----------------------------------- 3762 3763 -- GENERAL_ACCESS_MODIFIER ::= all | constant 3764 3765 -- Note: general access modifiers are not permitted in Ada 83 mode 3766 3767 -- There is no explicit node in the tree for general access modifier. 3768 -- Instead the All_Present or Constant_Present flags are set in the 3769 -- parent node. 3770 3771 ------------------------------------------- 3772 -- 3.10 Access To Subprogram Definition -- 3773 ------------------------------------------- 3774 3775 -- ACCESS_TO_SUBPROGRAM_DEFINITION 3776 -- [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE 3777 -- | [NULL_EXCLUSION] access [protected] function 3778 -- PARAMETER_AND_RESULT_PROFILE 3779 3780 -- Note: access to subprograms are not permitted in Ada 83 mode 3781 3782 -- N_Access_Function_Definition 3783 -- Sloc points to ACCESS 3784 -- Null_Exclusion_Present (Flag11) 3785 -- Null_Exclusion_In_Return_Present (Flag14) 3786 -- Protected_Present (Flag6) 3787 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3788 -- Result_Definition (Node4) result subtype (subtype mark or access def) 3789 3790 -- N_Access_Procedure_Definition 3791 -- Sloc points to ACCESS 3792 -- Null_Exclusion_Present (Flag11) 3793 -- Protected_Present (Flag6) 3794 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3795 3796 ----------------------------- 3797 -- 3.10 Access Definition -- 3798 ----------------------------- 3799 3800 -- ACCESS_DEFINITION ::= 3801 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK 3802 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3803 3804 -- Note: access to subprograms are an Ada 2005 (AI-254) extension 3805 3806 -- N_Access_Definition 3807 -- Sloc points to ACCESS 3808 -- Null_Exclusion_Present (Flag11) 3809 -- All_Present (Flag15) 3810 -- Constant_Present (Flag17) 3811 -- Subtype_Mark (Node4) 3812 -- Access_To_Subprogram_Definition (Node3) (set to Empty if not present) 3813 3814 ----------------------------------------- 3815 -- 3.10.1 Incomplete Type Declaration -- 3816 ----------------------------------------- 3817 3818 -- INCOMPLETE_TYPE_DECLARATION ::= 3819 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED]; 3820 3821 -- N_Incomplete_Type_Declaration 3822 -- Sloc points to TYPE 3823 -- Defining_Identifier (Node1) 3824 -- Discriminant_Specifications (List4) (set to No_List if no 3825 -- discriminant part, or if the discriminant part is an 3826 -- unknown discriminant part) 3827 -- Premature_Use (Node5-Sem) used for improved diagnostics. 3828 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 3829 -- Tagged_Present (Flag15) 3830 3831 ---------------------------- 3832 -- 3.11 Declarative Part -- 3833 ---------------------------- 3834 3835 -- DECLARATIVE_PART ::= {DECLARATIVE_ITEM} 3836 3837 -- Note: although the parser enforces the syntactic requirement that 3838 -- a declarative part can contain only declarations, the semantic 3839 -- processing may add statements to the list of actions in a 3840 -- declarative part, so the code generator should be prepared 3841 -- to accept a statement in this position. 3842 3843 ---------------------------- 3844 -- 3.11 Declarative Item -- 3845 ---------------------------- 3846 3847 -- DECLARATIVE_ITEM ::= BASIC_DECLARATIVE_ITEM | BODY 3848 3849 ---------------------------------- 3850 -- 3.11 Basic Declarative Item -- 3851 ---------------------------------- 3852 3853 -- BASIC_DECLARATIVE_ITEM ::= 3854 -- BASIC_DECLARATION | REPRESENTATION_CLAUSE | USE_CLAUSE 3855 3856 ---------------- 3857 -- 3.11 Body -- 3858 ---------------- 3859 3860 -- BODY ::= PROPER_BODY | BODY_STUB 3861 3862 ----------------------- 3863 -- 3.11 Proper Body -- 3864 ----------------------- 3865 3866 -- PROPER_BODY ::= 3867 -- SUBPROGRAM_BODY | PACKAGE_BODY | TASK_BODY | PROTECTED_BODY 3868 3869 --------------- 3870 -- 4.1 Name -- 3871 --------------- 3872 3873 -- NAME ::= 3874 -- DIRECT_NAME | EXPLICIT_DEREFERENCE 3875 -- | INDEXED_COMPONENT | SLICE 3876 -- | SELECTED_COMPONENT | ATTRIBUTE_REFERENCE 3877 -- | TYPE_CONVERSION | FUNCTION_CALL 3878 -- | CHARACTER_LITERAL 3879 3880 ---------------------- 3881 -- 4.1 Direct Name -- 3882 ---------------------- 3883 3884 -- DIRECT_NAME ::= IDENTIFIER | OPERATOR_SYMBOL 3885 3886 ----------------- 3887 -- 4.1 Prefix -- 3888 ----------------- 3889 3890 -- PREFIX ::= NAME | IMPLICIT_DEREFERENCE 3891 3892 ------------------------------- 3893 -- 4.1 Explicit Dereference -- 3894 ------------------------------- 3895 3896 -- EXPLICIT_DEREFERENCE ::= NAME . all 3897 3898 -- N_Explicit_Dereference 3899 -- Sloc points to ALL 3900 -- Prefix (Node3) 3901 -- Actual_Designated_Subtype (Node4-Sem) 3902 -- Has_Dereference_Action (Flag13-Sem) 3903 -- Atomic_Sync_Required (Flag14-Sem) 3904 -- plus fields for expression 3905 3906 ------------------------------- 3907 -- 4.1 Implicit Dereference -- 3908 ------------------------------- 3909 3910 -- IMPLICIT_DEREFERENCE ::= NAME 3911 3912 ------------------------------ 3913 -- 4.1.1 Indexed Component -- 3914 ------------------------------ 3915 3916 -- INDEXED_COMPONENT ::= PREFIX (EXPRESSION {, EXPRESSION}) 3917 3918 -- Note: the parser may generate this node in some situations where it 3919 -- should be a function call. The semantic pass must correct this 3920 -- misidentification (which is inevitable at the parser level). 3921 3922 -- N_Indexed_Component 3923 -- Sloc contains a copy of the Sloc value of the Prefix 3924 -- Prefix (Node3) 3925 -- Expressions (List1) 3926 -- Generalized_Indexing (Node4-Sem) 3927 -- Atomic_Sync_Required (Flag14-Sem) 3928 -- plus fields for expression 3929 3930 -- Note: if any of the subscripts requires a range check, then the 3931 -- Do_Range_Check flag is set on the corresponding expression, with 3932 -- the index type being determined from the type of the Prefix, which 3933 -- references the array being indexed. 3934 3935 -- Note: in a fully analyzed and expanded indexed component node, and 3936 -- hence in any such node that gigi sees, if the prefix is an access 3937 -- type, then an explicit dereference operation has been inserted. 3938 3939 ------------------ 3940 -- 4.1.2 Slice -- 3941 ------------------ 3942 3943 -- SLICE ::= PREFIX (DISCRETE_RANGE) 3944 3945 -- Note: an implicit subtype is created to describe the resulting 3946 -- type, so that the bounds of this type are the bounds of the slice. 3947 3948 -- N_Slice 3949 -- Sloc points to first token of prefix 3950 -- Prefix (Node3) 3951 -- Discrete_Range (Node4) 3952 -- plus fields for expression 3953 3954 ------------------------------- 3955 -- 4.1.3 Selected Component -- 3956 ------------------------------- 3957 3958 -- SELECTED_COMPONENT ::= PREFIX . SELECTOR_NAME 3959 3960 -- Note: selected components that are semantically expanded names get 3961 -- changed during semantic processing into the separate N_Expanded_Name 3962 -- node. See description of this node in the section on semantic nodes. 3963 3964 -- N_Selected_Component 3965 -- Sloc points to the period 3966 -- Prefix (Node3) 3967 -- Selector_Name (Node2) 3968 -- Associated_Node (Node4-Sem) 3969 -- Do_Discriminant_Check (Flag3-Sem) 3970 -- Is_In_Discriminant_Check (Flag11-Sem) 3971 -- Atomic_Sync_Required (Flag14-Sem) 3972 -- Is_Prefixed_Call (Flag17-Sem) 3973 -- plus fields for expression 3974 3975 -------------------------- 3976 -- 4.1.3 Selector Name -- 3977 -------------------------- 3978 3979 -- SELECTOR_NAME ::= IDENTIFIER | CHARACTER_LITERAL | OPERATOR_SYMBOL 3980 3981 -------------------------------- 3982 -- 4.1.4 Attribute Reference -- 3983 -------------------------------- 3984 3985 -- ATTRIBUTE_REFERENCE ::= PREFIX ' ATTRIBUTE_DESIGNATOR 3986 3987 -- Note: the syntax is quite ambiguous at this point. Consider: 3988 3989 -- A'Length (X) X is part of the attribute designator 3990 -- A'Pos (X) X is an explicit actual parameter of function A'Pos 3991 -- A'Class (X) X is the expression of a type conversion 3992 3993 -- It would be possible for the parser to distinguish these cases 3994 -- by looking at the attribute identifier. However, that would mean 3995 -- more work in introducing new implementation defined attributes, 3996 -- and also it would mean that special processing for attributes 3997 -- would be scattered around, instead of being centralized in the 3998 -- semantic routine that handles an N_Attribute_Reference node. 3999 -- Consequently, the parser in all the above cases stores the 4000 -- expression (X in these examples) as a single element list in 4001 -- in the Expressions field of the N_Attribute_Reference node. 4002 4003 -- Similarly, for attributes like Max which take two arguments, 4004 -- we store the two arguments as a two element list in the 4005 -- Expressions field. Of course it is clear at parse time that 4006 -- this case is really a function call with an attribute as the 4007 -- prefix, but it turns out to be convenient to handle the two 4008 -- argument case in a similar manner to the one argument case, 4009 -- and indeed in general the parser will accept any number of 4010 -- expressions in this position and store them as a list in the 4011 -- attribute reference node. This allows for future addition of 4012 -- attributes that take more than two arguments. 4013 4014 -- Note: named associates are not permitted in function calls where 4015 -- the function is an attribute (see RM 6.4(3)) so it is legitimate 4016 -- to skip the normal subprogram argument processing. 4017 4018 -- Note: for the attributes whose designators are technically keywords, 4019 -- i.e. digits, access, delta, range, the Attribute_Name field contains 4020 -- the corresponding name, even though no identifier is involved. 4021 4022 -- Note: the generated code may contain stream attributes applied to 4023 -- limited types for which no stream routines exist officially. In such 4024 -- case, the result is to use the stream attribute for the underlying 4025 -- full type, or in the case of a protected type, the components 4026 -- (including any discriminants) are merely streamed in order. 4027 4028 -- See Exp_Attr for a complete description of which attributes are 4029 -- passed onto Gigi, and which are handled entirely by the front end. 4030 4031 -- Gigi restriction: For the Pos attribute, the prefix cannot be 4032 -- a non-standard enumeration type or a nonzero/zero semantics 4033 -- boolean type, so the value is simply the stored representation. 4034 4035 -- Gigi requirement: For the Mechanism_Code attribute, if the prefix 4036 -- references a subprogram that is a renaming, then the front end must 4037 -- rewrite the attribute to refer directly to the renamed entity. 4038 4039 -- Note: syntactically the prefix of an attribute reference must be a 4040 -- name, and this (somewhat artificial) requirement is enforced by the 4041 -- parser. However, for many attributes, such as 'Valid, it is quite 4042 -- reasonable to apply the attribute to any value, and hence to any 4043 -- expression. Internally in the tree, the prefix is an expression which 4044 -- does not have to be a name, and this is handled fine by the semantic 4045 -- analysis and expansion, and back ends. This arises for the case of 4046 -- attribute references built by the expander (e.g. 'Valid for the case 4047 -- of an implicit validity check). 4048 4049 -- Note: In generated code, the Address and Unrestricted_Access 4050 -- attributes can be applied to any expression, and the meaning is 4051 -- to create an object containing the value (the object is in the 4052 -- current stack frame), and pass the address of this value. If the 4053 -- Must_Be_Byte_Aligned flag is set, then the object whose address 4054 -- is taken must be on a byte (storage unit) boundary, and if it is 4055 -- not (or may not be), then the generated code must create a copy 4056 -- that is byte aligned, and pass the address of this copy. 4057 4058 -- N_Attribute_Reference 4059 -- Sloc points to apostrophe 4060 -- Prefix (Node3) (general expression, see note above) 4061 -- Attribute_Name (Name2) identifier name from attribute designator 4062 -- Expressions (List1) (set to No_List if no associated expressions) 4063 -- Entity (Node4-Sem) used if the attribute yields a type 4064 -- Associated_Node (Node4-Sem) 4065 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 4066 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 4067 -- Header_Size_Added (Flag11-Sem) 4068 -- Redundant_Use (Flag13-Sem) 4069 -- Must_Be_Byte_Aligned (Flag14-Sem) 4070 -- plus fields for expression 4071 4072 -- Note: in Modify_Tree_For_C mode, Max and Min attributes are expanded 4073 -- into equivalent if expressions, properly taking care of side effects. 4074 4075 --------------------------------- 4076 -- 4.1.4 Attribute Designator -- 4077 --------------------------------- 4078 4079 -- ATTRIBUTE_DESIGNATOR ::= 4080 -- IDENTIFIER [(static_EXPRESSION)] 4081 -- | access | delta | digits 4082 4083 -- There is no explicit node in the tree for an attribute designator. 4084 -- Instead the Attribute_Name and Expressions fields of the parent 4085 -- node (N_Attribute_Reference node) hold the information. 4086 4087 -- Note: if ACCESS, DELTA, or DIGITS appears in an attribute 4088 -- designator, then they are treated as identifiers internally 4089 -- rather than the keywords of the same name. 4090 4091 -------------------------------------- 4092 -- 4.1.4 Range Attribute Reference -- 4093 -------------------------------------- 4094 4095 -- RANGE_ATTRIBUTE_REFERENCE ::= PREFIX ' RANGE_ATTRIBUTE_DESIGNATOR 4096 4097 -- A range attribute reference is represented in the tree using the 4098 -- normal N_Attribute_Reference node. 4099 4100 --------------------------------------- 4101 -- 4.1.4 Range Attribute Designator -- 4102 --------------------------------------- 4103 4104 -- RANGE_ATTRIBUTE_DESIGNATOR ::= Range [(static_EXPRESSION)] 4105 4106 -- A range attribute designator is represented in the tree using the 4107 -- normal N_Attribute_Reference node. 4108 4109 -------------------- 4110 -- 4.3 Aggregate -- 4111 -------------------- 4112 4113 -- AGGREGATE ::= 4114 -- RECORD_AGGREGATE | EXTENSION_AGGREGATE | ARRAY_AGGREGATE 4115 4116 ----------------------------- 4117 -- 4.3.1 Record Aggregate -- 4118 ----------------------------- 4119 4120 -- RECORD_AGGREGATE ::= (RECORD_COMPONENT_ASSOCIATION_LIST) 4121 4122 -- N_Aggregate 4123 -- Sloc points to left parenthesis 4124 -- Expressions (List1) (set to No_List if none or null record case) 4125 -- Component_Associations (List2) (set to No_List if none) 4126 -- Null_Record_Present (Flag17) 4127 -- Aggregate_Bounds (Node3-Sem) 4128 -- Associated_Node (Node4-Sem) 4129 -- Compile_Time_Known_Aggregate (Flag18-Sem) 4130 -- Expansion_Delayed (Flag11-Sem) 4131 -- Has_Self_Reference (Flag13-Sem) 4132 -- plus fields for expression 4133 4134 -- Note: this structure is used for both record and array aggregates 4135 -- since the two cases are not separable by the parser. The parser 4136 -- makes no attempt to enforce consistency here, so it is up to the 4137 -- semantic phase to make sure that the aggregate is consistent (i.e. 4138 -- that it is not a "half-and-half" case that mixes record and array 4139 -- syntax. In particular, for a record aggregate, the expressions 4140 -- field will be set if there are positional associations. 4141 4142 -- Note: N_Aggregate is not used for all aggregates; in particular, 4143 -- there is a separate node kind for extension aggregates. 4144 4145 -- Note: gigi/gcc can handle array aggregates correctly providing that 4146 -- they are entirely positional, and the array subtype involved has a 4147 -- known at compile time length and is not bit packed, or a convention 4148 -- Fortran array with more than one dimension. If these conditions 4149 -- are not met, then the front end must translate the aggregate into 4150 -- an appropriate set of assignments into a temporary. 4151 4152 -- Note: for the record aggregate case, gigi/gcc can handle most cases 4153 -- of record aggregates, including those for packed, and rep-claused 4154 -- records, and also variant records, providing that there are no 4155 -- variable length fields whose size is not known at compile time, 4156 -- and providing that the aggregate is presented in fully named form. 4157 4158 -- The other situation in which array aggregates and record aggregates 4159 -- cannot be passed to the back end is if assignment to one or more 4160 -- components itself needs expansion, e.g. in the case of an assignment 4161 -- of an object of a controlled type. In such cases, the front end 4162 -- must expand the aggregate to a series of assignments, and apply 4163 -- the required expansion to the individual assignment statements. 4164 4165 ---------------------------------------------- 4166 -- 4.3.1 Record Component Association List -- 4167 ---------------------------------------------- 4168 4169 -- RECORD_COMPONENT_ASSOCIATION_LIST ::= 4170 -- RECORD_COMPONENT_ASSOCIATION {, RECORD_COMPONENT_ASSOCIATION} 4171 -- | null record 4172 4173 -- There is no explicit node in the tree for a record component 4174 -- association list. Instead the Null_Record_Present flag is set in 4175 -- the parent node for the NULL RECORD case. 4176 4177 ------------------------------------------------------ 4178 -- 4.3.1 Record Component Association (also 4.3.3) -- 4179 ------------------------------------------------------ 4180 4181 -- RECORD_COMPONENT_ASSOCIATION ::= 4182 -- [COMPONENT_CHOICE_LIST =>] EXPRESSION 4183 4184 -- N_Component_Association 4185 -- Sloc points to first selector name 4186 -- Choices (List1) 4187 -- Loop_Actions (List2-Sem) 4188 -- Expression (Node3) (empty if Box_Present) 4189 -- Box_Present (Flag15) 4190 -- Inherited_Discriminant (Flag13) 4191 4192 -- Note: this structure is used for both record component associations 4193 -- and array component associations, since the two cases aren't always 4194 -- separable by the parser. The choices list may represent either a 4195 -- list of selector names in the record aggregate case, or a list of 4196 -- discrete choices in the array aggregate case or an N_Others_Choice 4197 -- node (which appears as a singleton list). Box_Present gives support 4198 -- to Ada 2005 (AI-287). 4199 4200 ---------------------------------- 4201 -- 4.3.1 Component Choice List -- 4202 ---------------------------------- 4203 4204 -- COMPONENT_CHOICE_LIST ::= 4205 -- component_SELECTOR_NAME {| component_SELECTOR_NAME} 4206 -- | others 4207 4208 -- The entries of a component choice list appear in the Choices list of 4209 -- the associated N_Component_Association, as either selector names, or 4210 -- as an N_Others_Choice node. 4211 4212 -------------------------------- 4213 -- 4.3.2 Extension Aggregate -- 4214 -------------------------------- 4215 4216 -- EXTENSION_AGGREGATE ::= 4217 -- (ANCESTOR_PART with RECORD_COMPONENT_ASSOCIATION_LIST) 4218 4219 -- Note: extension aggregates are not permitted in Ada 83 mode 4220 4221 -- N_Extension_Aggregate 4222 -- Sloc points to left parenthesis 4223 -- Ancestor_Part (Node3) 4224 -- Associated_Node (Node4-Sem) 4225 -- Expressions (List1) (set to No_List if none or null record case) 4226 -- Component_Associations (List2) (set to No_List if none) 4227 -- Null_Record_Present (Flag17) 4228 -- Expansion_Delayed (Flag11-Sem) 4229 -- Has_Self_Reference (Flag13-Sem) 4230 -- plus fields for expression 4231 4232 -------------------------- 4233 -- 4.3.2 Ancestor Part -- 4234 -------------------------- 4235 4236 -- ANCESTOR_PART ::= EXPRESSION | SUBTYPE_MARK 4237 4238 ---------------------------- 4239 -- 4.3.3 Array Aggregate -- 4240 ---------------------------- 4241 4242 -- ARRAY_AGGREGATE ::= 4243 -- POSITIONAL_ARRAY_AGGREGATE | NAMED_ARRAY_AGGREGATE 4244 4245 --------------------------------------- 4246 -- 4.3.3 Positional Array Aggregate -- 4247 --------------------------------------- 4248 4249 -- POSITIONAL_ARRAY_AGGREGATE ::= 4250 -- (EXPRESSION, EXPRESSION {, EXPRESSION}) 4251 -- | (EXPRESSION {, EXPRESSION}, others => EXPRESSION) 4252 4253 -- See Record_Aggregate (4.3.1) for node structure 4254 4255 ---------------------------------- 4256 -- 4.3.3 Named Array Aggregate -- 4257 ---------------------------------- 4258 4259 -- NAMED_ARRAY_AGGREGATE ::= 4260 -- (ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION}) 4261 4262 -- See Record_Aggregate (4.3.1) for node structure 4263 4264 ---------------------------------------- 4265 -- 4.3.3 Array Component Association -- 4266 ---------------------------------------- 4267 4268 -- ARRAY_COMPONENT_ASSOCIATION ::= 4269 -- DISCRETE_CHOICE_LIST => EXPRESSION 4270 -- | ITERATED_COMPONENT_ASSOCIATION 4271 4272 -- See Record_Component_Association (4.3.1) for node structure 4273 -- The iterated_component_association is introduced into the 4274 -- Corrigendum of Ada_2012 by AI12-061. 4275 4276 ------------------------------------------ 4277 -- 4.3.3 Iterated component Association -- 4278 ------------------------------------------ 4279 4280 -- ITERATED_COMPONENT_ASSOCIATION ::= 4281 -- for DEFINING_IDENTIFIER in DISCRETE_CHOICE_LIST => EXPRESSION 4282 4283 -- N_Iterated_Component_Association 4284 -- Sloc points to FOR 4285 -- Defining_Identifier (Node1) 4286 -- Loop_Actions (List2-Sem) 4287 -- Expression (Node3) 4288 -- Discrete_Choices (List4) 4289 -- Box_Present (Flag15) 4290 4291 -- Note that Box_Present is always False, but it is intentionally added 4292 -- for completeness. 4293 4294 ---------------------------- 4295 -- 4.3.4 Delta Aggregate -- 4296 ---------------------------- 4297 4298 -- N_Delta_Aggregate 4299 -- Sloc points to left parenthesis 4300 -- Expression (Node3) 4301 -- Component_Associations (List2) 4302 4303 -------------------------------------------------- 4304 -- 4.4 Expression/Relation/Term/Factor/Primary -- 4305 -------------------------------------------------- 4306 4307 -- EXPRESSION ::= 4308 -- RELATION {LOGICAL_OPERATOR RELATION} 4309 4310 -- CHOICE_EXPRESSION ::= 4311 -- CHOICE_RELATION {LOGICAL_OPERATOR CHOICE_RELATION} 4312 4313 -- CHOICE_RELATION ::= 4314 -- SIMPLE_EXPRESSION [RELATIONAL_OPERATOR SIMPLE_EXPRESSION] 4315 4316 -- RELATION ::= 4317 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 4318 -- | RAISE_EXPRESSION 4319 4320 -- MEMBERSHIP_CHOICE_LIST ::= 4321 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 4322 4323 -- MEMBERSHIP_CHOICE ::= 4324 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 4325 4326 -- LOGICAL_OPERATOR ::= and | and then | or | or else | xor 4327 4328 -- SIMPLE_EXPRESSION ::= 4329 -- [UNARY_ADDING_OPERATOR] TERM {BINARY_ADDING_OPERATOR TERM} 4330 4331 -- TERM ::= FACTOR {MULTIPLYING_OPERATOR FACTOR} 4332 4333 -- FACTOR ::= PRIMARY [** PRIMARY] | abs PRIMARY | not PRIMARY 4334 4335 -- No nodes are generated for any of these constructs. Instead, the 4336 -- node for the operator appears directly. When we refer to an 4337 -- expression in this description, we mean any of the possible 4338 -- constituent components of an expression (e.g. identifier is 4339 -- an example of an expression). 4340 4341 -- Note: the above syntax is that Ada 2012 syntax which restricts 4342 -- choice relations to simple expressions to avoid ambiguities in 4343 -- some contexts with set membership notation. It has been decided 4344 -- that in retrospect, the Ada 95 change allowing general expressions 4345 -- in this context was a mistake, so we have reverted to the above 4346 -- syntax in Ada 95 and Ada 2005 modes (the restriction to simple 4347 -- expressions was there in Ada 83 from the start). 4348 4349 ------------------ 4350 -- 4.4 Primary -- 4351 ------------------ 4352 4353 -- PRIMARY ::= 4354 -- NUMERIC_LITERAL | null 4355 -- | STRING_LITERAL | AGGREGATE 4356 -- | NAME | QUALIFIED_EXPRESSION 4357 -- | ALLOCATOR | (EXPRESSION) 4358 4359 -- Usually there is no explicit node in the tree for primary. Instead 4360 -- the constituent (e.g. AGGREGATE) appears directly. There are two 4361 -- exceptions. First, there is an explicit node for a null primary. 4362 4363 -- N_Null 4364 -- Sloc points to NULL 4365 -- plus fields for expression 4366 4367 -- Second, the case of (EXPRESSION) is handled specially. Ada requires 4368 -- that the parser keep track of which subexpressions are enclosed 4369 -- in parentheses, and how many levels of parentheses are used. This 4370 -- information is required for optimization purposes, and also for 4371 -- some semantic checks (e.g. (((1))) in a procedure spec does not 4372 -- conform with ((((1)))) in the body). 4373 4374 -- The parentheses are recorded by keeping a Paren_Count field in every 4375 -- subexpression node (it is actually present in all nodes, but only 4376 -- used in subexpression nodes). This count records the number of 4377 -- levels of parentheses. If the number of levels in the source exceeds 4378 -- the maximum accommodated by this count, then the count is simply left 4379 -- at the maximum value. This means that there are some pathological 4380 -- cases of failure to detect conformance failures (e.g. an expression 4381 -- with 500 levels of parens will conform with one with 501 levels), 4382 -- but we do not need to lose sleep over this. 4383 4384 -- Historical note: in versions of GNAT prior to 1.75, there was a node 4385 -- type N_Parenthesized_Expression used to accurately record unlimited 4386 -- numbers of levels of parentheses. However, it turned out to be a 4387 -- real nuisance to have to take into account the possible presence of 4388 -- this node during semantic analysis, since basically parentheses have 4389 -- zero relevance to semantic analysis. 4390 4391 -- Note: the level of parentheses always present in things like 4392 -- aggregates does not count, only the parentheses in the primary 4393 -- (EXPRESSION) affect the setting of the Paren_Count field. 4394 4395 -- 2nd Note: the contents of the Expression field must be ignored (i.e. 4396 -- treated as though it were Empty) if No_Initialization is set True. 4397 4398 -------------------------------------- 4399 -- 4.5 Short-Circuit Control Forms -- 4400 -------------------------------------- 4401 4402 -- EXPRESSION ::= 4403 -- RELATION {and then RELATION} | RELATION {or else RELATION} 4404 4405 -- Gigi restriction: For both these control forms, the operand and 4406 -- result types are always Standard.Boolean. The expander inserts the 4407 -- required conversion operations where needed to ensure this is the 4408 -- case. 4409 4410 -- N_And_Then 4411 -- Sloc points to AND of AND THEN 4412 -- Left_Opnd (Node2) 4413 -- Right_Opnd (Node3) 4414 -- Actions (List1-Sem) 4415 -- plus fields for expression 4416 4417 -- N_Or_Else 4418 -- Sloc points to OR of OR ELSE 4419 -- Left_Opnd (Node2) 4420 -- Right_Opnd (Node3) 4421 -- Actions (List1-Sem) 4422 -- plus fields for expression 4423 4424 -- Note: The Actions field is used to hold actions associated with 4425 -- the right hand operand. These have to be treated specially since 4426 -- they are not unconditionally executed. See Insert_Actions for a 4427 -- more detailed description of how these actions are handled. 4428 4429 --------------------------- 4430 -- 4.5 Membership Tests -- 4431 --------------------------- 4432 4433 -- RELATION ::= 4434 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 4435 4436 -- MEMBERSHIP_CHOICE_LIST ::= 4437 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 4438 4439 -- MEMBERSHIP_CHOICE ::= 4440 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 4441 4442 -- Note: although the grammar above allows only a range or a subtype 4443 -- mark, the parser in fact will accept any simple expression in place 4444 -- of a subtype mark. This means that the semantic analyzer must be able 4445 -- to deal with, and diagnose a simple expression other than a name for 4446 -- the right operand. This simplifies error recovery in the parser. 4447 4448 -- The Alternatives field below is present only if there is more than 4449 -- one Membership_Choice present (which is legitimate only in Ada 2012 4450 -- mode) in which case Right_Opnd is Empty, and Alternatives contains 4451 -- the list of choices. In the tree passed to the back end, Alternatives 4452 -- is always No_List, and Right_Opnd is set (i.e. the expansion circuit 4453 -- expands out the complex set membership case using simple membership 4454 -- and equality operations). 4455 4456 -- Should we rename Alternatives here to Membership_Choices ??? 4457 4458 -- N_In 4459 -- Sloc points to IN 4460 -- Left_Opnd (Node2) 4461 -- Right_Opnd (Node3) 4462 -- Alternatives (List4) (set to No_List if only one set alternative) 4463 -- No_Minimize_Eliminate (Flag17) 4464 -- plus fields for expression 4465 4466 -- N_Not_In 4467 -- Sloc points to NOT of NOT IN 4468 -- Left_Opnd (Node2) 4469 -- Right_Opnd (Node3) 4470 -- Alternatives (List4) (set to No_List if only one set alternative) 4471 -- No_Minimize_Eliminate (Flag17) 4472 -- plus fields for expression 4473 4474 -------------------- 4475 -- 4.5 Operators -- 4476 -------------------- 4477 4478 -- LOGICAL_OPERATOR ::= and | or | xor 4479 4480 -- RELATIONAL_OPERATOR ::= = | /= | < | <= | > | >= 4481 4482 -- BINARY_ADDING_OPERATOR ::= + | - | & 4483 4484 -- UNARY_ADDING_OPERATOR ::= + | - 4485 4486 -- MULTIPLYING_OPERATOR ::= * | / | mod | rem 4487 4488 -- HIGHEST_PRECEDENCE_OPERATOR ::= ** | abs | not 4489 4490 -- Sprint syntax if Treat_Fixed_As_Integer is set: 4491 4492 -- x #* y 4493 -- x #/ y 4494 -- x #mod y 4495 -- x #rem y 4496 4497 -- Gigi restriction: For * / mod rem with fixed-point operands, Gigi 4498 -- will only be given nodes with the Treat_Fixed_As_Integer flag set. 4499 -- All handling of smalls for multiplication and division is handled 4500 -- by the front end (mod and rem result only from expansion). Gigi 4501 -- thus never needs to worry about small values (for other operators 4502 -- operating on fixed-point, e.g. addition, the small value does not 4503 -- have any semantic effect anyway, these are always integer operations. 4504 4505 -- Gigi restriction: For all operators taking Boolean operands, the 4506 -- type is always Standard.Boolean. The expander inserts the required 4507 -- conversion operations where needed to ensure this is the case. 4508 4509 -- N_Op_And 4510 -- Sloc points to AND 4511 -- Do_Length_Check (Flag4-Sem) 4512 -- plus fields for binary operator 4513 -- plus fields for expression 4514 4515 -- N_Op_Or 4516 -- Sloc points to OR 4517 -- Do_Length_Check (Flag4-Sem) 4518 -- plus fields for binary operator 4519 -- plus fields for expression 4520 4521 -- N_Op_Xor 4522 -- Sloc points to XOR 4523 -- Do_Length_Check (Flag4-Sem) 4524 -- plus fields for binary operator 4525 -- plus fields for expression 4526 4527 -- N_Op_Eq 4528 -- Sloc points to = 4529 -- plus fields for binary operator 4530 -- plus fields for expression 4531 4532 -- N_Op_Ne 4533 -- Sloc points to /= 4534 -- plus fields for binary operator 4535 -- plus fields for expression 4536 4537 -- N_Op_Lt 4538 -- Sloc points to < 4539 -- plus fields for binary operator 4540 -- plus fields for expression 4541 4542 -- N_Op_Le 4543 -- Sloc points to <= 4544 -- plus fields for binary operator 4545 -- plus fields for expression 4546 4547 -- N_Op_Gt 4548 -- Sloc points to > 4549 -- plus fields for binary operator 4550 -- plus fields for expression 4551 4552 -- N_Op_Ge 4553 -- Sloc points to >= 4554 -- plus fields for binary operator 4555 -- plus fields for expression 4556 4557 -- N_Op_Add 4558 -- Sloc points to + (binary) 4559 -- plus fields for binary operator 4560 -- plus fields for expression 4561 4562 -- N_Op_Subtract 4563 -- Sloc points to - (binary) 4564 -- plus fields for binary operator 4565 -- plus fields for expression 4566 4567 -- N_Op_Concat 4568 -- Sloc points to & 4569 -- Is_Component_Left_Opnd (Flag13-Sem) 4570 -- Is_Component_Right_Opnd (Flag14-Sem) 4571 -- plus fields for binary operator 4572 -- plus fields for expression 4573 4574 -- N_Op_Multiply 4575 -- Sloc points to * 4576 -- Treat_Fixed_As_Integer (Flag14-Sem) 4577 -- Rounded_Result (Flag18-Sem) 4578 -- plus fields for binary operator 4579 -- plus fields for expression 4580 4581 -- N_Op_Divide 4582 -- Sloc points to / 4583 -- Treat_Fixed_As_Integer (Flag14-Sem) 4584 -- Do_Division_Check (Flag13-Sem) 4585 -- Rounded_Result (Flag18-Sem) 4586 -- plus fields for binary operator 4587 -- plus fields for expression 4588 4589 -- N_Op_Mod 4590 -- Sloc points to MOD 4591 -- Treat_Fixed_As_Integer (Flag14-Sem) 4592 -- Do_Division_Check (Flag13-Sem) 4593 -- plus fields for binary operator 4594 -- plus fields for expression 4595 4596 -- N_Op_Rem 4597 -- Sloc points to REM 4598 -- Treat_Fixed_As_Integer (Flag14-Sem) 4599 -- Do_Division_Check (Flag13-Sem) 4600 -- plus fields for binary operator 4601 -- plus fields for expression 4602 4603 -- N_Op_Expon 4604 -- Sloc points to ** 4605 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 4606 -- plus fields for binary operator 4607 -- plus fields for expression 4608 4609 -- N_Op_Plus 4610 -- Sloc points to + (unary) 4611 -- plus fields for unary operator 4612 -- plus fields for expression 4613 4614 -- N_Op_Minus 4615 -- Sloc points to - (unary) 4616 -- plus fields for unary operator 4617 -- plus fields for expression 4618 4619 -- N_Op_Abs 4620 -- Sloc points to ABS 4621 -- plus fields for unary operator 4622 -- plus fields for expression 4623 4624 -- N_Op_Not 4625 -- Sloc points to NOT 4626 -- plus fields for unary operator 4627 -- plus fields for expression 4628 4629 -- See also shift operators in section B.2 4630 4631 -- Note on fixed-point operations passed to Gigi: For adding operators, 4632 -- the semantics is to treat these simply as integer operations, with 4633 -- the small values being ignored (the bounds are already stored in 4634 -- units of small, so that constraint checking works as usual). For the 4635 -- case of multiply/divide/rem/mod operations, Gigi will only see fixed 4636 -- point operands if the Treat_Fixed_As_Integer flag is set and will 4637 -- thus treat these nodes in identical manner, ignoring small values. 4638 4639 -- Note on equality/inequality tests for records. In the expanded tree, 4640 -- record comparisons are always expanded to be a series of component 4641 -- comparisons, so the back end will never see an equality or inequality 4642 -- operation with operands of a record type. 4643 4644 -- Note on overflow handling: When the overflow checking mode is set to 4645 -- MINIMIZED or ELIMINATED, nodes for signed arithmetic operations may 4646 -- be modified to use a larger type for the operands and result. In 4647 -- the case where the computed range exceeds that of Long_Long_Integer, 4648 -- and we are running in ELIMINATED mode, the operator node will be 4649 -- changed to be a call to the appropriate routine in System.Bignums. 4650 4651 -- Note: In Modify_Tree_For_C mode, we do not generate an N_Op_Mod node 4652 -- for signed integer types (since there is no equivalent operator in 4653 -- C). Instead we rewrite such an operation in terms of REM (which is 4654 -- % in C) and other C-available operators. 4655 4656 ------------------------------------ 4657 -- 4.5.7 Conditional Expressions -- 4658 ------------------------------------ 4659 4660 -- CONDITIONAL_EXPRESSION ::= IF_EXPRESSION | CASE_EXPRESSION 4661 4662 -------------------------- 4663 -- 4.5.7 If Expression -- 4664 ---------------------------- 4665 4666 -- IF_EXPRESSION ::= 4667 -- if CONDITION then DEPENDENT_EXPRESSION 4668 -- {elsif CONDITION then DEPENDENT_EXPRESSION} 4669 -- [else DEPENDENT_EXPRESSION] 4670 4671 -- DEPENDENT_EXPRESSION ::= EXPRESSION 4672 4673 -- Note: if we have (IF x1 THEN x2 ELSIF x3 THEN x4 ELSE x5) then it 4674 -- is represented as (IF x1 THEN x2 ELSE (IF x3 THEN x4 ELSE x5)) and 4675 -- the Is_Elsif flag is set on the inner if expression. 4676 4677 -- N_If_Expression 4678 -- Sloc points to IF or ELSIF keyword 4679 -- Expressions (List1) 4680 -- Then_Actions (List2-Sem) 4681 -- Else_Actions (List3-Sem) 4682 -- Is_Elsif (Flag13) (set if comes from ELSIF) 4683 -- Do_Overflow_Check (Flag17-Sem) 4684 -- plus fields for expression 4685 4686 -- Expressions here is a three-element list, whose first element is the 4687 -- condition, the second element is the dependent expression after THEN 4688 -- and the third element is the dependent expression after the ELSE 4689 -- (explicitly set to True if missing). 4690 4691 -- Note: the Then_Actions and Else_Actions fields are always set to 4692 -- No_List in the tree passed to the back end. These are used only 4693 -- for temporary processing purposes in the expander. Even though they 4694 -- are semantic fields, their parent pointers are set because analysis 4695 -- of actions nodes in those lists may generate additional actions that 4696 -- need to know their insertion point (for example for the creation of 4697 -- transient scopes). 4698 4699 -- Note: in the tree passed to the back end, if the result type is 4700 -- an unconstrained array, the if expression can only appears in the 4701 -- initializing expression of an object declaration (this avoids the 4702 -- back end having to create a variable length temporary on the fly). 4703 4704 ---------------------------- 4705 -- 4.5.7 Case Expression -- 4706 ---------------------------- 4707 4708 -- CASE_EXPRESSION ::= 4709 -- case SELECTING_EXPRESSION is 4710 -- CASE_EXPRESSION_ALTERNATIVE 4711 -- {,CASE_EXPRESSION_ALTERNATIVE} 4712 4713 -- Note that the Alternatives cannot include pragmas (this contrasts 4714 -- with the situation of case statements where pragmas are allowed). 4715 4716 -- N_Case_Expression 4717 -- Sloc points to CASE 4718 -- Expression (Node3) (the selecting expression) 4719 -- Alternatives (List4) (the case expression alternatives) 4720 -- Do_Overflow_Check (Flag17-Sem) 4721 4722 ---------------------------------------- 4723 -- 4.5.7 Case Expression Alternative -- 4724 ---------------------------------------- 4725 4726 -- CASE_EXPRESSION_ALTERNATIVE ::= 4727 -- when DISCRETE_CHOICE_LIST => 4728 -- DEPENDENT_EXPRESSION 4729 4730 -- N_Case_Expression_Alternative 4731 -- Sloc points to WHEN 4732 -- Actions (List1) 4733 -- Discrete_Choices (List4) 4734 -- Expression (Node3) 4735 -- Has_SP_Choice (Flag15-Sem) 4736 4737 -- Note: The Actions field temporarily holds any actions associated with 4738 -- evaluation of the Expression. During expansion of the case expression 4739 -- these actions are wrapped into an N_Expressions_With_Actions node 4740 -- replacing the original expression. 4741 4742 -- Note: this node never appears in the tree passed to the back end, 4743 -- since the expander converts case expressions into case statements. 4744 4745 --------------------------------- 4746 -- 4.5.8 Quantified Expression -- 4747 --------------------------------- 4748 4749 -- QUANTIFIED_EXPRESSION ::= 4750 -- for QUANTIFIER LOOP_PARAMETER_SPECIFICATION => PREDICATE 4751 -- | for QUANTIFIER ITERATOR_SPECIFICATION => PREDICATE 4752 -- 4753 -- QUANTIFIER ::= all | some 4754 4755 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4756 -- is present at a time, in which case the other one is empty. 4757 4758 -- N_Quantified_Expression 4759 -- Sloc points to FOR 4760 -- Iterator_Specification (Node2) 4761 -- Loop_Parameter_Specification (Node4) 4762 -- Condition (Node1) 4763 -- All_Present (Flag15) 4764 4765 -------------------------------- 4766 -- 4.5.9 Reduction Expression -- 4767 -------------------------------- 4768 4769 -- REDUCTION_EXPRESSION ::= 4770 -- for LOOP_PARAMETER_SPECIFICATION => COMBINER_FUNCTION_CALL 4771 -- for ITERATOR_SPECIFIATION => COMBINER_FUNCTION_CALL 4772 4773 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4774 -- is present at a time, in which case the other one is empty. 4775 4776 -- N_Reduction_Expression 4777 -- Sloc points to FOR 4778 -- Iterator_Specification (Node2) 4779 -- Expression (Node3) 4780 -- Loop_Parameter_Specification (Node4) 4781 -- plus fields for expression 4782 4783 -- COMBINER_FUNCTION_CALL => FUNCTION_CALL 4784 4785 -- A Combiner_Function_Call is either a function call (including an 4786 -- operator) with one reduction expression parameter, appearing either 4787 -- as a left operand or as the first actual in the parameter list. In 4788 -- a reduction expression this is represented as an expression. 4789 4790 -------------------------- 4791 -- 4.6 Type Conversion -- 4792 -------------------------- 4793 4794 -- TYPE_CONVERSION ::= 4795 -- SUBTYPE_MARK (EXPRESSION) | SUBTYPE_MARK (NAME) 4796 4797 -- In the (NAME) case, the name is stored as the expression 4798 4799 -- Note: the parser never generates a type conversion node, since it 4800 -- looks like an indexed component which is generated by preference. 4801 -- The semantic pass must correct this misidentification. 4802 4803 -- Gigi handles conversions that involve no change in the root type, 4804 -- and also all conversions from integer to floating-point types. 4805 -- Conversions from floating-point to integer are only handled in 4806 -- the case where Float_Truncate flag set. Other conversions from 4807 -- floating-point to integer (involving rounding) and all conversions 4808 -- involving fixed-point types are handled by the expander. 4809 4810 -- Sprint syntax if Float_Truncate set: X^(Y) 4811 -- Sprint syntax if Conversion_OK set X?(Y) 4812 -- Sprint syntax if both flags set X?^(Y) 4813 4814 -- Note: If either the operand or result type is fixed-point, Gigi will 4815 -- only see a type conversion node with Conversion_OK set. The front end 4816 -- takes care of all handling of small's for fixed-point conversions. 4817 4818 -- N_Type_Conversion 4819 -- Sloc points to first token of subtype mark 4820 -- Subtype_Mark (Node4) 4821 -- Expression (Node3) 4822 -- Do_Discriminant_Check (Flag3-Sem) 4823 -- Do_Length_Check (Flag4-Sem) 4824 -- Float_Truncate (Flag11-Sem) 4825 -- Do_Tag_Check (Flag13-Sem) 4826 -- Conversion_OK (Flag14-Sem) 4827 -- Do_Overflow_Check (Flag17-Sem) 4828 -- Rounded_Result (Flag18-Sem) 4829 -- plus fields for expression 4830 4831 -- Note: if a range check is required, then the Do_Range_Check flag 4832 -- is set in the Expression with the check being done against the 4833 -- target type range (after the base type conversion, if any). 4834 4835 ------------------------------- 4836 -- 4.7 Qualified Expression -- 4837 ------------------------------- 4838 4839 -- QUALIFIED_EXPRESSION ::= 4840 -- SUBTYPE_MARK ' (EXPRESSION) | SUBTYPE_MARK ' AGGREGATE 4841 4842 -- Note: the parentheses in the (EXPRESSION) case are deemed to enclose 4843 -- the expression, so the Expression field of this node always points 4844 -- to a parenthesized expression in this case (i.e. Paren_Count will 4845 -- always be non-zero for the referenced expression if it is not an 4846 -- aggregate). 4847 4848 -- N_Qualified_Expression 4849 -- Sloc points to apostrophe 4850 -- Subtype_Mark (Node4) 4851 -- Expression (Node3) expression or aggregate 4852 -- Is_Qualified_Universal_Literal (Flag4-Sem) 4853 -- plus fields for expression 4854 4855 -------------------- 4856 -- 4.8 Allocator -- 4857 -------------------- 4858 4859 -- ALLOCATOR ::= 4860 -- new [SUBPOOL_SPECIFICATION] SUBTYPE_INDICATION 4861 -- | new [SUBPOOL_SPECIFICATION] QUALIFIED_EXPRESSION 4862 -- 4863 -- SUBPOOL_SPECIFICATION ::= (subpool_handle_NAME) 4864 4865 -- Sprint syntax (when storage pool present) 4866 -- new xxx (storage_pool = pool) 4867 -- or 4868 -- new (subpool) xxx (storage_pool = pool) 4869 4870 -- N_Allocator 4871 -- Sloc points to NEW 4872 -- Expression (Node3) subtype indication or qualified expression 4873 -- Subpool_Handle_Name (Node4) (set to Empty if not present) 4874 -- Storage_Pool (Node1-Sem) 4875 -- Procedure_To_Call (Node2-Sem) 4876 -- Alloc_For_BIP_Return (Flag1-Sem) 4877 -- Null_Exclusion_Present (Flag11) 4878 -- No_Initialization (Flag13-Sem) 4879 -- Is_Static_Coextension (Flag14-Sem) 4880 -- Do_Storage_Check (Flag17-Sem) 4881 -- Is_Dynamic_Coextension (Flag18-Sem) 4882 -- plus fields for expression 4883 4884 -- Note: like all nodes, the N_Allocator has the Comes_From_Source flag. 4885 -- This flag has a special function in conjunction with the restriction 4886 -- No_Implicit_Heap_Allocations, which will be triggered if this flag 4887 -- is not set. This means that if a source allocator is replaced with 4888 -- a constructed allocator, the Comes_From_Source flag should be copied 4889 -- to the newly created allocator. 4890 4891 --------------------------------- 4892 -- 5.1 Sequence Of Statements -- 4893 --------------------------------- 4894 4895 -- SEQUENCE_OF_STATEMENTS ::= STATEMENT {STATEMENT} 4896 4897 -- Note: Although the parser will not accept a declaration as a 4898 -- statement, the semantic analyzer may insert declarations (e.g. 4899 -- declarations of implicit types needed for execution of other 4900 -- statements) into a sequence of statements, so the code generator 4901 -- should be prepared to accept a declaration where a statement is 4902 -- expected. Note also that pragmas can appear as statements. 4903 4904 -------------------- 4905 -- 5.1 Statement -- 4906 -------------------- 4907 4908 -- STATEMENT ::= 4909 -- {LABEL} SIMPLE_STATEMENT | {LABEL} COMPOUND_STATEMENT 4910 4911 -- There is no explicit node in the tree for a statement. Instead, the 4912 -- individual statement appears directly. Labels are treated as a 4913 -- kind of statement, i.e. they are linked into a statement list at 4914 -- the point they appear, so the labeled statement appears following 4915 -- the label or labels in the statement list. 4916 4917 --------------------------- 4918 -- 5.1 Simple Statement -- 4919 --------------------------- 4920 4921 -- SIMPLE_STATEMENT ::= NULL_STATEMENT 4922 -- | ASSIGNMENT_STATEMENT | EXIT_STATEMENT 4923 -- | GOTO_STATEMENT | PROCEDURE_CALL_STATEMENT 4924 -- | SIMPLE_RETURN_STATEMENT | ENTRY_CALL_STATEMENT 4925 -- | REQUEUE_STATEMENT | DELAY_STATEMENT 4926 -- | ABORT_STATEMENT | RAISE_STATEMENT 4927 -- | CODE_STATEMENT 4928 4929 ----------------------------- 4930 -- 5.1 Compound Statement -- 4931 ----------------------------- 4932 4933 -- COMPOUND_STATEMENT ::= 4934 -- IF_STATEMENT | CASE_STATEMENT 4935 -- | LOOP_STATEMENT | BLOCK_STATEMENT 4936 -- | EXTENDED_RETURN_STATEMENT 4937 -- | ACCEPT_STATEMENT | SELECT_STATEMENT 4938 4939 ------------------------- 4940 -- 5.1 Null Statement -- 4941 ------------------------- 4942 4943 -- NULL_STATEMENT ::= null; 4944 4945 -- N_Null_Statement 4946 -- Sloc points to NULL 4947 4948 ---------------- 4949 -- 5.1 Label -- 4950 ---------------- 4951 4952 -- LABEL ::= <<label_STATEMENT_IDENTIFIER>> 4953 4954 -- Note that the occurrence of a label is not a defining identifier, 4955 -- but rather a referencing occurrence. The defining occurrence is 4956 -- in the implicit label declaration which occurs in the innermost 4957 -- enclosing block. 4958 4959 -- N_Label 4960 -- Sloc points to << 4961 -- Identifier (Node1) direct name of statement identifier 4962 -- Exception_Junk (Flag8-Sem) 4963 4964 -- Note: Before Ada 2012, a label is always followed by a statement, 4965 -- and this is true in the tree even in Ada 2012 mode (the parser 4966 -- inserts a null statement marked with Comes_From_Source False). 4967 4968 ------------------------------- 4969 -- 5.1 Statement Identifier -- 4970 ------------------------------- 4971 4972 -- STATEMENT_IDENTIFIER ::= DIRECT_NAME 4973 4974 -- The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier 4975 -- (not an OPERATOR_SYMBOL) 4976 4977 ------------------------------- 4978 -- 5.2 Assignment Statement -- 4979 ------------------------------- 4980 4981 -- ASSIGNMENT_STATEMENT ::= 4982 -- variable_NAME := EXPRESSION; 4983 4984 -- N_Assignment_Statement 4985 -- Sloc points to := 4986 -- Name (Node2) 4987 -- Expression (Node3) 4988 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 4989 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 4990 -- Do_Discriminant_Check (Flag3-Sem) 4991 -- Do_Length_Check (Flag4-Sem) 4992 -- Forwards_OK (Flag5-Sem) 4993 -- Backwards_OK (Flag6-Sem) 4994 -- No_Ctrl_Actions (Flag7-Sem) 4995 -- Has_Target_Names (Flag8-Sem) 4996 -- Is_Elaboration_Code (Flag9-Sem) 4997 -- Do_Tag_Check (Flag13-Sem) 4998 -- Componentwise_Assignment (Flag14-Sem) 4999 -- Suppress_Assignment_Checks (Flag18-Sem) 5000 5001 -- Note: if a range check is required, then the Do_Range_Check flag 5002 -- is set in the Expression (right hand side), with the check being 5003 -- done against the type of the Name (left hand side). 5004 5005 -- Note: the back end places some restrictions on the form of the 5006 -- Expression field. If the object being assigned to is Atomic, then 5007 -- the Expression may not have the form of an aggregate (since this 5008 -- might cause the back end to generate separate assignments). In this 5009 -- case the front end must generate an extra temporary and initialize 5010 -- this temporary as required (the temporary itself is not atomic). 5011 5012 ------------------ 5013 -- Target_Name -- 5014 ------------------ 5015 5016 -- N_Target_Name 5017 -- Sloc points to @ 5018 -- Etype (Node5-Sem) 5019 5020 -- Note (Ada 2020): node is used during analysis as a placeholder for 5021 -- the value of the LHS of the enclosing assignment statement. Node is 5022 -- eventually rewritten together with enclosing assignment, and backends 5023 -- are not aware of it. 5024 5025 ----------------------- 5026 -- 5.3 If Statement -- 5027 ----------------------- 5028 5029 -- IF_STATEMENT ::= 5030 -- if CONDITION then 5031 -- SEQUENCE_OF_STATEMENTS 5032 -- {elsif CONDITION then 5033 -- SEQUENCE_OF_STATEMENTS} 5034 -- [else 5035 -- SEQUENCE_OF_STATEMENTS] 5036 -- end if; 5037 5038 -- Gigi restriction: This expander ensures that the type of the 5039 -- Condition fields is always Standard.Boolean, even if the type 5040 -- in the source is some non-standard boolean type. 5041 5042 -- N_If_Statement 5043 -- Sloc points to IF 5044 -- Condition (Node1) 5045 -- Then_Statements (List2) 5046 -- Elsif_Parts (List3) (set to No_List if none present) 5047 -- Else_Statements (List4) (set to No_List if no else part present) 5048 -- End_Span (Uint5) (set to Uint_0 if expander generated) 5049 -- From_Conditional_Expression (Flag1-Sem) 5050 5051 -- N_Elsif_Part 5052 -- Sloc points to ELSIF 5053 -- Condition (Node1) 5054 -- Then_Statements (List2) 5055 -- Condition_Actions (List3-Sem) 5056 5057 -------------------- 5058 -- 5.3 Condition -- 5059 -------------------- 5060 5061 -- CONDITION ::= boolean_EXPRESSION 5062 5063 ------------------------- 5064 -- 5.4 Case Statement -- 5065 ------------------------- 5066 5067 -- CASE_STATEMENT ::= 5068 -- case EXPRESSION is 5069 -- CASE_STATEMENT_ALTERNATIVE 5070 -- {CASE_STATEMENT_ALTERNATIVE} 5071 -- end case; 5072 5073 -- Note: the Alternatives can contain pragmas. These only occur at 5074 -- the start of the list, since any pragmas occurring after the first 5075 -- alternative are absorbed into the corresponding statement sequence. 5076 5077 -- N_Case_Statement 5078 -- Sloc points to CASE 5079 -- Expression (Node3) 5080 -- Alternatives (List4) 5081 -- End_Span (Uint5) (set to Uint_0 if expander generated) 5082 -- From_Conditional_Expression (Flag1-Sem) 5083 5084 -- Note: Before Ada 2012, a pragma in a statement sequence is always 5085 -- followed by a statement, and this is true in the tree even in Ada 5086 -- 2012 mode (the parser inserts a null statement marked with the flag 5087 -- Comes_From_Source False). 5088 5089 ------------------------------------- 5090 -- 5.4 Case Statement Alternative -- 5091 ------------------------------------- 5092 5093 -- CASE_STATEMENT_ALTERNATIVE ::= 5094 -- when DISCRETE_CHOICE_LIST => 5095 -- SEQUENCE_OF_STATEMENTS 5096 5097 -- N_Case_Statement_Alternative 5098 -- Sloc points to WHEN 5099 -- Discrete_Choices (List4) 5100 -- Statements (List3) 5101 -- Has_SP_Choice (Flag15-Sem) 5102 5103 -- Note: in the list of Discrete_Choices, the tree passed to the back 5104 -- end does not have choice entries corresponding to names of statically 5105 -- predicated subtypes. Such entries are always expanded out to the list 5106 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 5107 -- mode does not have this expansion, and has the original choices. 5108 5109 ------------------------- 5110 -- 5.5 Loop Statement -- 5111 ------------------------- 5112 5113 -- LOOP_STATEMENT ::= 5114 -- [loop_STATEMENT_IDENTIFIER :] 5115 -- [ITERATION_SCHEME] loop 5116 -- SEQUENCE_OF_STATEMENTS 5117 -- end loop [loop_IDENTIFIER]; 5118 5119 -- Note: The occurrence of a loop label is not a defining identifier 5120 -- but rather a referencing occurrence. The defining occurrence is in 5121 -- the implicit label declaration which occurs in the innermost 5122 -- enclosing block. 5123 5124 -- Note: there is always a loop statement identifier present in the 5125 -- tree, even if none was given in the source. In the case where no loop 5126 -- identifier is given in the source, the parser creates a name of the 5127 -- form _Loop_n, where n is a decimal integer (the two underlines ensure 5128 -- that the loop names created in this manner do not conflict with any 5129 -- user defined identifiers), and the flag Has_Created_Identifier is set 5130 -- to True. The only exception to the rule that all loop statement nodes 5131 -- have identifiers occurs for loops constructed by the expander, and 5132 -- the semantic analyzer will create and supply dummy loop identifiers 5133 -- in these cases. 5134 5135 -- N_Loop_Statement 5136 -- Sloc points to LOOP 5137 -- Identifier (Node1) loop identifier (set to Empty if no identifier) 5138 -- Iteration_Scheme (Node2) (set to Empty if no iteration scheme) 5139 -- Statements (List3) 5140 -- End_Label (Node4) 5141 -- Has_Created_Identifier (Flag15) 5142 -- Is_Null_Loop (Flag16) 5143 -- Suppress_Loop_Warnings (Flag17) 5144 5145 -- Note: the parser fills in the Identifier field if there is an 5146 -- explicit loop identifier. Otherwise the parser leaves this field 5147 -- set to Empty, and then the semantic processing for a loop statement 5148 -- creates an identifier, setting the Has_Created_Identifier flag to 5149 -- True. So after semantic analysis, the Identifier is always set, 5150 -- referencing an identifier whose entity has an Ekind of E_Loop. 5151 5152 --------------------------- 5153 -- 5.5 Iteration Scheme -- 5154 --------------------------- 5155 5156 -- ITERATION_SCHEME ::= 5157 -- while CONDITION 5158 -- | for LOOP_PARAMETER_SPECIFICATION 5159 -- | for ITERATOR_SPECIFICATION 5160 5161 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 5162 -- is present at a time, in which case the other one is empty. Both are 5163 -- empty in the case of a WHILE loop. 5164 5165 -- Gigi restriction: The expander ensures that the type of the Condition 5166 -- field is always Standard.Boolean, even if the type in the source is 5167 -- some non-standard boolean type. 5168 5169 -- N_Iteration_Scheme 5170 -- Sloc points to WHILE or FOR 5171 -- Condition (Node1) (set to Empty if FOR case) 5172 -- Condition_Actions (List3-Sem) 5173 -- Iterator_Specification (Node2) (set to Empty if WHILE case) 5174 -- Loop_Parameter_Specification (Node4) (set to Empty if WHILE case) 5175 5176 --------------------------------------- 5177 -- 5.5 Loop Parameter Specification -- 5178 --------------------------------------- 5179 5180 -- LOOP_PARAMETER_SPECIFICATION ::= 5181 -- DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION 5182 5183 -- N_Loop_Parameter_Specification 5184 -- Sloc points to first identifier 5185 -- Defining_Identifier (Node1) 5186 -- Reverse_Present (Flag15) 5187 -- Discrete_Subtype_Definition (Node4) 5188 5189 ----------------------------------- 5190 -- 5.5.1 Iterator Specification -- 5191 ----------------------------------- 5192 5193 -- ITERATOR_SPECIFICATION ::= 5194 -- DEFINING_IDENTIFIER in [reverse] NAME 5195 -- | DEFINING_IDENTIFIER [: SUBTYPE_INDICATION] of [reverse] NAME 5196 5197 -- N_Iterator_Specification 5198 -- Sloc points to defining identifier 5199 -- Defining_Identifier (Node1) 5200 -- Name (Node2) 5201 -- Reverse_Present (Flag15) 5202 -- Of_Present (Flag16) 5203 -- Subtype_Indication (Node5) 5204 5205 -- Note: The Of_Present flag distinguishes the two forms 5206 5207 -------------------------- 5208 -- 5.6 Block Statement -- 5209 -------------------------- 5210 5211 -- BLOCK_STATEMENT ::= 5212 -- [block_STATEMENT_IDENTIFIER:] 5213 -- [declare 5214 -- DECLARATIVE_PART] 5215 -- begin 5216 -- HANDLED_SEQUENCE_OF_STATEMENTS 5217 -- end [block_IDENTIFIER]; 5218 5219 -- Note that the occurrence of a block identifier is not a defining 5220 -- identifier, but rather a referencing occurrence. The defining 5221 -- occurrence is an E_Block entity declared by the implicit label 5222 -- declaration which occurs in the innermost enclosing block statement 5223 -- or body; the block identifier denotes that E_Block. 5224 5225 -- For block statements that come from source code, there is always a 5226 -- block statement identifier present in the tree, denoting an E_Block. 5227 -- In the case where no block identifier is given in the source, 5228 -- the parser creates a name of the form B_n, where n is a decimal 5229 -- integer, and the flag Has_Created_Identifier is set to True. Blocks 5230 -- constructed by the expander usually have no identifier, and no 5231 -- corresponding entity. 5232 5233 -- Note: the block statement created for an extended return statement 5234 -- has an entity, and this entity is an E_Return_Statement, rather than 5235 -- the usual E_Block. 5236 5237 -- Note: Exception_Junk is set for the wrapping blocks created during 5238 -- local raise optimization (Exp_Ch11.Expand_Local_Exception_Handlers). 5239 5240 -- Note: from a control flow viewpoint, a block statement defines an 5241 -- extended basic block, i.e. the entry of the block dominates every 5242 -- statement in the sequence. When generating new statements with 5243 -- exception handlers in the expander at the end of a sequence that 5244 -- comes from source code, it can be necessary to wrap them all in a 5245 -- block statement in order to expose the implicit control flow to 5246 -- gigi and thus prevent it from issuing bogus control flow warnings. 5247 5248 -- N_Block_Statement 5249 -- Sloc points to DECLARE or BEGIN 5250 -- Identifier (Node1) block direct name (set to Empty if not present) 5251 -- Declarations (List2) (set to No_List if no DECLARE part) 5252 -- Handled_Statement_Sequence (Node4) 5253 -- Activation_Chain_Entity (Node3-Sem) 5254 -- Cleanup_Actions (List5-Sem) 5255 -- Has_Created_Identifier (Flag15) 5256 -- Is_Asynchronous_Call_Block (Flag7) 5257 -- Is_Task_Allocation_Block (Flag6) 5258 -- Exception_Junk (Flag8-Sem) 5259 -- Is_Abort_Block (Flag4-Sem) 5260 -- Is_Finalization_Wrapper (Flag9-Sem) 5261 -- Is_Initialization_Block (Flag1-Sem) 5262 -- Is_Task_Master (Flag5-Sem) 5263 5264 ------------------------- 5265 -- 5.7 Exit Statement -- 5266 ------------------------- 5267 5268 -- EXIT_STATEMENT ::= exit [loop_NAME] [when CONDITION]; 5269 5270 -- Gigi restriction: The expander ensures that the type of the Condition 5271 -- field is always Standard.Boolean, even if the type in the source is 5272 -- some non-standard boolean type. 5273 5274 -- N_Exit_Statement 5275 -- Sloc points to EXIT 5276 -- Name (Node2) (set to Empty if no loop name present) 5277 -- Condition (Node1) (set to Empty if no WHEN part present) 5278 -- Next_Exit_Statement (Node3-Sem): Next exit on chain 5279 5280 ------------------------- 5281 -- 5.9 Goto Statement -- 5282 ------------------------- 5283 5284 -- GOTO_STATEMENT ::= goto label_NAME; 5285 5286 -- N_Goto_Statement 5287 -- Sloc points to GOTO 5288 -- Name (Node2) 5289 -- Exception_Junk (Flag8-Sem) 5290 5291 --------------------------------- 5292 -- 6.1 Subprogram Declaration -- 5293 --------------------------------- 5294 5295 -- SUBPROGRAM_DECLARATION ::= 5296 -- SUBPROGRAM_SPECIFICATION 5297 -- [ASPECT_SPECIFICATIONS]; 5298 5299 -- N_Subprogram_Declaration 5300 -- Sloc points to FUNCTION or PROCEDURE 5301 -- Specification (Node1) 5302 -- Body_To_Inline (Node3-Sem) 5303 -- Corresponding_Body (Node5-Sem) 5304 -- Parent_Spec (Node4-Sem) 5305 -- Is_Entry_Barrier_Function (Flag8-Sem) 5306 -- Is_Task_Body_Procedure (Flag1-Sem) 5307 5308 ------------------------------------------ 5309 -- 6.1 Abstract Subprogram Declaration -- 5310 ------------------------------------------ 5311 5312 -- ABSTRACT_SUBPROGRAM_DECLARATION ::= 5313 -- SUBPROGRAM_SPECIFICATION is abstract 5314 -- [ASPECT_SPECIFICATIONS]; 5315 5316 -- N_Abstract_Subprogram_Declaration 5317 -- Sloc points to ABSTRACT 5318 -- Specification (Node1) 5319 5320 ----------------------------------- 5321 -- 6.1 Subprogram Specification -- 5322 ----------------------------------- 5323 5324 -- SUBPROGRAM_SPECIFICATION ::= 5325 -- [[not] overriding] 5326 -- procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE 5327 -- | [[not] overriding] 5328 -- function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE 5329 5330 -- Note: there are no separate nodes for the profiles, instead the 5331 -- information appears directly in the following nodes. 5332 5333 -- N_Function_Specification 5334 -- Sloc points to FUNCTION 5335 -- Defining_Unit_Name (Node1) (the designator) 5336 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5337 -- Null_Exclusion_Present (Flag11) 5338 -- Result_Definition (Node4) for result subtype 5339 -- Generic_Parent (Node5-Sem) 5340 -- Must_Override (Flag14) set if overriding indicator present 5341 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5342 5343 -- N_Procedure_Specification 5344 -- Sloc points to PROCEDURE 5345 -- Defining_Unit_Name (Node1) 5346 -- Null_Statement (Node2-Sem) NULL statement for body, if Null_Present 5347 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5348 -- Generic_Parent (Node5-Sem) 5349 -- Null_Present (Flag13) set for null procedure case (Ada 2005 feature) 5350 -- Must_Override (Flag14) set if overriding indicator present 5351 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5352 5353 -- Note: overriding indicator is an Ada 2005 feature 5354 5355 --------------------- 5356 -- 6.1 Designator -- 5357 --------------------- 5358 5359 -- DESIGNATOR ::= 5360 -- [PARENT_UNIT_NAME .] IDENTIFIER | OPERATOR_SYMBOL 5361 5362 -- Designators that are simply identifiers or operator symbols appear 5363 -- directly in the tree in this form. The following node is used only 5364 -- in the case where the designator has a parent unit name component. 5365 5366 -- N_Designator 5367 -- Sloc points to period 5368 -- Name (Node2) holds the parent unit name 5369 -- Identifier (Node1) 5370 5371 -- Note: Name is always non-Empty, since this node is only used for the 5372 -- case where a parent library unit package name is present. 5373 5374 -- Note that the identifier can also be an operator symbol here 5375 5376 ------------------------------ 5377 -- 6.1 Defining Designator -- 5378 ------------------------------ 5379 5380 -- DEFINING_DESIGNATOR ::= 5381 -- DEFINING_PROGRAM_UNIT_NAME | DEFINING_OPERATOR_SYMBOL 5382 5383 ------------------------------------- 5384 -- 6.1 Defining Program Unit Name -- 5385 ------------------------------------- 5386 5387 -- DEFINING_PROGRAM_UNIT_NAME ::= 5388 -- [PARENT_UNIT_NAME .] DEFINING_IDENTIFIER 5389 5390 -- The parent unit name is present only in the case of a child unit name 5391 -- (permissible only for Ada 95 for a library level unit, i.e. a unit 5392 -- at scope level one). If no such name is present, the defining program 5393 -- unit name is represented simply as the defining identifier. In the 5394 -- child unit case, the following node is used to represent the child 5395 -- unit name. 5396 5397 -- N_Defining_Program_Unit_Name 5398 -- Sloc points to period 5399 -- Name (Node2) holds the parent unit name 5400 -- Defining_Identifier (Node1) 5401 5402 -- Note: Name is always non-Empty, since this node is only used for the 5403 -- case where a parent unit name is present. 5404 5405 -------------------------- 5406 -- 6.1 Operator Symbol -- 5407 -------------------------- 5408 5409 -- OPERATOR_SYMBOL ::= STRING_LITERAL 5410 5411 -- Note: the fields of the N_Operator_Symbol node are laid out to match 5412 -- the corresponding fields of an N_Character_Literal node. This allows 5413 -- easy conversion of the operator symbol node into a character literal 5414 -- node in the case where a string constant of the form of an operator 5415 -- symbol is scanned out as such, but turns out semantically to be a 5416 -- string literal that is not an operator. For details see Sinfo.CN. 5417 -- Change_Operator_Symbol_To_String_Literal. 5418 5419 -- N_Operator_Symbol 5420 -- Sloc points to literal 5421 -- Chars (Name1) contains the Name_Id for the operator symbol 5422 -- Strval (Str3) Id of string value. This is used if the operator 5423 -- symbol turns out to be a normal string after all. 5424 -- Entity (Node4-Sem) 5425 -- Associated_Node (Node4-Sem) 5426 -- Etype (Node5-Sem) 5427 -- Has_Private_View (Flag11-Sem) set in generic units 5428 5429 -- Note: the Strval field may be set to No_String for generated 5430 -- operator symbols that are known not to be string literals 5431 -- semantically. 5432 5433 ----------------------------------- 5434 -- 6.1 Defining Operator Symbol -- 5435 ----------------------------------- 5436 5437 -- DEFINING_OPERATOR_SYMBOL ::= OPERATOR_SYMBOL 5438 5439 -- A defining operator symbol is an entity, which has additional 5440 -- fields depending on the setting of the Ekind field. These 5441 -- additional fields are defined (and access subprograms declared) 5442 -- in package Einfo. 5443 5444 -- Note: N_Defining_Operator_Symbol is an extended node whose fields 5445 -- are deliberately layed out to match the layout of fields in an 5446 -- ordinary N_Operator_Symbol node allowing for easy alteration of 5447 -- an operator symbol node into a defining operator symbol node. 5448 -- See Sinfo.CN.Change_Operator_Symbol_To_Defining_Operator_Symbol 5449 -- for further details. 5450 5451 -- N_Defining_Operator_Symbol 5452 -- Sloc points to literal 5453 -- Chars (Name1) contains the Name_Id for the operator symbol 5454 -- Next_Entity (Node2-Sem) 5455 -- Scope (Node3-Sem) 5456 -- Etype (Node5-Sem) 5457 5458 ---------------------------- 5459 -- 6.1 Parameter Profile -- 5460 ---------------------------- 5461 5462 -- PARAMETER_PROFILE ::= [FORMAL_PART] 5463 5464 --------------------------------------- 5465 -- 6.1 Parameter and Result Profile -- 5466 --------------------------------------- 5467 5468 -- PARAMETER_AND_RESULT_PROFILE ::= 5469 -- [FORMAL_PART] return [NULL_EXCLUSION] SUBTYPE_MARK 5470 -- | [FORMAL_PART] return ACCESS_DEFINITION 5471 5472 -- There is no explicit node in the tree for a parameter and result 5473 -- profile. Instead the information appears directly in the parent. 5474 5475 ---------------------- 5476 -- 6.1 Formal Part -- 5477 ---------------------- 5478 5479 -- FORMAL_PART ::= 5480 -- (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION}) 5481 5482 ---------------------------------- 5483 -- 6.1 Parameter Specification -- 5484 ---------------------------------- 5485 5486 -- PARAMETER_SPECIFICATION ::= 5487 -- DEFINING_IDENTIFIER_LIST : [ALIASED] MODE [NULL_EXCLUSION] 5488 -- SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 5489 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 5490 -- [:= DEFAULT_EXPRESSION] 5491 5492 -- Although the syntax allows multiple identifiers in the list, the 5493 -- semantics is as though successive specifications were given with 5494 -- identical type definition and expression components. To simplify 5495 -- semantic processing, the parser represents a multiple declaration 5496 -- case as a sequence of single Specifications, using the More_Ids and 5497 -- Prev_Ids flags to preserve the original source form as described 5498 -- in the section on "Handling of Defining Identifier Lists". 5499 5500 -- ALIASED can only be present in Ada 2012 mode 5501 5502 -- N_Parameter_Specification 5503 -- Sloc points to first identifier 5504 -- Defining_Identifier (Node1) 5505 -- Aliased_Present (Flag4) 5506 -- In_Present (Flag15) 5507 -- Out_Present (Flag17) 5508 -- Null_Exclusion_Present (Flag11) 5509 -- Parameter_Type (Node2) subtype mark or access definition 5510 -- Expression (Node3) (set to Empty if no default expression present) 5511 -- Do_Accessibility_Check (Flag13-Sem) 5512 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5513 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5514 -- Default_Expression (Node5-Sem) 5515 5516 --------------- 5517 -- 6.1 Mode -- 5518 --------------- 5519 5520 -- MODE ::= [in] | in out | out 5521 5522 -- There is no explicit node in the tree for the Mode. Instead the 5523 -- In_Present and Out_Present flags are set in the parent node to 5524 -- record the presence of keywords specifying the mode. 5525 5526 -------------------------- 5527 -- 6.3 Subprogram Body -- 5528 -------------------------- 5529 5530 -- SUBPROGRAM_BODY ::= 5531 -- SUBPROGRAM_SPECIFICATION [ASPECT_SPECIFICATIONS] is 5532 -- DECLARATIVE_PART 5533 -- begin 5534 -- HANDLED_SEQUENCE_OF_STATEMENTS 5535 -- end [DESIGNATOR]; 5536 5537 -- N_Subprogram_Body 5538 -- Sloc points to FUNCTION or PROCEDURE 5539 -- Specification (Node1) 5540 -- Declarations (List2) 5541 -- Handled_Statement_Sequence (Node4) 5542 -- Activation_Chain_Entity (Node3-Sem) 5543 -- Corresponding_Spec (Node5-Sem) 5544 -- Acts_As_Spec (Flag4-Sem) 5545 -- Bad_Is_Detected (Flag15) used only by parser 5546 -- Do_Storage_Check (Flag17-Sem) 5547 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 5548 -- Is_Entry_Barrier_Function (Flag8-Sem) 5549 -- Is_Protected_Subprogram_Body (Flag7-Sem) 5550 -- Is_Task_Body_Procedure (Flag1-Sem) 5551 -- Is_Task_Master (Flag5-Sem) 5552 -- Was_Attribute_Reference (Flag2-Sem) 5553 -- Was_Expression_Function (Flag18-Sem) 5554 -- Was_Originally_Stub (Flag13-Sem) 5555 5556 ----------------------------------- 5557 -- 6.4 Procedure Call Statement -- 5558 ----------------------------------- 5559 5560 -- PROCEDURE_CALL_STATEMENT ::= 5561 -- procedure_NAME; | procedure_PREFIX ACTUAL_PARAMETER_PART; 5562 5563 -- Note: the reason that a procedure call has expression fields is that 5564 -- it semantically resembles an expression, e.g. overloading is allowed 5565 -- and a type is concocted for semantic processing purposes. Certain of 5566 -- these fields, such as Parens are not relevant, but it is easier to 5567 -- just supply all of them together. 5568 5569 -- N_Procedure_Call_Statement 5570 -- Sloc points to first token of name or prefix 5571 -- Name (Node2) stores name or prefix 5572 -- Parameter_Associations (List3) (set to No_List if no 5573 -- actual parameter part) 5574 -- First_Named_Actual (Node4-Sem) 5575 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5576 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 5577 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 5578 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 5579 -- No_Elaboration_Check (Flag4-Sem) 5580 -- Do_Tag_Check (Flag13-Sem) 5581 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 5582 -- plus fields for expression 5583 5584 -- If any IN parameter requires a range check, then the corresponding 5585 -- argument expression has the Do_Range_Check flag set, and the range 5586 -- check is done against the formal type. Note that this argument 5587 -- expression may appear directly in the Parameter_Associations list, 5588 -- or may be a descendant of an N_Parameter_Association node that 5589 -- appears in this list. 5590 5591 ------------------------ 5592 -- 6.4 Function Call -- 5593 ------------------------ 5594 5595 -- FUNCTION_CALL ::= 5596 -- function_NAME | function_PREFIX ACTUAL_PARAMETER_PART 5597 5598 -- Note: the parser may generate an indexed component node or simply 5599 -- a name node instead of a function call node. The semantic pass must 5600 -- correct this misidentification. 5601 5602 -- N_Function_Call 5603 -- Sloc points to first token of name or prefix 5604 -- Name (Node2) stores name or prefix 5605 -- Parameter_Associations (List3) (set to No_List if no 5606 -- actual parameter part) 5607 -- First_Named_Actual (Node4-Sem) 5608 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5609 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 5610 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 5611 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 5612 -- No_Elaboration_Check (Flag4-Sem) 5613 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 5614 -- Do_Tag_Check (Flag13-Sem) 5615 -- No_Side_Effect_Removal (Flag17-Sem) 5616 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 5617 -- plus fields for expression 5618 5619 -------------------------------- 5620 -- 6.4 Actual Parameter Part -- 5621 -------------------------------- 5622 5623 -- ACTUAL_PARAMETER_PART ::= 5624 -- (PARAMETER_ASSOCIATION {,PARAMETER_ASSOCIATION}) 5625 5626 -------------------------------- 5627 -- 6.4 Parameter Association -- 5628 -------------------------------- 5629 5630 -- PARAMETER_ASSOCIATION ::= 5631 -- [formal_parameter_SELECTOR_NAME =>] EXPLICIT_ACTUAL_PARAMETER 5632 5633 -- Note: the N_Parameter_Association node is built only if a formal 5634 -- parameter selector name is present, otherwise the parameter 5635 -- association appears in the tree simply as the node for the 5636 -- explicit actual parameter. 5637 5638 -- N_Parameter_Association 5639 -- Sloc points to formal parameter 5640 -- Selector_Name (Node2) (always non-Empty) 5641 -- Explicit_Actual_Parameter (Node3) 5642 -- Next_Named_Actual (Node4-Sem) 5643 -- Is_Accessibility_Actual (Flag13-Sem) 5644 5645 --------------------------- 5646 -- 6.4 Actual Parameter -- 5647 --------------------------- 5648 5649 -- EXPLICIT_ACTUAL_PARAMETER ::= 5650 -- EXPRESSION | variable_NAME | REDUCTION_EXPRESSION_PARAMETER 5651 5652 ------------------------------------------ 5653 -- 6.4.6 Reduction_Expression_Parameter -- 5654 ------------------------------------------ 5655 5656 -- REDUCTION_EXPRESSION_PARAMETER ::= <> | < EXPRESSION > 5657 5658 -- N_Reduction_Expression_Parameter 5659 -- Expression (Node3) (Set to Empty if no expression present) 5660 -- plus fields for expression 5661 5662 --------------------------- 5663 -- 6.5 Return Statement -- 5664 --------------------------- 5665 5666 -- SIMPLE_RETURN_STATEMENT ::= return [EXPRESSION]; 5667 5668 -- EXTENDED_RETURN_STATEMENT ::= 5669 -- return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5670 -- [:= EXPRESSION] [do 5671 -- HANDLED_SEQUENCE_OF_STATEMENTS 5672 -- end return]; 5673 5674 -- RETURN_SUBTYPE_INDICATION ::= SUBTYPE_INDICATION | ACCESS_DEFINITION 5675 5676 -- The term "return statement" is defined in 6.5 to mean either a 5677 -- SIMPLE_RETURN_STATEMENT or an EXTENDED_RETURN_STATEMENT. We avoid 5678 -- the use of this term, since it used to mean someting else in earlier 5679 -- versions of Ada. 5680 5681 -- N_Simple_Return_Statement 5682 -- Sloc points to RETURN 5683 -- Return_Statement_Entity (Node5-Sem) 5684 -- Expression (Node3) (set to Empty if no expression present) 5685 -- Storage_Pool (Node1-Sem) 5686 -- Procedure_To_Call (Node2-Sem) 5687 -- Do_Tag_Check (Flag13-Sem) 5688 -- By_Ref (Flag5-Sem) 5689 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 5690 5691 -- Note: Return_Statement_Entity points to an E_Return_Statement 5692 5693 -- If a range check is required, then Do_Range_Check is set on the 5694 -- Expression. The check is against the return subtype of the function. 5695 5696 -- N_Extended_Return_Statement 5697 -- Sloc points to RETURN 5698 -- Return_Statement_Entity (Node5-Sem) 5699 -- Return_Object_Declarations (List3) 5700 -- Handled_Statement_Sequence (Node4) (set to Empty if not present) 5701 -- Storage_Pool (Node1-Sem) 5702 -- Procedure_To_Call (Node2-Sem) 5703 -- Do_Tag_Check (Flag13-Sem) 5704 -- By_Ref (Flag5-Sem) 5705 5706 -- Note: Return_Statement_Entity points to an E_Return_Statement. 5707 5708 -- Note that Return_Object_Declarations is a list containing the 5709 -- N_Object_Declaration -- see comment on this field above. 5710 5711 -- The declared object will have Is_Return_Object = True. 5712 5713 -- There is no such syntactic category as return_object_declaration 5714 -- in the RM. Return_Object_Declarations represents this portion of 5715 -- the syntax for EXTENDED_RETURN_STATEMENT: 5716 -- DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5717 -- [:= EXPRESSION] 5718 5719 -- There are two entities associated with an extended_return_statement: 5720 -- the Return_Statement_Entity represents the statement itself, 5721 -- and the Defining_Identifier of the Object_Declaration in 5722 -- Return_Object_Declarations represents the object being 5723 -- returned. N_Simple_Return_Statement has only the former. 5724 5725 ------------------------------ 5726 -- 6.8 Expression Function -- 5727 ------------------------------ 5728 5729 -- EXPRESSION_FUNCTION ::= 5730 -- FUNCTION SPECIFICATION IS (EXPRESSION) 5731 -- [ASPECT_SPECIFICATIONS]; 5732 5733 -- N_Expression_Function 5734 -- Sloc points to FUNCTION 5735 -- Specification (Node1) 5736 -- Expression (Node3) 5737 -- Corresponding_Spec (Node5-Sem) 5738 5739 ------------------------------ 5740 -- 7.1 Package Declaration -- 5741 ------------------------------ 5742 5743 -- PACKAGE_DECLARATION ::= 5744 -- PACKAGE_SPECIFICATION; 5745 5746 -- Note: the activation chain entity for a package spec is used for 5747 -- all tasks declared in the package spec, or in the package body. 5748 5749 -- N_Package_Declaration 5750 -- Sloc points to PACKAGE 5751 -- Specification (Node1) 5752 -- Corresponding_Body (Node5-Sem) 5753 -- Parent_Spec (Node4-Sem) 5754 -- Activation_Chain_Entity (Node3-Sem) 5755 5756 -------------------------------- 5757 -- 7.1 Package Specification -- 5758 -------------------------------- 5759 5760 -- PACKAGE_SPECIFICATION ::= 5761 -- package DEFINING_PROGRAM_UNIT_NAME 5762 -- [ASPECT_SPECIFICATIONS] 5763 -- is 5764 -- {BASIC_DECLARATIVE_ITEM} 5765 -- [private 5766 -- {BASIC_DECLARATIVE_ITEM}] 5767 -- end [[PARENT_UNIT_NAME .] IDENTIFIER] 5768 5769 -- N_Package_Specification 5770 -- Sloc points to PACKAGE 5771 -- Defining_Unit_Name (Node1) 5772 -- Visible_Declarations (List2) 5773 -- Private_Declarations (List3) (set to No_List if no private 5774 -- part present) 5775 -- End_Label (Node4) 5776 -- Generic_Parent (Node5-Sem) 5777 -- Limited_View_Installed (Flag18-Sem) 5778 5779 ----------------------- 5780 -- 7.1 Package Body -- 5781 ----------------------- 5782 5783 -- PACKAGE_BODY ::= 5784 -- package body DEFINING_PROGRAM_UNIT_NAME 5785 -- [ASPECT_SPECIFICATIONS] 5786 -- is 5787 -- DECLARATIVE_PART 5788 -- [begin 5789 -- HANDLED_SEQUENCE_OF_STATEMENTS] 5790 -- end [[PARENT_UNIT_NAME .] IDENTIFIER]; 5791 5792 -- N_Package_Body 5793 -- Sloc points to PACKAGE 5794 -- Defining_Unit_Name (Node1) 5795 -- Declarations (List2) 5796 -- Handled_Statement_Sequence (Node4) (set to Empty if no HSS present) 5797 -- Corresponding_Spec (Node5-Sem) 5798 -- Was_Originally_Stub (Flag13-Sem) 5799 5800 -- Note: if a source level package does not contain a handled sequence 5801 -- of statements, then the parser supplies a dummy one with a null 5802 -- sequence of statements. Comes_From_Source will be False in this 5803 -- constructed sequence. The reason we need this is for the End_Label 5804 -- field in the HSS. 5805 5806 ----------------------------------- 5807 -- 7.4 Private Type Declaration -- 5808 ----------------------------------- 5809 5810 -- PRIVATE_TYPE_DECLARATION ::= 5811 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 5812 -- is [[abstract] tagged] [limited] private 5813 -- [ASPECT_SPECIFICATIONS]; 5814 5815 -- Note: TAGGED is not permitted in Ada 83 mode 5816 5817 -- N_Private_Type_Declaration 5818 -- Sloc points to TYPE 5819 -- Defining_Identifier (Node1) 5820 -- Discriminant_Specifications (List4) (set to No_List if no 5821 -- discriminant part) 5822 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5823 -- Abstract_Present (Flag4) 5824 -- Tagged_Present (Flag15) 5825 -- Limited_Present (Flag17) 5826 5827 ---------------------------------------- 5828 -- 7.4 Private Extension Declaration -- 5829 ---------------------------------------- 5830 5831 -- PRIVATE_EXTENSION_DECLARATION ::= 5832 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is 5833 -- [abstract] [limited | synchronized] 5834 -- new ancestor_SUBTYPE_INDICATION [and INTERFACE_LIST] 5835 -- with private [ASPECT_SPECIFICATIONS]; 5836 5837 -- Note: LIMITED, and private extension declarations are not allowed 5838 -- in Ada 83 mode. 5839 5840 -- N_Private_Extension_Declaration 5841 -- Sloc points to TYPE 5842 -- Defining_Identifier (Node1) 5843 -- Uninitialized_Variable (Node3-Sem) 5844 -- Discriminant_Specifications (List4) (set to No_List if no 5845 -- discriminant part) 5846 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5847 -- Abstract_Present (Flag4) 5848 -- Limited_Present (Flag17) 5849 -- Synchronized_Present (Flag7) 5850 -- Subtype_Indication (Node5) 5851 -- Interface_List (List2) (set to No_List if none) 5852 5853 --------------------- 5854 -- 8.4 Use Clause -- 5855 --------------------- 5856 5857 -- USE_CLAUSE ::= USE_PACKAGE_CLAUSE | USE_TYPE_CLAUSE 5858 5859 ----------------------------- 5860 -- 8.4 Use Package Clause -- 5861 ----------------------------- 5862 5863 -- USE_PACKAGE_CLAUSE ::= use package_NAME {, package_NAME}; 5864 5865 -- N_Use_Package_Clause 5866 -- Sloc points to USE 5867 -- Prev_Use_Clause (Node1-Sem) 5868 -- Name (Node2) 5869 -- Next_Use_Clause (Node3-Sem) 5870 -- Associated_Node (Node4-Sem) 5871 -- Hidden_By_Use_Clause (Elist5-Sem) 5872 -- Is_Effective_Use_Clause (Flag1) 5873 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5874 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5875 5876 -------------------------- 5877 -- 8.4 Use Type Clause -- 5878 -------------------------- 5879 5880 -- USE_TYPE_CLAUSE ::= use [ALL] type SUBTYPE_MARK {, SUBTYPE_MARK}; 5881 5882 -- Note: use type clause is not permitted in Ada 83 mode 5883 5884 -- Note: the ALL keyword can appear only in Ada 2012 mode 5885 5886 -- N_Use_Type_Clause 5887 -- Sloc points to USE 5888 -- Prev_Use_Clause (Node1-Sem) 5889 -- Used_Operations (Elist2-Sem) 5890 -- Next_Use_Clause (Node3-Sem) 5891 -- Subtype_Mark (Node4) 5892 -- Hidden_By_Use_Clause (Elist5-Sem) 5893 -- Is_Effective_Use_Clause (Flag1) 5894 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5895 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5896 -- All_Present (Flag15) 5897 5898 ------------------------------- 5899 -- 8.5 Renaming Declaration -- 5900 ------------------------------- 5901 5902 -- RENAMING_DECLARATION ::= 5903 -- OBJECT_RENAMING_DECLARATION 5904 -- | EXCEPTION_RENAMING_DECLARATION 5905 -- | PACKAGE_RENAMING_DECLARATION 5906 -- | SUBPROGRAM_RENAMING_DECLARATION 5907 -- | GENERIC_RENAMING_DECLARATION 5908 5909 -------------------------------------- 5910 -- 8.5 Object Renaming Declaration -- 5911 -------------------------------------- 5912 5913 -- OBJECT_RENAMING_DECLARATION ::= 5914 -- DEFINING_IDENTIFIER : 5915 -- [NULL_EXCLUSION] SUBTYPE_MARK renames object_NAME 5916 -- [ASPECT_SPECIFICATIONS]; 5917 -- | DEFINING_IDENTIFIER : 5918 -- ACCESS_DEFINITION renames object_NAME 5919 -- [ASPECT_SPECIFICATIONS]; 5920 5921 -- Note: Access_Definition is an optional field that gives support to 5922 -- Ada 2005 (AI-230). The parser generates nodes that have either the 5923 -- Subtype_Indication field or else the Access_Definition field. 5924 5925 -- N_Object_Renaming_Declaration 5926 -- Sloc points to first identifier 5927 -- Defining_Identifier (Node1) 5928 -- Null_Exclusion_Present (Flag11) (set to False if not present) 5929 -- Subtype_Mark (Node4) (set to Empty if not present) 5930 -- Access_Definition (Node3) (set to Empty if not present) 5931 -- Name (Node2) 5932 -- Corresponding_Generic_Association (Node5-Sem) 5933 5934 ----------------------------------------- 5935 -- 8.5 Exception Renaming Declaration -- 5936 ----------------------------------------- 5937 5938 -- EXCEPTION_RENAMING_DECLARATION ::= 5939 -- DEFINING_IDENTIFIER : exception renames exception_NAME 5940 -- [ASPECT_SPECIFICATIONS]; 5941 5942 -- N_Exception_Renaming_Declaration 5943 -- Sloc points to first identifier 5944 -- Defining_Identifier (Node1) 5945 -- Name (Node2) 5946 5947 --------------------------------------- 5948 -- 8.5 Package Renaming Declaration -- 5949 --------------------------------------- 5950 5951 -- PACKAGE_RENAMING_DECLARATION ::= 5952 -- package DEFINING_PROGRAM_UNIT_NAME renames package_NAME 5953 -- [ASPECT_SPECIFICATIONS]; 5954 5955 -- N_Package_Renaming_Declaration 5956 -- Sloc points to PACKAGE 5957 -- Defining_Unit_Name (Node1) 5958 -- Name (Node2) 5959 -- Parent_Spec (Node4-Sem) 5960 5961 ------------------------------------------ 5962 -- 8.5 Subprogram Renaming Declaration -- 5963 ------------------------------------------ 5964 5965 -- SUBPROGRAM_RENAMING_DECLARATION ::= 5966 -- SUBPROGRAM_SPECIFICATION renames callable_entity_NAME 5967 -- [ASPECT_SPECIFICATIONS]; 5968 5969 -- N_Subprogram_Renaming_Declaration 5970 -- Sloc points to RENAMES 5971 -- Specification (Node1) 5972 -- Name (Node2) 5973 -- Parent_Spec (Node4-Sem) 5974 -- Corresponding_Spec (Node5-Sem) 5975 -- Corresponding_Formal_Spec (Node3-Sem) 5976 -- From_Default (Flag6-Sem) 5977 5978 ----------------------------------------- 5979 -- 8.5.5 Generic Renaming Declaration -- 5980 ----------------------------------------- 5981 5982 -- GENERIC_RENAMING_DECLARATION ::= 5983 -- generic package DEFINING_PROGRAM_UNIT_NAME 5984 -- renames generic_package_NAME 5985 -- [ASPECT_SPECIFICATIONS]; 5986 -- | generic procedure DEFINING_PROGRAM_UNIT_NAME 5987 -- renames generic_procedure_NAME 5988 -- [ASPECT_SPECIFICATIONS]; 5989 -- | generic function DEFINING_PROGRAM_UNIT_NAME 5990 -- renames generic_function_NAME 5991 -- [ASPECT_SPECIFICATIONS]; 5992 5993 -- N_Generic_Package_Renaming_Declaration 5994 -- Sloc points to GENERIC 5995 -- Defining_Unit_Name (Node1) 5996 -- Name (Node2) 5997 -- Parent_Spec (Node4-Sem) 5998 5999 -- N_Generic_Procedure_Renaming_Declaration 6000 -- Sloc points to GENERIC 6001 -- Defining_Unit_Name (Node1) 6002 -- Name (Node2) 6003 -- Parent_Spec (Node4-Sem) 6004 6005 -- N_Generic_Function_Renaming_Declaration 6006 -- Sloc points to GENERIC 6007 -- Defining_Unit_Name (Node1) 6008 -- Name (Node2) 6009 -- Parent_Spec (Node4-Sem) 6010 6011 -------------------------------- 6012 -- 9.1 Task Type Declaration -- 6013 -------------------------------- 6014 6015 -- TASK_TYPE_DECLARATION ::= 6016 -- task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 6017 -- [ASPECT_SPECIFICATIONS] 6018 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 6019 6020 -- N_Task_Type_Declaration 6021 -- Sloc points to TASK 6022 -- Defining_Identifier (Node1) 6023 -- Discriminant_Specifications (List4) (set to No_List if no 6024 -- discriminant part) 6025 -- Interface_List (List2) (set to No_List if none) 6026 -- Task_Definition (Node3) (set to Empty if not present) 6027 -- Corresponding_Body (Node5-Sem) 6028 6029 ---------------------------------- 6030 -- 9.1 Single Task Declaration -- 6031 ---------------------------------- 6032 6033 -- SINGLE_TASK_DECLARATION ::= 6034 -- task DEFINING_IDENTIFIER 6035 -- [ASPECT_SPECIFICATIONS] 6036 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 6037 6038 -- N_Single_Task_Declaration 6039 -- Sloc points to TASK 6040 -- Defining_Identifier (Node1) 6041 -- Interface_List (List2) (set to No_List if none) 6042 -- Task_Definition (Node3) (set to Empty if not present) 6043 6044 -------------------------- 6045 -- 9.1 Task Definition -- 6046 -------------------------- 6047 6048 -- TASK_DEFINITION ::= 6049 -- {TASK_ITEM} 6050 -- [private 6051 -- {TASK_ITEM}] 6052 -- end [task_IDENTIFIER] 6053 6054 -- Note: as a result of semantic analysis, the list of task items can 6055 -- include implicit type declarations resulting from entry families. 6056 6057 -- N_Task_Definition 6058 -- Sloc points to first token of task definition 6059 -- Visible_Declarations (List2) 6060 -- Private_Declarations (List3) (set to No_List if no private part) 6061 -- End_Label (Node4) 6062 -- Has_Storage_Size_Pragma (Flag5-Sem) 6063 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 6064 6065 -------------------- 6066 -- 9.1 Task Item -- 6067 -------------------- 6068 6069 -- TASK_ITEM ::= ENTRY_DECLARATION | REPRESENTATION_CLAUSE 6070 6071 -------------------- 6072 -- 9.1 Task Body -- 6073 -------------------- 6074 6075 -- TASK_BODY ::= 6076 -- task body task_DEFINING_IDENTIFIER 6077 -- [ASPECT_SPECIFICATIONS] 6078 -- is 6079 -- DECLARATIVE_PART 6080 -- begin 6081 -- HANDLED_SEQUENCE_OF_STATEMENTS 6082 -- end [task_IDENTIFIER]; 6083 6084 -- Gigi restriction: This node never appears 6085 6086 -- N_Task_Body 6087 -- Sloc points to TASK 6088 -- Defining_Identifier (Node1) 6089 -- Declarations (List2) 6090 -- Handled_Statement_Sequence (Node4) 6091 -- Is_Task_Master (Flag5-Sem) 6092 -- Activation_Chain_Entity (Node3-Sem) 6093 -- Corresponding_Spec (Node5-Sem) 6094 -- Was_Originally_Stub (Flag13-Sem) 6095 6096 ------------------------------------- 6097 -- 9.4 Protected Type Declaration -- 6098 ------------------------------------- 6099 6100 -- PROTECTED_TYPE_DECLARATION ::= 6101 -- protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 6102 -- [ASPECT_SPECIFICATIONS] 6103 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 6104 6105 -- Note: protected type declarations are not permitted in Ada 83 mode 6106 6107 -- N_Protected_Type_Declaration 6108 -- Sloc points to PROTECTED 6109 -- Defining_Identifier (Node1) 6110 -- Discriminant_Specifications (List4) (set to No_List if no 6111 -- discriminant part) 6112 -- Interface_List (List2) (set to No_List if none) 6113 -- Protected_Definition (Node3) 6114 -- Corresponding_Body (Node5-Sem) 6115 6116 --------------------------------------- 6117 -- 9.4 Single Protected Declaration -- 6118 --------------------------------------- 6119 6120 -- SINGLE_PROTECTED_DECLARATION ::= 6121 -- protected DEFINING_IDENTIFIER 6122 -- [ASPECT_SPECIFICATIONS] 6123 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 6124 6125 -- Note: single protected declarations are not allowed in Ada 83 mode 6126 6127 -- N_Single_Protected_Declaration 6128 -- Sloc points to PROTECTED 6129 -- Defining_Identifier (Node1) 6130 -- Interface_List (List2) (set to No_List if none) 6131 -- Protected_Definition (Node3) 6132 6133 ------------------------------- 6134 -- 9.4 Protected Definition -- 6135 ------------------------------- 6136 6137 -- PROTECTED_DEFINITION ::= 6138 -- {PROTECTED_OPERATION_DECLARATION} 6139 -- [private 6140 -- {PROTECTED_ELEMENT_DECLARATION}] 6141 -- end [protected_IDENTIFIER] 6142 6143 -- N_Protected_Definition 6144 -- Sloc points to first token of protected definition 6145 -- Visible_Declarations (List2) 6146 -- Private_Declarations (List3) (set to No_List if no private part) 6147 -- End_Label (Node4) 6148 6149 ------------------------------------------ 6150 -- 9.4 Protected Operation Declaration -- 6151 ------------------------------------------ 6152 6153 -- PROTECTED_OPERATION_DECLARATION ::= 6154 -- SUBPROGRAM_DECLARATION 6155 -- | ENTRY_DECLARATION 6156 -- | REPRESENTATION_CLAUSE 6157 6158 ---------------------------------------- 6159 -- 9.4 Protected Element Declaration -- 6160 ---------------------------------------- 6161 6162 -- PROTECTED_ELEMENT_DECLARATION ::= 6163 -- PROTECTED_OPERATION_DECLARATION | COMPONENT_DECLARATION 6164 6165 ------------------------- 6166 -- 9.4 Protected Body -- 6167 ------------------------- 6168 6169 -- PROTECTED_BODY ::= 6170 -- protected body DEFINING_IDENTIFIER 6171 -- [ASPECT_SPECIFICATIONS]; 6172 -- is 6173 -- {PROTECTED_OPERATION_ITEM} 6174 -- end [protected_IDENTIFIER]; 6175 6176 -- Note: protected bodies are not allowed in Ada 83 mode 6177 6178 -- Gigi restriction: This node never appears 6179 6180 -- N_Protected_Body 6181 -- Sloc points to PROTECTED 6182 -- Defining_Identifier (Node1) 6183 -- Declarations (List2) protected operation items (and pragmas) 6184 -- End_Label (Node4) 6185 -- Corresponding_Spec (Node5-Sem) 6186 -- Was_Originally_Stub (Flag13-Sem) 6187 6188 ----------------------------------- 6189 -- 9.4 Protected Operation Item -- 6190 ----------------------------------- 6191 6192 -- PROTECTED_OPERATION_ITEM ::= 6193 -- SUBPROGRAM_DECLARATION 6194 -- | SUBPROGRAM_BODY 6195 -- | ENTRY_BODY 6196 -- | REPRESENTATION_CLAUSE 6197 6198 ------------------------------ 6199 -- 9.5.2 Entry Declaration -- 6200 ------------------------------ 6201 6202 -- ENTRY_DECLARATION ::= 6203 -- [[not] overriding] 6204 -- entry DEFINING_IDENTIFIER 6205 -- [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE 6206 -- [ASPECT_SPECIFICATIONS]; 6207 6208 -- N_Entry_Declaration 6209 -- Sloc points to ENTRY 6210 -- Defining_Identifier (Node1) 6211 -- Discrete_Subtype_Definition (Node4) (set to Empty if not present) 6212 -- Parameter_Specifications (List3) (set to No_List if no formal part) 6213 -- Corresponding_Body (Node5-Sem) 6214 -- Must_Override (Flag14) set if overriding indicator present 6215 -- Must_Not_Override (Flag15) set if not_overriding indicator present 6216 6217 -- Note: overriding indicator is an Ada 2005 feature 6218 6219 ----------------------------- 6220 -- 9.5.2 Accept statement -- 6221 ----------------------------- 6222 6223 -- ACCEPT_STATEMENT ::= 6224 -- accept entry_DIRECT_NAME 6225 -- [(ENTRY_INDEX)] PARAMETER_PROFILE [do 6226 -- HANDLED_SEQUENCE_OF_STATEMENTS 6227 -- end [entry_IDENTIFIER]]; 6228 6229 -- Gigi restriction: This node never appears 6230 6231 -- Note: there are no explicit declarations allowed in an accept 6232 -- statement. However, the implicit declarations for any statement 6233 -- identifiers (labels and block/loop identifiers) are declarations 6234 -- that belong logically to the accept statement, and that is why 6235 -- there is a Declarations field in this node. 6236 6237 -- N_Accept_Statement 6238 -- Sloc points to ACCEPT 6239 -- Entry_Direct_Name (Node1) 6240 -- Entry_Index (Node5) (set to Empty if not present) 6241 -- Parameter_Specifications (List3) (set to No_List if no formal part) 6242 -- Handled_Statement_Sequence (Node4) 6243 -- Declarations (List2) (set to No_List if no declarations) 6244 6245 ------------------------ 6246 -- 9.5.2 Entry Index -- 6247 ------------------------ 6248 6249 -- ENTRY_INDEX ::= EXPRESSION 6250 6251 ----------------------- 6252 -- 9.5.2 Entry Body -- 6253 ----------------------- 6254 6255 -- ENTRY_BODY ::= 6256 -- entry DEFINING_IDENTIFIER ENTRY_BODY_FORMAL_PART ENTRY_BARRIER is 6257 -- DECLARATIVE_PART 6258 -- begin 6259 -- HANDLED_SEQUENCE_OF_STATEMENTS 6260 -- end [entry_IDENTIFIER]; 6261 6262 -- ENTRY_BARRIER ::= when CONDITION 6263 6264 -- Note: we store the CONDITION of the ENTRY_BARRIER in the node for 6265 -- the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting 6266 -- too full (it would otherwise have too many fields) 6267 6268 -- Gigi restriction: This node never appears 6269 6270 -- N_Entry_Body 6271 -- Sloc points to ENTRY 6272 -- Defining_Identifier (Node1) 6273 -- Entry_Body_Formal_Part (Node5) 6274 -- Declarations (List2) 6275 -- Handled_Statement_Sequence (Node4) 6276 -- Activation_Chain_Entity (Node3-Sem) 6277 6278 ----------------------------------- 6279 -- 9.5.2 Entry Body Formal Part -- 6280 ----------------------------------- 6281 6282 -- ENTRY_BODY_FORMAL_PART ::= 6283 -- [(ENTRY_INDEX_SPECIFICATION)] PARAMETER_PROFILE 6284 6285 -- Note that an entry body formal part node is present even if it is 6286 -- empty. This reflects the grammar, in which it is the components of 6287 -- the entry body formal part that are optional, not the entry body 6288 -- formal part itself. Also this means that the barrier condition 6289 -- always has somewhere to be stored. 6290 6291 -- Gigi restriction: This node never appears 6292 6293 -- N_Entry_Body_Formal_Part 6294 -- Sloc points to first token 6295 -- Entry_Index_Specification (Node4) (set to Empty if not present) 6296 -- Parameter_Specifications (List3) (set to No_List if no formal part) 6297 -- Condition (Node1) from entry barrier of entry body 6298 6299 -------------------------- 6300 -- 9.5.2 Entry Barrier -- 6301 -------------------------- 6302 6303 -- ENTRY_BARRIER ::= when CONDITION 6304 6305 -------------------------------------- 6306 -- 9.5.2 Entry Index Specification -- 6307 -------------------------------------- 6308 6309 -- ENTRY_INDEX_SPECIFICATION ::= 6310 -- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION 6311 6312 -- Gigi restriction: This node never appears 6313 6314 -- N_Entry_Index_Specification 6315 -- Sloc points to FOR 6316 -- Defining_Identifier (Node1) 6317 -- Discrete_Subtype_Definition (Node4) 6318 6319 --------------------------------- 6320 -- 9.5.3 Entry Call Statement -- 6321 --------------------------------- 6322 6323 -- ENTRY_CALL_STATEMENT ::= entry_NAME [ACTUAL_PARAMETER_PART]; 6324 6325 -- The parser may generate a procedure call for this construct. The 6326 -- semantic pass must correct this misidentification where needed. 6327 6328 -- Gigi restriction: This node never appears 6329 6330 -- N_Entry_Call_Statement 6331 -- Sloc points to first token of name 6332 -- Name (Node2) 6333 -- Parameter_Associations (List3) (set to No_List if no 6334 -- actual parameter part) 6335 -- First_Named_Actual (Node4-Sem) 6336 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 6337 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 6338 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 6339 6340 ------------------------------ 6341 -- 9.5.4 Requeue Statement -- 6342 ------------------------------ 6343 6344 -- REQUEUE_STATEMENT ::= requeue entry_NAME [with abort]; 6345 6346 -- Note: requeue statements are not permitted in Ada 83 mode 6347 6348 -- Gigi restriction: This node never appears 6349 6350 -- N_Requeue_Statement 6351 -- Sloc points to REQUEUE 6352 -- Name (Node2) 6353 -- Abort_Present (Flag15) 6354 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 6355 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 6356 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 6357 6358 -------------------------- 6359 -- 9.6 Delay Statement -- 6360 -------------------------- 6361 6362 -- DELAY_STATEMENT ::= 6363 -- DELAY_UNTIL_STATEMENT 6364 -- | DELAY_RELATIVE_STATEMENT 6365 6366 -------------------------------- 6367 -- 9.6 Delay Until Statement -- 6368 -------------------------------- 6369 6370 -- DELAY_UNTIL_STATEMENT ::= delay until delay_EXPRESSION; 6371 6372 -- Note: delay until statements are not permitted in Ada 83 mode 6373 6374 -- Gigi restriction: This node never appears 6375 6376 -- N_Delay_Until_Statement 6377 -- Sloc points to DELAY 6378 -- Expression (Node3) 6379 6380 ----------------------------------- 6381 -- 9.6 Delay Relative Statement -- 6382 ----------------------------------- 6383 6384 -- DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION; 6385 6386 -- Gigi restriction: This node never appears 6387 6388 -- N_Delay_Relative_Statement 6389 -- Sloc points to DELAY 6390 -- Expression (Node3) 6391 6392 --------------------------- 6393 -- 9.7 Select Statement -- 6394 --------------------------- 6395 6396 -- SELECT_STATEMENT ::= 6397 -- SELECTIVE_ACCEPT 6398 -- | TIMED_ENTRY_CALL 6399 -- | CONDITIONAL_ENTRY_CALL 6400 -- | ASYNCHRONOUS_SELECT 6401 6402 ----------------------------- 6403 -- 9.7.1 Selective Accept -- 6404 ----------------------------- 6405 6406 -- SELECTIVE_ACCEPT ::= 6407 -- select 6408 -- [GUARD] 6409 -- SELECT_ALTERNATIVE 6410 -- {or 6411 -- [GUARD] 6412 -- SELECT_ALTERNATIVE} 6413 -- [else 6414 -- SEQUENCE_OF_STATEMENTS] 6415 -- end select; 6416 6417 -- Gigi restriction: This node never appears 6418 6419 -- Note: the guard expression, if present, appears in the node for 6420 -- the select alternative. 6421 6422 -- N_Selective_Accept 6423 -- Sloc points to SELECT 6424 -- Select_Alternatives (List1) 6425 -- Else_Statements (List4) (set to No_List if no else part) 6426 6427 ------------------ 6428 -- 9.7.1 Guard -- 6429 ------------------ 6430 6431 -- GUARD ::= when CONDITION => 6432 6433 -- As noted above, the CONDITION that is part of a GUARD is included 6434 -- in the node for the select alternative for convenience. 6435 6436 ------------------------------- 6437 -- 9.7.1 Select Alternative -- 6438 ------------------------------- 6439 6440 -- SELECT_ALTERNATIVE ::= 6441 -- ACCEPT_ALTERNATIVE 6442 -- | DELAY_ALTERNATIVE 6443 -- | TERMINATE_ALTERNATIVE 6444 6445 ------------------------------- 6446 -- 9.7.1 Accept Alternative -- 6447 ------------------------------- 6448 6449 -- ACCEPT_ALTERNATIVE ::= 6450 -- ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS] 6451 6452 -- Gigi restriction: This node never appears 6453 6454 -- N_Accept_Alternative 6455 -- Sloc points to ACCEPT 6456 -- Accept_Statement (Node2) 6457 -- Condition (Node1) from the guard (set to Empty if no guard present) 6458 -- Statements (List3) (set to Empty_List if no statements) 6459 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6460 -- Accept_Handler_Records (List5-Sem) 6461 6462 ------------------------------ 6463 -- 9.7.1 Delay Alternative -- 6464 ------------------------------ 6465 6466 -- DELAY_ALTERNATIVE ::= 6467 -- DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS] 6468 6469 -- Gigi restriction: This node never appears 6470 6471 -- N_Delay_Alternative 6472 -- Sloc points to DELAY 6473 -- Delay_Statement (Node2) 6474 -- Condition (Node1) from the guard (set to Empty if no guard present) 6475 -- Statements (List3) (set to Empty_List if no statements) 6476 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6477 6478 ---------------------------------- 6479 -- 9.7.1 Terminate Alternative -- 6480 ---------------------------------- 6481 6482 -- TERMINATE_ALTERNATIVE ::= terminate; 6483 6484 -- Gigi restriction: This node never appears 6485 6486 -- N_Terminate_Alternative 6487 -- Sloc points to TERMINATE 6488 -- Condition (Node1) from the guard (set to Empty if no guard present) 6489 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6490 -- Pragmas_After (List5) pragmas after alt (set to No_List if none) 6491 6492 ----------------------------- 6493 -- 9.7.2 Timed Entry Call -- 6494 ----------------------------- 6495 6496 -- TIMED_ENTRY_CALL ::= 6497 -- select 6498 -- ENTRY_CALL_ALTERNATIVE 6499 -- or 6500 -- DELAY_ALTERNATIVE 6501 -- end select; 6502 6503 -- Gigi restriction: This node never appears 6504 6505 -- N_Timed_Entry_Call 6506 -- Sloc points to SELECT 6507 -- Entry_Call_Alternative (Node1) 6508 -- Delay_Alternative (Node4) 6509 6510 ----------------------------------- 6511 -- 9.7.2 Entry Call Alternative -- 6512 ----------------------------------- 6513 6514 -- ENTRY_CALL_ALTERNATIVE ::= 6515 -- PROCEDURE_OR_ENTRY_CALL [SEQUENCE_OF_STATEMENTS] 6516 6517 -- PROCEDURE_OR_ENTRY_CALL ::= 6518 -- PROCEDURE_CALL_STATEMENT | ENTRY_CALL_STATEMENT 6519 6520 -- Gigi restriction: This node never appears 6521 6522 -- N_Entry_Call_Alternative 6523 -- Sloc points to first token of entry call statement 6524 -- Entry_Call_Statement (Node1) 6525 -- Statements (List3) (set to Empty_List if no statements) 6526 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6527 6528 ----------------------------------- 6529 -- 9.7.3 Conditional Entry Call -- 6530 ----------------------------------- 6531 6532 -- CONDITIONAL_ENTRY_CALL ::= 6533 -- select 6534 -- ENTRY_CALL_ALTERNATIVE 6535 -- else 6536 -- SEQUENCE_OF_STATEMENTS 6537 -- end select; 6538 6539 -- Gigi restriction: This node never appears 6540 6541 -- N_Conditional_Entry_Call 6542 -- Sloc points to SELECT 6543 -- Entry_Call_Alternative (Node1) 6544 -- Else_Statements (List4) 6545 6546 -------------------------------- 6547 -- 9.7.4 Asynchronous Select -- 6548 -------------------------------- 6549 6550 -- ASYNCHRONOUS_SELECT ::= 6551 -- select 6552 -- TRIGGERING_ALTERNATIVE 6553 -- then abort 6554 -- ABORTABLE_PART 6555 -- end select; 6556 6557 -- Note: asynchronous select is not permitted in Ada 83 mode 6558 6559 -- Gigi restriction: This node never appears 6560 6561 -- N_Asynchronous_Select 6562 -- Sloc points to SELECT 6563 -- Triggering_Alternative (Node1) 6564 -- Abortable_Part (Node2) 6565 6566 ----------------------------------- 6567 -- 9.7.4 Triggering Alternative -- 6568 ----------------------------------- 6569 6570 -- TRIGGERING_ALTERNATIVE ::= 6571 -- TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS] 6572 6573 -- Gigi restriction: This node never appears 6574 6575 -- N_Triggering_Alternative 6576 -- Sloc points to first token of triggering statement 6577 -- Triggering_Statement (Node1) 6578 -- Statements (List3) (set to Empty_List if no statements) 6579 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6580 6581 --------------------------------- 6582 -- 9.7.4 Triggering Statement -- 6583 --------------------------------- 6584 6585 -- TRIGGERING_STATEMENT ::= PROCEDURE_OR_ENTRY_CALL | DELAY_STATEMENT 6586 6587 --------------------------- 6588 -- 9.7.4 Abortable Part -- 6589 --------------------------- 6590 6591 -- ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS 6592 6593 -- Gigi restriction: This node never appears 6594 6595 -- N_Abortable_Part 6596 -- Sloc points to ABORT 6597 -- Statements (List3) 6598 6599 -------------------------- 6600 -- 9.8 Abort Statement -- 6601 -------------------------- 6602 6603 -- ABORT_STATEMENT ::= abort task_NAME {, task_NAME}; 6604 6605 -- Gigi restriction: This node never appears 6606 6607 -- N_Abort_Statement 6608 -- Sloc points to ABORT 6609 -- Names (List2) 6610 6611 ------------------------- 6612 -- 10.1.1 Compilation -- 6613 ------------------------- 6614 6615 -- COMPILATION ::= {COMPILATION_UNIT} 6616 6617 -- There is no explicit node in the tree for a compilation, since in 6618 -- general the compiler is processing only a single compilation unit 6619 -- at a time. It is possible to parse multiple units in syntax check 6620 -- only mode, but the trees are discarded in that case. 6621 6622 ------------------------------ 6623 -- 10.1.1 Compilation Unit -- 6624 ------------------------------ 6625 6626 -- COMPILATION_UNIT ::= 6627 -- CONTEXT_CLAUSE LIBRARY_ITEM 6628 -- | CONTEXT_CLAUSE SUBUNIT 6629 6630 -- The N_Compilation_Unit node itself represents the above syntax. 6631 -- However, there are two additional items not reflected in the above 6632 -- syntax. First we have the global declarations that are added by the 6633 -- code generator. These are outer level declarations (so they cannot 6634 -- be represented as being inside the units). An example is the wrapper 6635 -- subprograms that are created to do ABE checking. As always a list of 6636 -- declarations can contain actions as well (i.e. statements), and such 6637 -- statements are executed as part of the elaboration of the unit. Note 6638 -- that all such declarations are elaborated before the library unit. 6639 6640 -- Similarly, certain actions need to be elaborated at the completion 6641 -- of elaboration of the library unit (notably the statement that sets 6642 -- the Boolean flag indicating that elaboration is complete). 6643 6644 -- The third item not reflected in the syntax is pragmas that appear 6645 -- after the compilation unit. As always pragmas are a problem since 6646 -- they are not part of the formal syntax, but can be stuck into the 6647 -- source following a set of ad hoc rules, and we have to find an ad 6648 -- hoc way of sticking them into the tree. For pragmas that appear 6649 -- before the library unit, we just consider them to be part of the 6650 -- context clause, and pragmas can appear in the Context_Items list 6651 -- of the compilation unit. However, pragmas can also appear after 6652 -- the library item. 6653 6654 -- To deal with all these problems, we create an auxiliary node for 6655 -- a compilation unit, referenced from the N_Compilation_Unit node, 6656 -- that contains these items. 6657 6658 -- N_Compilation_Unit 6659 -- Sloc points to first token of defining unit name 6660 -- Library_Unit (Node4-Sem) corresponding/parent spec/body 6661 -- Context_Items (List1) context items and pragmas preceding unit 6662 -- Private_Present (Flag15) set if library unit has private keyword 6663 -- Unit (Node2) library item or subunit 6664 -- Aux_Decls_Node (Node5) points to the N_Compilation_Unit_Aux node 6665 -- Has_No_Elaboration_Code (Flag17-Sem) 6666 -- Body_Required (Flag13-Sem) set for spec if body is required 6667 -- Acts_As_Spec (Flag4-Sem) flag for subprogram body with no spec 6668 -- Context_Pending (Flag16-Sem) 6669 -- First_Inlined_Subprogram (Node3-Sem) 6670 -- Has_Pragma_Suppress_All (Flag14-Sem) 6671 6672 -- N_Compilation_Unit_Aux 6673 -- Sloc is a copy of the Sloc from the N_Compilation_Unit node 6674 -- Declarations (List2) (set to No_List if no global declarations) 6675 -- Actions (List1) (set to No_List if no actions) 6676 -- Pragmas_After (List5) pragmas after unit (set to No_List if none) 6677 -- Config_Pragmas (List4) config pragmas (set to Empty_List if none) 6678 -- Default_Storage_Pool (Node3-Sem) 6679 6680 -------------------------- 6681 -- 10.1.1 Library Item -- 6682 -------------------------- 6683 6684 -- LIBRARY_ITEM ::= 6685 -- [private] LIBRARY_UNIT_DECLARATION 6686 -- | LIBRARY_UNIT_BODY 6687 -- | [private] LIBRARY_UNIT_RENAMING_DECLARATION 6688 6689 -- Note: PRIVATE is not allowed in Ada 83 mode 6690 6691 -- There is no explicit node in the tree for library item, instead 6692 -- the declaration or body, and the flag for private if present, 6693 -- appear in the N_Compilation_Unit node. 6694 6695 -------------------------------------- 6696 -- 10.1.1 Library Unit Declaration -- 6697 -------------------------------------- 6698 6699 -- LIBRARY_UNIT_DECLARATION ::= 6700 -- SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION 6701 -- | GENERIC_DECLARATION | GENERIC_INSTANTIATION 6702 6703 ----------------------------------------------- 6704 -- 10.1.1 Library Unit Renaming Declaration -- 6705 ----------------------------------------------- 6706 6707 -- LIBRARY_UNIT_RENAMING_DECLARATION ::= 6708 -- PACKAGE_RENAMING_DECLARATION 6709 -- | GENERIC_RENAMING_DECLARATION 6710 -- | SUBPROGRAM_RENAMING_DECLARATION 6711 6712 ------------------------------- 6713 -- 10.1.1 Library unit body -- 6714 ------------------------------- 6715 6716 -- LIBRARY_UNIT_BODY ::= SUBPROGRAM_BODY | PACKAGE_BODY 6717 6718 ------------------------------ 6719 -- 10.1.1 Parent Unit Name -- 6720 ------------------------------ 6721 6722 -- PARENT_UNIT_NAME ::= NAME 6723 6724 ---------------------------- 6725 -- 10.1.2 Context clause -- 6726 ---------------------------- 6727 6728 -- CONTEXT_CLAUSE ::= {CONTEXT_ITEM} 6729 6730 -- The context clause can include pragmas, and any pragmas that appear 6731 -- before the context clause proper (i.e. all configuration pragmas, 6732 -- also appear at the front of this list). 6733 6734 -------------------------- 6735 -- 10.1.2 Context_Item -- 6736 -------------------------- 6737 6738 -- CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE | WITH_TYPE_CLAUSE 6739 6740 ------------------------- 6741 -- 10.1.2 With clause -- 6742 ------------------------- 6743 6744 -- WITH_CLAUSE ::= 6745 -- with library_unit_NAME {,library_unit_NAME}; 6746 6747 -- A separate With clause is built for each name, so that we have 6748 -- a Corresponding_Spec field for each with'ed spec. The flags 6749 -- First_Name and Last_Name are used to reconstruct the exact 6750 -- source form. When a list of names appears in one with clause, 6751 -- the first name in the list has First_Name set, and the last 6752 -- has Last_Name set. If the with clause has only one name, then 6753 -- both of the flags First_Name and Last_Name are set in this name. 6754 6755 -- Note: in the case of implicit with's that are installed by the 6756 -- Rtsfind routine, Implicit_With is set, and the Sloc is typically 6757 -- set to Standard_Location, but it is incorrect to test the Sloc 6758 -- to find out if a with clause is implicit, test the flag instead. 6759 6760 -- N_With_Clause 6761 -- Sloc points to first token of library unit name 6762 -- Withed_Body (Node1-Sem) 6763 -- Name (Node2) 6764 -- Private_Present (Flag15) set if with_clause has private keyword 6765 -- Limited_Present (Flag17) set if LIMITED is present 6766 -- Next_Implicit_With (Node3-Sem) 6767 -- Library_Unit (Node4-Sem) 6768 -- Corresponding_Spec (Node5-Sem) 6769 -- First_Name (Flag5) (set to True if first name or only one name) 6770 -- Last_Name (Flag6) (set to True if last name or only one name) 6771 -- Context_Installed (Flag13-Sem) 6772 -- Elaborate_Present (Flag4-Sem) 6773 -- Elaborate_All_Present (Flag14-Sem) 6774 -- Elaborate_All_Desirable (Flag9-Sem) 6775 -- Elaborate_Desirable (Flag11-Sem) 6776 -- Implicit_With (Flag16-Sem) 6777 -- Limited_View_Installed (Flag18-Sem) 6778 -- Parent_With (Flag1-Sem) 6779 -- Unreferenced_In_Spec (Flag7-Sem) 6780 -- No_Entities_Ref_In_Spec (Flag8-Sem) 6781 6782 -- Note: Limited_Present and Limited_View_Installed are used to support 6783 -- the implementation of Ada 2005 (AI-50217). 6784 6785 -- Similarly, Private_Present is used to support the implementation of 6786 -- Ada 2005 (AI-50262). 6787 6788 -- Note: if the WITH clause refers to a standard library unit, then a 6789 -- limited with clause is changed into a normal with clause, because we 6790 -- are not prepared to deal with limited with in the context of Rtsfind. 6791 -- So in this case, the Limited_Present flag will be False in the final 6792 -- tree. However, we do NOT do this transformation in ASIS mode, so for 6793 -- ASIS the flag will remain set in this situation. 6794 6795 ---------------------- 6796 -- With_Type clause -- 6797 ---------------------- 6798 6799 -- This is a GNAT extension, used to implement mutually recursive 6800 -- types declared in different packages. 6801 6802 -- Note: this is now obsolete. The functionality of this construct 6803 -- is now implemented by the Ada 2005 limited_with_clause. 6804 6805 --------------------- 6806 -- 10.2 Body stub -- 6807 --------------------- 6808 6809 -- BODY_STUB ::= 6810 -- SUBPROGRAM_BODY_STUB 6811 -- | PACKAGE_BODY_STUB 6812 -- | TASK_BODY_STUB 6813 -- | PROTECTED_BODY_STUB 6814 6815 ---------------------------------- 6816 -- 10.1.3 Subprogram Body Stub -- 6817 ---------------------------------- 6818 6819 -- SUBPROGRAM_BODY_STUB ::= 6820 -- SUBPROGRAM_SPECIFICATION is separate 6821 -- [ASPECT_SPECIFICATION]; 6822 6823 -- N_Subprogram_Body_Stub 6824 -- Sloc points to FUNCTION or PROCEDURE 6825 -- Specification (Node1) 6826 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6827 -- Library_Unit (Node4-Sem) points to the subunit 6828 -- Corresponding_Body (Node5-Sem) 6829 6830 ------------------------------- 6831 -- 10.1.3 Package Body Stub -- 6832 ------------------------------- 6833 6834 -- PACKAGE_BODY_STUB ::= 6835 -- package body DEFINING_IDENTIFIER is separate 6836 -- [ASPECT_SPECIFICATION]; 6837 6838 -- N_Package_Body_Stub 6839 -- Sloc points to PACKAGE 6840 -- Defining_Identifier (Node1) 6841 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6842 -- Library_Unit (Node4-Sem) points to the subunit 6843 -- Corresponding_Body (Node5-Sem) 6844 6845 ---------------------------- 6846 -- 10.1.3 Task Body Stub -- 6847 ---------------------------- 6848 6849 -- TASK_BODY_STUB ::= 6850 -- task body DEFINING_IDENTIFIER is separate 6851 -- [ASPECT_SPECIFICATION]; 6852 6853 -- N_Task_Body_Stub 6854 -- Sloc points to TASK 6855 -- Defining_Identifier (Node1) 6856 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6857 -- Library_Unit (Node4-Sem) points to the subunit 6858 -- Corresponding_Body (Node5-Sem) 6859 6860 --------------------------------- 6861 -- 10.1.3 Protected Body Stub -- 6862 --------------------------------- 6863 6864 -- PROTECTED_BODY_STUB ::= 6865 -- protected body DEFINING_IDENTIFIER is separate 6866 -- [ASPECT_SPECIFICATION]; 6867 6868 -- Note: protected body stubs are not allowed in Ada 83 mode 6869 6870 -- N_Protected_Body_Stub 6871 -- Sloc points to PROTECTED 6872 -- Defining_Identifier (Node1) 6873 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6874 -- Library_Unit (Node4-Sem) points to the subunit 6875 -- Corresponding_Body (Node5-Sem) 6876 6877 --------------------- 6878 -- 10.1.3 Subunit -- 6879 --------------------- 6880 6881 -- SUBUNIT ::= separate (PARENT_UNIT_NAME) PROPER_BODY 6882 6883 -- N_Subunit 6884 -- Sloc points to SEPARATE 6885 -- Name (Node2) is the name of the parent unit 6886 -- Proper_Body (Node1) is the subunit body 6887 -- Corresponding_Stub (Node3-Sem) is the stub declaration for the unit. 6888 6889 --------------------------------- 6890 -- 11.1 Exception Declaration -- 6891 --------------------------------- 6892 6893 -- EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception 6894 -- [ASPECT_SPECIFICATIONS]; 6895 6896 -- For consistency with object declarations etc., the parser converts 6897 -- the case of multiple identifiers being declared to a series of 6898 -- declarations in which the expression is copied, using the More_Ids 6899 -- and Prev_Ids flags to remember the source form as described in the 6900 -- section on "Handling of Defining Identifier Lists". 6901 6902 -- N_Exception_Declaration 6903 -- Sloc points to EXCEPTION 6904 -- Defining_Identifier (Node1) 6905 -- Expression (Node3-Sem) 6906 -- Renaming_Exception (Node2-Sem) 6907 -- More_Ids (Flag5) (set to False if no more identifiers in list) 6908 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 6909 6910 ------------------------------------------ 6911 -- 11.2 Handled Sequence Of Statements -- 6912 ------------------------------------------ 6913 6914 -- HANDLED_SEQUENCE_OF_STATEMENTS ::= 6915 -- SEQUENCE_OF_STATEMENTS 6916 -- [exception 6917 -- EXCEPTION_HANDLER 6918 -- {EXCEPTION_HANDLER}] 6919 -- [at end 6920 -- cleanup_procedure_call (param, param, param, ...);] 6921 6922 -- The AT END phrase is a GNAT extension to provide for cleanups. It is 6923 -- used only internally currently, but is considered to be syntactic. 6924 -- At the moment, the only cleanup action allowed is a single call to 6925 -- a parameterless procedure, and the Identifier field of the node is 6926 -- the procedure to be called. The cleanup action occurs whenever the 6927 -- sequence of statements is left for any reason. The possible reasons 6928 -- are: 6929 -- 1. reaching the end of the sequence 6930 -- 2. exit, return, or goto 6931 -- 3. exception or abort 6932 -- For some back ends, such as gcc with ZCX, "at end" is implemented 6933 -- entirely in the back end. In this case, a handled sequence of 6934 -- statements with an "at end" cannot also have exception handlers. 6935 -- For other back ends, such as gcc with front-end SJLJ, the 6936 -- implementation is split between the front end and back end; the front 6937 -- end implements 3, and the back end implements 1 and 2. In this case, 6938 -- if there is an "at end", the front end inserts the appropriate 6939 -- exception handler, and this handler takes precedence over "at end" 6940 -- in case of exception. 6941 6942 -- The inserted exception handler is of the form: 6943 6944 -- when all others => 6945 -- cleanup; 6946 -- raise; 6947 6948 -- where cleanup is the procedure to be called. The reason we do this is 6949 -- so that the front end can handle the necessary entries in the 6950 -- exception tables, and other exception handler actions required as 6951 -- part of the normal handling for exception handlers. 6952 6953 -- The AT END cleanup handler protects only the sequence of statements 6954 -- (not the associated declarations of the parent), just like exception 6955 -- handlers. The big difference is that the cleanup procedure is called 6956 -- on either a normal or an abnormal exit from the statement sequence. 6957 6958 -- Note: the list of Exception_Handlers can contain pragmas as well 6959 -- as actual handlers. In practice these pragmas can only occur at 6960 -- the start of the list, since any pragmas occurring later on will 6961 -- be included in the statement list of the corresponding handler. 6962 6963 -- Note: although in the Ada syntax, the sequence of statements in 6964 -- a handled sequence of statements can only contain statements, we 6965 -- allow free mixing of declarations and statements in the resulting 6966 -- expanded tree. This is for example used to deal with the case of 6967 -- a cleanup procedure that must handle declarations as well as the 6968 -- statements of a block. 6969 6970 -- Note: the cleanup_procedure_call does not go through the common 6971 -- processing for calls, which in particular means that it will not be 6972 -- automatically inlined in all cases, even though the procedure to be 6973 -- called is marked inline. More specifically, if the procedure comes 6974 -- from another unit than the main source unit, for example a run-time 6975 -- unit, then it needs to be manually added to the list of bodies to be 6976 -- inlined by invoking Add_Inlined_Body on it. 6977 6978 -- N_Handled_Sequence_Of_Statements 6979 -- Sloc points to first token of first statement 6980 -- Statements (List3) 6981 -- End_Label (Node4) (set to Empty if expander generated) 6982 -- Exception_Handlers (List5) (set to No_List if none present) 6983 -- At_End_Proc (Node1) (set to Empty if no clean up procedure) 6984 -- First_Real_Statement (Node2-Sem) 6985 6986 -- Note: the parent always contains a Declarations field which contains 6987 -- declarations associated with the handled sequence of statements. This 6988 -- is true even in the case of an accept statement (see description of 6989 -- the N_Accept_Statement node). 6990 6991 -- End_Label refers to the containing construct 6992 6993 ----------------------------- 6994 -- 11.2 Exception Handler -- 6995 ----------------------------- 6996 6997 -- EXCEPTION_HANDLER ::= 6998 -- when [CHOICE_PARAMETER_SPECIFICATION :] 6999 -- EXCEPTION_CHOICE {| EXCEPTION_CHOICE} => 7000 -- SEQUENCE_OF_STATEMENTS 7001 7002 -- Note: choice parameter specification is not allowed in Ada 83 mode 7003 7004 -- N_Exception_Handler 7005 -- Sloc points to WHEN 7006 -- Choice_Parameter (Node2) (set to Empty if not present) 7007 -- Exception_Choices (List4) 7008 -- Statements (List3) 7009 -- Exception_Label (Node5-Sem) (set to Empty of not present) 7010 -- Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present) 7011 -- Local_Raise_Not_OK (Flag7-Sem) 7012 -- Has_Local_Raise (Flag8-Sem) 7013 7014 ------------------------------------------ 7015 -- 11.2 Choice parameter specification -- 7016 ------------------------------------------ 7017 7018 -- CHOICE_PARAMETER_SPECIFICATION ::= DEFINING_IDENTIFIER 7019 7020 ---------------------------- 7021 -- 11.2 Exception Choice -- 7022 ---------------------------- 7023 7024 -- EXCEPTION_CHOICE ::= exception_NAME | others 7025 7026 -- Except in the case of OTHERS, no explicit node appears in the tree 7027 -- for exception choice. Instead the exception name appears directly. 7028 -- An OTHERS choice is represented by a N_Others_Choice node (see 7029 -- section 3.8.1. 7030 7031 -- Note: for the exception choice created for an at end handler, the 7032 -- exception choice is an N_Others_Choice node with All_Others set. 7033 7034 --------------------------- 7035 -- 11.3 Raise Statement -- 7036 --------------------------- 7037 7038 -- RAISE_STATEMENT ::= raise [exception_NAME]; 7039 7040 -- In Ada 2005, we have 7041 7042 -- RAISE_STATEMENT ::= 7043 -- raise; | raise exception_NAME [with string_EXPRESSION]; 7044 7045 -- N_Raise_Statement 7046 -- Sloc points to RAISE 7047 -- Name (Node2) (set to Empty if no exception name present) 7048 -- Expression (Node3) (set to Empty if no expression present) 7049 -- From_At_End (Flag4-Sem) 7050 7051 ---------------------------- 7052 -- 11.3 Raise Expression -- 7053 ---------------------------- 7054 7055 -- RAISE_EXPRESSION ::= raise exception_NAME [with string_EXPRESSION] 7056 7057 -- N_Raise_Expression 7058 -- Sloc points to RAISE 7059 -- Name (Node2) (always present) 7060 -- Expression (Node3) (set to Empty if no expression present) 7061 -- Convert_To_Return_False (Flag13-Sem) 7062 -- plus fields for expression 7063 7064 ------------------------------- 7065 -- 12.1 Generic Declaration -- 7066 ------------------------------- 7067 7068 -- GENERIC_DECLARATION ::= 7069 -- GENERIC_SUBPROGRAM_DECLARATION | GENERIC_PACKAGE_DECLARATION 7070 7071 ------------------------------------------ 7072 -- 12.1 Generic Subprogram Declaration -- 7073 ------------------------------------------ 7074 7075 -- GENERIC_SUBPROGRAM_DECLARATION ::= 7076 -- GENERIC_FORMAL_PART SUBPROGRAM_SPECIFICATION 7077 -- [ASPECT_SPECIFICATIONS]; 7078 7079 -- Note: Generic_Formal_Declarations can include pragmas 7080 7081 -- N_Generic_Subprogram_Declaration 7082 -- Sloc points to GENERIC 7083 -- Specification (Node1) subprogram specification 7084 -- Corresponding_Body (Node5-Sem) 7085 -- Generic_Formal_Declarations (List2) from generic formal part 7086 -- Parent_Spec (Node4-Sem) 7087 7088 --------------------------------------- 7089 -- 12.1 Generic Package Declaration -- 7090 --------------------------------------- 7091 7092 -- GENERIC_PACKAGE_DECLARATION ::= 7093 -- GENERIC_FORMAL_PART PACKAGE_SPECIFICATION 7094 -- [ASPECT_SPECIFICATIONS]; 7095 7096 -- Note: when we do generics right, the Activation_Chain_Entity entry 7097 -- for this node can be removed (since the expander won't see generic 7098 -- units any more)???. 7099 7100 -- Note: Generic_Formal_Declarations can include pragmas 7101 7102 -- N_Generic_Package_Declaration 7103 -- Sloc points to GENERIC 7104 -- Specification (Node1) package specification 7105 -- Corresponding_Body (Node5-Sem) 7106 -- Generic_Formal_Declarations (List2) from generic formal part 7107 -- Parent_Spec (Node4-Sem) 7108 -- Activation_Chain_Entity (Node3-Sem) 7109 7110 ------------------------------- 7111 -- 12.1 Generic Formal Part -- 7112 ------------------------------- 7113 7114 -- GENERIC_FORMAL_PART ::= 7115 -- generic {GENERIC_FORMAL_PARAMETER_DECLARATION | USE_CLAUSE} 7116 7117 ------------------------------------------------ 7118 -- 12.1 Generic Formal Parameter Declaration -- 7119 ------------------------------------------------ 7120 7121 -- GENERIC_FORMAL_PARAMETER_DECLARATION ::= 7122 -- FORMAL_OBJECT_DECLARATION 7123 -- | FORMAL_TYPE_DECLARATION 7124 -- | FORMAL_SUBPROGRAM_DECLARATION 7125 -- | FORMAL_PACKAGE_DECLARATION 7126 7127 --------------------------------- 7128 -- 12.3 Generic Instantiation -- 7129 --------------------------------- 7130 7131 -- GENERIC_INSTANTIATION ::= 7132 -- package DEFINING_PROGRAM_UNIT_NAME is 7133 -- new generic_package_NAME [GENERIC_ACTUAL_PART] 7134 -- [ASPECT_SPECIFICATIONS]; 7135 -- | [[not] overriding] 7136 -- procedure DEFINING_PROGRAM_UNIT_NAME is 7137 -- new generic_procedure_NAME [GENERIC_ACTUAL_PART] 7138 -- [ASPECT_SPECIFICATIONS]; 7139 -- | [[not] overriding] 7140 -- function DEFINING_DESIGNATOR is 7141 -- new generic_function_NAME [GENERIC_ACTUAL_PART] 7142 -- [ASPECT_SPECIFICATIONS]; 7143 7144 -- N_Package_Instantiation 7145 -- Sloc points to PACKAGE 7146 -- Defining_Unit_Name (Node1) 7147 -- Name (Node2) 7148 -- Generic_Associations (List3) (set to No_List if no 7149 -- generic actual part) 7150 -- Parent_Spec (Node4-Sem) 7151 -- Instance_Spec (Node5-Sem) 7152 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7153 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7154 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7155 -- Is_Declaration_Level_Node (Flag5-Sem) 7156 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7157 7158 -- N_Procedure_Instantiation 7159 -- Sloc points to PROCEDURE 7160 -- Defining_Unit_Name (Node1) 7161 -- Name (Node2) 7162 -- Parent_Spec (Node4-Sem) 7163 -- Generic_Associations (List3) (set to No_List if no 7164 -- generic actual part) 7165 -- Instance_Spec (Node5-Sem) 7166 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7167 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7168 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7169 -- Is_Declaration_Level_Node (Flag5-Sem) 7170 -- Must_Override (Flag14) set if overriding indicator present 7171 -- Must_Not_Override (Flag15) set if not_overriding indicator present 7172 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7173 7174 -- N_Function_Instantiation 7175 -- Sloc points to FUNCTION 7176 -- Defining_Unit_Name (Node1) 7177 -- Name (Node2) 7178 -- Generic_Associations (List3) (set to No_List if no 7179 -- generic actual part) 7180 -- Parent_Spec (Node4-Sem) 7181 -- Instance_Spec (Node5-Sem) 7182 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7183 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7184 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7185 -- Is_Declaration_Level_Node (Flag5-Sem) 7186 -- Must_Override (Flag14) set if overriding indicator present 7187 -- Must_Not_Override (Flag15) set if not_overriding indicator present 7188 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7189 7190 -- Note: overriding indicator is an Ada 2005 feature 7191 7192 ------------------------------- 7193 -- 12.3 Generic Actual Part -- 7194 ------------------------------- 7195 7196 -- GENERIC_ACTUAL_PART ::= 7197 -- (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION}) 7198 7199 ------------------------------- 7200 -- 12.3 Generic Association -- 7201 ------------------------------- 7202 7203 -- GENERIC_ASSOCIATION ::= 7204 -- [generic_formal_parameter_SELECTOR_NAME =>] 7205 7206 -- Note: unlike the procedure call case, a generic association node 7207 -- is generated for every association, even if no formal parameter 7208 -- selector name is present. In this case the parser will leave the 7209 -- Selector_Name field set to Empty, to be filled in later by the 7210 -- semantic pass. 7211 7212 -- In Ada 2005, a formal may be associated with a box, if the 7213 -- association is part of the list of actuals for a formal package. 7214 -- If the association is given by OTHERS => <>, the association is 7215 -- an N_Others_Choice. 7216 7217 -- N_Generic_Association 7218 -- Sloc points to first token of generic association 7219 -- Selector_Name (Node2) (set to Empty if no formal 7220 -- parameter selector name) 7221 -- Explicit_Generic_Actual_Parameter (Node1) (Empty if box present) 7222 -- Box_Present (Flag15) (for formal_package associations with a box) 7223 7224 --------------------------------------------- 7225 -- 12.3 Explicit Generic Actual Parameter -- 7226 --------------------------------------------- 7227 7228 -- EXPLICIT_GENERIC_ACTUAL_PARAMETER ::= 7229 -- EXPRESSION | variable_NAME | subprogram_NAME 7230 -- | entry_NAME | SUBTYPE_MARK | package_instance_NAME 7231 7232 ------------------------------------- 7233 -- 12.4 Formal Object Declaration -- 7234 ------------------------------------- 7235 7236 -- FORMAL_OBJECT_DECLARATION ::= 7237 -- DEFINING_IDENTIFIER_LIST : 7238 -- MODE [NULL_EXCLUSION] SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 7239 -- [ASPECT_SPECIFICATIONS]; 7240 -- | DEFINING_IDENTIFIER_LIST : 7241 -- MODE ACCESS_DEFINITION [:= DEFAULT_EXPRESSION] 7242 -- [ASPECT_SPECIFICATIONS]; 7243 7244 -- Although the syntax allows multiple identifiers in the list, the 7245 -- semantics is as though successive declarations were given with 7246 -- identical type definition and expression components. To simplify 7247 -- semantic processing, the parser represents a multiple declaration 7248 -- case as a sequence of single declarations, using the More_Ids and 7249 -- Prev_Ids flags to preserve the original source form as described 7250 -- in the section on "Handling of Defining Identifier Lists". 7251 7252 -- N_Formal_Object_Declaration 7253 -- Sloc points to first identifier 7254 -- Defining_Identifier (Node1) 7255 -- In_Present (Flag15) 7256 -- Out_Present (Flag17) 7257 -- Null_Exclusion_Present (Flag11) (set to False if not present) 7258 -- Subtype_Mark (Node4) (set to Empty if not present) 7259 -- Access_Definition (Node3) (set to Empty if not present) 7260 -- Default_Expression (Node5) (set to Empty if no default expression) 7261 -- More_Ids (Flag5) (set to False if no more identifiers in list) 7262 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 7263 7264 ----------------------------------- 7265 -- 12.5 Formal Type Declaration -- 7266 ----------------------------------- 7267 7268 -- FORMAL_TYPE_DECLARATION ::= 7269 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 7270 -- is FORMAL_TYPE_DEFINITION 7271 -- [ASPECT_SPECIFICATIONS]; 7272 -- | type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [is tagged] 7273 7274 -- N_Formal_Type_Declaration 7275 -- Sloc points to TYPE 7276 -- Defining_Identifier (Node1) 7277 -- Formal_Type_Definition (Node3) 7278 -- Discriminant_Specifications (List4) (set to No_List if no 7279 -- discriminant part) 7280 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 7281 7282 ---------------------------------- 7283 -- 12.5 Formal type definition -- 7284 ---------------------------------- 7285 7286 -- FORMAL_TYPE_DEFINITION ::= 7287 -- FORMAL_PRIVATE_TYPE_DEFINITION 7288 -- | FORMAL_DERIVED_TYPE_DEFINITION 7289 -- | FORMAL_DISCRETE_TYPE_DEFINITION 7290 -- | FORMAL_SIGNED_INTEGER_TYPE_DEFINITION 7291 -- | FORMAL_MODULAR_TYPE_DEFINITION 7292 -- | FORMAL_FLOATING_POINT_DEFINITION 7293 -- | FORMAL_ORDINARY_FIXED_POINT_DEFINITION 7294 -- | FORMAL_DECIMAL_FIXED_POINT_DEFINITION 7295 -- | FORMAL_ARRAY_TYPE_DEFINITION 7296 -- | FORMAL_ACCESS_TYPE_DEFINITION 7297 -- | FORMAL_INTERFACE_TYPE_DEFINITION 7298 -- | FORMAL_INCOMPLETE_TYPE_DEFINITION 7299 7300 -- The Ada 2012 syntax introduces two new non-terminals: 7301 -- Formal_{Complete,Incomplete}_Type_Declaration just to introduce 7302 -- the latter category. Here we introduce an incomplete type definition 7303 -- in order to preserve as much as possible the existing structure. 7304 7305 --------------------------------------------- 7306 -- 12.5.1 Formal Private Type Definition -- 7307 --------------------------------------------- 7308 7309 -- FORMAL_PRIVATE_TYPE_DEFINITION ::= 7310 -- [[abstract] tagged] [limited] private 7311 7312 -- Note: TAGGED is not allowed in Ada 83 mode 7313 7314 -- N_Formal_Private_Type_Definition 7315 -- Sloc points to PRIVATE 7316 -- Uninitialized_Variable (Node3-Sem) 7317 -- Abstract_Present (Flag4) 7318 -- Tagged_Present (Flag15) 7319 -- Limited_Present (Flag17) 7320 7321 -------------------------------------------- 7322 -- 12.5.1 Formal Derived Type Definition -- 7323 -------------------------------------------- 7324 7325 -- FORMAL_DERIVED_TYPE_DEFINITION ::= 7326 -- [abstract] [limited | synchronized] 7327 -- new SUBTYPE_MARK [[and INTERFACE_LIST] with private] 7328 -- Note: this construct is not allowed in Ada 83 mode 7329 7330 -- N_Formal_Derived_Type_Definition 7331 -- Sloc points to NEW 7332 -- Subtype_Mark (Node4) 7333 -- Private_Present (Flag15) 7334 -- Abstract_Present (Flag4) 7335 -- Limited_Present (Flag17) 7336 -- Synchronized_Present (Flag7) 7337 -- Interface_List (List2) (set to No_List if none) 7338 7339 ----------------------------------------------- 7340 -- 12.5.1 Formal Incomplete Type Definition -- 7341 ----------------------------------------------- 7342 7343 -- FORMAL_INCOMPLETE_TYPE_DEFINITION ::= [tagged] 7344 7345 -- N_Formal_Incomplete_Type_Definition 7346 -- Sloc points to identifier of parent 7347 -- Tagged_Present (Flag15) 7348 7349 --------------------------------------------- 7350 -- 12.5.2 Formal Discrete Type Definition -- 7351 --------------------------------------------- 7352 7353 -- FORMAL_DISCRETE_TYPE_DEFINITION ::= (<>) 7354 7355 -- N_Formal_Discrete_Type_Definition 7356 -- Sloc points to ( 7357 7358 --------------------------------------------------- 7359 -- 12.5.2 Formal Signed Integer Type Definition -- 7360 --------------------------------------------------- 7361 7362 -- FORMAL_SIGNED_INTEGER_TYPE_DEFINITION ::= range <> 7363 7364 -- N_Formal_Signed_Integer_Type_Definition 7365 -- Sloc points to RANGE 7366 7367 -------------------------------------------- 7368 -- 12.5.2 Formal Modular Type Definition -- 7369 -------------------------------------------- 7370 7371 -- FORMAL_MODULAR_TYPE_DEFINITION ::= mod <> 7372 7373 -- N_Formal_Modular_Type_Definition 7374 -- Sloc points to MOD 7375 7376 ---------------------------------------------- 7377 -- 12.5.2 Formal Floating Point Definition -- 7378 ---------------------------------------------- 7379 7380 -- FORMAL_FLOATING_POINT_DEFINITION ::= digits <> 7381 7382 -- N_Formal_Floating_Point_Definition 7383 -- Sloc points to DIGITS 7384 7385 ---------------------------------------------------- 7386 -- 12.5.2 Formal Ordinary Fixed Point Definition -- 7387 ---------------------------------------------------- 7388 7389 -- FORMAL_ORDINARY_FIXED_POINT_DEFINITION ::= delta <> 7390 7391 -- N_Formal_Ordinary_Fixed_Point_Definition 7392 -- Sloc points to DELTA 7393 7394 --------------------------------------------------- 7395 -- 12.5.2 Formal Decimal Fixed Point Definition -- 7396 --------------------------------------------------- 7397 7398 -- FORMAL_DECIMAL_FIXED_POINT_DEFINITION ::= delta <> digits <> 7399 7400 -- Note: formal decimal fixed point definition not allowed in Ada 83 7401 7402 -- N_Formal_Decimal_Fixed_Point_Definition 7403 -- Sloc points to DELTA 7404 7405 ------------------------------------------ 7406 -- 12.5.3 Formal Array Type Definition -- 7407 ------------------------------------------ 7408 7409 -- FORMAL_ARRAY_TYPE_DEFINITION ::= ARRAY_TYPE_DEFINITION 7410 7411 ------------------------------------------- 7412 -- 12.5.4 Formal Access Type Definition -- 7413 ------------------------------------------- 7414 7415 -- FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION 7416 7417 ---------------------------------------------- 7418 -- 12.5.5 Formal Interface Type Definition -- 7419 ---------------------------------------------- 7420 7421 -- FORMAL_INTERFACE_TYPE_DEFINITION ::= INTERFACE_TYPE_DEFINITION 7422 7423 ----------------------------------------- 7424 -- 12.6 Formal Subprogram Declaration -- 7425 ----------------------------------------- 7426 7427 -- FORMAL_SUBPROGRAM_DECLARATION ::= 7428 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION 7429 -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION 7430 7431 -------------------------------------------------- 7432 -- 12.6 Formal Concrete Subprogram Declaration -- 7433 -------------------------------------------------- 7434 7435 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::= 7436 -- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT] 7437 -- [ASPECT_SPECIFICATIONS]; 7438 7439 -- N_Formal_Concrete_Subprogram_Declaration 7440 -- Sloc points to WITH 7441 -- Specification (Node1) 7442 -- Default_Name (Node2) (set to Empty if no subprogram default) 7443 -- Box_Present (Flag15) 7444 7445 -- Note: if no subprogram default is present, then Name is set 7446 -- to Empty, and Box_Present is False. 7447 7448 -------------------------------------------------- 7449 -- 12.6 Formal Abstract Subprogram Declaration -- 7450 -------------------------------------------------- 7451 7452 -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::= 7453 -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT] 7454 -- [ASPECT_SPECIFICATIONS]; 7455 7456 -- N_Formal_Abstract_Subprogram_Declaration 7457 -- Sloc points to WITH 7458 -- Specification (Node1) 7459 -- Default_Name (Node2) (set to Empty if no subprogram default) 7460 -- Box_Present (Flag15) 7461 7462 -- Note: if no subprogram default is present, then Name is set 7463 -- to Empty, and Box_Present is False. 7464 7465 ------------------------------ 7466 -- 12.6 Subprogram Default -- 7467 ------------------------------ 7468 7469 -- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <> 7470 7471 -- There is no separate node in the tree for a subprogram default. 7472 -- Instead the parent (N_Formal_Concrete_Subprogram_Declaration 7473 -- or N_Formal_Abstract_Subprogram_Declaration) node contains the 7474 -- default name or box indication, as needed. 7475 7476 ------------------------ 7477 -- 12.6 Default Name -- 7478 ------------------------ 7479 7480 -- DEFAULT_NAME ::= NAME 7481 7482 -------------------------------------- 7483 -- 12.7 Formal Package Declaration -- 7484 -------------------------------------- 7485 7486 -- FORMAL_PACKAGE_DECLARATION ::= 7487 -- with package DEFINING_IDENTIFIER 7488 -- is new generic_package_NAME FORMAL_PACKAGE_ACTUAL_PART 7489 -- [ASPECT_SPECIFICATIONS]; 7490 7491 -- Note: formal package declarations not allowed in Ada 83 mode 7492 7493 -- N_Formal_Package_Declaration 7494 -- Sloc points to WITH 7495 -- Defining_Identifier (Node1) 7496 -- Name (Node2) 7497 -- Generic_Associations (List3) (set to No_List if (<>) case or 7498 -- empty generic actual part) 7499 -- Box_Present (Flag15) 7500 -- Instance_Spec (Node5-Sem) 7501 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7502 7503 -------------------------------------- 7504 -- 12.7 Formal Package Actual Part -- 7505 -------------------------------------- 7506 7507 -- FORMAL_PACKAGE_ACTUAL_PART ::= 7508 -- ([OTHERS] => <>) 7509 -- | [GENERIC_ACTUAL_PART] 7510 -- (FORMAL_PACKAGE_ASSOCIATION {. FORMAL_PACKAGE_ASSOCIATION} 7511 7512 -- FORMAL_PACKAGE_ASSOCIATION ::= 7513 -- GENERIC_ASSOCIATION 7514 -- | GENERIC_FORMAL_PARAMETER_SELECTOR_NAME => <> 7515 7516 -- There is no explicit node in the tree for a formal package actual 7517 -- part. Instead the information appears in the parent node (i.e. the 7518 -- formal package declaration node itself). 7519 7520 -- There is no explicit node for a formal package association. All of 7521 -- them are represented either by a generic association, possibly with 7522 -- Box_Present, or by an N_Others_Choice. 7523 7524 --------------------------------- 7525 -- 13.1 Representation clause -- 7526 --------------------------------- 7527 7528 -- REPRESENTATION_CLAUSE ::= 7529 -- ATTRIBUTE_DEFINITION_CLAUSE 7530 -- | ENUMERATION_REPRESENTATION_CLAUSE 7531 -- | RECORD_REPRESENTATION_CLAUSE 7532 -- | AT_CLAUSE 7533 7534 ---------------------- 7535 -- 13.1 Local Name -- 7536 ---------------------- 7537 7538 -- LOCAL_NAME := 7539 -- DIRECT_NAME 7540 -- | DIRECT_NAME'ATTRIBUTE_DESIGNATOR 7541 -- | library_unit_NAME 7542 7543 -- The construct DIRECT_NAME'ATTRIBUTE_DESIGNATOR appears in the tree 7544 -- as an attribute reference, which has essentially the same form. 7545 7546 --------------------------------------- 7547 -- 13.3 Attribute definition clause -- 7548 --------------------------------------- 7549 7550 -- ATTRIBUTE_DEFINITION_CLAUSE ::= 7551 -- for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use EXPRESSION; 7552 -- | for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use NAME; 7553 7554 -- In Ada 83, the expression must be a simple expression and the 7555 -- local name must be a direct name. 7556 7557 -- Note: the only attribute definition clause that is processed by 7558 -- gigi is an address clause. For all other cases, the information 7559 -- is extracted by the front end and either results in setting entity 7560 -- information, e.g. Esize for the Size clause, or in appropriate 7561 -- expansion actions (e.g. in the case of Storage_Size). 7562 7563 -- For an address clause, Gigi constructs the appropriate addressing 7564 -- code. It also ensures that no aliasing optimizations are made 7565 -- for the object for which the address clause appears. 7566 7567 -- Note: for an address clause used to achieve an overlay: 7568 7569 -- A : Integer; 7570 -- B : Integer; 7571 -- for B'Address use A'Address; 7572 7573 -- the above rule means that Gigi will ensure that no optimizations 7574 -- will be made for B that would violate the implementation advice 7575 -- of RM 13.3(19). However, this advice applies only to B and not 7576 -- to A, which seems unfortunate. The GNAT front end will mark the 7577 -- object A as volatile to also prevent unwanted optimization 7578 -- assumptions based on no aliasing being made for B. 7579 7580 -- N_Attribute_Definition_Clause 7581 -- Sloc points to FOR 7582 -- Name (Node2) the local name 7583 -- Chars (Name1) the identifier name from the attribute designator 7584 -- Expression (Node3) the expression or name 7585 -- Entity (Node4-Sem) 7586 -- Next_Rep_Item (Node5-Sem) 7587 -- From_At_Mod (Flag4-Sem) 7588 -- Check_Address_Alignment (Flag11-Sem) 7589 -- From_Aspect_Specification (Flag13-Sem) 7590 -- Is_Delayed_Aspect (Flag14-Sem) 7591 -- Address_Warning_Posted (Flag18-Sem) 7592 7593 -- Note: if From_Aspect_Specification is set, then Sloc points to the 7594 -- aspect name, and Entity is resolved already to reference the entity 7595 -- to which the aspect applies. 7596 7597 ----------------------------------- 7598 -- 13.3.1 Aspect Specifications -- 7599 ----------------------------------- 7600 7601 -- We modify the RM grammar here, the RM grammar is: 7602 7603 -- ASPECT_SPECIFICATION ::= 7604 -- with ASPECT_MARK [=> ASPECT_DEFINITION] {, 7605 -- ASPECT_MARK [=> ASPECT_DEFINITION] } 7606 7607 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7608 7609 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7610 7611 -- That's inconvenient, since there is no non-terminal name for a single 7612 -- entry in the list of aspects. So we use this grammar instead: 7613 7614 -- ASPECT_SPECIFICATIONS ::= 7615 -- with ASPECT_SPECIFICATION {, ASPECT_SPECIFICATION} 7616 7617 -- ASPECT_SPECIFICATION => 7618 -- ASPECT_MARK [=> ASPECT_DEFINITION] 7619 7620 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7621 7622 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7623 7624 -- Note that for Annotate, the ASPECT_DEFINITION is a pure positional 7625 -- aggregate with the elements of the aggregate corresponding to the 7626 -- successive arguments of the corresponding pragma. 7627 7628 -- See separate package Aspects for details on the incorporation of 7629 -- these nodes into the tree, and how aspect specifications for a given 7630 -- declaration node are associated with that node. 7631 7632 -- N_Aspect_Specification 7633 -- Sloc points to aspect identifier 7634 -- Identifier (Node1) aspect identifier 7635 -- Aspect_Rep_Item (Node2-Sem) 7636 -- Expression (Node3) Aspect_Definition (set to Empty if none) 7637 -- Entity (Node4-Sem) entity to which the aspect applies 7638 -- Next_Rep_Item (Node5-Sem) 7639 -- Class_Present (Flag6) Set if 'Class present 7640 -- Is_Ignored (Flag9-Sem) 7641 -- Is_Checked (Flag11-Sem) 7642 -- Is_Delayed_Aspect (Flag14-Sem) 7643 -- Is_Disabled (Flag15-Sem) 7644 -- Is_Boolean_Aspect (Flag16-Sem) 7645 -- Split_PPC (Flag17) Set if split pre/post attribute 7646 7647 -- Note: Aspect_Specification is an Ada 2012 feature 7648 7649 -- Note: The Identifier serves to identify the aspect involved (it 7650 -- is the aspect whose name corresponds to the Chars field). This 7651 -- means that the other fields of this identifier are unused, and 7652 -- in particular we use the Entity field of this identifier to save 7653 -- a copy of the expression for visibility analysis, see spec of 7654 -- Sem_Ch13 for full details of this usage. 7655 7656 -- In the case of aspects of the form xxx'Class, the aspect identifier 7657 -- is for xxx, and Class_Present is set to True. 7658 7659 -- Note: When a Pre or Post aspect specification is processed, it is 7660 -- broken into AND THEN sections. The left most section has Split_PPC 7661 -- set to False, indicating that it is the original specification (e.g. 7662 -- for posting errors). For the other sections, Split_PPC is set True. 7663 7664 --------------------------------------------- 7665 -- 13.4 Enumeration representation clause -- 7666 --------------------------------------------- 7667 7668 -- ENUMERATION_REPRESENTATION_CLAUSE ::= 7669 -- for first_subtype_LOCAL_NAME use ENUMERATION_AGGREGATE; 7670 7671 -- In Ada 83, the name must be a direct name 7672 7673 -- N_Enumeration_Representation_Clause 7674 -- Sloc points to FOR 7675 -- Identifier (Node1) direct name 7676 -- Array_Aggregate (Node3) 7677 -- Next_Rep_Item (Node5-Sem) 7678 7679 --------------------------------- 7680 -- 13.4 Enumeration aggregate -- 7681 --------------------------------- 7682 7683 -- ENUMERATION_AGGREGATE ::= ARRAY_AGGREGATE 7684 7685 ------------------------------------------ 7686 -- 13.5.1 Record representation clause -- 7687 ------------------------------------------ 7688 7689 -- RECORD_REPRESENTATION_CLAUSE ::= 7690 -- for first_subtype_LOCAL_NAME use 7691 -- record [MOD_CLAUSE] 7692 -- {COMPONENT_CLAUSE} 7693 -- end record; 7694 7695 -- Gigi restriction: Mod_Clause is always Empty (if present it is 7696 -- replaced by a corresponding Alignment attribute definition clause). 7697 7698 -- Note: Component_Clauses can include pragmas 7699 7700 -- N_Record_Representation_Clause 7701 -- Sloc points to FOR 7702 -- Identifier (Node1) direct name 7703 -- Mod_Clause (Node2) (set to Empty if no mod clause present) 7704 -- Component_Clauses (List3) 7705 -- Next_Rep_Item (Node5-Sem) 7706 7707 ------------------------------ 7708 -- 13.5.1 Component clause -- 7709 ------------------------------ 7710 7711 -- COMPONENT_CLAUSE ::= 7712 -- component_LOCAL_NAME at POSITION 7713 -- range FIRST_BIT .. LAST_BIT; 7714 7715 -- N_Component_Clause 7716 -- Sloc points to AT 7717 -- Component_Name (Node1) points to Name or Attribute_Reference 7718 -- Position (Node2) 7719 -- First_Bit (Node3) 7720 -- Last_Bit (Node4) 7721 7722 ---------------------- 7723 -- 13.5.1 Position -- 7724 ---------------------- 7725 7726 -- POSITION ::= static_EXPRESSION 7727 7728 ----------------------- 7729 -- 13.5.1 First_Bit -- 7730 ----------------------- 7731 7732 -- FIRST_BIT ::= static_SIMPLE_EXPRESSION 7733 7734 ---------------------- 7735 -- 13.5.1 Last_Bit -- 7736 ---------------------- 7737 7738 -- LAST_BIT ::= static_SIMPLE_EXPRESSION 7739 7740 -------------------------- 7741 -- 13.8 Code statement -- 7742 -------------------------- 7743 7744 -- CODE_STATEMENT ::= QUALIFIED_EXPRESSION; 7745 7746 -- Note: in GNAT, the qualified expression has the form 7747 7748 -- Asm_Insn'(Asm (...)); 7749 7750 -- See package System.Machine_Code in file s-maccod.ads for details on 7751 -- the allowed parameters to Asm. There are two ways this node can 7752 -- arise, as a code statement, in which case the expression is the 7753 -- qualified expression, or as a result of the expansion of an intrinsic 7754 -- call to the Asm or Asm_Input procedure. 7755 7756 -- N_Code_Statement 7757 -- Sloc points to first token of the expression 7758 -- Expression (Node3) 7759 7760 -- Note: package Exp_Code contains an abstract functional interface 7761 -- for use by Gigi in accessing the data from N_Code_Statement nodes. 7762 7763 ------------------------ 7764 -- 13.12 Restriction -- 7765 ------------------------ 7766 7767 -- RESTRICTION ::= 7768 -- restriction_IDENTIFIER 7769 -- | restriction_parameter_IDENTIFIER => EXPRESSION 7770 7771 -- There is no explicit node for restrictions. Instead the restriction 7772 -- appears in normal pragma syntax as a pragma argument association, 7773 -- which has the same syntactic form. 7774 7775 -------------------------- 7776 -- B.2 Shift Operators -- 7777 -------------------------- 7778 7779 -- Calls to the intrinsic shift functions are converted to one of 7780 -- the following shift nodes, which have the form of normal binary 7781 -- operator names. Note that for a given shift operation, one node 7782 -- covers all possible types, as for normal operators. 7783 7784 -- Note: it is perfectly permissible for the expander to generate 7785 -- shift operation nodes directly, in which case they will be analyzed 7786 -- and parsed in the usual manner. 7787 7788 -- Sprint syntax: shift-function-name!(expr, count) 7789 7790 -- Note: the Left_Opnd field holds the first argument (the value to 7791 -- be shifted). The Right_Opnd field holds the second argument (the 7792 -- shift count). The Chars field is the name of the intrinsic function. 7793 7794 -- N_Op_Rotate_Left 7795 -- Sloc points to the function name 7796 -- plus fields for binary operator 7797 -- plus fields for expression 7798 -- Shift_Count_OK (Flag4-Sem) 7799 7800 -- N_Op_Rotate_Right 7801 -- Sloc points to the function name 7802 -- plus fields for binary operator 7803 -- plus fields for expression 7804 -- Shift_Count_OK (Flag4-Sem) 7805 7806 -- N_Op_Shift_Left 7807 -- Sloc points to the function name 7808 -- plus fields for binary operator 7809 -- plus fields for expression 7810 -- Shift_Count_OK (Flag4-Sem) 7811 7812 -- N_Op_Shift_Right_Arithmetic 7813 -- Sloc points to the function name 7814 -- plus fields for binary operator 7815 -- plus fields for expression 7816 -- Shift_Count_OK (Flag4-Sem) 7817 7818 -- N_Op_Shift_Right 7819 -- Sloc points to the function name 7820 -- plus fields for binary operator 7821 -- plus fields for expression 7822 -- Shift_Count_OK (Flag4-Sem) 7823 7824 -- Note: N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic 7825 -- never appear in the expanded tree if Modify_Tree_For_C mode is set. 7826 7827 -- Note: For N_Op_Shift_Left and N_Op_Shift_Right, the right operand is 7828 -- always less than the word size if Modify_Tree_For_C mode is set. 7829 7830 -------------------------- 7831 -- Obsolescent Features -- 7832 -------------------------- 7833 7834 -- The syntax descriptions and tree nodes for obsolescent features are 7835 -- grouped together, corresponding to their location in appendix I in 7836 -- the RM. However, parsing and semantic analysis for these constructs 7837 -- is located in an appropriate chapter (see individual notes). 7838 7839 --------------------------- 7840 -- J.3 Delta Constraint -- 7841 --------------------------- 7842 7843 -- Note: the parse routine for this construct is located in section 7844 -- 3.5.9 of Par-Ch3, and semantic analysis is in Sem_Ch3, which is 7845 -- where delta constraint logically belongs. 7846 7847 -- DELTA_CONSTRAINT ::= DELTA static_EXPRESSION [RANGE_CONSTRAINT] 7848 7849 -- N_Delta_Constraint 7850 -- Sloc points to DELTA 7851 -- Delta_Expression (Node3) 7852 -- Range_Constraint (Node4) (set to Empty if not present) 7853 7854 -------------------- 7855 -- J.7 At Clause -- 7856 -------------------- 7857 7858 -- AT_CLAUSE ::= for DIRECT_NAME use at EXPRESSION; 7859 7860 -- Note: the parse routine for this construct is located in Par-Ch13, 7861 -- and the semantic analysis is in Sem_Ch13, where at clause logically 7862 -- belongs if it were not obsolescent. 7863 7864 -- Note: in Ada 83 the expression must be a simple expression 7865 7866 -- Gigi restriction: This node never appears, it is rewritten as an 7867 -- address attribute definition clause. 7868 7869 -- N_At_Clause 7870 -- Sloc points to FOR 7871 -- Identifier (Node1) 7872 -- Expression (Node3) 7873 7874 --------------------- 7875 -- J.8 Mod clause -- 7876 --------------------- 7877 7878 -- MOD_CLAUSE ::= at mod static_EXPRESSION; 7879 7880 -- Note: the parse routine for this construct is located in Par-Ch13, 7881 -- and the semantic analysis is in Sem_Ch13, where mod clause logically 7882 -- belongs if it were not obsolescent. 7883 7884 -- Note: in Ada 83, the expression must be a simple expression 7885 7886 -- Gigi restriction: this node never appears. It is replaced 7887 -- by a corresponding Alignment attribute definition clause. 7888 7889 -- Note: pragmas can appear before and after the MOD_CLAUSE since 7890 -- its name has "clause" in it. This is rather strange, but is quite 7891 -- definitely specified. The pragmas before are collected in the 7892 -- Pragmas_Before field of the mod clause node itself, and pragmas 7893 -- after are simply swallowed up in the list of component clauses. 7894 7895 -- N_Mod_Clause 7896 -- Sloc points to AT 7897 -- Expression (Node3) 7898 -- Pragmas_Before (List4) Pragmas before mod clause (No_List if none) 7899 7900 -------------------- 7901 -- Semantic Nodes -- 7902 -------------------- 7903 7904 -- These semantic nodes are used to hold additional semantic information. 7905 -- They are inserted into the tree as a result of semantic processing. 7906 -- Although there are no legitimate source syntax constructions that 7907 -- correspond directly to these nodes, we need a source syntax for the 7908 -- reconstructed tree printed by Sprint, and the node descriptions here 7909 -- show this syntax. 7910 7911 ----------------- 7912 -- Call_Marker -- 7913 ----------------- 7914 7915 -- This node is created during the analysis/resolution of entry calls, 7916 -- requeues, and subprogram calls. It performs several functions: 7917 7918 -- * Call markers provide a uniform model for handling calls by the 7919 -- ABE mechanism, regardless of whether expansion took place. 7920 7921 -- * The call marker captures the target of the related call along 7922 -- with other attributes which are either unavailabe or expensive 7923 -- to recompute once analysis, resolution, and expansion are over. 7924 7925 -- * The call marker aids the ABE Processing phase by signaling the 7926 -- presence of a call in case the original call was transformed by 7927 -- expansion. 7928 7929 -- * The call marker acts as a reference point for the insertion of 7930 -- run-time conditional ABE checks or guaranteed ABE failures. 7931 7932 -- Sprint syntax: #target# 7933 7934 -- The Sprint syntax shown above is not enabled by default 7935 7936 -- N_Call_Marker 7937 -- Sloc points to Sloc of original call 7938 -- Target (Node1-Sem) 7939 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7940 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7941 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7942 -- Is_Source_Call (Flag4-Sem) 7943 -- Is_Declaration_Level_Node (Flag5-Sem) 7944 -- Is_Dispatching_Call (Flag6-Sem) 7945 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7946 7947 ------------------------ 7948 -- Compound Statement -- 7949 ------------------------ 7950 7951 -- This node is created by the analyzer/expander to handle some 7952 -- expansion cases where a sequence of actions needs to be captured 7953 -- within a single node (which acts as a container and allows the 7954 -- entire list of actions to be moved around as a whole) appearing 7955 -- in a sequence of statements. 7956 7957 -- This is the statement counterpart to the expression node 7958 -- N_Expression_With_Actions. 7959 7960 -- The required semantics is that the set of actions is executed in 7961 -- the order in which it appears, as though they appeared by themselves 7962 -- in the enclosing list of declarations or statements. Unlike what 7963 -- happens when using an N_Block_Statement, no new scope is introduced. 7964 7965 -- Note: for the time being, this is used only as a transient 7966 -- representation during expansion, and all compound statement nodes 7967 -- must be exploded back to their constituent statements before handing 7968 -- the tree to the back end. 7969 7970 -- Sprint syntax: do 7971 -- action; 7972 -- action; 7973 -- ... 7974 -- action; 7975 -- end; 7976 7977 -- N_Compound_Statement 7978 -- Actions (List1) 7979 7980 -------------- 7981 -- Contract -- 7982 -------------- 7983 7984 -- This node is used to hold the various parts of an entry, subprogram 7985 -- [body] or package [body] contract, in particular: 7986 -- Abstract states declared by a package declaration 7987 -- Contract cases that apply to a subprogram 7988 -- Dependency relations of inputs and output of a subprogram 7989 -- Global annotations classifying data as input or output 7990 -- Initialization sequences for a package declaration 7991 -- Pre- and postconditions that apply to a subprogram 7992 7993 -- The node appears in an entry and [generic] subprogram [body] entity. 7994 7995 -- Sprint syntax: <none> as the node should not appear in the tree, but 7996 -- only attached to an entry or [generic] subprogram 7997 -- entity. 7998 7999 -- N_Contract 8000 -- Sloc points to the subprogram's name 8001 -- Pre_Post_Conditions (Node1-Sem) (set to Empty if none) 8002 -- Contract_Test_Cases (Node2-Sem) (set to Empty if none) 8003 -- Classifications (Node3-Sem) (set to Empty if none) 8004 -- Is_Expanded_Contract (Flag1-Sem) 8005 8006 -- Pre_Post_Conditions contains a collection of pragmas that correspond 8007 -- to pre- and postconditions associated with an entry or a subprogram 8008 -- [body or stub]. The pragmas can either come from source or be the 8009 -- byproduct of aspect expansion. Currently the following pragmas appear 8010 -- in this list: 8011 -- Post 8012 -- Postcondition 8013 -- Pre 8014 -- Precondition 8015 -- Refined_Post 8016 -- The ordering in the list is in LIFO fashion. 8017 8018 -- Note that there might be multiple preconditions or postconditions 8019 -- in this list, either because they come from separate pragmas in the 8020 -- source, or because a Pre (resp. Post) aspect specification has been 8021 -- broken into AND THEN sections. See Split_PPC for details. 8022 8023 -- In GNATprove mode, the inherited classwide pre- and postconditions 8024 -- (suitably specialized for the specific type of the overriding 8025 -- operation) are also in this list. 8026 8027 -- Contract_Test_Cases contains a collection of pragmas that correspond 8028 -- to aspects/pragmas Contract_Cases and Test_Case. The ordering in the 8029 -- list is in LIFO fashion. 8030 8031 -- Classifications contains pragmas that either declare, categorize, or 8032 -- establish dependencies between subprogram or package inputs and 8033 -- outputs. Currently the following pragmas appear in this list: 8034 -- Abstract_States 8035 -- Async_Readers 8036 -- Async_Writers 8037 -- Constant_After_Elaboration 8038 -- Depends 8039 -- Effective_Reads 8040 -- Effective_Writes 8041 -- Extensions_Visible 8042 -- Global 8043 -- Initial_Condition 8044 -- Initializes 8045 -- Part_Of 8046 -- Refined_Depends 8047 -- Refined_Global 8048 -- Refined_States 8049 -- Volatile_Function 8050 -- The ordering is in LIFO fashion. 8051 8052 ------------------- 8053 -- Expanded Name -- 8054 ------------------- 8055 8056 -- The N_Expanded_Name node is used to represent a selected component 8057 -- name that has been resolved to an expanded name. The semantic phase 8058 -- replaces N_Selected_Component nodes that represent names by the use 8059 -- of this node, leaving the N_Selected_Component node used only when 8060 -- the prefix is a record or protected type. 8061 8062 -- The fields of the N_Expanded_Name node are layed out identically 8063 -- to those of the N_Selected_Component node, allowing conversion of 8064 -- an expanded name node to a selected component node to be done 8065 -- easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name. 8066 8067 -- There is no special sprint syntax for an expanded name 8068 8069 -- N_Expanded_Name 8070 -- Sloc points to the period 8071 -- Chars (Name1) copy of Chars field of selector name 8072 -- Prefix (Node3) 8073 -- Selector_Name (Node2) 8074 -- Entity (Node4-Sem) 8075 -- Associated_Node (Node4-Sem) 8076 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 8077 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 8078 -- Has_Private_View (Flag11-Sem) set in generic units 8079 -- Redundant_Use (Flag13-Sem) 8080 -- Atomic_Sync_Required (Flag14-Sem) 8081 -- plus fields for expression 8082 8083 ----------------------------- 8084 -- Expression With Actions -- 8085 ----------------------------- 8086 8087 -- This node is created by the analyzer/expander to handle some 8088 -- expansion cases, notably short-circuit forms where there are 8089 -- actions associated with the right-hand side operand. 8090 8091 -- The N_Expression_With_Actions node represents an expression with 8092 -- an associated set of actions (which are executable statements and 8093 -- declarations, as might occur in a handled statement sequence). 8094 8095 -- The required semantics is that the set of actions is executed in 8096 -- the order in which it appears just before the expression is 8097 -- evaluated (and these actions must only be executed if the value 8098 -- of the expression is evaluated). The node is considered to be 8099 -- a subexpression, whose value is the value of the Expression after 8100 -- executing all the actions. 8101 8102 -- If the actions contain declarations, then these declarations may 8103 -- be referenced within the expression. However note that there is 8104 -- no proper scope associated with the expression-with-action, so the 8105 -- back-end will elaborate them in the context of the enclosing scope. 8106 8107 -- Sprint syntax: do 8108 -- action; 8109 -- action; 8110 -- ... 8111 -- action; 8112 -- in expression end 8113 8114 -- N_Expression_With_Actions 8115 -- Actions (List1) 8116 -- Expression (Node3) 8117 -- plus fields for expression 8118 8119 -- Note: In the final generated tree presented to the code generator, 8120 -- the actions list is always non-null, since there is no point in this 8121 -- node if the actions are Empty. During semantic analysis there are 8122 -- cases where it is convenient to temporarily generate an empty actions 8123 -- list. This arises in cases where we create such an empty actions 8124 -- list, and it may or may not end up being a place where additional 8125 -- actions are inserted. The expander removes such empty cases after 8126 -- the expression of the node is fully analyzed and expanded, at which 8127 -- point it is safe to remove it, since no more actions can be inserted. 8128 8129 -- Note: In Modify_Tree_For_C, we never generate any declarations in 8130 -- the action list, which can contain only non-declarative statements. 8131 8132 -------------------- 8133 -- Free Statement -- 8134 -------------------- 8135 8136 -- The N_Free_Statement node is generated as a result of a call to an 8137 -- instantiation of Unchecked_Deallocation. The instantiation of this 8138 -- generic is handled specially and generates this node directly. 8139 8140 -- Sprint syntax: free expression 8141 8142 -- N_Free_Statement 8143 -- Sloc is copied from the unchecked deallocation call 8144 -- Expression (Node3) argument to unchecked deallocation call 8145 -- Storage_Pool (Node1-Sem) 8146 -- Procedure_To_Call (Node2-Sem) 8147 -- Actual_Designated_Subtype (Node4-Sem) 8148 8149 -- Note: in the case where a debug source file is generated, the Sloc 8150 -- for this node points to the FREE keyword in the Sprint file output. 8151 8152 ------------------- 8153 -- Freeze Entity -- 8154 ------------------- 8155 8156 -- This node marks the point in a declarative part at which an entity 8157 -- declared therein becomes frozen. The expander places initialization 8158 -- procedures for types at those points. Gigi uses the freezing point 8159 -- to elaborate entities that may depend on previous private types. 8160 8161 -- See the section in Einfo "Delayed Freezing and Elaboration" for 8162 -- a full description of the use of this node. 8163 8164 -- The Entity field points back to the entity for the type (whose 8165 -- Freeze_Node field points back to this freeze node). 8166 8167 -- The Actions field contains a list of declarations and statements 8168 -- generated by the expander which are associated with the freeze 8169 -- node, and are elaborated as though the freeze node were replaced 8170 -- by this sequence of actions. 8171 8172 -- Note: the Sloc field in the freeze node references a construct 8173 -- associated with the freezing point. This is used for posting 8174 -- messages in some error/warning situations, e.g. the case where 8175 -- a primitive operation of a tagged type is declared too late. 8176 8177 -- Sprint syntax: freeze entity-name [ 8178 -- freeze actions 8179 -- ] 8180 8181 -- N_Freeze_Entity 8182 -- Sloc points near freeze point (see above special note) 8183 -- Entity (Node4-Sem) 8184 -- Access_Types_To_Process (Elist2-Sem) (set to No_Elist if none) 8185 -- TSS_Elist (Elist3-Sem) (set to No_Elist if no associated TSS's) 8186 -- Actions (List1) (set to No_List if no freeze actions) 8187 -- First_Subtype_Link (Node5-Sem) (set to Empty if no link) 8188 8189 -- The Actions field holds actions associated with the freeze. These 8190 -- actions are elaborated at the point where the type is frozen. 8191 8192 -- Note: in the case where a debug source file is generated, the Sloc 8193 -- for this node points to the FREEZE keyword in the Sprint file output. 8194 8195 --------------------------- 8196 -- Freeze Generic Entity -- 8197 --------------------------- 8198 8199 -- The freeze point of an entity indicates the point at which the 8200 -- information needed to generate code for the entity is complete. 8201 -- The freeze node for an entity triggers expander activities, such as 8202 -- build initialization procedures, and backend activities, such as 8203 -- completing the elaboration of packages. 8204 8205 -- For entities declared within a generic unit, for which no code is 8206 -- generated, the freeze point is not equally meaningful. However, in 8207 -- Ada 2012 several semantic checks on declarations must be delayed to 8208 -- the freeze point, and we need to include such a mark in the tree to 8209 -- trigger these checks. The Freeze_Generic_Entity node plays no other 8210 -- role, and is ignored by the expander and the back-end. 8211 8212 -- Sprint syntax: freeze_generic entity-name 8213 8214 -- N_Freeze_Generic_Entity 8215 -- Sloc points near freeze point 8216 -- Entity (Node4-Sem) 8217 8218 -------------------------------- 8219 -- Implicit Label Declaration -- 8220 -------------------------------- 8221 8222 -- An implicit label declaration is created for every occurrence of a 8223 -- label on a statement or a label on a block or loop. It is chained 8224 -- in the declarations of the innermost enclosing block as specified 8225 -- in RM section 5.1 (3). 8226 8227 -- The Defining_Identifier is the actual identifier for the statement 8228 -- identifier. Note that the occurrence of the label is a reference, NOT 8229 -- the defining occurrence. The defining occurrence occurs at the head 8230 -- of the innermost enclosing block, and is represented by this node. 8231 8232 -- Note: from the grammar, this might better be called an implicit 8233 -- statement identifier declaration, but the term we choose seems 8234 -- friendlier, since at least informally statement identifiers are 8235 -- called labels in both cases (i.e. when used in labels, and when 8236 -- used as the identifiers of blocks and loops). 8237 8238 -- Note: although this is logically a semantic node, since it does not 8239 -- correspond directly to a source syntax construction, these nodes are 8240 -- actually created by the parser in a post pass done just after parsing 8241 -- is complete, before semantic analysis is started (see Par.Labl). 8242 8243 -- Sprint syntax: labelname : label; 8244 8245 -- N_Implicit_Label_Declaration 8246 -- Sloc points to the << token for a statement identifier, or to the 8247 -- LOOP, DECLARE, or BEGIN token for a loop or block identifier 8248 -- Defining_Identifier (Node1) 8249 -- Label_Construct (Node2-Sem) 8250 8251 -- Note: in the case where a debug source file is generated, the Sloc 8252 -- for this node points to the label name in the generated declaration. 8253 8254 --------------------- 8255 -- Itype Reference -- 8256 --------------------- 8257 8258 -- This node is used to create a reference to an Itype. The only purpose 8259 -- is to make sure the Itype is defined if this is the first reference. 8260 8261 -- A typical use of this node is when an Itype is to be referenced in 8262 -- two branches of an IF statement. In this case it is important that 8263 -- the first use of the Itype not be inside the conditional, since then 8264 -- it might not be defined if the other branch of the IF is taken, in 8265 -- the case where the definition generates elaboration code. 8266 8267 -- The Itype field points to the referenced Itype 8268 8269 -- Sprint syntax: reference itype-name 8270 8271 -- N_Itype_Reference 8272 -- Sloc points to the node generating the reference 8273 -- Itype (Node1-Sem) 8274 8275 -- Note: in the case where a debug source file is generated, the Sloc 8276 -- for this node points to the REFERENCE keyword in the file output. 8277 8278 --------------------- 8279 -- Raise xxx Error -- 8280 --------------------- 8281 8282 -- One of these nodes is created during semantic analysis to replace 8283 -- a node for an expression that is determined to definitely raise 8284 -- the corresponding exception. 8285 8286 -- The N_Raise_xxx_Error node may also stand alone in place 8287 -- of a declaration or statement, in which case it simply causes 8288 -- the exception to be raised (i.e. it is equivalent to a raise 8289 -- statement that raises the corresponding exception). This use 8290 -- is distinguished by the fact that the Etype in this case is 8291 -- Standard_Void_Type; in the subexpression case, the Etype is the 8292 -- same as the type of the subexpression which it replaces. 8293 8294 -- If Condition is empty, then the raise is unconditional. If the 8295 -- Condition field is non-empty, it is a boolean expression which is 8296 -- first evaluated, and the exception is raised only if the value of the 8297 -- expression is True. In the unconditional case, the creation of this 8298 -- node is usually accompanied by a warning message (unless it appears 8299 -- within the right operand of a short-circuit form whose left argument 8300 -- is static and decisively eliminates elaboration of the raise 8301 -- operation). The condition field can ONLY be present when the node is 8302 -- used as a statement form; it must NOT be present in the case where 8303 -- the node appears within an expression. 8304 8305 -- The exception is generated with a message that contains the 8306 -- file name and line number, and then appended text. The Reason 8307 -- code shows the text to be added. The Reason code is an element 8308 -- of the type Types.RT_Exception_Code, and indicates both the 8309 -- message to be added, and the exception to be raised (which must 8310 -- match the node type). The value is stored by storing a Uint which 8311 -- is the Pos value of the enumeration element in this type. 8312 8313 -- Gigi restriction: This expander ensures that the type of the 8314 -- Condition field is always Standard.Boolean, even if the type 8315 -- in the source is some non-standard boolean type. 8316 8317 -- Sprint syntax: [xxx_error "msg"] 8318 -- or: [xxx_error when condition "msg"] 8319 8320 -- N_Raise_Constraint_Error 8321 -- Sloc references related construct 8322 -- Condition (Node1) (set to Empty if no condition) 8323 -- Reason (Uint3) 8324 -- plus fields for expression 8325 8326 -- N_Raise_Program_Error 8327 -- Sloc references related construct 8328 -- Condition (Node1) (set to Empty if no condition) 8329 -- Reason (Uint3) 8330 -- plus fields for expression 8331 8332 -- N_Raise_Storage_Error 8333 -- Sloc references related construct 8334 -- Condition (Node1) (set to Empty if no condition) 8335 -- Reason (Uint3) 8336 -- plus fields for expression 8337 8338 -- Note: Sloc is copied from the expression generating the exception. 8339 -- In the case where a debug source file is generated, the Sloc for 8340 -- this node points to the left bracket in the Sprint file output. 8341 8342 -- Note: the back end may be required to translate these nodes into 8343 -- appropriate goto statements. See description of N_Push/Pop_xxx_Label. 8344 8345 --------------------------------------------- 8346 -- Optimization of Exception Raise to Goto -- 8347 --------------------------------------------- 8348 8349 -- In some cases, the front end will determine that any exception raised 8350 -- by the back end for a certain exception should be transformed into a 8351 -- goto statement. 8352 8353 -- There are three kinds of exceptions raised by the back end (note that 8354 -- for this purpose we consider gigi to be part of the back end in the 8355 -- gcc case): 8356 8357 -- 1. Exceptions resulting from N_Raise_xxx_Error nodes 8358 -- 2. Exceptions from checks triggered by Do_xxx_Check flags 8359 -- 3. Other cases not specifically marked by the front end 8360 8361 -- Normally all such exceptions are translated into calls to the proper 8362 -- Rcheck_xx procedure, where xx encodes both the exception to be raised 8363 -- and the exception message. 8364 8365 -- The front end may determine that for a particular sequence of code, 8366 -- exceptions in any of these three categories for a particular builtin 8367 -- exception should result in a goto, rather than a call to Rcheck_xx. 8368 -- The exact sequence to be generated is: 8369 8370 -- Local_Raise (exception'Identity); 8371 -- goto Label 8372 8373 -- The front end marks such a sequence of code by bracketing it with 8374 -- push and pop nodes: 8375 8376 -- N_Push_xxx_Label (referencing the label) 8377 -- ... 8378 -- (code where transformation is expected for exception xxx) 8379 -- ... 8380 -- N_Pop_xxx_Label 8381 8382 -- The use of push/pop reflects the fact that such regions can properly 8383 -- nest, and one special case is a subregion in which no transformation 8384 -- is allowed. Such a region is marked by a N_Push_xxx_Label node whose 8385 -- Exception_Label field is Empty. 8386 8387 -- N_Push_Constraint_Error_Label 8388 -- Sloc references first statement in region covered 8389 -- Exception_Label (Node5-Sem) 8390 8391 -- N_Push_Program_Error_Label 8392 -- Sloc references first statement in region covered 8393 -- Exception_Label (Node5-Sem) 8394 8395 -- N_Push_Storage_Error_Label 8396 -- Sloc references first statement in region covered 8397 -- Exception_Label (Node5-Sem) 8398 8399 -- N_Pop_Constraint_Error_Label 8400 -- Sloc references last statement in region covered 8401 8402 -- N_Pop_Program_Error_Label 8403 -- Sloc references last statement in region covered 8404 8405 -- N_Pop_Storage_Error_Label 8406 -- Sloc references last statement in region covered 8407 8408 --------------- 8409 -- Reference -- 8410 --------------- 8411 8412 -- For a number of purposes, we need to construct references to objects. 8413 -- These references are subsequently treated as normal access values. 8414 -- An example is the construction of the parameter block passed to a 8415 -- task entry. The N_Reference node is provided for this purpose. It is 8416 -- similar in effect to the use of the Unrestricted_Access attribute, 8417 -- and like Unrestricted_Access can be applied to objects which would 8418 -- not be valid prefixes for the Unchecked_Access attribute (e.g. 8419 -- objects which are not aliased, and slices). In addition it can be 8420 -- applied to composite type values as well as objects, including string 8421 -- values and aggregates. 8422 8423 -- Note: we use the Prefix field for this expression so that the 8424 -- resulting node can be treated using common code with the attribute 8425 -- nodes for the 'Access and related attributes. Logically it would make 8426 -- more sense to call it an Expression field, but then we would have to 8427 -- special case the treatment of the N_Reference node. 8428 8429 -- Note: evaluating a N_Reference node is guaranteed to yield a non-null 8430 -- value at run time. Therefore, it is valid to set Is_Known_Non_Null on 8431 -- a temporary initialized to a N_Reference node in order to eliminate 8432 -- superfluous access checks. 8433 8434 -- Sprint syntax: prefix'reference 8435 8436 -- N_Reference 8437 -- Sloc is copied from the expression 8438 -- Prefix (Node3) 8439 -- plus fields for expression 8440 8441 -- Note: in the case where a debug source file is generated, the Sloc 8442 -- for this node points to the quote in the Sprint file output. 8443 8444 ---------------- 8445 -- SCIL Nodes -- 8446 ---------------- 8447 8448 -- SCIL nodes are special nodes added to the tree when the CodePeer mode 8449 -- is active. They are only generated if SCIL generation is enabled. 8450 -- A standard tree-walk will not encounter these nodes even if they 8451 -- are present; these nodes are only accessible via the function 8452 -- SCIL_LL.Get_SCIL_Node. These nodes have no associated dynamic 8453 -- semantics. 8454 8455 -- Sprint syntax: [ <node kind> ] 8456 -- No semantic field values are displayed. 8457 8458 -- N_SCIL_Dispatch_Table_Tag_Init 8459 -- Sloc references a node for a tag initialization 8460 -- SCIL_Entity (Node4-Sem) 8461 -- 8462 -- An N_SCIL_Dispatch_Table_Tag_Init node may be associated (via 8463 -- Get_SCIL_Node) with the N_Object_Declaration node corresponding to 8464 -- the declaration of the dispatch table for a tagged type. 8465 8466 -- N_SCIL_Dispatching_Call 8467 -- Sloc references the node of a dispatching call 8468 -- SCIL_Target_Prim (Node2-Sem) 8469 -- SCIL_Entity (Node4-Sem) 8470 -- SCIL_Controlling_Tag (Node5-Sem) 8471 -- 8472 -- An N_Scil_Dispatching call node may be associated (via Get_SCIL_Node) 8473 -- with the N_Procedure_Call_Statement or N_Function_Call node (or a 8474 -- rewriting thereof) corresponding to a dispatching call. 8475 8476 -- N_SCIL_Membership_Test 8477 -- Sloc references the node of a membership test 8478 -- SCIL_Tag_Value (Node5-Sem) 8479 -- SCIL_Entity (Node4-Sem) 8480 -- 8481 -- An N_Scil_Membership_Test node may be associated (via Get_SCIL_Node) 8482 -- with the N_In node (or a rewriting thereof) corresponding to a 8483 -- classwide membership test. 8484 8485 -------------------------- 8486 -- Unchecked Expression -- 8487 -------------------------- 8488 8489 -- An unchecked expression is one that must be analyzed and resolved 8490 -- with all checks off, regardless of the current setting of scope 8491 -- suppress flags. 8492 8493 -- Sprint syntax: `(expression) 8494 8495 -- Note: this node is always removed from the tree (and replaced by 8496 -- its constituent expression) on completion of analysis, so it only 8497 -- appears in intermediate trees, and will never be seen by Gigi. 8498 8499 -- N_Unchecked_Expression 8500 -- Sloc is a copy of the Sloc of the expression 8501 -- Expression (Node3) 8502 -- plus fields for expression 8503 8504 -- Note: in the case where a debug source file is generated, the Sloc 8505 -- for this node points to the back quote in the Sprint file output. 8506 8507 ------------------------------- 8508 -- Unchecked Type Conversion -- 8509 ------------------------------- 8510 8511 -- An unchecked type conversion node represents the semantic action 8512 -- corresponding to a call to an instantiation of Unchecked_Conversion. 8513 -- It is generated as a result of actual use of Unchecked_Conversion 8514 -- and also the expander generates unchecked type conversion nodes 8515 -- directly for expansion of complex semantic actions. 8516 8517 -- Note: an unchecked type conversion is a variable as far as the 8518 -- semantics are concerned, which is convenient for the expander. 8519 -- This does not change what Ada source programs are legal, since 8520 -- clearly a function call to an instantiation of Unchecked_Conversion 8521 -- is not a variable in any case. 8522 8523 -- Sprint syntax: subtype-mark!(expression) 8524 8525 -- N_Unchecked_Type_Conversion 8526 -- Sloc points to related node in source 8527 -- Subtype_Mark (Node4) 8528 -- Expression (Node3) 8529 -- Kill_Range_Check (Flag11-Sem) 8530 -- No_Truncation (Flag17-Sem) 8531 -- plus fields for expression 8532 8533 -- Note: in the case where a debug source file is generated, the Sloc 8534 -- for this node points to the exclamation in the Sprint file output. 8535 8536 ----------------------------------- 8537 -- Validate_Unchecked_Conversion -- 8538 ----------------------------------- 8539 8540 -- The front end does most of the validation of unchecked conversion, 8541 -- including checking sizes (this is done after the back end is called 8542 -- to take advantage of back-annotation of calculated sizes). 8543 8544 -- The front end also deals with specific cases that are not allowed 8545 -- e.g. involving unconstrained array types. 8546 8547 -- For the case of the standard gigi backend, this means that all 8548 -- checks are done in the front end. 8549 8550 -- However, in the case of specialized back-ends, in particular the JVM 8551 -- backend in the past, additional requirements and restrictions may 8552 -- apply to unchecked conversion, and these are most conveniently 8553 -- performed in the specialized back-end. 8554 8555 -- To accommodate this requirement, for such back ends, the following 8556 -- special node is generated recording an unchecked conversion that 8557 -- needs to be validated. The back end should post an appropriate 8558 -- error message if the unchecked conversion is invalid or warrants 8559 -- a special warning message. 8560 8561 -- Source_Type and Target_Type point to the entities for the two 8562 -- types involved in the unchecked conversion instantiation that 8563 -- is to be validated. 8564 8565 -- Sprint syntax: validate Unchecked_Conversion (source, target); 8566 8567 -- N_Validate_Unchecked_Conversion 8568 -- Sloc points to instantiation (location for warning message) 8569 -- Source_Type (Node1-Sem) 8570 -- Target_Type (Node2-Sem) 8571 8572 -- Note: in the case where a debug source file is generated, the Sloc 8573 -- for this node points to the VALIDATE keyword in the file output. 8574 8575 ------------------------------- 8576 -- Variable_Reference_Marker -- 8577 ------------------------------- 8578 8579 -- This node is created during the analysis of direct or expanded names, 8580 -- and the resolution of entry and subprogram calls. It performs several 8581 -- functions: 8582 8583 -- * Variable reference markers provide a uniform model for handling 8584 -- variable references by the ABE mechanism, regardless of whether 8585 -- expansion took place. 8586 8587 -- * The variable reference marker captures the entity of the variable 8588 -- being read or written. 8589 8590 -- * The variable reference markers aid the ABE Processing phase by 8591 -- signaling the presence of a call in case the original variable 8592 -- reference was transformed by expansion. 8593 8594 -- Sprint syntax: r#target# -- for a read 8595 -- rw#target# -- for a read/write 8596 -- w#target# -- for a write 8597 8598 -- The Sprint syntax shown above is not enabled by default 8599 8600 -- N_Variable_Reference_Marker 8601 -- Sloc points to Sloc of original variable reference 8602 -- Target (Node1-Sem) 8603 -- Is_Read (Flag1-Sem) 8604 -- Is_Write (Flag2-Sem) 8605 8606 ----------- 8607 -- Empty -- 8608 ----------- 8609 8610 -- Used as the contents of the Nkind field of the dummy Empty node and in 8611 -- some other situations to indicate an uninitialized value. 8612 8613 -- N_Empty 8614 -- Chars (Name1) is set to No_Name 8615 8616 ----------- 8617 -- Error -- 8618 ----------- 8619 8620 -- Used as the contents of the Nkind field of the dummy Error node. 8621 -- Has an Etype field, which gets set to Any_Type later on, to help 8622 -- error recovery (Error_Posted is also set in the Error node). 8623 8624 -- N_Error 8625 -- Chars (Name1) is set to Error_Name 8626 -- Etype (Node5-Sem) 8627 8628 -------------------------- 8629 -- Node Type Definition -- 8630 -------------------------- 8631 8632 -- The following is the definition of the Node_Kind type. As previously 8633 -- discussed, this is separated off to allow rearrangement of the order to 8634 -- facilitate definition of subtype ranges. The comments show the subtype 8635 -- classes which apply to each set of node kinds. The first entry in the 8636 -- comment characterizes the following list of nodes. 8637 8638 type Node_Kind is ( 8639 N_Unused_At_Start, 8640 8641 -- N_Representation_Clause 8642 8643 N_At_Clause, 8644 N_Component_Clause, 8645 N_Enumeration_Representation_Clause, 8646 N_Mod_Clause, 8647 N_Record_Representation_Clause, 8648 8649 -- N_Representation_Clause, N_Has_Chars 8650 8651 N_Attribute_Definition_Clause, 8652 8653 -- N_Has_Chars 8654 8655 N_Empty, 8656 N_Pragma_Argument_Association, 8657 8658 -- N_Has_Etype, N_Has_Chars 8659 8660 -- Note: of course N_Error does not really have Etype or Chars fields, 8661 -- and any attempt to access these fields in N_Error will cause an 8662 -- error, but historically this always has been positioned so that an 8663 -- "in N_Has_Chars" or "in N_Has_Etype" test yields true for N_Error. 8664 -- Most likely this makes coding easier somewhere but still seems 8665 -- undesirable. To be investigated some time ??? 8666 8667 N_Error, 8668 8669 -- N_Entity, N_Has_Etype, N_Has_Chars 8670 8671 N_Defining_Character_Literal, 8672 N_Defining_Identifier, 8673 N_Defining_Operator_Symbol, 8674 8675 -- N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity 8676 8677 N_Expanded_Name, 8678 8679 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 8680 -- N_Has_Chars, N_Has_Entity 8681 8682 N_Identifier, 8683 N_Operator_Symbol, 8684 8685 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 8686 -- N_Has_Chars, N_Has_Entity 8687 8688 N_Character_Literal, 8689 8690 -- N_Binary_Op, N_Op, N_Subexpr, 8691 -- N_Has_Etype, N_Has_Chars, N_Has_Entity 8692 8693 N_Op_Add, 8694 N_Op_Concat, 8695 N_Op_Expon, 8696 N_Op_Subtract, 8697 8698 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Treat_Fixed_As_Integer 8699 -- N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator 8700 8701 N_Op_Divide, 8702 N_Op_Mod, 8703 N_Op_Multiply, 8704 N_Op_Rem, 8705 8706 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8707 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8708 8709 N_Op_And, 8710 8711 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8712 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare 8713 8714 N_Op_Eq, 8715 N_Op_Ge, 8716 N_Op_Gt, 8717 N_Op_Le, 8718 N_Op_Lt, 8719 N_Op_Ne, 8720 8721 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8722 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8723 8724 N_Op_Or, 8725 N_Op_Xor, 8726 8727 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype, 8728 -- N_Op_Shift, N_Has_Chars, N_Has_Entity 8729 8730 N_Op_Rotate_Left, 8731 N_Op_Rotate_Right, 8732 N_Op_Shift_Left, 8733 N_Op_Shift_Right, 8734 N_Op_Shift_Right_Arithmetic, 8735 8736 -- N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype, 8737 -- N_Has_Chars, N_Has_Entity 8738 8739 N_Op_Abs, 8740 N_Op_Minus, 8741 N_Op_Not, 8742 N_Op_Plus, 8743 8744 -- N_Subexpr, N_Has_Etype, N_Has_Entity 8745 8746 N_Attribute_Reference, 8747 8748 -- N_Subexpr, N_Has_Etype, N_Membership_Test 8749 8750 N_In, 8751 N_Not_In, 8752 8753 -- N_Subexpr, N_Has_Etype, N_Short_Circuit 8754 8755 N_And_Then, 8756 N_Or_Else, 8757 8758 -- N_Subexpr, N_Has_Etype, N_Subprogram_Call 8759 8760 N_Function_Call, 8761 N_Procedure_Call_Statement, 8762 8763 -- N_Subexpr, N_Has_Etype, N_Raise_xxx_Error 8764 8765 N_Raise_Constraint_Error, 8766 N_Raise_Program_Error, 8767 N_Raise_Storage_Error, 8768 8769 -- N_Subexpr, N_Has_Etype, N_Numeric_Or_String_Literal 8770 8771 N_Integer_Literal, 8772 N_Real_Literal, 8773 N_String_Literal, 8774 8775 -- N_Subexpr, N_Has_Etype 8776 8777 N_Explicit_Dereference, 8778 N_Expression_With_Actions, 8779 N_If_Expression, 8780 N_Indexed_Component, 8781 N_Null, 8782 N_Qualified_Expression, 8783 N_Quantified_Expression, 8784 N_Reduction_Expression, 8785 N_Reduction_Expression_Parameter, 8786 N_Aggregate, 8787 N_Allocator, 8788 N_Case_Expression, 8789 N_Delta_Aggregate, 8790 N_Extension_Aggregate, 8791 N_Raise_Expression, 8792 N_Range, 8793 N_Reference, 8794 N_Selected_Component, 8795 N_Slice, 8796 N_Target_Name, 8797 N_Type_Conversion, 8798 N_Unchecked_Expression, 8799 N_Unchecked_Type_Conversion, 8800 8801 -- N_Has_Etype 8802 8803 N_Subtype_Indication, 8804 8805 -- N_Declaration 8806 8807 N_Component_Declaration, 8808 N_Entry_Declaration, 8809 N_Expression_Function, 8810 N_Formal_Object_Declaration, 8811 N_Formal_Type_Declaration, 8812 N_Full_Type_Declaration, 8813 N_Incomplete_Type_Declaration, 8814 N_Iterator_Specification, 8815 N_Loop_Parameter_Specification, 8816 N_Object_Declaration, 8817 N_Protected_Type_Declaration, 8818 N_Private_Extension_Declaration, 8819 N_Private_Type_Declaration, 8820 N_Subtype_Declaration, 8821 8822 -- N_Subprogram_Specification, N_Declaration 8823 8824 N_Function_Specification, 8825 N_Procedure_Specification, 8826 8827 -- N_Access_To_Subprogram_Definition 8828 8829 N_Access_Function_Definition, 8830 N_Access_Procedure_Definition, 8831 8832 -- N_Later_Decl_Item 8833 8834 N_Task_Type_Declaration, 8835 8836 -- N_Body_Stub, N_Later_Decl_Item 8837 8838 N_Package_Body_Stub, 8839 N_Protected_Body_Stub, 8840 N_Subprogram_Body_Stub, 8841 N_Task_Body_Stub, 8842 8843 -- N_Generic_Instantiation, N_Later_Decl_Item 8844 -- N_Subprogram_Instantiation 8845 8846 N_Function_Instantiation, 8847 N_Procedure_Instantiation, 8848 8849 -- N_Generic_Instantiation, N_Later_Decl_Item 8850 8851 N_Package_Instantiation, 8852 8853 -- N_Unit_Body, N_Later_Decl_Item, N_Proper_Body 8854 8855 N_Package_Body, 8856 N_Subprogram_Body, 8857 8858 -- N_Later_Decl_Item, N_Proper_Body 8859 8860 N_Protected_Body, 8861 N_Task_Body, 8862 8863 -- N_Later_Decl_Item 8864 8865 N_Implicit_Label_Declaration, 8866 N_Package_Declaration, 8867 N_Single_Task_Declaration, 8868 N_Subprogram_Declaration, 8869 N_Use_Package_Clause, 8870 8871 -- N_Generic_Declaration, N_Later_Decl_Item 8872 8873 N_Generic_Package_Declaration, 8874 N_Generic_Subprogram_Declaration, 8875 8876 -- N_Array_Type_Definition 8877 8878 N_Constrained_Array_Definition, 8879 N_Unconstrained_Array_Definition, 8880 8881 -- N_Renaming_Declaration 8882 8883 N_Exception_Renaming_Declaration, 8884 N_Object_Renaming_Declaration, 8885 N_Package_Renaming_Declaration, 8886 N_Subprogram_Renaming_Declaration, 8887 8888 -- N_Generic_Renaming_Declaration, N_Renaming_Declaration 8889 8890 N_Generic_Function_Renaming_Declaration, 8891 N_Generic_Package_Renaming_Declaration, 8892 N_Generic_Procedure_Renaming_Declaration, 8893 8894 -- N_Statement_Other_Than_Procedure_Call 8895 8896 N_Abort_Statement, 8897 N_Accept_Statement, 8898 N_Assignment_Statement, 8899 N_Asynchronous_Select, 8900 N_Block_Statement, 8901 N_Case_Statement, 8902 N_Code_Statement, 8903 N_Compound_Statement, 8904 N_Conditional_Entry_Call, 8905 8906 -- N_Statement_Other_Than_Procedure_Call, N_Delay_Statement 8907 8908 N_Delay_Relative_Statement, 8909 N_Delay_Until_Statement, 8910 8911 -- N_Statement_Other_Than_Procedure_Call 8912 8913 N_Entry_Call_Statement, 8914 N_Free_Statement, 8915 N_Goto_Statement, 8916 N_Loop_Statement, 8917 N_Null_Statement, 8918 N_Raise_Statement, 8919 N_Requeue_Statement, 8920 N_Simple_Return_Statement, 8921 N_Extended_Return_Statement, 8922 N_Selective_Accept, 8923 N_Timed_Entry_Call, 8924 8925 -- N_Statement_Other_Than_Procedure_Call, N_Has_Condition 8926 8927 N_Exit_Statement, 8928 N_If_Statement, 8929 8930 -- N_Has_Condition 8931 8932 N_Accept_Alternative, 8933 N_Delay_Alternative, 8934 N_Elsif_Part, 8935 N_Entry_Body_Formal_Part, 8936 N_Iteration_Scheme, 8937 N_Terminate_Alternative, 8938 8939 -- N_Formal_Subprogram_Declaration 8940 8941 N_Formal_Abstract_Subprogram_Declaration, 8942 N_Formal_Concrete_Subprogram_Declaration, 8943 8944 -- N_Push_xxx_Label, N_Push_Pop_xxx_Label 8945 8946 N_Push_Constraint_Error_Label, 8947 N_Push_Program_Error_Label, 8948 N_Push_Storage_Error_Label, 8949 8950 -- N_Pop_xxx_Label, N_Push_Pop_xxx_Label 8951 8952 N_Pop_Constraint_Error_Label, 8953 N_Pop_Program_Error_Label, 8954 N_Pop_Storage_Error_Label, 8955 8956 -- SCIL nodes 8957 8958 N_SCIL_Dispatch_Table_Tag_Init, 8959 N_SCIL_Dispatching_Call, 8960 N_SCIL_Membership_Test, 8961 8962 -- Other nodes (not part of any subtype class) 8963 8964 N_Abortable_Part, 8965 N_Abstract_Subprogram_Declaration, 8966 N_Access_Definition, 8967 N_Access_To_Object_Definition, 8968 N_Aspect_Specification, 8969 N_Call_Marker, 8970 N_Case_Expression_Alternative, 8971 N_Case_Statement_Alternative, 8972 N_Compilation_Unit, 8973 N_Compilation_Unit_Aux, 8974 N_Component_Association, 8975 N_Component_Definition, 8976 N_Component_List, 8977 N_Contract, 8978 N_Derived_Type_Definition, 8979 N_Decimal_Fixed_Point_Definition, 8980 N_Defining_Program_Unit_Name, 8981 N_Delta_Constraint, 8982 N_Designator, 8983 N_Digits_Constraint, 8984 N_Discriminant_Association, 8985 N_Discriminant_Specification, 8986 N_Enumeration_Type_Definition, 8987 N_Entry_Body, 8988 N_Entry_Call_Alternative, 8989 N_Entry_Index_Specification, 8990 N_Exception_Declaration, 8991 N_Exception_Handler, 8992 N_Floating_Point_Definition, 8993 N_Formal_Decimal_Fixed_Point_Definition, 8994 N_Formal_Derived_Type_Definition, 8995 N_Formal_Discrete_Type_Definition, 8996 N_Formal_Floating_Point_Definition, 8997 N_Formal_Modular_Type_Definition, 8998 N_Formal_Ordinary_Fixed_Point_Definition, 8999 N_Formal_Package_Declaration, 9000 N_Formal_Private_Type_Definition, 9001 N_Formal_Incomplete_Type_Definition, 9002 N_Formal_Signed_Integer_Type_Definition, 9003 N_Freeze_Entity, 9004 N_Freeze_Generic_Entity, 9005 N_Generic_Association, 9006 N_Handled_Sequence_Of_Statements, 9007 N_Index_Or_Discriminant_Constraint, 9008 N_Iterated_Component_Association, 9009 N_Itype_Reference, 9010 N_Label, 9011 N_Modular_Type_Definition, 9012 N_Number_Declaration, 9013 N_Ordinary_Fixed_Point_Definition, 9014 N_Others_Choice, 9015 N_Package_Specification, 9016 N_Parameter_Association, 9017 N_Parameter_Specification, 9018 N_Pragma, 9019 N_Protected_Definition, 9020 N_Range_Constraint, 9021 N_Real_Range_Specification, 9022 N_Record_Definition, 9023 N_Signed_Integer_Type_Definition, 9024 N_Single_Protected_Declaration, 9025 N_Subunit, 9026 N_Task_Definition, 9027 N_Triggering_Alternative, 9028 N_Use_Type_Clause, 9029 N_Validate_Unchecked_Conversion, 9030 N_Variable_Reference_Marker, 9031 N_Variant, 9032 N_Variant_Part, 9033 N_With_Clause, 9034 N_Unused_At_End); 9035 9036 for Node_Kind'Size use 8; 9037 -- The data structures in Atree assume this 9038 9039 ---------------------------- 9040 -- Node Class Definitions -- 9041 ---------------------------- 9042 9043 subtype N_Access_To_Subprogram_Definition is Node_Kind range 9044 N_Access_Function_Definition .. 9045 N_Access_Procedure_Definition; 9046 9047 subtype N_Array_Type_Definition is Node_Kind range 9048 N_Constrained_Array_Definition .. 9049 N_Unconstrained_Array_Definition; 9050 9051 subtype N_Binary_Op is Node_Kind range 9052 N_Op_Add .. 9053 N_Op_Shift_Right_Arithmetic; 9054 9055 subtype N_Body_Stub is Node_Kind range 9056 N_Package_Body_Stub .. 9057 N_Task_Body_Stub; 9058 9059 subtype N_Declaration is Node_Kind range 9060 N_Component_Declaration .. 9061 N_Procedure_Specification; 9062 -- Note: this includes all constructs normally thought of as declarations 9063 -- except those which are separately grouped as later declarations. 9064 9065 subtype N_Delay_Statement is Node_Kind range 9066 N_Delay_Relative_Statement .. 9067 N_Delay_Until_Statement; 9068 9069 subtype N_Direct_Name is Node_Kind range 9070 N_Identifier .. 9071 N_Character_Literal; 9072 9073 subtype N_Entity is Node_Kind range 9074 N_Defining_Character_Literal .. 9075 N_Defining_Operator_Symbol; 9076 9077 subtype N_Formal_Subprogram_Declaration is Node_Kind range 9078 N_Formal_Abstract_Subprogram_Declaration .. 9079 N_Formal_Concrete_Subprogram_Declaration; 9080 9081 subtype N_Generic_Declaration is Node_Kind range 9082 N_Generic_Package_Declaration .. 9083 N_Generic_Subprogram_Declaration; 9084 9085 subtype N_Generic_Instantiation is Node_Kind range 9086 N_Function_Instantiation .. 9087 N_Package_Instantiation; 9088 9089 subtype N_Generic_Renaming_Declaration is Node_Kind range 9090 N_Generic_Function_Renaming_Declaration .. 9091 N_Generic_Procedure_Renaming_Declaration; 9092 9093 subtype N_Has_Chars is Node_Kind range 9094 N_Attribute_Definition_Clause .. 9095 N_Op_Plus; 9096 9097 subtype N_Has_Entity is Node_Kind range 9098 N_Expanded_Name .. 9099 N_Attribute_Reference; 9100 -- Nodes that have Entity fields 9101 -- Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity, 9102 -- N_Aspect_Specification, or N_Attribute_Definition_Clause. 9103 9104 subtype N_Has_Etype is Node_Kind range 9105 N_Error .. 9106 N_Subtype_Indication; 9107 9108 subtype N_Has_Treat_Fixed_As_Integer is Node_Kind range 9109 N_Op_Divide .. 9110 N_Op_Rem; 9111 9112 subtype N_Multiplying_Operator is Node_Kind range 9113 N_Op_Divide .. 9114 N_Op_Rem; 9115 9116 subtype N_Later_Decl_Item is Node_Kind range 9117 N_Task_Type_Declaration .. 9118 N_Generic_Subprogram_Declaration; 9119 -- Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes 9120 -- only those items which can appear as later declarative items. This also 9121 -- includes N_Implicit_Label_Declaration which is not specifically in the 9122 -- grammar but may appear as a valid later declarative items. It does NOT 9123 -- include N_Pragma which can also appear among later declarative items. 9124 -- It does however include N_Protected_Body, which is a bit peculiar, but 9125 -- harmless since this cannot appear in Ada 83 mode anyway. 9126 9127 subtype N_Membership_Test is Node_Kind range 9128 N_In .. 9129 N_Not_In; 9130 9131 subtype N_Numeric_Or_String_Literal is Node_Kind range 9132 N_Integer_Literal .. 9133 N_String_Literal; 9134 9135 subtype N_Op is Node_Kind range 9136 N_Op_Add .. 9137 N_Op_Plus; 9138 9139 subtype N_Op_Boolean is Node_Kind range 9140 N_Op_And .. 9141 N_Op_Xor; 9142 -- Binary operators which take operands of a boolean type, and yield 9143 -- a result of a boolean type. 9144 9145 subtype N_Op_Compare is Node_Kind range 9146 N_Op_Eq .. 9147 N_Op_Ne; 9148 9149 subtype N_Op_Shift is Node_Kind range 9150 N_Op_Rotate_Left .. 9151 N_Op_Shift_Right_Arithmetic; 9152 9153 subtype N_Proper_Body is Node_Kind range 9154 N_Package_Body .. 9155 N_Task_Body; 9156 9157 subtype N_Push_xxx_Label is Node_Kind range 9158 N_Push_Constraint_Error_Label .. 9159 N_Push_Storage_Error_Label; 9160 9161 subtype N_Pop_xxx_Label is Node_Kind range 9162 N_Pop_Constraint_Error_Label .. 9163 N_Pop_Storage_Error_Label; 9164 9165 subtype N_Push_Pop_xxx_Label is Node_Kind range 9166 N_Push_Constraint_Error_Label .. 9167 N_Pop_Storage_Error_Label; 9168 9169 subtype N_Raise_xxx_Error is Node_Kind range 9170 N_Raise_Constraint_Error .. 9171 N_Raise_Storage_Error; 9172 9173 subtype N_Renaming_Declaration is Node_Kind range 9174 N_Exception_Renaming_Declaration .. 9175 N_Generic_Procedure_Renaming_Declaration; 9176 9177 subtype N_Representation_Clause is Node_Kind range 9178 N_At_Clause .. 9179 N_Attribute_Definition_Clause; 9180 9181 subtype N_Short_Circuit is Node_Kind range 9182 N_And_Then .. 9183 N_Or_Else; 9184 9185 subtype N_SCIL_Node is Node_Kind range 9186 N_SCIL_Dispatch_Table_Tag_Init .. 9187 N_SCIL_Membership_Test; 9188 9189 subtype N_Statement_Other_Than_Procedure_Call is Node_Kind range 9190 N_Abort_Statement .. 9191 N_If_Statement; 9192 -- Note that this includes all statement types except for the cases of the 9193 -- N_Procedure_Call_Statement which is considered to be a subexpression 9194 -- (since overloading is possible, so it needs to go through the normal 9195 -- overloading resolution for expressions). 9196 9197 subtype N_Subprogram_Call is Node_Kind range 9198 N_Function_Call .. 9199 N_Procedure_Call_Statement; 9200 9201 subtype N_Subprogram_Instantiation is Node_Kind range 9202 N_Function_Instantiation .. 9203 N_Procedure_Instantiation; 9204 9205 subtype N_Has_Condition is Node_Kind range 9206 N_Exit_Statement .. 9207 N_Terminate_Alternative; 9208 -- Nodes with condition fields (does not include N_Raise_xxx_Error) 9209 9210 subtype N_Subexpr is Node_Kind range 9211 N_Expanded_Name .. 9212 N_Unchecked_Type_Conversion; 9213 -- Nodes with expression fields 9214 9215 subtype N_Subprogram_Specification is Node_Kind range 9216 N_Function_Specification .. 9217 N_Procedure_Specification; 9218 9219 subtype N_Unary_Op is Node_Kind range 9220 N_Op_Abs .. 9221 N_Op_Plus; 9222 9223 subtype N_Unit_Body is Node_Kind range 9224 N_Package_Body .. 9225 N_Subprogram_Body; 9226 9227 --------------------------- 9228 -- Node Access Functions -- 9229 --------------------------- 9230 9231 -- The following functions return the contents of the indicated field of 9232 -- the node referenced by the argument, which is a Node_Id. They provide 9233 -- logical access to fields in the node which could be accessed using the 9234 -- Atree.Unchecked_Access package, but the idea is always to use these 9235 -- higher level routines which preserve strong typing. In debug mode, 9236 -- these routines check that they are being applied to an appropriate 9237 -- node, as well as checking that the node is in range. 9238 9239 function Abort_Present 9240 (N : Node_Id) return Boolean; -- Flag15 9241 9242 function Abortable_Part 9243 (N : Node_Id) return Node_Id; -- Node2 9244 9245 function Abstract_Present 9246 (N : Node_Id) return Boolean; -- Flag4 9247 9248 function Accept_Handler_Records 9249 (N : Node_Id) return List_Id; -- List5 9250 9251 function Accept_Statement 9252 (N : Node_Id) return Node_Id; -- Node2 9253 9254 function Access_Definition 9255 (N : Node_Id) return Node_Id; -- Node3 9256 9257 function Access_To_Subprogram_Definition 9258 (N : Node_Id) return Node_Id; -- Node3 9259 9260 function Access_Types_To_Process 9261 (N : Node_Id) return Elist_Id; -- Elist2 9262 9263 function Actions 9264 (N : Node_Id) return List_Id; -- List1 9265 9266 function Activation_Chain_Entity 9267 (N : Node_Id) return Node_Id; -- Node3 9268 9269 function Acts_As_Spec 9270 (N : Node_Id) return Boolean; -- Flag4 9271 9272 function Actual_Designated_Subtype 9273 (N : Node_Id) return Node_Id; -- Node4 9274 9275 function Address_Warning_Posted 9276 (N : Node_Id) return Boolean; -- Flag18 9277 9278 function Aggregate_Bounds 9279 (N : Node_Id) return Node_Id; -- Node3 9280 9281 function Aliased_Present 9282 (N : Node_Id) return Boolean; -- Flag4 9283 9284 function Alloc_For_BIP_Return 9285 (N : Node_Id) return Boolean; -- Flag1 9286 9287 function All_Others 9288 (N : Node_Id) return Boolean; -- Flag11 9289 9290 function All_Present 9291 (N : Node_Id) return Boolean; -- Flag15 9292 9293 function Alternatives 9294 (N : Node_Id) return List_Id; -- List4 9295 9296 function Ancestor_Part 9297 (N : Node_Id) return Node_Id; -- Node3 9298 9299 function Atomic_Sync_Required 9300 (N : Node_Id) return Boolean; -- Flag14 9301 9302 function Array_Aggregate 9303 (N : Node_Id) return Node_Id; -- Node3 9304 9305 function Aspect_Rep_Item 9306 (N : Node_Id) return Node_Id; -- Node2 9307 9308 function Assignment_OK 9309 (N : Node_Id) return Boolean; -- Flag15 9310 9311 function Associated_Node 9312 (N : Node_Id) return Node_Id; -- Node4 9313 9314 function At_End_Proc 9315 (N : Node_Id) return Node_Id; -- Node1 9316 9317 function Attribute_Name 9318 (N : Node_Id) return Name_Id; -- Name2 9319 9320 function Aux_Decls_Node 9321 (N : Node_Id) return Node_Id; -- Node5 9322 9323 function Backwards_OK 9324 (N : Node_Id) return Boolean; -- Flag6 9325 9326 function Bad_Is_Detected 9327 (N : Node_Id) return Boolean; -- Flag15 9328 9329 function By_Ref 9330 (N : Node_Id) return Boolean; -- Flag5 9331 9332 function Body_Required 9333 (N : Node_Id) return Boolean; -- Flag13 9334 9335 function Body_To_Inline 9336 (N : Node_Id) return Node_Id; -- Node3 9337 9338 function Box_Present 9339 (N : Node_Id) return Boolean; -- Flag15 9340 9341 function Char_Literal_Value 9342 (N : Node_Id) return Uint; -- Uint2 9343 9344 function Chars 9345 (N : Node_Id) return Name_Id; -- Name1 9346 9347 function Check_Address_Alignment 9348 (N : Node_Id) return Boolean; -- Flag11 9349 9350 function Choice_Parameter 9351 (N : Node_Id) return Node_Id; -- Node2 9352 9353 function Choices 9354 (N : Node_Id) return List_Id; -- List1 9355 9356 function Class_Present 9357 (N : Node_Id) return Boolean; -- Flag6 9358 9359 function Classifications 9360 (N : Node_Id) return Node_Id; -- Node3 9361 9362 function Cleanup_Actions 9363 (N : Node_Id) return List_Id; -- List5 9364 9365 function Comes_From_Extended_Return_Statement 9366 (N : Node_Id) return Boolean; -- Flag18 9367 9368 function Compile_Time_Known_Aggregate 9369 (N : Node_Id) return Boolean; -- Flag18 9370 9371 function Component_Associations 9372 (N : Node_Id) return List_Id; -- List2 9373 9374 function Component_Clauses 9375 (N : Node_Id) return List_Id; -- List3 9376 9377 function Component_Definition 9378 (N : Node_Id) return Node_Id; -- Node4 9379 9380 function Component_Items 9381 (N : Node_Id) return List_Id; -- List3 9382 9383 function Component_List 9384 (N : Node_Id) return Node_Id; -- Node1 9385 9386 function Component_Name 9387 (N : Node_Id) return Node_Id; -- Node1 9388 9389 function Componentwise_Assignment 9390 (N : Node_Id) return Boolean; -- Flag14 9391 9392 function Condition 9393 (N : Node_Id) return Node_Id; -- Node1 9394 9395 function Condition_Actions 9396 (N : Node_Id) return List_Id; -- List3 9397 9398 function Config_Pragmas 9399 (N : Node_Id) return List_Id; -- List4 9400 9401 function Constant_Present 9402 (N : Node_Id) return Boolean; -- Flag17 9403 9404 function Constraint 9405 (N : Node_Id) return Node_Id; -- Node3 9406 9407 function Constraints 9408 (N : Node_Id) return List_Id; -- List1 9409 9410 function Context_Installed 9411 (N : Node_Id) return Boolean; -- Flag13 9412 9413 function Context_Pending 9414 (N : Node_Id) return Boolean; -- Flag16 9415 9416 function Context_Items 9417 (N : Node_Id) return List_Id; -- List1 9418 9419 function Contract_Test_Cases 9420 (N : Node_Id) return Node_Id; -- Node2 9421 9422 function Controlling_Argument 9423 (N : Node_Id) return Node_Id; -- Node1 9424 9425 function Conversion_OK 9426 (N : Node_Id) return Boolean; -- Flag14 9427 9428 function Convert_To_Return_False 9429 (N : Node_Id) return Boolean; -- Flag13 9430 9431 function Corresponding_Aspect 9432 (N : Node_Id) return Node_Id; -- Node3 9433 9434 function Corresponding_Body 9435 (N : Node_Id) return Node_Id; -- Node5 9436 9437 function Corresponding_Formal_Spec 9438 (N : Node_Id) return Node_Id; -- Node3 9439 9440 function Corresponding_Generic_Association 9441 (N : Node_Id) return Node_Id; -- Node5 9442 9443 function Corresponding_Integer_Value 9444 (N : Node_Id) return Uint; -- Uint4 9445 9446 function Corresponding_Spec 9447 (N : Node_Id) return Entity_Id; -- Node5 9448 9449 function Corresponding_Spec_Of_Stub 9450 (N : Node_Id) return Node_Id; -- Node2 9451 9452 function Corresponding_Stub 9453 (N : Node_Id) return Node_Id; -- Node3 9454 9455 function Dcheck_Function 9456 (N : Node_Id) return Entity_Id; -- Node5 9457 9458 function Declarations 9459 (N : Node_Id) return List_Id; -- List2 9460 9461 function Default_Expression 9462 (N : Node_Id) return Node_Id; -- Node5 9463 9464 function Default_Storage_Pool 9465 (N : Node_Id) return Node_Id; -- Node3 9466 9467 function Default_Name 9468 (N : Node_Id) return Node_Id; -- Node2 9469 9470 function Defining_Identifier 9471 (N : Node_Id) return Entity_Id; -- Node1 9472 9473 function Defining_Unit_Name 9474 (N : Node_Id) return Node_Id; -- Node1 9475 9476 function Delay_Alternative 9477 (N : Node_Id) return Node_Id; -- Node4 9478 9479 function Delay_Statement 9480 (N : Node_Id) return Node_Id; -- Node2 9481 9482 function Delta_Expression 9483 (N : Node_Id) return Node_Id; -- Node3 9484 9485 function Digits_Expression 9486 (N : Node_Id) return Node_Id; -- Node2 9487 9488 function Discr_Check_Funcs_Built 9489 (N : Node_Id) return Boolean; -- Flag11 9490 9491 function Discrete_Choices 9492 (N : Node_Id) return List_Id; -- List4 9493 9494 function Discrete_Range 9495 (N : Node_Id) return Node_Id; -- Node4 9496 9497 function Discrete_Subtype_Definition 9498 (N : Node_Id) return Node_Id; -- Node4 9499 9500 function Discrete_Subtype_Definitions 9501 (N : Node_Id) return List_Id; -- List2 9502 9503 function Discriminant_Specifications 9504 (N : Node_Id) return List_Id; -- List4 9505 9506 function Discriminant_Type 9507 (N : Node_Id) return Node_Id; -- Node5 9508 9509 function Do_Accessibility_Check 9510 (N : Node_Id) return Boolean; -- Flag13 9511 9512 function Do_Discriminant_Check 9513 (N : Node_Id) return Boolean; -- Flag3 9514 9515 function Do_Division_Check 9516 (N : Node_Id) return Boolean; -- Flag13 9517 9518 function Do_Length_Check 9519 (N : Node_Id) return Boolean; -- Flag4 9520 9521 function Do_Overflow_Check 9522 (N : Node_Id) return Boolean; -- Flag17 9523 9524 function Do_Range_Check 9525 (N : Node_Id) return Boolean; -- Flag9 9526 9527 function Do_Storage_Check 9528 (N : Node_Id) return Boolean; -- Flag17 9529 9530 function Do_Tag_Check 9531 (N : Node_Id) return Boolean; -- Flag13 9532 9533 function Elaborate_All_Desirable 9534 (N : Node_Id) return Boolean; -- Flag9 9535 9536 function Elaborate_All_Present 9537 (N : Node_Id) return Boolean; -- Flag14 9538 9539 function Elaborate_Desirable 9540 (N : Node_Id) return Boolean; -- Flag11 9541 9542 function Elaborate_Present 9543 (N : Node_Id) return Boolean; -- Flag4 9544 9545 function Else_Actions 9546 (N : Node_Id) return List_Id; -- List3 9547 9548 function Else_Statements 9549 (N : Node_Id) return List_Id; -- List4 9550 9551 function Elsif_Parts 9552 (N : Node_Id) return List_Id; -- List3 9553 9554 function Enclosing_Variant 9555 (N : Node_Id) return Node_Id; -- Node2 9556 9557 function End_Label 9558 (N : Node_Id) return Node_Id; -- Node4 9559 9560 function End_Span 9561 (N : Node_Id) return Uint; -- Uint5 9562 9563 function Entity 9564 (N : Node_Id) return Node_Id; -- Node4 9565 9566 function Entity_Or_Associated_Node 9567 (N : Node_Id) return Node_Id; -- Node4 9568 9569 function Entry_Body_Formal_Part 9570 (N : Node_Id) return Node_Id; -- Node5 9571 9572 function Entry_Call_Alternative 9573 (N : Node_Id) return Node_Id; -- Node1 9574 9575 function Entry_Call_Statement 9576 (N : Node_Id) return Node_Id; -- Node1 9577 9578 function Entry_Direct_Name 9579 (N : Node_Id) return Node_Id; -- Node1 9580 9581 function Entry_Index 9582 (N : Node_Id) return Node_Id; -- Node5 9583 9584 function Entry_Index_Specification 9585 (N : Node_Id) return Node_Id; -- Node4 9586 9587 function Etype 9588 (N : Node_Id) return Node_Id; -- Node5 9589 9590 function Exception_Choices 9591 (N : Node_Id) return List_Id; -- List4 9592 9593 function Exception_Handlers 9594 (N : Node_Id) return List_Id; -- List5 9595 9596 function Exception_Junk 9597 (N : Node_Id) return Boolean; -- Flag8 9598 9599 function Exception_Label 9600 (N : Node_Id) return Node_Id; -- Node5 9601 9602 function Explicit_Actual_Parameter 9603 (N : Node_Id) return Node_Id; -- Node3 9604 9605 function Expansion_Delayed 9606 (N : Node_Id) return Boolean; -- Flag11 9607 9608 function Explicit_Generic_Actual_Parameter 9609 (N : Node_Id) return Node_Id; -- Node1 9610 9611 function Expression 9612 (N : Node_Id) return Node_Id; -- Node3 9613 9614 function Expression_Copy 9615 (N : Node_Id) return Node_Id; -- Node2 9616 9617 function Expressions 9618 (N : Node_Id) return List_Id; -- List1 9619 9620 function First_Bit 9621 (N : Node_Id) return Node_Id; -- Node3 9622 9623 function First_Inlined_Subprogram 9624 (N : Node_Id) return Entity_Id; -- Node3 9625 9626 function First_Name 9627 (N : Node_Id) return Boolean; -- Flag5 9628 9629 function First_Named_Actual 9630 (N : Node_Id) return Node_Id; -- Node4 9631 9632 function First_Real_Statement 9633 (N : Node_Id) return Node_Id; -- Node2 9634 9635 function First_Subtype_Link 9636 (N : Node_Id) return Entity_Id; -- Node5 9637 9638 function Float_Truncate 9639 (N : Node_Id) return Boolean; -- Flag11 9640 9641 function Formal_Type_Definition 9642 (N : Node_Id) return Node_Id; -- Node3 9643 9644 function Forwards_OK 9645 (N : Node_Id) return Boolean; -- Flag5 9646 9647 function From_Aspect_Specification 9648 (N : Node_Id) return Boolean; -- Flag13 9649 9650 function From_At_End 9651 (N : Node_Id) return Boolean; -- Flag4 9652 9653 function From_At_Mod 9654 (N : Node_Id) return Boolean; -- Flag4 9655 9656 function From_Conditional_Expression 9657 (N : Node_Id) return Boolean; -- Flag1 9658 9659 function From_Default 9660 (N : Node_Id) return Boolean; -- Flag6 9661 9662 function Generalized_Indexing 9663 (N : Node_Id) return Node_Id; -- Node4 9664 9665 function Generic_Associations 9666 (N : Node_Id) return List_Id; -- List3 9667 9668 function Generic_Formal_Declarations 9669 (N : Node_Id) return List_Id; -- List2 9670 9671 function Generic_Parent 9672 (N : Node_Id) return Node_Id; -- Node5 9673 9674 function Generic_Parent_Type 9675 (N : Node_Id) return Node_Id; -- Node4 9676 9677 function Handled_Statement_Sequence 9678 (N : Node_Id) return Node_Id; -- Node4 9679 9680 function Handler_List_Entry 9681 (N : Node_Id) return Node_Id; -- Node2 9682 9683 function Has_Created_Identifier 9684 (N : Node_Id) return Boolean; -- Flag15 9685 9686 function Has_Dereference_Action 9687 (N : Node_Id) return Boolean; -- Flag13 9688 9689 function Has_Dynamic_Length_Check 9690 (N : Node_Id) return Boolean; -- Flag10 9691 9692 function Has_Dynamic_Range_Check 9693 (N : Node_Id) return Boolean; -- Flag12 9694 9695 function Has_Init_Expression 9696 (N : Node_Id) return Boolean; -- Flag14 9697 9698 function Has_Local_Raise 9699 (N : Node_Id) return Boolean; -- Flag8 9700 9701 function Has_No_Elaboration_Code 9702 (N : Node_Id) return Boolean; -- Flag17 9703 9704 function Has_Pragma_Suppress_All 9705 (N : Node_Id) return Boolean; -- Flag14 9706 9707 function Has_Private_View 9708 (N : Node_Id) return Boolean; -- Flag11 9709 9710 function Has_Relative_Deadline_Pragma 9711 (N : Node_Id) return Boolean; -- Flag9 9712 9713 function Has_Self_Reference 9714 (N : Node_Id) return Boolean; -- Flag13 9715 9716 function Has_SP_Choice 9717 (N : Node_Id) return Boolean; -- Flag15 9718 9719 function Has_Storage_Size_Pragma 9720 (N : Node_Id) return Boolean; -- Flag5 9721 9722 function Has_Target_Names 9723 (N : Node_Id) return Boolean; -- Flag8 9724 9725 function Has_Wide_Character 9726 (N : Node_Id) return Boolean; -- Flag11 9727 9728 function Has_Wide_Wide_Character 9729 (N : Node_Id) return Boolean; -- Flag13 9730 9731 function Header_Size_Added 9732 (N : Node_Id) return Boolean; -- Flag11 9733 9734 function Hidden_By_Use_Clause 9735 (N : Node_Id) return Elist_Id; -- Elist5 9736 9737 function High_Bound 9738 (N : Node_Id) return Node_Id; -- Node2 9739 9740 function Identifier 9741 (N : Node_Id) return Node_Id; -- Node1 9742 9743 function Interface_List 9744 (N : Node_Id) return List_Id; -- List2 9745 9746 function Interface_Present 9747 (N : Node_Id) return Boolean; -- Flag16 9748 9749 function Implicit_With 9750 (N : Node_Id) return Boolean; -- Flag16 9751 9752 function Import_Interface_Present 9753 (N : Node_Id) return Boolean; -- Flag16 9754 9755 function In_Present 9756 (N : Node_Id) return Boolean; -- Flag15 9757 9758 function Includes_Infinities 9759 (N : Node_Id) return Boolean; -- Flag11 9760 9761 function Incomplete_View 9762 (N : Node_Id) return Node_Id; -- Node2 9763 9764 function Inherited_Discriminant 9765 (N : Node_Id) return Boolean; -- Flag13 9766 9767 function Instance_Spec 9768 (N : Node_Id) return Node_Id; -- Node5 9769 9770 function Intval 9771 (N : Node_Id) return Uint; -- Uint3 9772 9773 function Is_Abort_Block 9774 (N : Node_Id) return Boolean; -- Flag4 9775 9776 function Is_Accessibility_Actual 9777 (N : Node_Id) return Boolean; -- Flag13 9778 9779 function Is_Analyzed_Pragma 9780 (N : Node_Id) return Boolean; -- Flag5 9781 9782 function Is_Asynchronous_Call_Block 9783 (N : Node_Id) return Boolean; -- Flag7 9784 9785 function Is_Boolean_Aspect 9786 (N : Node_Id) return Boolean; -- Flag16 9787 9788 function Is_Checked 9789 (N : Node_Id) return Boolean; -- Flag11 9790 9791 function Is_Checked_Ghost_Pragma 9792 (N : Node_Id) return Boolean; -- Flag3 9793 9794 function Is_Component_Left_Opnd 9795 (N : Node_Id) return Boolean; -- Flag13 9796 9797 function Is_Component_Right_Opnd 9798 (N : Node_Id) return Boolean; -- Flag14 9799 9800 function Is_Controlling_Actual 9801 (N : Node_Id) return Boolean; -- Flag16 9802 9803 function Is_Declaration_Level_Node 9804 (N : Node_Id) return Boolean; -- Flag5 9805 9806 function Is_Delayed_Aspect 9807 (N : Node_Id) return Boolean; -- Flag14 9808 9809 function Is_Disabled 9810 (N : Node_Id) return Boolean; -- Flag15 9811 9812 function Is_Dispatching_Call 9813 (N : Node_Id) return Boolean; -- Flag6 9814 9815 function Is_Dynamic_Coextension 9816 (N : Node_Id) return Boolean; -- Flag18 9817 9818 function Is_Effective_Use_Clause 9819 (N : Node_Id) return Boolean; -- Flag1 9820 9821 function Is_Elaboration_Checks_OK_Node 9822 (N : Node_Id) return Boolean; -- Flag1 9823 9824 function Is_Elaboration_Code 9825 (N : Node_Id) return Boolean; -- Flag9 9826 9827 function Is_Elaboration_Warnings_OK_Node 9828 (N : Node_Id) return Boolean; -- Flag3 9829 9830 function Is_Elsif 9831 (N : Node_Id) return Boolean; -- Flag13 9832 9833 function Is_Entry_Barrier_Function 9834 (N : Node_Id) return Boolean; -- Flag8 9835 9836 function Is_Expanded_Build_In_Place_Call 9837 (N : Node_Id) return Boolean; -- Flag11 9838 9839 function Is_Expanded_Contract 9840 (N : Node_Id) return Boolean; -- Flag1 9841 9842 function Is_Finalization_Wrapper 9843 (N : Node_Id) return Boolean; -- Flag9 9844 9845 function Is_Folded_In_Parser 9846 (N : Node_Id) return Boolean; -- Flag4 9847 9848 function Is_Generic_Contract_Pragma 9849 (N : Node_Id) return Boolean; -- Flag2 9850 9851 function Is_Ignored 9852 (N : Node_Id) return Boolean; -- Flag9 9853 9854 function Is_Ignored_Ghost_Pragma 9855 (N : Node_Id) return Boolean; -- Flag8 9856 9857 function Is_In_Discriminant_Check 9858 (N : Node_Id) return Boolean; -- Flag11 9859 9860 function Is_Inherited_Pragma 9861 (N : Node_Id) return Boolean; -- Flag4 9862 9863 function Is_Initialization_Block 9864 (N : Node_Id) return Boolean; -- Flag1 9865 9866 function Is_Known_Guaranteed_ABE 9867 (N : Node_Id) return Boolean; -- Flag18 9868 9869 function Is_Machine_Number 9870 (N : Node_Id) return Boolean; -- Flag11 9871 9872 function Is_Null_Loop 9873 (N : Node_Id) return Boolean; -- Flag16 9874 9875 function Is_Overloaded 9876 (N : Node_Id) return Boolean; -- Flag5 9877 9878 function Is_Power_Of_2_For_Shift 9879 (N : Node_Id) return Boolean; -- Flag13 9880 9881 function Is_Prefixed_Call 9882 (N : Node_Id) return Boolean; -- Flag17 9883 9884 function Is_Protected_Subprogram_Body 9885 (N : Node_Id) return Boolean; -- Flag7 9886 9887 function Is_Qualified_Universal_Literal 9888 (N : Node_Id) return Boolean; -- Flag4 9889 9890 function Is_Read 9891 (N : Node_Id) return Boolean; -- Flag1 9892 9893 function Is_Source_Call 9894 (N : Node_Id) return Boolean; -- Flag4 9895 9896 function Is_SPARK_Mode_On_Node 9897 (N : Node_Id) return Boolean; -- Flag2 9898 9899 function Is_Static_Coextension 9900 (N : Node_Id) return Boolean; -- Flag14 9901 9902 function Is_Static_Expression 9903 (N : Node_Id) return Boolean; -- Flag6 9904 9905 function Is_Subprogram_Descriptor 9906 (N : Node_Id) return Boolean; -- Flag16 9907 9908 function Is_Task_Allocation_Block 9909 (N : Node_Id) return Boolean; -- Flag6 9910 9911 function Is_Task_Body_Procedure 9912 (N : Node_Id) return Boolean; -- Flag1 9913 9914 function Is_Task_Master 9915 (N : Node_Id) return Boolean; -- Flag5 9916 9917 function Is_Write 9918 (N : Node_Id) return Boolean; -- Flag2 9919 9920 function Iteration_Scheme 9921 (N : Node_Id) return Node_Id; -- Node2 9922 9923 function Iterator_Specification 9924 (N : Node_Id) return Node_Id; -- Node2 9925 9926 function Itype 9927 (N : Node_Id) return Entity_Id; -- Node1 9928 9929 function Kill_Range_Check 9930 (N : Node_Id) return Boolean; -- Flag11 9931 9932 function Label_Construct 9933 (N : Node_Id) return Node_Id; -- Node2 9934 9935 function Left_Opnd 9936 (N : Node_Id) return Node_Id; -- Node2 9937 9938 function Last_Bit 9939 (N : Node_Id) return Node_Id; -- Node4 9940 9941 function Last_Name 9942 (N : Node_Id) return Boolean; -- Flag6 9943 9944 function Library_Unit 9945 (N : Node_Id) return Node_Id; -- Node4 9946 9947 function Limited_View_Installed 9948 (N : Node_Id) return Boolean; -- Flag18 9949 9950 function Limited_Present 9951 (N : Node_Id) return Boolean; -- Flag17 9952 9953 function Literals 9954 (N : Node_Id) return List_Id; -- List1 9955 9956 function Local_Raise_Not_OK 9957 (N : Node_Id) return Boolean; -- Flag7 9958 9959 function Local_Raise_Statements 9960 (N : Node_Id) return Elist_Id; -- Elist1 9961 9962 function Loop_Actions 9963 (N : Node_Id) return List_Id; -- List2 9964 9965 function Loop_Parameter_Specification 9966 (N : Node_Id) return Node_Id; -- Node4 9967 9968 function Low_Bound 9969 (N : Node_Id) return Node_Id; -- Node1 9970 9971 function Mod_Clause 9972 (N : Node_Id) return Node_Id; -- Node2 9973 9974 function More_Ids 9975 (N : Node_Id) return Boolean; -- Flag5 9976 9977 function Must_Be_Byte_Aligned 9978 (N : Node_Id) return Boolean; -- Flag14 9979 9980 function Must_Not_Freeze 9981 (N : Node_Id) return Boolean; -- Flag8 9982 9983 function Must_Not_Override 9984 (N : Node_Id) return Boolean; -- Flag15 9985 9986 function Must_Override 9987 (N : Node_Id) return Boolean; -- Flag14 9988 9989 function Name 9990 (N : Node_Id) return Node_Id; -- Node2 9991 9992 function Names 9993 (N : Node_Id) return List_Id; -- List2 9994 9995 function Next_Entity 9996 (N : Node_Id) return Node_Id; -- Node2 9997 9998 function Next_Exit_Statement 9999 (N : Node_Id) return Node_Id; -- Node3 10000 10001 function Next_Implicit_With 10002 (N : Node_Id) return Node_Id; -- Node3 10003 10004 function Next_Named_Actual 10005 (N : Node_Id) return Node_Id; -- Node4 10006 10007 function Next_Pragma 10008 (N : Node_Id) return Node_Id; -- Node1 10009 10010 function Next_Rep_Item 10011 (N : Node_Id) return Node_Id; -- Node5 10012 10013 function Next_Use_Clause 10014 (N : Node_Id) return Node_Id; -- Node3 10015 10016 function No_Ctrl_Actions 10017 (N : Node_Id) return Boolean; -- Flag7 10018 10019 function No_Elaboration_Check 10020 (N : Node_Id) return Boolean; -- Flag4 10021 10022 function No_Entities_Ref_In_Spec 10023 (N : Node_Id) return Boolean; -- Flag8 10024 10025 function No_Initialization 10026 (N : Node_Id) return Boolean; -- Flag13 10027 10028 function No_Minimize_Eliminate 10029 (N : Node_Id) return Boolean; -- Flag17 10030 10031 function No_Side_Effect_Removal 10032 (N : Node_Id) return Boolean; -- Flag17 10033 10034 function No_Truncation 10035 (N : Node_Id) return Boolean; -- Flag17 10036 10037 function Null_Excluding_Subtype 10038 (N : Node_Id) return Boolean; -- Flag16 10039 10040 function Null_Exclusion_Present 10041 (N : Node_Id) return Boolean; -- Flag11 10042 10043 function Null_Exclusion_In_Return_Present 10044 (N : Node_Id) return Boolean; -- Flag14 10045 10046 function Null_Present 10047 (N : Node_Id) return Boolean; -- Flag13 10048 10049 function Null_Record_Present 10050 (N : Node_Id) return Boolean; -- Flag17 10051 10052 function Null_Statement 10053 (N : Node_Id) return Node_Id; -- Node2 10054 10055 function Object_Definition 10056 (N : Node_Id) return Node_Id; -- Node4 10057 10058 function Of_Present 10059 (N : Node_Id) return Boolean; -- Flag16 10060 10061 function Original_Discriminant 10062 (N : Node_Id) return Node_Id; -- Node2 10063 10064 function Original_Entity 10065 (N : Node_Id) return Entity_Id; -- Node2 10066 10067 function Others_Discrete_Choices 10068 (N : Node_Id) return List_Id; -- List1 10069 10070 function Out_Present 10071 (N : Node_Id) return Boolean; -- Flag17 10072 10073 function Parameter_Associations 10074 (N : Node_Id) return List_Id; -- List3 10075 10076 function Parameter_Specifications 10077 (N : Node_Id) return List_Id; -- List3 10078 10079 function Parameter_Type 10080 (N : Node_Id) return Node_Id; -- Node2 10081 10082 function Parent_Spec 10083 (N : Node_Id) return Node_Id; -- Node4 10084 10085 function Parent_With 10086 (N : Node_Id) return Boolean; -- Flag1 10087 10088 function Position 10089 (N : Node_Id) return Node_Id; -- Node2 10090 10091 function Pragma_Argument_Associations 10092 (N : Node_Id) return List_Id; -- List2 10093 10094 function Pragma_Identifier 10095 (N : Node_Id) return Node_Id; -- Node4 10096 10097 function Pragmas_After 10098 (N : Node_Id) return List_Id; -- List5 10099 10100 function Pragmas_Before 10101 (N : Node_Id) return List_Id; -- List4 10102 10103 function Pre_Post_Conditions 10104 (N : Node_Id) return Node_Id; -- Node1 10105 10106 function Prefix 10107 (N : Node_Id) return Node_Id; -- Node3 10108 10109 function Premature_Use 10110 (N : Node_Id) return Node_Id; -- Node5 10111 10112 function Present_Expr 10113 (N : Node_Id) return Uint; -- Uint3 10114 10115 function Prev_Ids 10116 (N : Node_Id) return Boolean; -- Flag6 10117 10118 function Prev_Use_Clause 10119 (N : Node_Id) return Node_Id; -- Node1 10120 10121 function Print_In_Hex 10122 (N : Node_Id) return Boolean; -- Flag13 10123 10124 function Private_Declarations 10125 (N : Node_Id) return List_Id; -- List3 10126 10127 function Private_Present 10128 (N : Node_Id) return Boolean; -- Flag15 10129 10130 function Procedure_To_Call 10131 (N : Node_Id) return Node_Id; -- Node2 10132 10133 function Proper_Body 10134 (N : Node_Id) return Node_Id; -- Node1 10135 10136 function Protected_Definition 10137 (N : Node_Id) return Node_Id; -- Node3 10138 10139 function Protected_Present 10140 (N : Node_Id) return Boolean; -- Flag6 10141 10142 function Raises_Constraint_Error 10143 (N : Node_Id) return Boolean; -- Flag7 10144 10145 function Range_Constraint 10146 (N : Node_Id) return Node_Id; -- Node4 10147 10148 function Range_Expression 10149 (N : Node_Id) return Node_Id; -- Node4 10150 10151 function Real_Range_Specification 10152 (N : Node_Id) return Node_Id; -- Node4 10153 10154 function Realval 10155 (N : Node_Id) return Ureal; -- Ureal3 10156 10157 function Reason 10158 (N : Node_Id) return Uint; -- Uint3 10159 10160 function Record_Extension_Part 10161 (N : Node_Id) return Node_Id; -- Node3 10162 10163 function Redundant_Use 10164 (N : Node_Id) return Boolean; -- Flag13 10165 10166 function Renaming_Exception 10167 (N : Node_Id) return Node_Id; -- Node2 10168 10169 function Result_Definition 10170 (N : Node_Id) return Node_Id; -- Node4 10171 10172 function Return_Object_Declarations 10173 (N : Node_Id) return List_Id; -- List3 10174 10175 function Return_Statement_Entity 10176 (N : Node_Id) return Node_Id; -- Node5 10177 10178 function Reverse_Present 10179 (N : Node_Id) return Boolean; -- Flag15 10180 10181 function Right_Opnd 10182 (N : Node_Id) return Node_Id; -- Node3 10183 10184 function Rounded_Result 10185 (N : Node_Id) return Boolean; -- Flag18 10186 10187 function SCIL_Controlling_Tag 10188 (N : Node_Id) return Node_Id; -- Node5 10189 10190 function SCIL_Entity 10191 (N : Node_Id) return Node_Id; -- Node4 10192 10193 function SCIL_Tag_Value 10194 (N : Node_Id) return Node_Id; -- Node5 10195 10196 function SCIL_Target_Prim 10197 (N : Node_Id) return Node_Id; -- Node2 10198 10199 function Scope 10200 (N : Node_Id) return Node_Id; -- Node3 10201 10202 function Select_Alternatives 10203 (N : Node_Id) return List_Id; -- List1 10204 10205 function Selector_Name 10206 (N : Node_Id) return Node_Id; -- Node2 10207 10208 function Selector_Names 10209 (N : Node_Id) return List_Id; -- List1 10210 10211 function Shift_Count_OK 10212 (N : Node_Id) return Boolean; -- Flag4 10213 10214 function Source_Type 10215 (N : Node_Id) return Entity_Id; -- Node1 10216 10217 function Specification 10218 (N : Node_Id) return Node_Id; -- Node1 10219 10220 function Split_PPC 10221 (N : Node_Id) return Boolean; -- Flag17 10222 10223 function Statements 10224 (N : Node_Id) return List_Id; -- List3 10225 10226 function Storage_Pool 10227 (N : Node_Id) return Node_Id; -- Node1 10228 10229 function Subpool_Handle_Name 10230 (N : Node_Id) return Node_Id; -- Node4 10231 10232 function Strval 10233 (N : Node_Id) return String_Id; -- Str3 10234 10235 function Subtype_Indication 10236 (N : Node_Id) return Node_Id; -- Node5 10237 10238 function Subtype_Mark 10239 (N : Node_Id) return Node_Id; -- Node4 10240 10241 function Subtype_Marks 10242 (N : Node_Id) return List_Id; -- List2 10243 10244 function Suppress_Assignment_Checks 10245 (N : Node_Id) return Boolean; -- Flag18 10246 10247 function Suppress_Loop_Warnings 10248 (N : Node_Id) return Boolean; -- Flag17 10249 10250 function Synchronized_Present 10251 (N : Node_Id) return Boolean; -- Flag7 10252 10253 function Tagged_Present 10254 (N : Node_Id) return Boolean; -- Flag15 10255 10256 function Target 10257 (N : Node_Id) return Entity_Id; -- Node1 10258 10259 function Target_Type 10260 (N : Node_Id) return Entity_Id; -- Node2 10261 10262 function Task_Definition 10263 (N : Node_Id) return Node_Id; -- Node3 10264 10265 function Task_Present 10266 (N : Node_Id) return Boolean; -- Flag5 10267 10268 function Then_Actions 10269 (N : Node_Id) return List_Id; -- List2 10270 10271 function Then_Statements 10272 (N : Node_Id) return List_Id; -- List2 10273 10274 function Treat_Fixed_As_Integer 10275 (N : Node_Id) return Boolean; -- Flag14 10276 10277 function Triggering_Alternative 10278 (N : Node_Id) return Node_Id; -- Node1 10279 10280 function Triggering_Statement 10281 (N : Node_Id) return Node_Id; -- Node1 10282 10283 function TSS_Elist 10284 (N : Node_Id) return Elist_Id; -- Elist3 10285 10286 function Type_Definition 10287 (N : Node_Id) return Node_Id; -- Node3 10288 10289 function Uneval_Old_Accept 10290 (N : Node_Id) return Boolean; -- Flag7 10291 10292 function Uneval_Old_Warn 10293 (N : Node_Id) return Boolean; -- Flag18 10294 10295 function Unit 10296 (N : Node_Id) return Node_Id; -- Node2 10297 10298 function Unknown_Discriminants_Present 10299 (N : Node_Id) return Boolean; -- Flag13 10300 10301 function Unreferenced_In_Spec 10302 (N : Node_Id) return Boolean; -- Flag7 10303 10304 function Variant_Part 10305 (N : Node_Id) return Node_Id; -- Node4 10306 10307 function Variants 10308 (N : Node_Id) return List_Id; -- List1 10309 10310 function Visible_Declarations 10311 (N : Node_Id) return List_Id; -- List2 10312 10313 function Uninitialized_Variable 10314 (N : Node_Id) return Node_Id; -- Node3 10315 10316 function Used_Operations 10317 (N : Node_Id) return Elist_Id; -- Elist2 10318 10319 function Was_Attribute_Reference 10320 (N : Node_Id) return Boolean; -- Flag2 10321 10322 function Was_Expression_Function 10323 (N : Node_Id) return Boolean; -- Flag18 10324 10325 function Was_Originally_Stub 10326 (N : Node_Id) return Boolean; -- Flag13 10327 10328 function Withed_Body 10329 (N : Node_Id) return Node_Id; -- Node1 10330 10331 -- End functions (note used by xsinfo utility program to end processing) 10332 10333 ---------------------------- 10334 -- Node Update Procedures -- 10335 ---------------------------- 10336 10337 -- These are the corresponding node update routines, which again provide 10338 -- a high level logical access with type checking. In addition to setting 10339 -- the indicated field of the node N to the given Val, in the case of 10340 -- tree pointers (List1-4), the parent pointer of the Val node is set to 10341 -- point back to node N. This automates the setting of the parent pointer. 10342 10343 procedure Set_Abort_Present 10344 (N : Node_Id; Val : Boolean := True); -- Flag15 10345 10346 procedure Set_Abortable_Part 10347 (N : Node_Id; Val : Node_Id); -- Node2 10348 10349 procedure Set_Abstract_Present 10350 (N : Node_Id; Val : Boolean := True); -- Flag4 10351 10352 procedure Set_Accept_Handler_Records 10353 (N : Node_Id; Val : List_Id); -- List5 10354 10355 procedure Set_Accept_Statement 10356 (N : Node_Id; Val : Node_Id); -- Node2 10357 10358 procedure Set_Access_Definition 10359 (N : Node_Id; Val : Node_Id); -- Node3 10360 10361 procedure Set_Access_To_Subprogram_Definition 10362 (N : Node_Id; Val : Node_Id); -- Node3 10363 10364 procedure Set_Access_Types_To_Process 10365 (N : Node_Id; Val : Elist_Id); -- Elist2 10366 10367 procedure Set_Actions 10368 (N : Node_Id; Val : List_Id); -- List1 10369 10370 procedure Set_Activation_Chain_Entity 10371 (N : Node_Id; Val : Node_Id); -- Node3 10372 10373 procedure Set_Acts_As_Spec 10374 (N : Node_Id; Val : Boolean := True); -- Flag4 10375 10376 procedure Set_Actual_Designated_Subtype 10377 (N : Node_Id; Val : Node_Id); -- Node4 10378 10379 procedure Set_Address_Warning_Posted 10380 (N : Node_Id; Val : Boolean := True); -- Flag18 10381 10382 procedure Set_Aggregate_Bounds 10383 (N : Node_Id; Val : Node_Id); -- Node3 10384 10385 procedure Set_Aliased_Present 10386 (N : Node_Id; Val : Boolean := True); -- Flag4 10387 10388 procedure Set_Alloc_For_BIP_Return 10389 (N : Node_Id; Val : Boolean := True); -- Flag1 10390 10391 procedure Set_All_Others 10392 (N : Node_Id; Val : Boolean := True); -- Flag11 10393 10394 procedure Set_All_Present 10395 (N : Node_Id; Val : Boolean := True); -- Flag15 10396 10397 procedure Set_Alternatives 10398 (N : Node_Id; Val : List_Id); -- List4 10399 10400 procedure Set_Ancestor_Part 10401 (N : Node_Id; Val : Node_Id); -- Node3 10402 10403 procedure Set_Atomic_Sync_Required 10404 (N : Node_Id; Val : Boolean := True); -- Flag14 10405 10406 procedure Set_Array_Aggregate 10407 (N : Node_Id; Val : Node_Id); -- Node3 10408 10409 procedure Set_Aspect_Rep_Item 10410 (N : Node_Id; Val : Node_Id); -- Node2 10411 10412 procedure Set_Assignment_OK 10413 (N : Node_Id; Val : Boolean := True); -- Flag15 10414 10415 procedure Set_Associated_Node 10416 (N : Node_Id; Val : Node_Id); -- Node4 10417 10418 procedure Set_Attribute_Name 10419 (N : Node_Id; Val : Name_Id); -- Name2 10420 10421 procedure Set_At_End_Proc 10422 (N : Node_Id; Val : Node_Id); -- Node1 10423 10424 procedure Set_Aux_Decls_Node 10425 (N : Node_Id; Val : Node_Id); -- Node5 10426 10427 procedure Set_Backwards_OK 10428 (N : Node_Id; Val : Boolean := True); -- Flag6 10429 10430 procedure Set_Bad_Is_Detected 10431 (N : Node_Id; Val : Boolean := True); -- Flag15 10432 10433 procedure Set_Body_Required 10434 (N : Node_Id; Val : Boolean := True); -- Flag13 10435 10436 procedure Set_Body_To_Inline 10437 (N : Node_Id; Val : Node_Id); -- Node3 10438 10439 procedure Set_Box_Present 10440 (N : Node_Id; Val : Boolean := True); -- Flag15 10441 10442 procedure Set_By_Ref 10443 (N : Node_Id; Val : Boolean := True); -- Flag5 10444 10445 procedure Set_Char_Literal_Value 10446 (N : Node_Id; Val : Uint); -- Uint2 10447 10448 procedure Set_Chars 10449 (N : Node_Id; Val : Name_Id); -- Name1 10450 10451 procedure Set_Check_Address_Alignment 10452 (N : Node_Id; Val : Boolean := True); -- Flag11 10453 10454 procedure Set_Choice_Parameter 10455 (N : Node_Id; Val : Node_Id); -- Node2 10456 10457 procedure Set_Choices 10458 (N : Node_Id; Val : List_Id); -- List1 10459 10460 procedure Set_Class_Present 10461 (N : Node_Id; Val : Boolean := True); -- Flag6 10462 10463 procedure Set_Classifications 10464 (N : Node_Id; Val : Node_Id); -- Node3 10465 10466 procedure Set_Cleanup_Actions 10467 (N : Node_Id; Val : List_Id); -- List5 10468 10469 procedure Set_Comes_From_Extended_Return_Statement 10470 (N : Node_Id; Val : Boolean := True); -- Flag18 10471 10472 procedure Set_Compile_Time_Known_Aggregate 10473 (N : Node_Id; Val : Boolean := True); -- Flag18 10474 10475 procedure Set_Component_Associations 10476 (N : Node_Id; Val : List_Id); -- List2 10477 10478 procedure Set_Component_Clauses 10479 (N : Node_Id; Val : List_Id); -- List3 10480 10481 procedure Set_Component_Definition 10482 (N : Node_Id; Val : Node_Id); -- Node4 10483 10484 procedure Set_Component_Items 10485 (N : Node_Id; Val : List_Id); -- List3 10486 10487 procedure Set_Component_List 10488 (N : Node_Id; Val : Node_Id); -- Node1 10489 10490 procedure Set_Component_Name 10491 (N : Node_Id; Val : Node_Id); -- Node1 10492 10493 procedure Set_Componentwise_Assignment 10494 (N : Node_Id; Val : Boolean := True); -- Flag14 10495 10496 procedure Set_Condition 10497 (N : Node_Id; Val : Node_Id); -- Node1 10498 10499 procedure Set_Condition_Actions 10500 (N : Node_Id; Val : List_Id); -- List3 10501 10502 procedure Set_Config_Pragmas 10503 (N : Node_Id; Val : List_Id); -- List4 10504 10505 procedure Set_Constant_Present 10506 (N : Node_Id; Val : Boolean := True); -- Flag17 10507 10508 procedure Set_Constraint 10509 (N : Node_Id; Val : Node_Id); -- Node3 10510 10511 procedure Set_Constraints 10512 (N : Node_Id; Val : List_Id); -- List1 10513 10514 procedure Set_Context_Installed 10515 (N : Node_Id; Val : Boolean := True); -- Flag13 10516 10517 procedure Set_Context_Items 10518 (N : Node_Id; Val : List_Id); -- List1 10519 10520 procedure Set_Context_Pending 10521 (N : Node_Id; Val : Boolean := True); -- Flag16 10522 10523 procedure Set_Contract_Test_Cases 10524 (N : Node_Id; Val : Node_Id); -- Node2 10525 10526 procedure Set_Controlling_Argument 10527 (N : Node_Id; Val : Node_Id); -- Node1 10528 10529 procedure Set_Conversion_OK 10530 (N : Node_Id; Val : Boolean := True); -- Flag14 10531 10532 procedure Set_Convert_To_Return_False 10533 (N : Node_Id; Val : Boolean := True); -- Flag13 10534 10535 procedure Set_Corresponding_Aspect 10536 (N : Node_Id; Val : Node_Id); -- Node3 10537 10538 procedure Set_Corresponding_Body 10539 (N : Node_Id; Val : Node_Id); -- Node5 10540 10541 procedure Set_Corresponding_Formal_Spec 10542 (N : Node_Id; Val : Node_Id); -- Node3 10543 10544 procedure Set_Corresponding_Generic_Association 10545 (N : Node_Id; Val : Node_Id); -- Node5 10546 10547 procedure Set_Corresponding_Integer_Value 10548 (N : Node_Id; Val : Uint); -- Uint4 10549 10550 procedure Set_Corresponding_Spec 10551 (N : Node_Id; Val : Entity_Id); -- Node5 10552 10553 procedure Set_Corresponding_Spec_Of_Stub 10554 (N : Node_Id; Val : Node_Id); -- Node2 10555 10556 procedure Set_Corresponding_Stub 10557 (N : Node_Id; Val : Node_Id); -- Node3 10558 10559 procedure Set_Dcheck_Function 10560 (N : Node_Id; Val : Entity_Id); -- Node5 10561 10562 procedure Set_Declarations 10563 (N : Node_Id; Val : List_Id); -- List2 10564 10565 procedure Set_Default_Expression 10566 (N : Node_Id; Val : Node_Id); -- Node5 10567 10568 procedure Set_Default_Storage_Pool 10569 (N : Node_Id; Val : Node_Id); -- Node3 10570 10571 procedure Set_Default_Name 10572 (N : Node_Id; Val : Node_Id); -- Node2 10573 10574 procedure Set_Defining_Identifier 10575 (N : Node_Id; Val : Entity_Id); -- Node1 10576 10577 procedure Set_Defining_Unit_Name 10578 (N : Node_Id; Val : Node_Id); -- Node1 10579 10580 procedure Set_Delay_Alternative 10581 (N : Node_Id; Val : Node_Id); -- Node4 10582 10583 procedure Set_Delay_Statement 10584 (N : Node_Id; Val : Node_Id); -- Node2 10585 10586 procedure Set_Delta_Expression 10587 (N : Node_Id; Val : Node_Id); -- Node3 10588 10589 procedure Set_Digits_Expression 10590 (N : Node_Id; Val : Node_Id); -- Node2 10591 10592 procedure Set_Discr_Check_Funcs_Built 10593 (N : Node_Id; Val : Boolean := True); -- Flag11 10594 10595 procedure Set_Discrete_Choices 10596 (N : Node_Id; Val : List_Id); -- List4 10597 10598 procedure Set_Discrete_Range 10599 (N : Node_Id; Val : Node_Id); -- Node4 10600 10601 procedure Set_Discrete_Subtype_Definition 10602 (N : Node_Id; Val : Node_Id); -- Node4 10603 10604 procedure Set_Discrete_Subtype_Definitions 10605 (N : Node_Id; Val : List_Id); -- List2 10606 10607 procedure Set_Discriminant_Specifications 10608 (N : Node_Id; Val : List_Id); -- List4 10609 10610 procedure Set_Discriminant_Type 10611 (N : Node_Id; Val : Node_Id); -- Node5 10612 10613 procedure Set_Do_Accessibility_Check 10614 (N : Node_Id; Val : Boolean := True); -- Flag13 10615 10616 procedure Set_Do_Discriminant_Check 10617 (N : Node_Id; Val : Boolean := True); -- Flag3 10618 10619 procedure Set_Do_Division_Check 10620 (N : Node_Id; Val : Boolean := True); -- Flag13 10621 10622 procedure Set_Do_Length_Check 10623 (N : Node_Id; Val : Boolean := True); -- Flag4 10624 10625 procedure Set_Do_Overflow_Check 10626 (N : Node_Id; Val : Boolean := True); -- Flag17 10627 10628 procedure Set_Do_Range_Check 10629 (N : Node_Id; Val : Boolean := True); -- Flag9 10630 10631 procedure Set_Do_Storage_Check 10632 (N : Node_Id; Val : Boolean := True); -- Flag17 10633 10634 procedure Set_Do_Tag_Check 10635 (N : Node_Id; Val : Boolean := True); -- Flag13 10636 10637 procedure Set_Elaborate_All_Desirable 10638 (N : Node_Id; Val : Boolean := True); -- Flag9 10639 10640 procedure Set_Elaborate_All_Present 10641 (N : Node_Id; Val : Boolean := True); -- Flag14 10642 10643 procedure Set_Elaborate_Desirable 10644 (N : Node_Id; Val : Boolean := True); -- Flag11 10645 10646 procedure Set_Elaborate_Present 10647 (N : Node_Id; Val : Boolean := True); -- Flag4 10648 10649 procedure Set_Else_Actions 10650 (N : Node_Id; Val : List_Id); -- List3 10651 10652 procedure Set_Else_Statements 10653 (N : Node_Id; Val : List_Id); -- List4 10654 10655 procedure Set_Elsif_Parts 10656 (N : Node_Id; Val : List_Id); -- List3 10657 10658 procedure Set_Enclosing_Variant 10659 (N : Node_Id; Val : Node_Id); -- Node2 10660 10661 procedure Set_End_Label 10662 (N : Node_Id; Val : Node_Id); -- Node4 10663 10664 procedure Set_End_Span 10665 (N : Node_Id; Val : Uint); -- Uint5 10666 10667 procedure Set_Entity 10668 (N : Node_Id; Val : Node_Id); -- Node4 10669 10670 procedure Set_Entry_Body_Formal_Part 10671 (N : Node_Id; Val : Node_Id); -- Node5 10672 10673 procedure Set_Entry_Call_Alternative 10674 (N : Node_Id; Val : Node_Id); -- Node1 10675 10676 procedure Set_Entry_Call_Statement 10677 (N : Node_Id; Val : Node_Id); -- Node1 10678 10679 procedure Set_Entry_Direct_Name 10680 (N : Node_Id; Val : Node_Id); -- Node1 10681 10682 procedure Set_Entry_Index 10683 (N : Node_Id; Val : Node_Id); -- Node5 10684 10685 procedure Set_Entry_Index_Specification 10686 (N : Node_Id; Val : Node_Id); -- Node4 10687 10688 procedure Set_Etype 10689 (N : Node_Id; Val : Node_Id); -- Node5 10690 10691 procedure Set_Exception_Choices 10692 (N : Node_Id; Val : List_Id); -- List4 10693 10694 procedure Set_Exception_Handlers 10695 (N : Node_Id; Val : List_Id); -- List5 10696 10697 procedure Set_Exception_Junk 10698 (N : Node_Id; Val : Boolean := True); -- Flag8 10699 10700 procedure Set_Exception_Label 10701 (N : Node_Id; Val : Node_Id); -- Node5 10702 10703 procedure Set_Expansion_Delayed 10704 (N : Node_Id; Val : Boolean := True); -- Flag11 10705 10706 procedure Set_Explicit_Actual_Parameter 10707 (N : Node_Id; Val : Node_Id); -- Node3 10708 10709 procedure Set_Explicit_Generic_Actual_Parameter 10710 (N : Node_Id; Val : Node_Id); -- Node1 10711 10712 procedure Set_Expression 10713 (N : Node_Id; Val : Node_Id); -- Node3 10714 10715 procedure Set_Expression_Copy 10716 (N : Node_Id; Val : Node_Id); -- Node2 10717 10718 procedure Set_Expressions 10719 (N : Node_Id; Val : List_Id); -- List1 10720 10721 procedure Set_First_Bit 10722 (N : Node_Id; Val : Node_Id); -- Node3 10723 10724 procedure Set_First_Inlined_Subprogram 10725 (N : Node_Id; Val : Entity_Id); -- Node3 10726 10727 procedure Set_First_Name 10728 (N : Node_Id; Val : Boolean := True); -- Flag5 10729 10730 procedure Set_First_Named_Actual 10731 (N : Node_Id; Val : Node_Id); -- Node4 10732 10733 procedure Set_First_Real_Statement 10734 (N : Node_Id; Val : Node_Id); -- Node2 10735 10736 procedure Set_First_Subtype_Link 10737 (N : Node_Id; Val : Entity_Id); -- Node5 10738 10739 procedure Set_Float_Truncate 10740 (N : Node_Id; Val : Boolean := True); -- Flag11 10741 10742 procedure Set_Formal_Type_Definition 10743 (N : Node_Id; Val : Node_Id); -- Node3 10744 10745 procedure Set_Forwards_OK 10746 (N : Node_Id; Val : Boolean := True); -- Flag5 10747 10748 procedure Set_From_Aspect_Specification 10749 (N : Node_Id; Val : Boolean := True); -- Flag13 10750 10751 procedure Set_From_At_End 10752 (N : Node_Id; Val : Boolean := True); -- Flag4 10753 10754 procedure Set_From_At_Mod 10755 (N : Node_Id; Val : Boolean := True); -- Flag4 10756 10757 procedure Set_From_Conditional_Expression 10758 (N : Node_Id; Val : Boolean := True); -- Flag1 10759 10760 procedure Set_From_Default 10761 (N : Node_Id; Val : Boolean := True); -- Flag6 10762 10763 procedure Set_Generalized_Indexing 10764 (N : Node_Id; Val : Node_Id); -- Node4 10765 10766 procedure Set_Generic_Associations 10767 (N : Node_Id; Val : List_Id); -- List3 10768 10769 procedure Set_Generic_Formal_Declarations 10770 (N : Node_Id; Val : List_Id); -- List2 10771 10772 procedure Set_Generic_Parent 10773 (N : Node_Id; Val : Node_Id); -- Node5 10774 10775 procedure Set_Generic_Parent_Type 10776 (N : Node_Id; Val : Node_Id); -- Node4 10777 10778 procedure Set_Handled_Statement_Sequence 10779 (N : Node_Id; Val : Node_Id); -- Node4 10780 10781 procedure Set_Handler_List_Entry 10782 (N : Node_Id; Val : Node_Id); -- Node2 10783 10784 procedure Set_Has_Created_Identifier 10785 (N : Node_Id; Val : Boolean := True); -- Flag15 10786 10787 procedure Set_Has_Dereference_Action 10788 (N : Node_Id; Val : Boolean := True); -- Flag13 10789 10790 procedure Set_Has_Dynamic_Length_Check 10791 (N : Node_Id; Val : Boolean := True); -- Flag10 10792 10793 procedure Set_Has_Dynamic_Range_Check 10794 (N : Node_Id; Val : Boolean := True); -- Flag12 10795 10796 procedure Set_Has_Init_Expression 10797 (N : Node_Id; Val : Boolean := True); -- Flag14 10798 10799 procedure Set_Has_Local_Raise 10800 (N : Node_Id; Val : Boolean := True); -- Flag8 10801 10802 procedure Set_Has_No_Elaboration_Code 10803 (N : Node_Id; Val : Boolean := True); -- Flag17 10804 10805 procedure Set_Has_Pragma_Suppress_All 10806 (N : Node_Id; Val : Boolean := True); -- Flag14 10807 10808 procedure Set_Has_Private_View 10809 (N : Node_Id; Val : Boolean := True); -- Flag11 10810 10811 procedure Set_Has_Relative_Deadline_Pragma 10812 (N : Node_Id; Val : Boolean := True); -- Flag9 10813 10814 procedure Set_Has_Self_Reference 10815 (N : Node_Id; Val : Boolean := True); -- Flag13 10816 10817 procedure Set_Has_SP_Choice 10818 (N : Node_Id; Val : Boolean := True); -- Flag15 10819 10820 procedure Set_Has_Storage_Size_Pragma 10821 (N : Node_Id; Val : Boolean := True); -- Flag5 10822 10823 procedure Set_Has_Target_Names 10824 (N : Node_Id; Val : Boolean := True); -- Flag8 10825 10826 procedure Set_Has_Wide_Character 10827 (N : Node_Id; Val : Boolean := True); -- Flag11 10828 10829 procedure Set_Has_Wide_Wide_Character 10830 (N : Node_Id; Val : Boolean := True); -- Flag13 10831 10832 procedure Set_Header_Size_Added 10833 (N : Node_Id; Val : Boolean := True); -- Flag11 10834 10835 procedure Set_Hidden_By_Use_Clause 10836 (N : Node_Id; Val : Elist_Id); -- Elist5 10837 10838 procedure Set_High_Bound 10839 (N : Node_Id; Val : Node_Id); -- Node2 10840 10841 procedure Set_Identifier 10842 (N : Node_Id; Val : Node_Id); -- Node1 10843 10844 procedure Set_Interface_List 10845 (N : Node_Id; Val : List_Id); -- List2 10846 10847 procedure Set_Interface_Present 10848 (N : Node_Id; Val : Boolean := True); -- Flag16 10849 10850 procedure Set_Implicit_With 10851 (N : Node_Id; Val : Boolean := True); -- Flag16 10852 10853 procedure Set_Import_Interface_Present 10854 (N : Node_Id; Val : Boolean := True); -- Flag16 10855 10856 procedure Set_In_Present 10857 (N : Node_Id; Val : Boolean := True); -- Flag15 10858 10859 procedure Set_Includes_Infinities 10860 (N : Node_Id; Val : Boolean := True); -- Flag11 10861 10862 procedure Set_Incomplete_View 10863 (N : Node_Id; Val : Node_Id); -- Node2 10864 10865 procedure Set_Inherited_Discriminant 10866 (N : Node_Id; Val : Boolean := True); -- Flag13 10867 10868 procedure Set_Instance_Spec 10869 (N : Node_Id; Val : Node_Id); -- Node5 10870 10871 procedure Set_Intval 10872 (N : Node_Id; Val : Uint); -- Uint3 10873 10874 procedure Set_Is_Abort_Block 10875 (N : Node_Id; Val : Boolean := True); -- Flag4 10876 10877 procedure Set_Is_Accessibility_Actual 10878 (N : Node_Id; Val : Boolean := True); -- Flag13 10879 10880 procedure Set_Is_Analyzed_Pragma 10881 (N : Node_Id; Val : Boolean := True); -- Flag5 10882 10883 procedure Set_Is_Asynchronous_Call_Block 10884 (N : Node_Id; Val : Boolean := True); -- Flag7 10885 10886 procedure Set_Is_Boolean_Aspect 10887 (N : Node_Id; Val : Boolean := True); -- Flag16 10888 10889 procedure Set_Is_Checked 10890 (N : Node_Id; Val : Boolean := True); -- Flag11 10891 10892 procedure Set_Is_Checked_Ghost_Pragma 10893 (N : Node_Id; Val : Boolean := True); -- Flag3 10894 10895 procedure Set_Is_Component_Left_Opnd 10896 (N : Node_Id; Val : Boolean := True); -- Flag13 10897 10898 procedure Set_Is_Component_Right_Opnd 10899 (N : Node_Id; Val : Boolean := True); -- Flag14 10900 10901 procedure Set_Is_Controlling_Actual 10902 (N : Node_Id; Val : Boolean := True); -- Flag16 10903 10904 procedure Set_Is_Declaration_Level_Node 10905 (N : Node_Id; Val : Boolean := True); -- Flag5 10906 10907 procedure Set_Is_Delayed_Aspect 10908 (N : Node_Id; Val : Boolean := True); -- Flag14 10909 10910 procedure Set_Is_Disabled 10911 (N : Node_Id; Val : Boolean := True); -- Flag15 10912 10913 procedure Set_Is_Dispatching_Call 10914 (N : Node_Id; Val : Boolean := True); -- Flag6 10915 10916 procedure Set_Is_Dynamic_Coextension 10917 (N : Node_Id; Val : Boolean := True); -- Flag18 10918 10919 procedure Set_Is_Effective_Use_Clause 10920 (N : Node_Id; Val : Boolean := True); -- Flag1 10921 10922 procedure Set_Is_Elaboration_Checks_OK_Node 10923 (N : Node_Id; Val : Boolean := True); -- Flag1 10924 10925 procedure Set_Is_Elaboration_Code 10926 (N : Node_Id; Val : Boolean := True); -- Flag9 10927 10928 procedure Set_Is_Elaboration_Warnings_OK_Node 10929 (N : Node_Id; Val : Boolean := True); -- Flag3 10930 10931 procedure Set_Is_Elsif 10932 (N : Node_Id; Val : Boolean := True); -- Flag13 10933 10934 procedure Set_Is_Entry_Barrier_Function 10935 (N : Node_Id; Val : Boolean := True); -- Flag8 10936 10937 procedure Set_Is_Expanded_Build_In_Place_Call 10938 (N : Node_Id; Val : Boolean := True); -- Flag11 10939 10940 procedure Set_Is_Expanded_Contract 10941 (N : Node_Id; Val : Boolean := True); -- Flag1 10942 10943 procedure Set_Is_Finalization_Wrapper 10944 (N : Node_Id; Val : Boolean := True); -- Flag9 10945 10946 procedure Set_Is_Folded_In_Parser 10947 (N : Node_Id; Val : Boolean := True); -- Flag4 10948 10949 procedure Set_Is_Generic_Contract_Pragma 10950 (N : Node_Id; Val : Boolean := True); -- Flag2 10951 10952 procedure Set_Is_Ignored 10953 (N : Node_Id; Val : Boolean := True); -- Flag9 10954 10955 procedure Set_Is_Ignored_Ghost_Pragma 10956 (N : Node_Id; Val : Boolean := True); -- Flag8 10957 10958 procedure Set_Is_In_Discriminant_Check 10959 (N : Node_Id; Val : Boolean := True); -- Flag11 10960 10961 procedure Set_Is_Inherited_Pragma 10962 (N : Node_Id; Val : Boolean := True); -- Flag4 10963 10964 procedure Set_Is_Initialization_Block 10965 (N : Node_Id; Val : Boolean := True); -- Flag1 10966 10967 procedure Set_Is_Known_Guaranteed_ABE 10968 (N : Node_Id; Val : Boolean := True); -- Flag18 10969 10970 procedure Set_Is_Machine_Number 10971 (N : Node_Id; Val : Boolean := True); -- Flag11 10972 10973 procedure Set_Is_Null_Loop 10974 (N : Node_Id; Val : Boolean := True); -- Flag16 10975 10976 procedure Set_Is_Overloaded 10977 (N : Node_Id; Val : Boolean := True); -- Flag5 10978 10979 procedure Set_Is_Power_Of_2_For_Shift 10980 (N : Node_Id; Val : Boolean := True); -- Flag13 10981 10982 procedure Set_Is_Prefixed_Call 10983 (N : Node_Id; Val : Boolean := True); -- Flag17 10984 10985 procedure Set_Is_Protected_Subprogram_Body 10986 (N : Node_Id; Val : Boolean := True); -- Flag7 10987 10988 procedure Set_Is_Qualified_Universal_Literal 10989 (N : Node_Id; Val : Boolean := True); -- Flag4 10990 10991 procedure Set_Is_Read 10992 (N : Node_Id; Val : Boolean := True); -- Flag1 10993 10994 procedure Set_Is_Source_Call 10995 (N : Node_Id; Val : Boolean := True); -- Flag4 10996 10997 procedure Set_Is_SPARK_Mode_On_Node 10998 (N : Node_Id; Val : Boolean := True); -- Flag2 10999 11000 procedure Set_Is_Static_Coextension 11001 (N : Node_Id; Val : Boolean := True); -- Flag14 11002 11003 procedure Set_Is_Static_Expression 11004 (N : Node_Id; Val : Boolean := True); -- Flag6 11005 11006 procedure Set_Is_Subprogram_Descriptor 11007 (N : Node_Id; Val : Boolean := True); -- Flag16 11008 11009 procedure Set_Is_Task_Allocation_Block 11010 (N : Node_Id; Val : Boolean := True); -- Flag6 11011 11012 procedure Set_Is_Task_Body_Procedure 11013 (N : Node_Id; Val : Boolean := True); -- Flag1 11014 11015 procedure Set_Is_Task_Master 11016 (N : Node_Id; Val : Boolean := True); -- Flag5 11017 11018 procedure Set_Is_Write 11019 (N : Node_Id; Val : Boolean := True); -- Flag2 11020 11021 procedure Set_Iteration_Scheme 11022 (N : Node_Id; Val : Node_Id); -- Node2 11023 11024 procedure Set_Iterator_Specification 11025 (N : Node_Id; Val : Node_Id); -- Node2 11026 11027 procedure Set_Itype 11028 (N : Node_Id; Val : Entity_Id); -- Node1 11029 11030 procedure Set_Kill_Range_Check 11031 (N : Node_Id; Val : Boolean := True); -- Flag11 11032 11033 procedure Set_Last_Bit 11034 (N : Node_Id; Val : Node_Id); -- Node4 11035 11036 procedure Set_Last_Name 11037 (N : Node_Id; Val : Boolean := True); -- Flag6 11038 11039 procedure Set_Library_Unit 11040 (N : Node_Id; Val : Node_Id); -- Node4 11041 11042 procedure Set_Label_Construct 11043 (N : Node_Id; Val : Node_Id); -- Node2 11044 11045 procedure Set_Left_Opnd 11046 (N : Node_Id; Val : Node_Id); -- Node2 11047 11048 procedure Set_Limited_View_Installed 11049 (N : Node_Id; Val : Boolean := True); -- Flag18 11050 11051 procedure Set_Limited_Present 11052 (N : Node_Id; Val : Boolean := True); -- Flag17 11053 11054 procedure Set_Literals 11055 (N : Node_Id; Val : List_Id); -- List1 11056 11057 procedure Set_Local_Raise_Not_OK 11058 (N : Node_Id; Val : Boolean := True); -- Flag7 11059 11060 procedure Set_Local_Raise_Statements 11061 (N : Node_Id; Val : Elist_Id); -- Elist1 11062 11063 procedure Set_Loop_Actions 11064 (N : Node_Id; Val : List_Id); -- List2 11065 11066 procedure Set_Loop_Parameter_Specification 11067 (N : Node_Id; Val : Node_Id); -- Node4 11068 11069 procedure Set_Low_Bound 11070 (N : Node_Id; Val : Node_Id); -- Node1 11071 11072 procedure Set_Mod_Clause 11073 (N : Node_Id; Val : Node_Id); -- Node2 11074 11075 procedure Set_More_Ids 11076 (N : Node_Id; Val : Boolean := True); -- Flag5 11077 11078 procedure Set_Must_Be_Byte_Aligned 11079 (N : Node_Id; Val : Boolean := True); -- Flag14 11080 11081 procedure Set_Must_Not_Freeze 11082 (N : Node_Id; Val : Boolean := True); -- Flag8 11083 11084 procedure Set_Must_Not_Override 11085 (N : Node_Id; Val : Boolean := True); -- Flag15 11086 11087 procedure Set_Must_Override 11088 (N : Node_Id; Val : Boolean := True); -- Flag14 11089 11090 procedure Set_Name 11091 (N : Node_Id; Val : Node_Id); -- Node2 11092 11093 procedure Set_Names 11094 (N : Node_Id; Val : List_Id); -- List2 11095 11096 procedure Set_Next_Entity 11097 (N : Node_Id; Val : Node_Id); -- Node2 11098 11099 procedure Set_Next_Exit_Statement 11100 (N : Node_Id; Val : Node_Id); -- Node3 11101 11102 procedure Set_Next_Implicit_With 11103 (N : Node_Id; Val : Node_Id); -- Node3 11104 11105 procedure Set_Next_Named_Actual 11106 (N : Node_Id; Val : Node_Id); -- Node4 11107 11108 procedure Set_Next_Pragma 11109 (N : Node_Id; Val : Node_Id); -- Node1 11110 11111 procedure Set_Next_Rep_Item 11112 (N : Node_Id; Val : Node_Id); -- Node5 11113 11114 procedure Set_Next_Use_Clause 11115 (N : Node_Id; Val : Node_Id); -- Node3 11116 11117 procedure Set_No_Ctrl_Actions 11118 (N : Node_Id; Val : Boolean := True); -- Flag7 11119 11120 procedure Set_No_Elaboration_Check 11121 (N : Node_Id; Val : Boolean := True); -- Flag4 11122 11123 procedure Set_No_Entities_Ref_In_Spec 11124 (N : Node_Id; Val : Boolean := True); -- Flag8 11125 11126 procedure Set_No_Initialization 11127 (N : Node_Id; Val : Boolean := True); -- Flag13 11128 11129 procedure Set_No_Minimize_Eliminate 11130 (N : Node_Id; Val : Boolean := True); -- Flag17 11131 11132 procedure Set_No_Side_Effect_Removal 11133 (N : Node_Id; Val : Boolean := True); -- Flag17 11134 11135 procedure Set_No_Truncation 11136 (N : Node_Id; Val : Boolean := True); -- Flag17 11137 11138 procedure Set_Null_Excluding_Subtype 11139 (N : Node_Id; Val : Boolean := True); -- Flag16 11140 11141 procedure Set_Null_Exclusion_Present 11142 (N : Node_Id; Val : Boolean := True); -- Flag11 11143 11144 procedure Set_Null_Exclusion_In_Return_Present 11145 (N : Node_Id; Val : Boolean := True); -- Flag14 11146 11147 procedure Set_Null_Present 11148 (N : Node_Id; Val : Boolean := True); -- Flag13 11149 11150 procedure Set_Null_Record_Present 11151 (N : Node_Id; Val : Boolean := True); -- Flag17 11152 11153 procedure Set_Null_Statement 11154 (N : Node_Id; Val : Node_Id); -- Node2 11155 11156 procedure Set_Object_Definition 11157 (N : Node_Id; Val : Node_Id); -- Node4 11158 11159 procedure Set_Of_Present 11160 (N : Node_Id; Val : Boolean := True); -- Flag16 11161 11162 procedure Set_Original_Discriminant 11163 (N : Node_Id; Val : Node_Id); -- Node2 11164 11165 procedure Set_Original_Entity 11166 (N : Node_Id; Val : Entity_Id); -- Node2 11167 11168 procedure Set_Others_Discrete_Choices 11169 (N : Node_Id; Val : List_Id); -- List1 11170 11171 procedure Set_Out_Present 11172 (N : Node_Id; Val : Boolean := True); -- Flag17 11173 11174 procedure Set_Parameter_Associations 11175 (N : Node_Id; Val : List_Id); -- List3 11176 11177 procedure Set_Parameter_Specifications 11178 (N : Node_Id; Val : List_Id); -- List3 11179 11180 procedure Set_Parameter_Type 11181 (N : Node_Id; Val : Node_Id); -- Node2 11182 11183 procedure Set_Parent_Spec 11184 (N : Node_Id; Val : Node_Id); -- Node4 11185 11186 procedure Set_Parent_With 11187 (N : Node_Id; Val : Boolean := True); -- Flag1 11188 11189 procedure Set_Position 11190 (N : Node_Id; Val : Node_Id); -- Node2 11191 11192 procedure Set_Pragma_Argument_Associations 11193 (N : Node_Id; Val : List_Id); -- List2 11194 11195 procedure Set_Pragma_Identifier 11196 (N : Node_Id; Val : Node_Id); -- Node4 11197 11198 procedure Set_Pragmas_After 11199 (N : Node_Id; Val : List_Id); -- List5 11200 11201 procedure Set_Pragmas_Before 11202 (N : Node_Id; Val : List_Id); -- List4 11203 11204 procedure Set_Pre_Post_Conditions 11205 (N : Node_Id; Val : Node_Id); -- Node1 11206 11207 procedure Set_Prefix 11208 (N : Node_Id; Val : Node_Id); -- Node3 11209 11210 procedure Set_Premature_Use 11211 (N : Node_Id; Val : Node_Id); -- Node5 11212 11213 procedure Set_Present_Expr 11214 (N : Node_Id; Val : Uint); -- Uint3 11215 11216 procedure Set_Prev_Ids 11217 (N : Node_Id; Val : Boolean := True); -- Flag6 11218 11219 procedure Set_Prev_Use_Clause 11220 (N : Node_Id; Val : Node_Id); -- Node1 11221 11222 procedure Set_Print_In_Hex 11223 (N : Node_Id; Val : Boolean := True); -- Flag13 11224 11225 procedure Set_Private_Declarations 11226 (N : Node_Id; Val : List_Id); -- List3 11227 11228 procedure Set_Private_Present 11229 (N : Node_Id; Val : Boolean := True); -- Flag15 11230 11231 procedure Set_Procedure_To_Call 11232 (N : Node_Id; Val : Node_Id); -- Node2 11233 11234 procedure Set_Proper_Body 11235 (N : Node_Id; Val : Node_Id); -- Node1 11236 11237 procedure Set_Protected_Definition 11238 (N : Node_Id; Val : Node_Id); -- Node3 11239 11240 procedure Set_Protected_Present 11241 (N : Node_Id; Val : Boolean := True); -- Flag6 11242 11243 procedure Set_Raises_Constraint_Error 11244 (N : Node_Id; Val : Boolean := True); -- Flag7 11245 11246 procedure Set_Range_Constraint 11247 (N : Node_Id; Val : Node_Id); -- Node4 11248 11249 procedure Set_Range_Expression 11250 (N : Node_Id; Val : Node_Id); -- Node4 11251 11252 procedure Set_Real_Range_Specification 11253 (N : Node_Id; Val : Node_Id); -- Node4 11254 11255 procedure Set_Realval 11256 (N : Node_Id; Val : Ureal); -- Ureal3 11257 11258 procedure Set_Reason 11259 (N : Node_Id; Val : Uint); -- Uint3 11260 11261 procedure Set_Record_Extension_Part 11262 (N : Node_Id; Val : Node_Id); -- Node3 11263 11264 procedure Set_Redundant_Use 11265 (N : Node_Id; Val : Boolean := True); -- Flag13 11266 11267 procedure Set_Renaming_Exception 11268 (N : Node_Id; Val : Node_Id); -- Node2 11269 11270 procedure Set_Result_Definition 11271 (N : Node_Id; Val : Node_Id); -- Node4 11272 11273 procedure Set_Return_Object_Declarations 11274 (N : Node_Id; Val : List_Id); -- List3 11275 11276 procedure Set_Return_Statement_Entity 11277 (N : Node_Id; Val : Node_Id); -- Node5 11278 11279 procedure Set_Reverse_Present 11280 (N : Node_Id; Val : Boolean := True); -- Flag15 11281 11282 procedure Set_Right_Opnd 11283 (N : Node_Id; Val : Node_Id); -- Node3 11284 11285 procedure Set_Rounded_Result 11286 (N : Node_Id; Val : Boolean := True); -- Flag18 11287 11288 procedure Set_SCIL_Controlling_Tag 11289 (N : Node_Id; Val : Node_Id); -- Node5 11290 11291 procedure Set_SCIL_Entity 11292 (N : Node_Id; Val : Node_Id); -- Node4 11293 11294 procedure Set_SCIL_Tag_Value 11295 (N : Node_Id; Val : Node_Id); -- Node5 11296 11297 procedure Set_SCIL_Target_Prim 11298 (N : Node_Id; Val : Node_Id); -- Node2 11299 11300 procedure Set_Scope 11301 (N : Node_Id; Val : Node_Id); -- Node3 11302 11303 procedure Set_Select_Alternatives 11304 (N : Node_Id; Val : List_Id); -- List1 11305 11306 procedure Set_Selector_Name 11307 (N : Node_Id; Val : Node_Id); -- Node2 11308 11309 procedure Set_Selector_Names 11310 (N : Node_Id; Val : List_Id); -- List1 11311 11312 procedure Set_Shift_Count_OK 11313 (N : Node_Id; Val : Boolean := True); -- Flag4 11314 11315 procedure Set_Source_Type 11316 (N : Node_Id; Val : Entity_Id); -- Node1 11317 11318 procedure Set_Specification 11319 (N : Node_Id; Val : Node_Id); -- Node1 11320 11321 procedure Set_Split_PPC 11322 (N : Node_Id; Val : Boolean); -- Flag17 11323 11324 procedure Set_Statements 11325 (N : Node_Id; Val : List_Id); -- List3 11326 11327 procedure Set_Storage_Pool 11328 (N : Node_Id; Val : Node_Id); -- Node1 11329 11330 procedure Set_Subpool_Handle_Name 11331 (N : Node_Id; Val : Node_Id); -- Node4 11332 11333 procedure Set_Strval 11334 (N : Node_Id; Val : String_Id); -- Str3 11335 11336 procedure Set_Subtype_Indication 11337 (N : Node_Id; Val : Node_Id); -- Node5 11338 11339 procedure Set_Subtype_Mark 11340 (N : Node_Id; Val : Node_Id); -- Node4 11341 11342 procedure Set_Subtype_Marks 11343 (N : Node_Id; Val : List_Id); -- List2 11344 11345 procedure Set_Suppress_Assignment_Checks 11346 (N : Node_Id; Val : Boolean := True); -- Flag18 11347 11348 procedure Set_Suppress_Loop_Warnings 11349 (N : Node_Id; Val : Boolean := True); -- Flag17 11350 11351 procedure Set_Synchronized_Present 11352 (N : Node_Id; Val : Boolean := True); -- Flag7 11353 11354 procedure Set_Tagged_Present 11355 (N : Node_Id; Val : Boolean := True); -- Flag15 11356 11357 procedure Set_Target 11358 (N : Node_Id; Val : Entity_Id); -- Node1 11359 11360 procedure Set_Target_Type 11361 (N : Node_Id; Val : Entity_Id); -- Node2 11362 11363 procedure Set_Task_Definition 11364 (N : Node_Id; Val : Node_Id); -- Node3 11365 11366 procedure Set_Task_Present 11367 (N : Node_Id; Val : Boolean := True); -- Flag5 11368 11369 procedure Set_Then_Actions 11370 (N : Node_Id; Val : List_Id); -- List2 11371 11372 procedure Set_Then_Statements 11373 (N : Node_Id; Val : List_Id); -- List2 11374 11375 procedure Set_Treat_Fixed_As_Integer 11376 (N : Node_Id; Val : Boolean := True); -- Flag14 11377 11378 procedure Set_Triggering_Alternative 11379 (N : Node_Id; Val : Node_Id); -- Node1 11380 11381 procedure Set_Triggering_Statement 11382 (N : Node_Id; Val : Node_Id); -- Node1 11383 11384 procedure Set_TSS_Elist 11385 (N : Node_Id; Val : Elist_Id); -- Elist3 11386 11387 procedure Set_Type_Definition 11388 (N : Node_Id; Val : Node_Id); -- Node3 11389 11390 procedure Set_Uneval_Old_Accept 11391 (N : Node_Id; Val : Boolean := True); -- Flag7 11392 11393 procedure Set_Uneval_Old_Warn 11394 (N : Node_Id; Val : Boolean := True); -- Flag18 11395 11396 procedure Set_Unit 11397 (N : Node_Id; Val : Node_Id); -- Node2 11398 11399 procedure Set_Unknown_Discriminants_Present 11400 (N : Node_Id; Val : Boolean := True); -- Flag13 11401 11402 procedure Set_Unreferenced_In_Spec 11403 (N : Node_Id; Val : Boolean := True); -- Flag7 11404 11405 procedure Set_Variant_Part 11406 (N : Node_Id; Val : Node_Id); -- Node4 11407 11408 procedure Set_Variants 11409 (N : Node_Id; Val : List_Id); -- List1 11410 11411 procedure Set_Visible_Declarations 11412 (N : Node_Id; Val : List_Id); -- List2 11413 11414 procedure Set_Uninitialized_Variable 11415 (N : Node_Id; Val : Node_Id); -- Node3 11416 11417 procedure Set_Used_Operations 11418 (N : Node_Id; Val : Elist_Id); -- Elist2 11419 11420 procedure Set_Was_Attribute_Reference 11421 (N : Node_Id; Val : Boolean := True); -- Flag2 11422 11423 procedure Set_Was_Expression_Function 11424 (N : Node_Id; Val : Boolean := True); -- Flag18 11425 11426 procedure Set_Was_Originally_Stub 11427 (N : Node_Id; Val : Boolean := True); -- Flag13 11428 11429 procedure Set_Withed_Body 11430 (N : Node_Id; Val : Node_Id); -- Node1 11431 11432 ------------------------- 11433 -- Iterator Procedures -- 11434 ------------------------- 11435 11436 -- The call to Next_xxx (N) is equivalent to N := Next_xxx (N) 11437 11438 procedure Next_Entity (N : in out Node_Id); 11439 procedure Next_Named_Actual (N : in out Node_Id); 11440 procedure Next_Rep_Item (N : in out Node_Id); 11441 procedure Next_Use_Clause (N : in out Node_Id); 11442 11443 ------------------------------------------- 11444 -- Miscellaneous Tree Access Subprograms -- 11445 ------------------------------------------- 11446 11447 function End_Location (N : Node_Id) return Source_Ptr; 11448 -- N is an N_If_Statement or N_Case_Statement node, and this function 11449 -- returns the location of the IF token in the END IF sequence by 11450 -- translating the value of the End_Span field. 11451 11452 procedure Set_End_Location (N : Node_Id; S : Source_Ptr); 11453 -- N is an N_If_Statement or N_Case_Statement node. This procedure sets 11454 -- the End_Span field to correspond to the given value S. In other words, 11455 -- End_Span is set to the difference between S and Sloc (N), the starting 11456 -- location. 11457 11458 function Get_Pragma_Arg (Arg : Node_Id) return Node_Id; 11459 -- Given an argument to a pragma Arg, this function returns the expression 11460 -- for the argument. This is Arg itself, or, in the case where Arg is a 11461 -- pragma argument association node, the expression from this node. 11462 11463 -------------------------------- 11464 -- Node_Kind Membership Tests -- 11465 -------------------------------- 11466 11467 -- The following functions allow a convenient notation for testing whether 11468 -- a Node_Kind value matches any one of a list of possible values. In each 11469 -- case True is returned if the given T argument is equal to any of the V 11470 -- arguments. Note that there is a similar set of functions defined in 11471 -- Atree where the first argument is a Node_Id whose Nkind field is tested. 11472 11473 function Nkind_In 11474 (T : Node_Kind; 11475 V1 : Node_Kind; 11476 V2 : Node_Kind) return Boolean; 11477 11478 function Nkind_In 11479 (T : Node_Kind; 11480 V1 : Node_Kind; 11481 V2 : Node_Kind; 11482 V3 : Node_Kind) return Boolean; 11483 11484 function Nkind_In 11485 (T : Node_Kind; 11486 V1 : Node_Kind; 11487 V2 : Node_Kind; 11488 V3 : Node_Kind; 11489 V4 : Node_Kind) return Boolean; 11490 11491 function Nkind_In 11492 (T : Node_Kind; 11493 V1 : Node_Kind; 11494 V2 : Node_Kind; 11495 V3 : Node_Kind; 11496 V4 : Node_Kind; 11497 V5 : Node_Kind) return Boolean; 11498 11499 function Nkind_In 11500 (T : Node_Kind; 11501 V1 : Node_Kind; 11502 V2 : Node_Kind; 11503 V3 : Node_Kind; 11504 V4 : Node_Kind; 11505 V5 : Node_Kind; 11506 V6 : Node_Kind) return Boolean; 11507 11508 function Nkind_In 11509 (T : Node_Kind; 11510 V1 : Node_Kind; 11511 V2 : Node_Kind; 11512 V3 : Node_Kind; 11513 V4 : Node_Kind; 11514 V5 : Node_Kind; 11515 V6 : Node_Kind; 11516 V7 : Node_Kind) return Boolean; 11517 11518 function Nkind_In 11519 (T : Node_Kind; 11520 V1 : Node_Kind; 11521 V2 : Node_Kind; 11522 V3 : Node_Kind; 11523 V4 : Node_Kind; 11524 V5 : Node_Kind; 11525 V6 : Node_Kind; 11526 V7 : Node_Kind; 11527 V8 : Node_Kind) return Boolean; 11528 11529 function Nkind_In 11530 (T : Node_Kind; 11531 V1 : Node_Kind; 11532 V2 : Node_Kind; 11533 V3 : Node_Kind; 11534 V4 : Node_Kind; 11535 V5 : Node_Kind; 11536 V6 : Node_Kind; 11537 V7 : Node_Kind; 11538 V8 : Node_Kind; 11539 V9 : Node_Kind) return Boolean; 11540 11541 function Nkind_In 11542 (T : Node_Kind; 11543 V1 : Node_Kind; 11544 V2 : Node_Kind; 11545 V3 : Node_Kind; 11546 V4 : Node_Kind; 11547 V5 : Node_Kind; 11548 V6 : Node_Kind; 11549 V7 : Node_Kind; 11550 V8 : Node_Kind; 11551 V9 : Node_Kind; 11552 V10 : Node_Kind) return Boolean; 11553 11554 function Nkind_In 11555 (T : Node_Kind; 11556 V1 : Node_Kind; 11557 V2 : Node_Kind; 11558 V3 : Node_Kind; 11559 V4 : Node_Kind; 11560 V5 : Node_Kind; 11561 V6 : Node_Kind; 11562 V7 : Node_Kind; 11563 V8 : Node_Kind; 11564 V9 : Node_Kind; 11565 V10 : Node_Kind; 11566 V11 : Node_Kind) return Boolean; 11567 11568 pragma Inline (Nkind_In); 11569 -- Inline all above functions 11570 11571 ----------------------- 11572 -- Utility Functions -- 11573 ----------------------- 11574 11575 procedure Map_Pragma_Name (From, To : Name_Id); 11576 -- Used in the implementation of pragma Rename_Pragma. Maps pragma name 11577 -- From to pragma name To, so From can be used as a synonym for To. 11578 11579 Too_Many_Pragma_Mappings : exception; 11580 -- Raised if Map_Pragma_Name is called too many times. We expect that few 11581 -- programs will use it at all, and those that do will use it approximately 11582 -- once or twice. 11583 11584 function Pragma_Name (N : Node_Id) return Name_Id; 11585 -- Obtain the name of pragma N from the Chars field of its identifier. If 11586 -- the pragma has been renamed using Rename_Pragma, this routine returns 11587 -- the name of the renaming. 11588 11589 function Pragma_Name_Unmapped (N : Node_Id) return Name_Id; 11590 -- Obtain the name of pragma N from the Chars field of its identifier. This 11591 -- form of name extraction does not take into account renamings performed 11592 -- by Rename_Pragma. 11593 11594 ----------------------------- 11595 -- Syntactic Parent Tables -- 11596 ----------------------------- 11597 11598 -- These tables show for each node, and for each of the five fields, 11599 -- whether the corresponding field is syntactic (True) or semantic (False). 11600 -- Unused entries are also set to False. 11601 11602 subtype Field_Num is Natural range 1 .. 5; 11603 11604 Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := ( 11605 11606 -- Following entries can be built automatically from the sinfo sources 11607 -- using the makeisf utility (currently this program is in spitbol). 11608 11609 N_Identifier => 11610 (1 => True, -- Chars (Name1) 11611 2 => False, -- Original_Discriminant (Node2-Sem) 11612 3 => False, -- unused 11613 4 => False, -- Entity (Node4-Sem) 11614 5 => False), -- Etype (Node5-Sem) 11615 11616 N_Integer_Literal => 11617 (1 => False, -- unused 11618 2 => False, -- Original_Entity (Node2-Sem) 11619 3 => True, -- Intval (Uint3) 11620 4 => False, -- unused 11621 5 => False), -- Etype (Node5-Sem) 11622 11623 N_Real_Literal => 11624 (1 => False, -- unused 11625 2 => False, -- Original_Entity (Node2-Sem) 11626 3 => True, -- Realval (Ureal3) 11627 4 => False, -- Corresponding_Integer_Value (Uint4-Sem) 11628 5 => False), -- Etype (Node5-Sem) 11629 11630 N_Character_Literal => 11631 (1 => True, -- Chars (Name1) 11632 2 => True, -- Char_Literal_Value (Uint2) 11633 3 => False, -- unused 11634 4 => False, -- Entity (Node4-Sem) 11635 5 => False), -- Etype (Node5-Sem) 11636 11637 N_String_Literal => 11638 (1 => False, -- unused 11639 2 => False, -- unused 11640 3 => True, -- Strval (Str3) 11641 4 => False, -- unused 11642 5 => False), -- Etype (Node5-Sem) 11643 11644 N_Pragma => 11645 (1 => False, -- Next_Pragma (Node1-Sem) 11646 2 => True, -- Pragma_Argument_Associations (List2) 11647 3 => False, -- Corresponding_Aspect (Node3-Sem) 11648 4 => True, -- Pragma_Identifier (Node4) 11649 5 => False), -- Next_Rep_Item (Node5-Sem) 11650 11651 N_Pragma_Argument_Association => 11652 (1 => True, -- Chars (Name1) 11653 2 => False, -- Expression_Copy (Node2-Sem) 11654 3 => True, -- Expression (Node3) 11655 4 => False, -- unused 11656 5 => False), -- unused 11657 11658 N_Defining_Identifier => 11659 (1 => True, -- Chars (Name1) 11660 2 => False, -- Next_Entity (Node2-Sem) 11661 3 => False, -- Scope (Node3-Sem) 11662 4 => False, -- unused 11663 5 => False), -- Etype (Node5-Sem) 11664 11665 N_Full_Type_Declaration => 11666 (1 => True, -- Defining_Identifier (Node1) 11667 2 => False, -- Incomplete_View (Node2-Sem) 11668 3 => True, -- Type_Definition (Node3) 11669 4 => True, -- Discriminant_Specifications (List4) 11670 5 => False), -- unused 11671 11672 N_Subtype_Declaration => 11673 (1 => True, -- Defining_Identifier (Node1) 11674 2 => False, -- unused 11675 3 => False, -- unused 11676 4 => False, -- Generic_Parent_Type (Node4-Sem) 11677 5 => True), -- Subtype_Indication (Node5) 11678 11679 N_Subtype_Indication => 11680 (1 => False, -- unused 11681 2 => False, -- unused 11682 3 => True, -- Constraint (Node3) 11683 4 => True, -- Subtype_Mark (Node4) 11684 5 => False), -- Etype (Node5-Sem) 11685 11686 N_Object_Declaration => 11687 (1 => True, -- Defining_Identifier (Node1) 11688 2 => False, -- Handler_List_Entry (Node2-Sem) 11689 3 => True, -- Expression (Node3) 11690 4 => True, -- Object_Definition (Node4) 11691 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 11692 11693 N_Number_Declaration => 11694 (1 => True, -- Defining_Identifier (Node1) 11695 2 => False, -- unused 11696 3 => True, -- Expression (Node3) 11697 4 => False, -- unused 11698 5 => False), -- unused 11699 11700 N_Derived_Type_Definition => 11701 (1 => False, -- unused 11702 2 => True, -- Interface_List (List2) 11703 3 => True, -- Record_Extension_Part (Node3) 11704 4 => False, -- unused 11705 5 => True), -- Subtype_Indication (Node5) 11706 11707 N_Range_Constraint => 11708 (1 => False, -- unused 11709 2 => False, -- unused 11710 3 => False, -- unused 11711 4 => True, -- Range_Expression (Node4) 11712 5 => False), -- unused 11713 11714 N_Range => 11715 (1 => True, -- Low_Bound (Node1) 11716 2 => True, -- High_Bound (Node2) 11717 3 => False, -- unused 11718 4 => False, -- unused 11719 5 => False), -- Etype (Node5-Sem) 11720 11721 N_Enumeration_Type_Definition => 11722 (1 => True, -- Literals (List1) 11723 2 => False, -- unused 11724 3 => False, -- unused 11725 4 => True, -- End_Label (Node4) 11726 5 => False), -- unused 11727 11728 N_Defining_Character_Literal => 11729 (1 => True, -- Chars (Name1) 11730 2 => False, -- Next_Entity (Node2-Sem) 11731 3 => False, -- Scope (Node3-Sem) 11732 4 => False, -- unused 11733 5 => False), -- Etype (Node5-Sem) 11734 11735 N_Signed_Integer_Type_Definition => 11736 (1 => True, -- Low_Bound (Node1) 11737 2 => True, -- High_Bound (Node2) 11738 3 => False, -- unused 11739 4 => False, -- unused 11740 5 => False), -- unused 11741 11742 N_Modular_Type_Definition => 11743 (1 => False, -- unused 11744 2 => False, -- unused 11745 3 => True, -- Expression (Node3) 11746 4 => False, -- unused 11747 5 => False), -- unused 11748 11749 N_Floating_Point_Definition => 11750 (1 => False, -- unused 11751 2 => True, -- Digits_Expression (Node2) 11752 3 => False, -- unused 11753 4 => True, -- Real_Range_Specification (Node4) 11754 5 => False), -- unused 11755 11756 N_Real_Range_Specification => 11757 (1 => True, -- Low_Bound (Node1) 11758 2 => True, -- High_Bound (Node2) 11759 3 => False, -- unused 11760 4 => False, -- unused 11761 5 => False), -- unused 11762 11763 N_Ordinary_Fixed_Point_Definition => 11764 (1 => False, -- unused 11765 2 => False, -- unused 11766 3 => True, -- Delta_Expression (Node3) 11767 4 => True, -- Real_Range_Specification (Node4) 11768 5 => False), -- unused 11769 11770 N_Decimal_Fixed_Point_Definition => 11771 (1 => False, -- unused 11772 2 => True, -- Digits_Expression (Node2) 11773 3 => True, -- Delta_Expression (Node3) 11774 4 => True, -- Real_Range_Specification (Node4) 11775 5 => False), -- unused 11776 11777 N_Digits_Constraint => 11778 (1 => False, -- unused 11779 2 => True, -- Digits_Expression (Node2) 11780 3 => False, -- unused 11781 4 => True, -- Range_Constraint (Node4) 11782 5 => False), -- unused 11783 11784 N_Unconstrained_Array_Definition => 11785 (1 => False, -- unused 11786 2 => True, -- Subtype_Marks (List2) 11787 3 => False, -- unused 11788 4 => True, -- Component_Definition (Node4) 11789 5 => False), -- unused 11790 11791 N_Constrained_Array_Definition => 11792 (1 => False, -- unused 11793 2 => True, -- Discrete_Subtype_Definitions (List2) 11794 3 => False, -- unused 11795 4 => True, -- Component_Definition (Node4) 11796 5 => False), -- unused 11797 11798 N_Component_Definition => 11799 (1 => False, -- unused 11800 2 => False, -- unused 11801 3 => True, -- Access_Definition (Node3) 11802 4 => False, -- unused 11803 5 => True), -- Subtype_Indication (Node5) 11804 11805 N_Discriminant_Specification => 11806 (1 => True, -- Defining_Identifier (Node1) 11807 2 => False, -- unused 11808 3 => True, -- Expression (Node3) 11809 4 => False, -- unused 11810 5 => True), -- Discriminant_Type (Node5) 11811 11812 N_Index_Or_Discriminant_Constraint => 11813 (1 => True, -- Constraints (List1) 11814 2 => False, -- unused 11815 3 => False, -- unused 11816 4 => False, -- unused 11817 5 => False), -- unused 11818 11819 N_Discriminant_Association => 11820 (1 => True, -- Selector_Names (List1) 11821 2 => False, -- unused 11822 3 => True, -- Expression (Node3) 11823 4 => False, -- unused 11824 5 => False), -- unused 11825 11826 N_Record_Definition => 11827 (1 => True, -- Component_List (Node1) 11828 2 => True, -- Interface_List (List2) 11829 3 => False, -- unused 11830 4 => True, -- End_Label (Node4) 11831 5 => False), -- unused 11832 11833 N_Component_List => 11834 (1 => False, -- unused 11835 2 => False, -- unused 11836 3 => True, -- Component_Items (List3) 11837 4 => True, -- Variant_Part (Node4) 11838 5 => False), -- unused 11839 11840 N_Component_Declaration => 11841 (1 => True, -- Defining_Identifier (Node1) 11842 2 => False, -- unused 11843 3 => True, -- Expression (Node3) 11844 4 => True, -- Component_Definition (Node4) 11845 5 => False), -- unused 11846 11847 N_Variant_Part => 11848 (1 => True, -- Variants (List1) 11849 2 => True, -- Name (Node2) 11850 3 => False, -- unused 11851 4 => False, -- unused 11852 5 => False), -- unused 11853 11854 N_Variant => 11855 (1 => True, -- Component_List (Node1) 11856 2 => False, -- Enclosing_Variant (Node2-Sem) 11857 3 => False, -- Present_Expr (Uint3-Sem) 11858 4 => True, -- Discrete_Choices (List4) 11859 5 => False), -- Dcheck_Function (Node5-Sem) 11860 11861 N_Others_Choice => 11862 (1 => False, -- Others_Discrete_Choices (List1-Sem) 11863 2 => False, -- unused 11864 3 => False, -- unused 11865 4 => False, -- unused 11866 5 => False), -- unused 11867 11868 N_Access_To_Object_Definition => 11869 (1 => False, -- unused 11870 2 => False, -- unused 11871 3 => False, -- unused 11872 4 => False, -- unused 11873 5 => True), -- Subtype_Indication (Node5) 11874 11875 N_Access_Function_Definition => 11876 (1 => False, -- unused 11877 2 => False, -- unused 11878 3 => True, -- Parameter_Specifications (List3) 11879 4 => True, -- Result_Definition (Node4) 11880 5 => False), -- unused 11881 11882 N_Access_Procedure_Definition => 11883 (1 => False, -- unused 11884 2 => False, -- unused 11885 3 => True, -- Parameter_Specifications (List3) 11886 4 => False, -- unused 11887 5 => False), -- unused 11888 11889 N_Access_Definition => 11890 (1 => False, -- unused 11891 2 => False, -- unused 11892 3 => True, -- Access_To_Subprogram_Definition (Node3) 11893 4 => True, -- Subtype_Mark (Node4) 11894 5 => False), -- unused 11895 11896 N_Incomplete_Type_Declaration => 11897 (1 => True, -- Defining_Identifier (Node1) 11898 2 => False, -- unused 11899 3 => False, -- unused 11900 4 => True, -- Discriminant_Specifications (List4) 11901 5 => False), -- Premature_Use 11902 11903 N_Explicit_Dereference => 11904 (1 => False, -- unused 11905 2 => False, -- unused 11906 3 => True, -- Prefix (Node3) 11907 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 11908 5 => False), -- Etype (Node5-Sem) 11909 11910 N_Indexed_Component => 11911 (1 => True, -- Expressions (List1) 11912 2 => False, -- unused 11913 3 => True, -- Prefix (Node3) 11914 4 => False, -- Generalized_Indexing (Node4-Sem) 11915 5 => False), -- Etype (Node5-Sem) 11916 11917 N_Slice => 11918 (1 => False, -- unused 11919 2 => False, -- unused 11920 3 => True, -- Prefix (Node3) 11921 4 => True, -- Discrete_Range (Node4) 11922 5 => False), -- Etype (Node5-Sem) 11923 11924 N_Selected_Component => 11925 (1 => False, -- unused 11926 2 => True, -- Selector_Name (Node2) 11927 3 => True, -- Prefix (Node3) 11928 4 => False, -- unused 11929 5 => False), -- Etype (Node5-Sem) 11930 11931 N_Attribute_Reference => 11932 (1 => True, -- Expressions (List1) 11933 2 => True, -- Attribute_Name (Name2) 11934 3 => True, -- Prefix (Node3) 11935 4 => False, -- Entity (Node4-Sem) 11936 5 => False), -- Etype (Node5-Sem) 11937 11938 N_Aggregate => 11939 (1 => True, -- Expressions (List1) 11940 2 => True, -- Component_Associations (List2) 11941 3 => False, -- Aggregate_Bounds (Node3-Sem) 11942 4 => False, -- unused 11943 5 => False), -- Etype (Node5-Sem) 11944 11945 N_Component_Association => 11946 (1 => True, -- Choices (List1) 11947 2 => False, -- Loop_Actions (List2-Sem) 11948 3 => True, -- Expression (Node3) 11949 4 => False, -- unused 11950 5 => False), -- unused 11951 11952 N_Iterated_Component_Association => 11953 (1 => True, -- Defining_Identifier (Node1) 11954 2 => False, -- unused 11955 3 => True, -- Expression (Node3) 11956 4 => True, -- Discrete_Choices (List4) 11957 5 => False), -- unused 11958 11959 N_Delta_Aggregate => 11960 (1 => False, -- Expressions (List1-Sem) 11961 2 => True, -- Component_Associations (List2) 11962 3 => True, -- Expression (Node3) 11963 4 => False, -- Unused 11964 5 => False), -- Etype (Node5-Sem) 11965 11966 N_Extension_Aggregate => 11967 (1 => True, -- Expressions (List1) 11968 2 => True, -- Component_Associations (List2) 11969 3 => True, -- Ancestor_Part (Node3) 11970 4 => False, -- unused 11971 5 => False), -- Etype (Node5-Sem) 11972 11973 N_Null => 11974 (1 => False, -- unused 11975 2 => False, -- unused 11976 3 => False, -- unused 11977 4 => False, -- unused 11978 5 => False), -- Etype (Node5-Sem) 11979 11980 N_And_Then => 11981 (1 => False, -- Actions (List1-Sem) 11982 2 => True, -- Left_Opnd (Node2) 11983 3 => True, -- Right_Opnd (Node3) 11984 4 => False, -- unused 11985 5 => False), -- Etype (Node5-Sem) 11986 11987 N_Or_Else => 11988 (1 => False, -- Actions (List1-Sem) 11989 2 => True, -- Left_Opnd (Node2) 11990 3 => True, -- Right_Opnd (Node3) 11991 4 => False, -- unused 11992 5 => False), -- Etype (Node5-Sem) 11993 11994 N_In => 11995 (1 => False, -- unused 11996 2 => True, -- Left_Opnd (Node2) 11997 3 => True, -- Right_Opnd (Node3) 11998 4 => True, -- Alternatives (List4) 11999 5 => False), -- Etype (Node5-Sem) 12000 12001 N_Not_In => 12002 (1 => False, -- unused 12003 2 => True, -- Left_Opnd (Node2) 12004 3 => True, -- Right_Opnd (Node3) 12005 4 => True, -- Alternatives (List4) 12006 5 => False), -- Etype (Node5-Sem) 12007 12008 N_Op_And => 12009 (1 => True, -- Chars (Name1) 12010 2 => True, -- Left_Opnd (Node2) 12011 3 => True, -- Right_Opnd (Node3) 12012 4 => False, -- Entity (Node4-Sem) 12013 5 => False), -- Etype (Node5-Sem) 12014 12015 N_Op_Or => 12016 (1 => True, -- Chars (Name1) 12017 2 => True, -- Left_Opnd (Node2) 12018 3 => True, -- Right_Opnd (Node3) 12019 4 => False, -- Entity (Node4-Sem) 12020 5 => False), -- Etype (Node5-Sem) 12021 12022 N_Op_Xor => 12023 (1 => True, -- Chars (Name1) 12024 2 => True, -- Left_Opnd (Node2) 12025 3 => True, -- Right_Opnd (Node3) 12026 4 => False, -- Entity (Node4-Sem) 12027 5 => False), -- Etype (Node5-Sem) 12028 12029 N_Op_Eq => 12030 (1 => True, -- Chars (Name1) 12031 2 => True, -- Left_Opnd (Node2) 12032 3 => True, -- Right_Opnd (Node3) 12033 4 => False, -- Entity (Node4-Sem) 12034 5 => False), -- Etype (Node5-Sem) 12035 12036 N_Op_Ne => 12037 (1 => True, -- Chars (Name1) 12038 2 => True, -- Left_Opnd (Node2) 12039 3 => True, -- Right_Opnd (Node3) 12040 4 => False, -- Entity (Node4-Sem) 12041 5 => False), -- Etype (Node5-Sem) 12042 12043 N_Op_Lt => 12044 (1 => True, -- Chars (Name1) 12045 2 => True, -- Left_Opnd (Node2) 12046 3 => True, -- Right_Opnd (Node3) 12047 4 => False, -- Entity (Node4-Sem) 12048 5 => False), -- Etype (Node5-Sem) 12049 12050 N_Op_Le => 12051 (1 => True, -- Chars (Name1) 12052 2 => True, -- Left_Opnd (Node2) 12053 3 => True, -- Right_Opnd (Node3) 12054 4 => False, -- Entity (Node4-Sem) 12055 5 => False), -- Etype (Node5-Sem) 12056 12057 N_Op_Gt => 12058 (1 => True, -- Chars (Name1) 12059 2 => True, -- Left_Opnd (Node2) 12060 3 => True, -- Right_Opnd (Node3) 12061 4 => False, -- Entity (Node4-Sem) 12062 5 => False), -- Etype (Node5-Sem) 12063 12064 N_Op_Ge => 12065 (1 => True, -- Chars (Name1) 12066 2 => True, -- Left_Opnd (Node2) 12067 3 => True, -- Right_Opnd (Node3) 12068 4 => False, -- Entity (Node4-Sem) 12069 5 => False), -- Etype (Node5-Sem) 12070 12071 N_Op_Add => 12072 (1 => True, -- Chars (Name1) 12073 2 => True, -- Left_Opnd (Node2) 12074 3 => True, -- Right_Opnd (Node3) 12075 4 => False, -- Entity (Node4-Sem) 12076 5 => False), -- Etype (Node5-Sem) 12077 12078 N_Op_Subtract => 12079 (1 => True, -- Chars (Name1) 12080 2 => True, -- Left_Opnd (Node2) 12081 3 => True, -- Right_Opnd (Node3) 12082 4 => False, -- Entity (Node4-Sem) 12083 5 => False), -- Etype (Node5-Sem) 12084 12085 N_Op_Concat => 12086 (1 => True, -- Chars (Name1) 12087 2 => True, -- Left_Opnd (Node2) 12088 3 => True, -- Right_Opnd (Node3) 12089 4 => False, -- Entity (Node4-Sem) 12090 5 => False), -- Etype (Node5-Sem) 12091 12092 N_Op_Multiply => 12093 (1 => True, -- Chars (Name1) 12094 2 => True, -- Left_Opnd (Node2) 12095 3 => True, -- Right_Opnd (Node3) 12096 4 => False, -- Entity (Node4-Sem) 12097 5 => False), -- Etype (Node5-Sem) 12098 12099 N_Op_Divide => 12100 (1 => True, -- Chars (Name1) 12101 2 => True, -- Left_Opnd (Node2) 12102 3 => True, -- Right_Opnd (Node3) 12103 4 => False, -- Entity (Node4-Sem) 12104 5 => False), -- Etype (Node5-Sem) 12105 12106 N_Op_Mod => 12107 (1 => True, -- Chars (Name1) 12108 2 => True, -- Left_Opnd (Node2) 12109 3 => True, -- Right_Opnd (Node3) 12110 4 => False, -- Entity (Node4-Sem) 12111 5 => False), -- Etype (Node5-Sem) 12112 12113 N_Op_Rem => 12114 (1 => True, -- Chars (Name1) 12115 2 => True, -- Left_Opnd (Node2) 12116 3 => True, -- Right_Opnd (Node3) 12117 4 => False, -- Entity (Node4-Sem) 12118 5 => False), -- Etype (Node5-Sem) 12119 12120 N_Op_Expon => 12121 (1 => True, -- Chars (Name1) 12122 2 => True, -- Left_Opnd (Node2) 12123 3 => True, -- Right_Opnd (Node3) 12124 4 => False, -- Entity (Node4-Sem) 12125 5 => False), -- Etype (Node5-Sem) 12126 12127 N_Op_Plus => 12128 (1 => True, -- Chars (Name1) 12129 2 => False, -- unused 12130 3 => True, -- Right_Opnd (Node3) 12131 4 => False, -- Entity (Node4-Sem) 12132 5 => False), -- Etype (Node5-Sem) 12133 12134 N_Op_Minus => 12135 (1 => True, -- Chars (Name1) 12136 2 => False, -- unused 12137 3 => True, -- Right_Opnd (Node3) 12138 4 => False, -- Entity (Node4-Sem) 12139 5 => False), -- Etype (Node5-Sem) 12140 12141 N_Op_Abs => 12142 (1 => True, -- Chars (Name1) 12143 2 => False, -- unused 12144 3 => True, -- Right_Opnd (Node3) 12145 4 => False, -- Entity (Node4-Sem) 12146 5 => False), -- Etype (Node5-Sem) 12147 12148 N_Op_Not => 12149 (1 => True, -- Chars (Name1) 12150 2 => False, -- unused 12151 3 => True, -- Right_Opnd (Node3) 12152 4 => False, -- Entity (Node4-Sem) 12153 5 => False), -- Etype (Node5-Sem) 12154 12155 N_Type_Conversion => 12156 (1 => False, -- unused 12157 2 => False, -- unused 12158 3 => True, -- Expression (Node3) 12159 4 => True, -- Subtype_Mark (Node4) 12160 5 => False), -- Etype (Node5-Sem) 12161 12162 N_Qualified_Expression => 12163 (1 => False, -- unused 12164 2 => False, -- unused 12165 3 => True, -- Expression (Node3) 12166 4 => True, -- Subtype_Mark (Node4) 12167 5 => False), -- Etype (Node5-Sem) 12168 12169 N_Quantified_Expression => 12170 (1 => True, -- Condition (Node1) 12171 2 => True, -- Iterator_Specification (Node2) 12172 3 => False, -- unused 12173 4 => True, -- Loop_Parameter_Specification (Node4) 12174 5 => False), -- Etype (Node5-Sem) 12175 12176 N_Reduction_Expression => 12177 (1 => False, -- unused 12178 2 => True, -- Iterator_Specification (Node2) 12179 3 => True, -- Expression (Node3) 12180 4 => True, -- Loop_Parameter_Specification (Node4) 12181 5 => False), -- Etype (Node5-Sem) 12182 12183 N_Reduction_Expression_Parameter => 12184 (1 => False, -- unused 12185 2 => False, -- unused 12186 3 => True, -- Expression (Node3) 12187 4 => False, -- unused 12188 5 => False), -- Etype (Node5-Sem) 12189 12190 N_Allocator => 12191 (1 => False, -- Storage_Pool (Node1-Sem) 12192 2 => False, -- Procedure_To_Call (Node2-Sem) 12193 3 => True, -- Expression (Node3) 12194 4 => True, -- Subpool_Handle_Name (Node4) 12195 5 => False), -- Etype (Node5-Sem) 12196 12197 N_Null_Statement => 12198 (1 => False, -- unused 12199 2 => False, -- unused 12200 3 => False, -- unused 12201 4 => False, -- unused 12202 5 => False), -- unused 12203 12204 N_Label => 12205 (1 => True, -- Identifier (Node1) 12206 2 => False, -- unused 12207 3 => False, -- unused 12208 4 => False, -- unused 12209 5 => False), -- unused 12210 12211 N_Assignment_Statement => 12212 (1 => False, -- unused 12213 2 => True, -- Name (Node2) 12214 3 => True, -- Expression (Node3) 12215 4 => False, -- unused 12216 5 => False), -- unused 12217 12218 N_Target_Name => 12219 (1 => False, -- unused 12220 2 => False, -- unused 12221 3 => False, -- unused 12222 4 => False, -- unused 12223 5 => False), -- Etype (Node5-Sem) 12224 12225 N_If_Statement => 12226 (1 => True, -- Condition (Node1) 12227 2 => True, -- Then_Statements (List2) 12228 3 => True, -- Elsif_Parts (List3) 12229 4 => True, -- Else_Statements (List4) 12230 5 => True), -- End_Span (Uint5) 12231 12232 N_Elsif_Part => 12233 (1 => True, -- Condition (Node1) 12234 2 => True, -- Then_Statements (List2) 12235 3 => False, -- Condition_Actions (List3-Sem) 12236 4 => False, -- unused 12237 5 => False), -- unused 12238 12239 N_Case_Expression => 12240 (1 => False, -- unused 12241 2 => False, -- unused 12242 3 => True, -- Expression (Node3) 12243 4 => True, -- Alternatives (List4) 12244 5 => False), -- unused 12245 12246 N_Case_Expression_Alternative => 12247 (1 => False, -- Actions (List1-Sem) 12248 2 => False, -- unused 12249 3 => True, -- Expression (Node3) 12250 4 => True, -- Discrete_Choices (List4) 12251 5 => False), -- unused 12252 12253 N_Case_Statement => 12254 (1 => False, -- unused 12255 2 => False, -- unused 12256 3 => True, -- Expression (Node3) 12257 4 => True, -- Alternatives (List4) 12258 5 => True), -- End_Span (Uint5) 12259 12260 N_Case_Statement_Alternative => 12261 (1 => False, -- unused 12262 2 => False, -- unused 12263 3 => True, -- Statements (List3) 12264 4 => True, -- Discrete_Choices (List4) 12265 5 => False), -- unused 12266 12267 N_Loop_Statement => 12268 (1 => True, -- Identifier (Node1) 12269 2 => True, -- Iteration_Scheme (Node2) 12270 3 => True, -- Statements (List3) 12271 4 => True, -- End_Label (Node4) 12272 5 => False), -- unused 12273 12274 N_Iteration_Scheme => 12275 (1 => True, -- Condition (Node1) 12276 2 => True, -- Iterator_Specification (Node2) 12277 3 => False, -- Condition_Actions (List3-Sem) 12278 4 => True, -- Loop_Parameter_Specification (Node4) 12279 5 => False), -- unused 12280 12281 N_Loop_Parameter_Specification => 12282 (1 => True, -- Defining_Identifier (Node1) 12283 2 => False, -- unused 12284 3 => False, -- unused 12285 4 => True, -- Discrete_Subtype_Definition (Node4) 12286 5 => False), -- unused 12287 12288 N_Iterator_Specification => 12289 (1 => True, -- Defining_Identifier (Node1) 12290 2 => True, -- Name (Node2) 12291 3 => False, -- Unused 12292 4 => False, -- Unused 12293 5 => True), -- Subtype_Indication (Node5) 12294 12295 N_Block_Statement => 12296 (1 => True, -- Identifier (Node1) 12297 2 => True, -- Declarations (List2) 12298 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12299 4 => True, -- Handled_Statement_Sequence (Node4) 12300 5 => False), -- unused 12301 12302 N_Exit_Statement => 12303 (1 => True, -- Condition (Node1) 12304 2 => True, -- Name (Node2) 12305 3 => False, -- unused 12306 4 => False, -- unused 12307 5 => False), -- unused 12308 12309 N_Goto_Statement => 12310 (1 => False, -- unused 12311 2 => True, -- Name (Node2) 12312 3 => False, -- unused 12313 4 => False, -- unused 12314 5 => False), -- unused 12315 12316 N_Subprogram_Declaration => 12317 (1 => True, -- Specification (Node1) 12318 2 => False, -- unused 12319 3 => False, -- Body_To_Inline (Node3-Sem) 12320 4 => False, -- Parent_Spec (Node4-Sem) 12321 5 => False), -- Corresponding_Body (Node5-Sem) 12322 12323 N_Abstract_Subprogram_Declaration => 12324 (1 => True, -- Specification (Node1) 12325 2 => False, -- unused 12326 3 => False, -- unused 12327 4 => False, -- unused 12328 5 => False), -- unused 12329 12330 N_Function_Specification => 12331 (1 => True, -- Defining_Unit_Name (Node1) 12332 2 => False, -- unused 12333 3 => True, -- Parameter_Specifications (List3) 12334 4 => True, -- Result_Definition (Node4) 12335 5 => False), -- Generic_Parent (Node5-Sem) 12336 12337 N_Procedure_Specification => 12338 (1 => True, -- Defining_Unit_Name (Node1) 12339 2 => False, -- Null_Statement (Node2-Sem) 12340 3 => True, -- Parameter_Specifications (List3) 12341 4 => False, -- unused 12342 5 => False), -- Generic_Parent (Node5-Sem) 12343 12344 N_Designator => 12345 (1 => True, -- Identifier (Node1) 12346 2 => True, -- Name (Node2) 12347 3 => False, -- unused 12348 4 => False, -- unused 12349 5 => False), -- unused 12350 12351 N_Defining_Program_Unit_Name => 12352 (1 => True, -- Defining_Identifier (Node1) 12353 2 => True, -- Name (Node2) 12354 3 => False, -- unused 12355 4 => False, -- unused 12356 5 => False), -- unused 12357 12358 N_Operator_Symbol => 12359 (1 => True, -- Chars (Name1) 12360 2 => False, -- unused 12361 3 => True, -- Strval (Str3) 12362 4 => False, -- Entity (Node4-Sem) 12363 5 => False), -- Etype (Node5-Sem) 12364 12365 N_Defining_Operator_Symbol => 12366 (1 => True, -- Chars (Name1) 12367 2 => False, -- Next_Entity (Node2-Sem) 12368 3 => False, -- Scope (Node3-Sem) 12369 4 => False, -- unused 12370 5 => False), -- Etype (Node5-Sem) 12371 12372 N_Parameter_Specification => 12373 (1 => True, -- Defining_Identifier (Node1) 12374 2 => True, -- Parameter_Type (Node2) 12375 3 => True, -- Expression (Node3) 12376 4 => False, -- unused 12377 5 => False), -- Default_Expression (Node5-Sem) 12378 12379 N_Subprogram_Body => 12380 (1 => True, -- Specification (Node1) 12381 2 => True, -- Declarations (List2) 12382 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12383 4 => True, -- Handled_Statement_Sequence (Node4) 12384 5 => False), -- Corresponding_Spec (Node5-Sem) 12385 12386 N_Expression_Function => 12387 (1 => True, -- Specification (Node1) 12388 2 => False, -- unused 12389 3 => True, -- Expression (Node3) 12390 4 => False, -- unused 12391 5 => False), -- unused 12392 12393 N_Procedure_Call_Statement => 12394 (1 => False, -- Controlling_Argument (Node1-Sem) 12395 2 => True, -- Name (Node2) 12396 3 => True, -- Parameter_Associations (List3) 12397 4 => False, -- First_Named_Actual (Node4-Sem) 12398 5 => False), -- Etype (Node5-Sem) 12399 12400 N_Function_Call => 12401 (1 => False, -- Controlling_Argument (Node1-Sem) 12402 2 => True, -- Name (Node2) 12403 3 => True, -- Parameter_Associations (List3) 12404 4 => False, -- First_Named_Actual (Node4-Sem) 12405 5 => False), -- Etype (Node5-Sem) 12406 12407 N_Parameter_Association => 12408 (1 => False, -- unused 12409 2 => True, -- Selector_Name (Node2) 12410 3 => True, -- Explicit_Actual_Parameter (Node3) 12411 4 => False, -- Next_Named_Actual (Node4-Sem) 12412 5 => False), -- unused 12413 12414 N_Simple_Return_Statement => 12415 (1 => False, -- Storage_Pool (Node1-Sem) 12416 2 => False, -- Procedure_To_Call (Node2-Sem) 12417 3 => True, -- Expression (Node3) 12418 4 => False, -- unused 12419 5 => False), -- Return_Statement_Entity (Node5-Sem) 12420 12421 N_Extended_Return_Statement => 12422 (1 => False, -- Storage_Pool (Node1-Sem) 12423 2 => False, -- Procedure_To_Call (Node2-Sem) 12424 3 => True, -- Return_Object_Declarations (List3) 12425 4 => True, -- Handled_Statement_Sequence (Node4) 12426 5 => False), -- Return_Statement_Entity (Node5-Sem) 12427 12428 N_Package_Declaration => 12429 (1 => True, -- Specification (Node1) 12430 2 => False, -- unused 12431 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12432 4 => False, -- Parent_Spec (Node4-Sem) 12433 5 => False), -- Corresponding_Body (Node5-Sem) 12434 12435 N_Package_Specification => 12436 (1 => True, -- Defining_Unit_Name (Node1) 12437 2 => True, -- Visible_Declarations (List2) 12438 3 => True, -- Private_Declarations (List3) 12439 4 => True, -- End_Label (Node4) 12440 5 => False), -- Generic_Parent (Node5-Sem) 12441 12442 N_Package_Body => 12443 (1 => True, -- Defining_Unit_Name (Node1) 12444 2 => True, -- Declarations (List2) 12445 3 => False, -- unused 12446 4 => True, -- Handled_Statement_Sequence (Node4) 12447 5 => False), -- Corresponding_Spec (Node5-Sem) 12448 12449 N_Private_Type_Declaration => 12450 (1 => True, -- Defining_Identifier (Node1) 12451 2 => False, -- unused 12452 3 => False, -- unused 12453 4 => True, -- Discriminant_Specifications (List4) 12454 5 => False), -- unused 12455 12456 N_Private_Extension_Declaration => 12457 (1 => True, -- Defining_Identifier (Node1) 12458 2 => True, -- Interface_List (List2) 12459 3 => False, -- unused 12460 4 => True, -- Discriminant_Specifications (List4) 12461 5 => True), -- Subtype_Indication (Node5) 12462 12463 N_Use_Package_Clause => 12464 (1 => False, -- Prev_Use_Clause (Node1-Sem) 12465 2 => True, -- Name (Node2) 12466 3 => False, -- Next_Use_Clause (Node3-Sem) 12467 4 => False, -- Associated_Node (Node4-Sem) 12468 5 => False), -- Hidden_By_Use_Clause (Elist5-Sem) 12469 12470 N_Use_Type_Clause => 12471 (1 => False, -- Prev_Use_Clause (Node1-Sem) 12472 2 => False, -- Used_Operations (Elist2-Sem) 12473 3 => False, -- Next_Use_Clause (Node3-Sem) 12474 4 => True, -- Subtype_Mark (Node4) 12475 5 => False), -- Hidden_By_Use_Clause (Elist5-Sem) 12476 12477 N_Object_Renaming_Declaration => 12478 (1 => True, -- Defining_Identifier (Node1) 12479 2 => True, -- Name (Node2) 12480 3 => True, -- Access_Definition (Node3) 12481 4 => True, -- Subtype_Mark (Node4) 12482 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 12483 12484 N_Exception_Renaming_Declaration => 12485 (1 => True, -- Defining_Identifier (Node1) 12486 2 => True, -- Name (Node2) 12487 3 => False, -- unused 12488 4 => False, -- unused 12489 5 => False), -- unused 12490 12491 N_Package_Renaming_Declaration => 12492 (1 => True, -- Defining_Unit_Name (Node1) 12493 2 => True, -- Name (Node2) 12494 3 => False, -- unused 12495 4 => False, -- Parent_Spec (Node4-Sem) 12496 5 => False), -- unused 12497 12498 N_Subprogram_Renaming_Declaration => 12499 (1 => True, -- Specification (Node1) 12500 2 => True, -- Name (Node2) 12501 3 => False, -- Corresponding_Formal_Spec (Node3-Sem) 12502 4 => False, -- Parent_Spec (Node4-Sem) 12503 5 => False), -- Corresponding_Spec (Node5-Sem) 12504 12505 N_Generic_Package_Renaming_Declaration => 12506 (1 => True, -- Defining_Unit_Name (Node1) 12507 2 => True, -- Name (Node2) 12508 3 => False, -- unused 12509 4 => False, -- Parent_Spec (Node4-Sem) 12510 5 => False), -- unused 12511 12512 N_Generic_Procedure_Renaming_Declaration => 12513 (1 => True, -- Defining_Unit_Name (Node1) 12514 2 => True, -- Name (Node2) 12515 3 => False, -- unused 12516 4 => False, -- Parent_Spec (Node4-Sem) 12517 5 => False), -- unused 12518 12519 N_Generic_Function_Renaming_Declaration => 12520 (1 => True, -- Defining_Unit_Name (Node1) 12521 2 => True, -- Name (Node2) 12522 3 => False, -- unused 12523 4 => False, -- Parent_Spec (Node4-Sem) 12524 5 => False), -- unused 12525 12526 N_Task_Type_Declaration => 12527 (1 => True, -- Defining_Identifier (Node1) 12528 2 => True, -- Interface_List (List2) 12529 3 => True, -- Task_Definition (Node3) 12530 4 => True, -- Discriminant_Specifications (List4) 12531 5 => False), -- Corresponding_Body (Node5-Sem) 12532 12533 N_Single_Task_Declaration => 12534 (1 => True, -- Defining_Identifier (Node1) 12535 2 => True, -- Interface_List (List2) 12536 3 => True, -- Task_Definition (Node3) 12537 4 => False, -- unused 12538 5 => False), -- unused 12539 12540 N_Task_Definition => 12541 (1 => False, -- unused 12542 2 => True, -- Visible_Declarations (List2) 12543 3 => True, -- Private_Declarations (List3) 12544 4 => True, -- End_Label (Node4) 12545 5 => False), -- unused 12546 12547 N_Task_Body => 12548 (1 => True, -- Defining_Identifier (Node1) 12549 2 => True, -- Declarations (List2) 12550 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12551 4 => True, -- Handled_Statement_Sequence (Node4) 12552 5 => False), -- Corresponding_Spec (Node5-Sem) 12553 12554 N_Protected_Type_Declaration => 12555 (1 => True, -- Defining_Identifier (Node1) 12556 2 => True, -- Interface_List (List2) 12557 3 => True, -- Protected_Definition (Node3) 12558 4 => True, -- Discriminant_Specifications (List4) 12559 5 => False), -- Corresponding_Body (Node5-Sem) 12560 12561 N_Single_Protected_Declaration => 12562 (1 => True, -- Defining_Identifier (Node1) 12563 2 => True, -- Interface_List (List2) 12564 3 => True, -- Protected_Definition (Node3) 12565 4 => False, -- unused 12566 5 => False), -- unused 12567 12568 N_Protected_Definition => 12569 (1 => False, -- unused 12570 2 => True, -- Visible_Declarations (List2) 12571 3 => True, -- Private_Declarations (List3) 12572 4 => True, -- End_Label (Node4) 12573 5 => False), -- unused 12574 12575 N_Protected_Body => 12576 (1 => True, -- Defining_Identifier (Node1) 12577 2 => True, -- Declarations (List2) 12578 3 => False, -- unused 12579 4 => True, -- End_Label (Node4) 12580 5 => False), -- Corresponding_Spec (Node5-Sem) 12581 12582 N_Entry_Declaration => 12583 (1 => True, -- Defining_Identifier (Node1) 12584 2 => False, -- unused 12585 3 => True, -- Parameter_Specifications (List3) 12586 4 => True, -- Discrete_Subtype_Definition (Node4) 12587 5 => False), -- Corresponding_Body (Node5-Sem) 12588 12589 N_Accept_Statement => 12590 (1 => True, -- Entry_Direct_Name (Node1) 12591 2 => True, -- Declarations (List2) 12592 3 => True, -- Parameter_Specifications (List3) 12593 4 => True, -- Handled_Statement_Sequence (Node4) 12594 5 => True), -- Entry_Index (Node5) 12595 12596 N_Entry_Body => 12597 (1 => True, -- Defining_Identifier (Node1) 12598 2 => True, -- Declarations (List2) 12599 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12600 4 => True, -- Handled_Statement_Sequence (Node4) 12601 5 => True), -- Entry_Body_Formal_Part (Node5) 12602 12603 N_Entry_Body_Formal_Part => 12604 (1 => True, -- Condition (Node1) 12605 2 => False, -- unused 12606 3 => True, -- Parameter_Specifications (List3) 12607 4 => True, -- Entry_Index_Specification (Node4) 12608 5 => False), -- unused 12609 12610 N_Entry_Index_Specification => 12611 (1 => True, -- Defining_Identifier (Node1) 12612 2 => False, -- unused 12613 3 => False, -- unused 12614 4 => True, -- Discrete_Subtype_Definition (Node4) 12615 5 => False), -- unused 12616 12617 N_Entry_Call_Statement => 12618 (1 => False, -- unused 12619 2 => True, -- Name (Node2) 12620 3 => True, -- Parameter_Associations (List3) 12621 4 => False, -- First_Named_Actual (Node4-Sem) 12622 5 => False), -- unused 12623 12624 N_Requeue_Statement => 12625 (1 => False, -- unused 12626 2 => True, -- Name (Node2) 12627 3 => False, -- unused 12628 4 => False, -- unused 12629 5 => False), -- unused 12630 12631 N_Delay_Until_Statement => 12632 (1 => False, -- unused 12633 2 => False, -- unused 12634 3 => True, -- Expression (Node3) 12635 4 => False, -- unused 12636 5 => False), -- unused 12637 12638 N_Delay_Relative_Statement => 12639 (1 => False, -- unused 12640 2 => False, -- unused 12641 3 => True, -- Expression (Node3) 12642 4 => False, -- unused 12643 5 => False), -- unused 12644 12645 N_Selective_Accept => 12646 (1 => True, -- Select_Alternatives (List1) 12647 2 => False, -- unused 12648 3 => False, -- unused 12649 4 => True, -- Else_Statements (List4) 12650 5 => False), -- unused 12651 12652 N_Accept_Alternative => 12653 (1 => True, -- Condition (Node1) 12654 2 => True, -- Accept_Statement (Node2) 12655 3 => True, -- Statements (List3) 12656 4 => True, -- Pragmas_Before (List4) 12657 5 => False), -- Accept_Handler_Records (List5-Sem) 12658 12659 N_Delay_Alternative => 12660 (1 => True, -- Condition (Node1) 12661 2 => True, -- Delay_Statement (Node2) 12662 3 => True, -- Statements (List3) 12663 4 => True, -- Pragmas_Before (List4) 12664 5 => False), -- unused 12665 12666 N_Terminate_Alternative => 12667 (1 => True, -- Condition (Node1) 12668 2 => False, -- unused 12669 3 => False, -- unused 12670 4 => True, -- Pragmas_Before (List4) 12671 5 => True), -- Pragmas_After (List5) 12672 12673 N_Timed_Entry_Call => 12674 (1 => True, -- Entry_Call_Alternative (Node1) 12675 2 => False, -- unused 12676 3 => False, -- unused 12677 4 => True, -- Delay_Alternative (Node4) 12678 5 => False), -- unused 12679 12680 N_Entry_Call_Alternative => 12681 (1 => True, -- Entry_Call_Statement (Node1) 12682 2 => False, -- unused 12683 3 => True, -- Statements (List3) 12684 4 => True, -- Pragmas_Before (List4) 12685 5 => False), -- unused 12686 12687 N_Conditional_Entry_Call => 12688 (1 => True, -- Entry_Call_Alternative (Node1) 12689 2 => False, -- unused 12690 3 => False, -- unused 12691 4 => True, -- Else_Statements (List4) 12692 5 => False), -- unused 12693 12694 N_Asynchronous_Select => 12695 (1 => True, -- Triggering_Alternative (Node1) 12696 2 => True, -- Abortable_Part (Node2) 12697 3 => False, -- unused 12698 4 => False, -- unused 12699 5 => False), -- unused 12700 12701 N_Triggering_Alternative => 12702 (1 => True, -- Triggering_Statement (Node1) 12703 2 => False, -- unused 12704 3 => True, -- Statements (List3) 12705 4 => True, -- Pragmas_Before (List4) 12706 5 => False), -- unused 12707 12708 N_Abortable_Part => 12709 (1 => False, -- unused 12710 2 => False, -- unused 12711 3 => True, -- Statements (List3) 12712 4 => False, -- unused 12713 5 => False), -- unused 12714 12715 N_Abort_Statement => 12716 (1 => False, -- unused 12717 2 => True, -- Names (List2) 12718 3 => False, -- unused 12719 4 => False, -- unused 12720 5 => False), -- unused 12721 12722 N_Compilation_Unit => 12723 (1 => True, -- Context_Items (List1) 12724 2 => True, -- Unit (Node2) 12725 3 => False, -- First_Inlined_Subprogram (Node3-Sem) 12726 4 => False, -- Library_Unit (Node4-Sem) 12727 5 => True), -- Aux_Decls_Node (Node5) 12728 12729 N_Compilation_Unit_Aux => 12730 (1 => True, -- Actions (List1) 12731 2 => True, -- Declarations (List2) 12732 3 => False, -- Default_Storage_Pool (Node3) 12733 4 => True, -- Config_Pragmas (List4) 12734 5 => True), -- Pragmas_After (List5) 12735 12736 N_With_Clause => 12737 (1 => False, -- unused 12738 2 => True, -- Name (Node2) 12739 3 => False, -- unused 12740 4 => False, -- Library_Unit (Node4-Sem) 12741 5 => False), -- Corresponding_Spec (Node5-Sem) 12742 12743 N_Subprogram_Body_Stub => 12744 (1 => True, -- Specification (Node1) 12745 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12746 3 => False, -- unused 12747 4 => False, -- Library_Unit (Node4-Sem) 12748 5 => False), -- Corresponding_Body (Node5-Sem) 12749 12750 N_Package_Body_Stub => 12751 (1 => True, -- Defining_Identifier (Node1) 12752 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12753 3 => False, -- unused 12754 4 => False, -- Library_Unit (Node4-Sem) 12755 5 => False), -- Corresponding_Body (Node5-Sem) 12756 12757 N_Task_Body_Stub => 12758 (1 => True, -- Defining_Identifier (Node1) 12759 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12760 3 => False, -- unused 12761 4 => False, -- Library_Unit (Node4-Sem) 12762 5 => False), -- Corresponding_Body (Node5-Sem) 12763 12764 N_Protected_Body_Stub => 12765 (1 => True, -- Defining_Identifier (Node1) 12766 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12767 3 => False, -- unused 12768 4 => False, -- Library_Unit (Node4-Sem) 12769 5 => False), -- Corresponding_Body (Node5-Sem) 12770 12771 N_Subunit => 12772 (1 => True, -- Proper_Body (Node1) 12773 2 => True, -- Name (Node2) 12774 3 => False, -- Corresponding_Stub (Node3-Sem) 12775 4 => False, -- unused 12776 5 => False), -- unused 12777 12778 N_Exception_Declaration => 12779 (1 => True, -- Defining_Identifier (Node1) 12780 2 => False, -- unused 12781 3 => False, -- Expression (Node3-Sem) 12782 4 => False, -- unused 12783 5 => False), -- unused 12784 12785 N_Handled_Sequence_Of_Statements => 12786 (1 => True, -- At_End_Proc (Node1) 12787 2 => False, -- First_Real_Statement (Node2-Sem) 12788 3 => True, -- Statements (List3) 12789 4 => True, -- End_Label (Node4) 12790 5 => True), -- Exception_Handlers (List5) 12791 12792 N_Exception_Handler => 12793 (1 => False, -- Local_Raise_Statements (Elist1) 12794 2 => True, -- Choice_Parameter (Node2) 12795 3 => True, -- Statements (List3) 12796 4 => True, -- Exception_Choices (List4) 12797 5 => False), -- Exception_Label (Node5) 12798 12799 N_Raise_Statement => 12800 (1 => False, -- unused 12801 2 => True, -- Name (Node2) 12802 3 => True, -- Expression (Node3) 12803 4 => False, -- unused 12804 5 => False), -- unused 12805 12806 N_Raise_Expression => 12807 (1 => False, -- unused 12808 2 => True, -- Name (Node2) 12809 3 => True, -- Expression (Node3) 12810 4 => False, -- unused 12811 5 => False), -- Etype (Node5-Sem) 12812 12813 N_Generic_Subprogram_Declaration => 12814 (1 => True, -- Specification (Node1) 12815 2 => True, -- Generic_Formal_Declarations (List2) 12816 3 => False, -- unused 12817 4 => False, -- Parent_Spec (Node4-Sem) 12818 5 => False), -- Corresponding_Body (Node5-Sem) 12819 12820 N_Generic_Package_Declaration => 12821 (1 => True, -- Specification (Node1) 12822 2 => True, -- Generic_Formal_Declarations (List2) 12823 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12824 4 => False, -- Parent_Spec (Node4-Sem) 12825 5 => False), -- Corresponding_Body (Node5-Sem) 12826 12827 N_Package_Instantiation => 12828 (1 => True, -- Defining_Unit_Name (Node1) 12829 2 => True, -- Name (Node2) 12830 3 => True, -- Generic_Associations (List3) 12831 4 => False, -- Parent_Spec (Node4-Sem) 12832 5 => False), -- Instance_Spec (Node5-Sem) 12833 12834 N_Procedure_Instantiation => 12835 (1 => True, -- Defining_Unit_Name (Node1) 12836 2 => True, -- Name (Node2) 12837 3 => True, -- Generic_Associations (List3) 12838 4 => False, -- Parent_Spec (Node4-Sem) 12839 5 => False), -- Instance_Spec (Node5-Sem) 12840 12841 N_Function_Instantiation => 12842 (1 => True, -- Defining_Unit_Name (Node1) 12843 2 => True, -- Name (Node2) 12844 3 => True, -- Generic_Associations (List3) 12845 4 => False, -- Parent_Spec (Node4-Sem) 12846 5 => False), -- Instance_Spec (Node5-Sem) 12847 12848 N_Generic_Association => 12849 (1 => True, -- Explicit_Generic_Actual_Parameter (Node1) 12850 2 => True, -- Selector_Name (Node2) 12851 3 => False, -- unused 12852 4 => False, -- unused 12853 5 => False), -- unused 12854 12855 N_Formal_Object_Declaration => 12856 (1 => True, -- Defining_Identifier (Node1) 12857 2 => False, -- unused 12858 3 => True, -- Access_Definition (Node3) 12859 4 => True, -- Subtype_Mark (Node4) 12860 5 => True), -- Default_Expression (Node5) 12861 12862 N_Formal_Type_Declaration => 12863 (1 => True, -- Defining_Identifier (Node1) 12864 2 => False, -- unused 12865 3 => True, -- Formal_Type_Definition (Node3) 12866 4 => True, -- Discriminant_Specifications (List4) 12867 5 => False), -- unused 12868 12869 N_Formal_Private_Type_Definition => 12870 (1 => False, -- unused 12871 2 => False, -- unused 12872 3 => False, -- unused 12873 4 => False, -- unused 12874 5 => False), -- unused 12875 12876 N_Formal_Incomplete_Type_Definition => 12877 (1 => False, -- unused 12878 2 => False, -- unused 12879 3 => False, -- unused 12880 4 => False, -- unused 12881 5 => False), -- unused 12882 12883 N_Formal_Derived_Type_Definition => 12884 (1 => False, -- unused 12885 2 => True, -- Interface_List (List2) 12886 3 => False, -- unused 12887 4 => True, -- Subtype_Mark (Node4) 12888 5 => False), -- unused 12889 12890 N_Formal_Discrete_Type_Definition => 12891 (1 => False, -- unused 12892 2 => False, -- unused 12893 3 => False, -- unused 12894 4 => False, -- unused 12895 5 => False), -- unused 12896 12897 N_Formal_Signed_Integer_Type_Definition => 12898 (1 => False, -- unused 12899 2 => False, -- unused 12900 3 => False, -- unused 12901 4 => False, -- unused 12902 5 => False), -- unused 12903 12904 N_Formal_Modular_Type_Definition => 12905 (1 => False, -- unused 12906 2 => False, -- unused 12907 3 => False, -- unused 12908 4 => False, -- unused 12909 5 => False), -- unused 12910 12911 N_Formal_Floating_Point_Definition => 12912 (1 => False, -- unused 12913 2 => False, -- unused 12914 3 => False, -- unused 12915 4 => False, -- unused 12916 5 => False), -- unused 12917 12918 N_Formal_Ordinary_Fixed_Point_Definition => 12919 (1 => False, -- unused 12920 2 => False, -- unused 12921 3 => False, -- unused 12922 4 => False, -- unused 12923 5 => False), -- unused 12924 12925 N_Formal_Decimal_Fixed_Point_Definition => 12926 (1 => False, -- unused 12927 2 => False, -- unused 12928 3 => False, -- unused 12929 4 => False, -- unused 12930 5 => False), -- unused 12931 12932 N_Formal_Concrete_Subprogram_Declaration => 12933 (1 => True, -- Specification (Node1) 12934 2 => True, -- Default_Name (Node2) 12935 3 => False, -- unused 12936 4 => False, -- unused 12937 5 => False), -- unused 12938 12939 N_Formal_Abstract_Subprogram_Declaration => 12940 (1 => True, -- Specification (Node1) 12941 2 => True, -- Default_Name (Node2) 12942 3 => False, -- unused 12943 4 => False, -- unused 12944 5 => False), -- unused 12945 12946 N_Formal_Package_Declaration => 12947 (1 => True, -- Defining_Identifier (Node1) 12948 2 => True, -- Name (Node2) 12949 3 => True, -- Generic_Associations (List3) 12950 4 => False, -- unused 12951 5 => False), -- Instance_Spec (Node5-Sem) 12952 12953 N_Attribute_Definition_Clause => 12954 (1 => True, -- Chars (Name1) 12955 2 => True, -- Name (Node2) 12956 3 => True, -- Expression (Node3) 12957 4 => False, -- unused 12958 5 => False), -- Next_Rep_Item (Node5-Sem) 12959 12960 N_Aspect_Specification => 12961 (1 => True, -- Identifier (Node1) 12962 2 => False, -- Aspect_Rep_Item (Node2-Sem) 12963 3 => True, -- Expression (Node3) 12964 4 => False, -- Entity (Node4-Sem) 12965 5 => False), -- Next_Rep_Item (Node5-Sem) 12966 12967 N_Enumeration_Representation_Clause => 12968 (1 => True, -- Identifier (Node1) 12969 2 => False, -- unused 12970 3 => True, -- Array_Aggregate (Node3) 12971 4 => False, -- unused 12972 5 => False), -- Next_Rep_Item (Node5-Sem) 12973 12974 N_Record_Representation_Clause => 12975 (1 => True, -- Identifier (Node1) 12976 2 => True, -- Mod_Clause (Node2) 12977 3 => True, -- Component_Clauses (List3) 12978 4 => False, -- unused 12979 5 => False), -- Next_Rep_Item (Node5-Sem) 12980 12981 N_Component_Clause => 12982 (1 => True, -- Component_Name (Node1) 12983 2 => True, -- Position (Node2) 12984 3 => True, -- First_Bit (Node3) 12985 4 => True, -- Last_Bit (Node4) 12986 5 => False), -- unused 12987 12988 N_Code_Statement => 12989 (1 => False, -- unused 12990 2 => False, -- unused 12991 3 => True, -- Expression (Node3) 12992 4 => False, -- unused 12993 5 => False), -- unused 12994 12995 N_Op_Rotate_Left => 12996 (1 => True, -- Chars (Name1) 12997 2 => True, -- Left_Opnd (Node2) 12998 3 => True, -- Right_Opnd (Node3) 12999 4 => False, -- Entity (Node4-Sem) 13000 5 => False), -- Etype (Node5-Sem) 13001 13002 N_Op_Rotate_Right => 13003 (1 => True, -- Chars (Name1) 13004 2 => True, -- Left_Opnd (Node2) 13005 3 => True, -- Right_Opnd (Node3) 13006 4 => False, -- Entity (Node4-Sem) 13007 5 => False), -- Etype (Node5-Sem) 13008 13009 N_Op_Shift_Left => 13010 (1 => True, -- Chars (Name1) 13011 2 => True, -- Left_Opnd (Node2) 13012 3 => True, -- Right_Opnd (Node3) 13013 4 => False, -- Entity (Node4-Sem) 13014 5 => False), -- Etype (Node5-Sem) 13015 13016 N_Op_Shift_Right_Arithmetic => 13017 (1 => True, -- Chars (Name1) 13018 2 => True, -- Left_Opnd (Node2) 13019 3 => True, -- Right_Opnd (Node3) 13020 4 => False, -- Entity (Node4-Sem) 13021 5 => False), -- Etype (Node5-Sem) 13022 13023 N_Op_Shift_Right => 13024 (1 => True, -- Chars (Name1) 13025 2 => True, -- Left_Opnd (Node2) 13026 3 => True, -- Right_Opnd (Node3) 13027 4 => False, -- Entity (Node4-Sem) 13028 5 => False), -- Etype (Node5-Sem) 13029 13030 N_Delta_Constraint => 13031 (1 => False, -- unused 13032 2 => False, -- unused 13033 3 => True, -- Delta_Expression (Node3) 13034 4 => True, -- Range_Constraint (Node4) 13035 5 => False), -- unused 13036 13037 N_At_Clause => 13038 (1 => True, -- Identifier (Node1) 13039 2 => False, -- unused 13040 3 => True, -- Expression (Node3) 13041 4 => False, -- unused 13042 5 => False), -- unused 13043 13044 N_Mod_Clause => 13045 (1 => False, -- unused 13046 2 => False, -- unused 13047 3 => True, -- Expression (Node3) 13048 4 => True, -- Pragmas_Before (List4) 13049 5 => False), -- unused 13050 13051 N_If_Expression => 13052 (1 => True, -- Expressions (List1) 13053 2 => False, -- Then_Actions (List2-Sem) 13054 3 => False, -- Else_Actions (List3-Sem) 13055 4 => False, -- unused 13056 5 => False), -- Etype (Node5-Sem) 13057 13058 N_Compound_Statement => 13059 (1 => True, -- Actions (List1) 13060 2 => False, -- unused 13061 3 => False, -- unused 13062 4 => False, -- unused 13063 5 => False), -- unused 13064 13065 N_Contract => 13066 (1 => False, -- Pre_Post_Conditions (Node1-Sem) 13067 2 => False, -- Contract_Test_Cases (Node2-Sem) 13068 3 => False, -- Classifications (Node3-Sem) 13069 4 => False, -- unused 13070 5 => False), -- unused 13071 13072 N_Expanded_Name => 13073 (1 => True, -- Chars (Name1) 13074 2 => True, -- Selector_Name (Node2) 13075 3 => True, -- Prefix (Node3) 13076 4 => False, -- Entity (Node4-Sem) 13077 5 => False), -- Etype (Node5-Sem) 13078 13079 N_Expression_With_Actions => 13080 (1 => True, -- Actions (List1) 13081 2 => False, -- unused 13082 3 => True, -- Expression (Node3) 13083 4 => False, -- unused 13084 5 => False), -- unused 13085 13086 N_Free_Statement => 13087 (1 => False, -- Storage_Pool (Node1-Sem) 13088 2 => False, -- Procedure_To_Call (Node2-Sem) 13089 3 => True, -- Expression (Node3) 13090 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 13091 5 => False), -- unused 13092 13093 N_Freeze_Entity => 13094 (1 => True, -- Actions (List1) 13095 2 => False, -- Access_Types_To_Process (Elist2-Sem) 13096 3 => False, -- TSS_Elist (Elist3-Sem) 13097 4 => False, -- Entity (Node4-Sem) 13098 5 => False), -- First_Subtype_Link (Node5-Sem) 13099 13100 N_Freeze_Generic_Entity => 13101 (1 => False, -- unused 13102 2 => False, -- unused 13103 3 => False, -- unused 13104 4 => False, -- Entity (Node4-Sem) 13105 5 => False), -- unused 13106 13107 N_Implicit_Label_Declaration => 13108 (1 => True, -- Defining_Identifier (Node1) 13109 2 => False, -- Label_Construct (Node2-Sem) 13110 3 => False, -- unused 13111 4 => False, -- unused 13112 5 => False), -- unused 13113 13114 N_Itype_Reference => 13115 (1 => False, -- Itype (Node1-Sem) 13116 2 => False, -- unused 13117 3 => False, -- unused 13118 4 => False, -- unused 13119 5 => False), -- unused 13120 13121 N_Raise_Constraint_Error => 13122 (1 => True, -- Condition (Node1) 13123 2 => False, -- unused 13124 3 => True, -- Reason (Uint3) 13125 4 => False, -- unused 13126 5 => False), -- Etype (Node5-Sem) 13127 13128 N_Raise_Program_Error => 13129 (1 => True, -- Condition (Node1) 13130 2 => False, -- unused 13131 3 => True, -- Reason (Uint3) 13132 4 => False, -- unused 13133 5 => False), -- Etype (Node5-Sem) 13134 13135 N_Raise_Storage_Error => 13136 (1 => True, -- Condition (Node1) 13137 2 => False, -- unused 13138 3 => True, -- Reason (Uint3) 13139 4 => False, -- unused 13140 5 => False), -- Etype (Node5-Sem) 13141 13142 N_Push_Constraint_Error_Label => 13143 (1 => False, -- unused 13144 2 => False, -- unused 13145 3 => False, -- unused 13146 4 => False, -- unused 13147 5 => False), -- unused 13148 13149 N_Push_Program_Error_Label => 13150 (1 => False, -- unused 13151 2 => False, -- unused 13152 3 => False, -- unused 13153 4 => False, -- unused 13154 5 => False), -- Exception_Label 13155 13156 N_Push_Storage_Error_Label => 13157 (1 => False, -- unused 13158 2 => False, -- unused 13159 3 => False, -- unused 13160 4 => False, -- unused 13161 5 => False), -- Exception_Label 13162 13163 N_Pop_Constraint_Error_Label => 13164 (1 => False, -- unused 13165 2 => False, -- unused 13166 3 => False, -- unused 13167 4 => False, -- unused 13168 5 => False), -- unused 13169 13170 N_Pop_Program_Error_Label => 13171 (1 => False, -- unused 13172 2 => False, -- unused 13173 3 => False, -- unused 13174 4 => False, -- unused 13175 5 => False), -- unused 13176 13177 N_Pop_Storage_Error_Label => 13178 (1 => False, -- unused 13179 2 => False, -- unused 13180 3 => False, -- unused 13181 4 => False, -- unused 13182 5 => False), -- unused 13183 13184 N_Reference => 13185 (1 => False, -- unused 13186 2 => False, -- unused 13187 3 => True, -- Prefix (Node3) 13188 4 => False, -- unused 13189 5 => False), -- Etype (Node5-Sem) 13190 13191 N_Unchecked_Expression => 13192 (1 => False, -- unused 13193 2 => False, -- unused 13194 3 => True, -- Expression (Node3) 13195 4 => False, -- unused 13196 5 => False), -- Etype (Node5-Sem) 13197 13198 N_Unchecked_Type_Conversion => 13199 (1 => False, -- unused 13200 2 => False, -- unused 13201 3 => True, -- Expression (Node3) 13202 4 => True, -- Subtype_Mark (Node4) 13203 5 => False), -- Etype (Node5-Sem) 13204 13205 N_Validate_Unchecked_Conversion => 13206 (1 => False, -- Source_Type (Node1-Sem) 13207 2 => False, -- Target_Type (Node2-Sem) 13208 3 => False, -- unused 13209 4 => False, -- unused 13210 5 => False), -- unused 13211 13212 -- Entries for SCIL nodes 13213 13214 N_SCIL_Dispatch_Table_Tag_Init => 13215 (1 => False, -- unused 13216 2 => False, -- unused 13217 3 => False, -- unused 13218 4 => False, -- SCIL_Entity (Node4-Sem) 13219 5 => False), -- unused 13220 13221 N_SCIL_Dispatching_Call => 13222 (1 => False, -- unused 13223 2 => False, -- SCIL_Target_Prim (Node2-Sem) 13224 3 => False, -- unused 13225 4 => False, -- SCIL_Entity (Node4-Sem) 13226 5 => False), -- SCIL_Controlling_Tag (Node5-Sem) 13227 13228 N_SCIL_Membership_Test => 13229 (1 => False, -- unused 13230 2 => False, -- unused 13231 3 => False, -- unused 13232 4 => False, -- SCIL_Entity (Node4-Sem) 13233 5 => False), -- SCIL_Tag_Value (Node5-Sem) 13234 13235 N_Call_Marker => 13236 (1 => False, -- Target (Node1-Sem) 13237 2 => False, -- unused 13238 3 => False, -- unused 13239 4 => False, -- unused 13240 5 => False), -- unused 13241 13242 N_Variable_Reference_Marker => 13243 (1 => False, -- Target (Node1-Sem) 13244 2 => False, -- unused 13245 3 => False, -- unused 13246 4 => False, -- unused 13247 5 => False), -- unused 13248 13249 -- Entries for Empty, Error, and Unused. Even though these have a Chars 13250 -- field for debugging purposes, they are not really syntactic fields, so 13251 -- we mark all fields as unused. 13252 13253 N_Empty => 13254 (1 => False, -- unused 13255 2 => False, -- unused 13256 3 => False, -- unused 13257 4 => False, -- unused 13258 5 => False), -- unused 13259 13260 N_Error => 13261 (1 => False, -- unused 13262 2 => False, -- unused 13263 3 => False, -- unused 13264 4 => False, -- unused 13265 5 => False), -- unused 13266 13267 N_Unused_At_Start => 13268 (1 => False, -- unused 13269 2 => False, -- unused 13270 3 => False, -- unused 13271 4 => False, -- unused 13272 5 => False), -- unused 13273 13274 N_Unused_At_End => 13275 (1 => False, -- unused 13276 2 => False, -- unused 13277 3 => False, -- unused 13278 4 => False, -- unused 13279 5 => False)); -- unused 13280 13281 -------------------- 13282 -- Inline Pragmas -- 13283 -------------------- 13284 13285 pragma Inline (Abort_Present); 13286 pragma Inline (Abortable_Part); 13287 pragma Inline (Abstract_Present); 13288 pragma Inline (Accept_Handler_Records); 13289 pragma Inline (Accept_Statement); 13290 pragma Inline (Access_Definition); 13291 pragma Inline (Access_To_Subprogram_Definition); 13292 pragma Inline (Access_Types_To_Process); 13293 pragma Inline (Actions); 13294 pragma Inline (Activation_Chain_Entity); 13295 pragma Inline (Acts_As_Spec); 13296 pragma Inline (Actual_Designated_Subtype); 13297 pragma Inline (Address_Warning_Posted); 13298 pragma Inline (Aggregate_Bounds); 13299 pragma Inline (Aliased_Present); 13300 pragma Inline (Alloc_For_BIP_Return); 13301 pragma Inline (All_Others); 13302 pragma Inline (All_Present); 13303 pragma Inline (Alternatives); 13304 pragma Inline (Ancestor_Part); 13305 pragma Inline (Atomic_Sync_Required); 13306 pragma Inline (Array_Aggregate); 13307 pragma Inline (Aspect_Rep_Item); 13308 pragma Inline (Assignment_OK); 13309 pragma Inline (Associated_Node); 13310 pragma Inline (At_End_Proc); 13311 pragma Inline (Attribute_Name); 13312 pragma Inline (Aux_Decls_Node); 13313 pragma Inline (Backwards_OK); 13314 pragma Inline (Bad_Is_Detected); 13315 pragma Inline (Body_To_Inline); 13316 pragma Inline (Body_Required); 13317 pragma Inline (By_Ref); 13318 pragma Inline (Box_Present); 13319 pragma Inline (Char_Literal_Value); 13320 pragma Inline (Chars); 13321 pragma Inline (Check_Address_Alignment); 13322 pragma Inline (Choice_Parameter); 13323 pragma Inline (Choices); 13324 pragma Inline (Class_Present); 13325 pragma Inline (Classifications); 13326 pragma Inline (Cleanup_Actions); 13327 pragma Inline (Comes_From_Extended_Return_Statement); 13328 pragma Inline (Compile_Time_Known_Aggregate); 13329 pragma Inline (Component_Associations); 13330 pragma Inline (Component_Clauses); 13331 pragma Inline (Component_Definition); 13332 pragma Inline (Component_Items); 13333 pragma Inline (Component_List); 13334 pragma Inline (Component_Name); 13335 pragma Inline (Componentwise_Assignment); 13336 pragma Inline (Condition); 13337 pragma Inline (Condition_Actions); 13338 pragma Inline (Config_Pragmas); 13339 pragma Inline (Constant_Present); 13340 pragma Inline (Constraint); 13341 pragma Inline (Constraints); 13342 pragma Inline (Context_Installed); 13343 pragma Inline (Context_Items); 13344 pragma Inline (Context_Pending); 13345 pragma Inline (Contract_Test_Cases); 13346 pragma Inline (Controlling_Argument); 13347 pragma Inline (Convert_To_Return_False); 13348 pragma Inline (Conversion_OK); 13349 pragma Inline (Corresponding_Aspect); 13350 pragma Inline (Corresponding_Body); 13351 pragma Inline (Corresponding_Formal_Spec); 13352 pragma Inline (Corresponding_Generic_Association); 13353 pragma Inline (Corresponding_Integer_Value); 13354 pragma Inline (Corresponding_Spec); 13355 pragma Inline (Corresponding_Spec_Of_Stub); 13356 pragma Inline (Corresponding_Stub); 13357 pragma Inline (Dcheck_Function); 13358 pragma Inline (Declarations); 13359 pragma Inline (Default_Expression); 13360 pragma Inline (Default_Storage_Pool); 13361 pragma Inline (Default_Name); 13362 pragma Inline (Defining_Identifier); 13363 pragma Inline (Defining_Unit_Name); 13364 pragma Inline (Delay_Alternative); 13365 pragma Inline (Delay_Statement); 13366 pragma Inline (Delta_Expression); 13367 pragma Inline (Digits_Expression); 13368 pragma Inline (Discr_Check_Funcs_Built); 13369 pragma Inline (Discrete_Choices); 13370 pragma Inline (Discrete_Range); 13371 pragma Inline (Discrete_Subtype_Definition); 13372 pragma Inline (Discrete_Subtype_Definitions); 13373 pragma Inline (Discriminant_Specifications); 13374 pragma Inline (Discriminant_Type); 13375 pragma Inline (Do_Accessibility_Check); 13376 pragma Inline (Do_Discriminant_Check); 13377 pragma Inline (Do_Length_Check); 13378 pragma Inline (Do_Division_Check); 13379 pragma Inline (Do_Overflow_Check); 13380 pragma Inline (Do_Range_Check); 13381 pragma Inline (Do_Storage_Check); 13382 pragma Inline (Do_Tag_Check); 13383 pragma Inline (Elaborate_All_Desirable); 13384 pragma Inline (Elaborate_All_Present); 13385 pragma Inline (Elaborate_Desirable); 13386 pragma Inline (Elaborate_Present); 13387 pragma Inline (Else_Actions); 13388 pragma Inline (Else_Statements); 13389 pragma Inline (Elsif_Parts); 13390 pragma Inline (Enclosing_Variant); 13391 pragma Inline (End_Label); 13392 pragma Inline (End_Span); 13393 pragma Inline (Entity); 13394 pragma Inline (Entity_Or_Associated_Node); 13395 pragma Inline (Entry_Body_Formal_Part); 13396 pragma Inline (Entry_Call_Alternative); 13397 pragma Inline (Entry_Call_Statement); 13398 pragma Inline (Entry_Direct_Name); 13399 pragma Inline (Entry_Index); 13400 pragma Inline (Entry_Index_Specification); 13401 pragma Inline (Etype); 13402 pragma Inline (Exception_Choices); 13403 pragma Inline (Exception_Handlers); 13404 pragma Inline (Exception_Junk); 13405 pragma Inline (Exception_Label); 13406 pragma Inline (Expansion_Delayed); 13407 pragma Inline (Explicit_Actual_Parameter); 13408 pragma Inline (Explicit_Generic_Actual_Parameter); 13409 pragma Inline (Expression); 13410 pragma Inline (Expression_Copy); 13411 pragma Inline (Expressions); 13412 pragma Inline (First_Bit); 13413 pragma Inline (First_Inlined_Subprogram); 13414 pragma Inline (First_Name); 13415 pragma Inline (First_Named_Actual); 13416 pragma Inline (First_Real_Statement); 13417 pragma Inline (First_Subtype_Link); 13418 pragma Inline (Float_Truncate); 13419 pragma Inline (Formal_Type_Definition); 13420 pragma Inline (Forwards_OK); 13421 pragma Inline (From_Aspect_Specification); 13422 pragma Inline (From_At_End); 13423 pragma Inline (From_At_Mod); 13424 pragma Inline (From_Conditional_Expression); 13425 pragma Inline (From_Default); 13426 pragma Inline (Generalized_Indexing); 13427 pragma Inline (Generic_Associations); 13428 pragma Inline (Generic_Formal_Declarations); 13429 pragma Inline (Generic_Parent); 13430 pragma Inline (Generic_Parent_Type); 13431 pragma Inline (Handled_Statement_Sequence); 13432 pragma Inline (Handler_List_Entry); 13433 pragma Inline (Has_Created_Identifier); 13434 pragma Inline (Has_Dereference_Action); 13435 pragma Inline (Has_Dynamic_Length_Check); 13436 pragma Inline (Has_Dynamic_Range_Check); 13437 pragma Inline (Has_Init_Expression); 13438 pragma Inline (Has_Local_Raise); 13439 pragma Inline (Has_Self_Reference); 13440 pragma Inline (Has_SP_Choice); 13441 pragma Inline (Has_No_Elaboration_Code); 13442 pragma Inline (Has_Pragma_Suppress_All); 13443 pragma Inline (Has_Private_View); 13444 pragma Inline (Has_Relative_Deadline_Pragma); 13445 pragma Inline (Has_Storage_Size_Pragma); 13446 pragma Inline (Has_Target_Names); 13447 pragma Inline (Has_Wide_Character); 13448 pragma Inline (Has_Wide_Wide_Character); 13449 pragma Inline (Header_Size_Added); 13450 pragma Inline (Hidden_By_Use_Clause); 13451 pragma Inline (High_Bound); 13452 pragma Inline (Identifier); 13453 pragma Inline (Implicit_With); 13454 pragma Inline (Interface_List); 13455 pragma Inline (Interface_Present); 13456 pragma Inline (Includes_Infinities); 13457 pragma Inline (Import_Interface_Present); 13458 pragma Inline (In_Present); 13459 pragma Inline (Incomplete_View); 13460 pragma Inline (Inherited_Discriminant); 13461 pragma Inline (Instance_Spec); 13462 pragma Inline (Intval); 13463 pragma Inline (Iterator_Specification); 13464 pragma Inline (Is_Abort_Block); 13465 pragma Inline (Is_Accessibility_Actual); 13466 pragma Inline (Is_Analyzed_Pragma); 13467 pragma Inline (Is_Asynchronous_Call_Block); 13468 pragma Inline (Is_Boolean_Aspect); 13469 pragma Inline (Is_Checked); 13470 pragma Inline (Is_Checked_Ghost_Pragma); 13471 pragma Inline (Is_Component_Left_Opnd); 13472 pragma Inline (Is_Component_Right_Opnd); 13473 pragma Inline (Is_Controlling_Actual); 13474 pragma Inline (Is_Declaration_Level_Node); 13475 pragma Inline (Is_Delayed_Aspect); 13476 pragma Inline (Is_Disabled); 13477 pragma Inline (Is_Dispatching_Call); 13478 pragma Inline (Is_Dynamic_Coextension); 13479 pragma Inline (Is_Effective_Use_Clause); 13480 pragma Inline (Is_Elaboration_Checks_OK_Node); 13481 pragma Inline (Is_Elaboration_Code); 13482 pragma Inline (Is_Elaboration_Warnings_OK_Node); 13483 pragma Inline (Is_Elsif); 13484 pragma Inline (Is_Entry_Barrier_Function); 13485 pragma Inline (Is_Expanded_Build_In_Place_Call); 13486 pragma Inline (Is_Expanded_Contract); 13487 pragma Inline (Is_Finalization_Wrapper); 13488 pragma Inline (Is_Folded_In_Parser); 13489 pragma Inline (Is_Generic_Contract_Pragma); 13490 pragma Inline (Is_Ignored); 13491 pragma Inline (Is_Ignored_Ghost_Pragma); 13492 pragma Inline (Is_In_Discriminant_Check); 13493 pragma Inline (Is_Inherited_Pragma); 13494 pragma Inline (Is_Initialization_Block); 13495 pragma Inline (Is_Known_Guaranteed_ABE); 13496 pragma Inline (Is_Machine_Number); 13497 pragma Inline (Is_Null_Loop); 13498 pragma Inline (Is_Overloaded); 13499 pragma Inline (Is_Power_Of_2_For_Shift); 13500 pragma Inline (Is_Prefixed_Call); 13501 pragma Inline (Is_Protected_Subprogram_Body); 13502 pragma Inline (Is_Qualified_Universal_Literal); 13503 pragma Inline (Is_Read); 13504 pragma Inline (Is_Source_Call); 13505 pragma Inline (Is_SPARK_Mode_On_Node); 13506 pragma Inline (Is_Static_Coextension); 13507 pragma Inline (Is_Static_Expression); 13508 pragma Inline (Is_Subprogram_Descriptor); 13509 pragma Inline (Is_Task_Allocation_Block); 13510 pragma Inline (Is_Task_Body_Procedure); 13511 pragma Inline (Is_Task_Master); 13512 pragma Inline (Is_Write); 13513 pragma Inline (Iteration_Scheme); 13514 pragma Inline (Itype); 13515 pragma Inline (Kill_Range_Check); 13516 pragma Inline (Last_Bit); 13517 pragma Inline (Last_Name); 13518 pragma Inline (Library_Unit); 13519 pragma Inline (Label_Construct); 13520 pragma Inline (Left_Opnd); 13521 pragma Inline (Limited_View_Installed); 13522 pragma Inline (Limited_Present); 13523 pragma Inline (Literals); 13524 pragma Inline (Local_Raise_Not_OK); 13525 pragma Inline (Local_Raise_Statements); 13526 pragma Inline (Loop_Actions); 13527 pragma Inline (Loop_Parameter_Specification); 13528 pragma Inline (Low_Bound); 13529 pragma Inline (Mod_Clause); 13530 pragma Inline (More_Ids); 13531 pragma Inline (Must_Be_Byte_Aligned); 13532 pragma Inline (Must_Not_Freeze); 13533 pragma Inline (Must_Not_Override); 13534 pragma Inline (Must_Override); 13535 pragma Inline (Name); 13536 pragma Inline (Names); 13537 pragma Inline (Next_Entity); 13538 pragma Inline (Next_Exit_Statement); 13539 pragma Inline (Next_Implicit_With); 13540 pragma Inline (Next_Named_Actual); 13541 pragma Inline (Next_Pragma); 13542 pragma Inline (Next_Rep_Item); 13543 pragma Inline (Next_Use_Clause); 13544 pragma Inline (No_Ctrl_Actions); 13545 pragma Inline (No_Elaboration_Check); 13546 pragma Inline (No_Entities_Ref_In_Spec); 13547 pragma Inline (No_Initialization); 13548 pragma Inline (No_Minimize_Eliminate); 13549 pragma Inline (No_Side_Effect_Removal); 13550 pragma Inline (No_Truncation); 13551 pragma Inline (Null_Excluding_Subtype); 13552 pragma Inline (Null_Exclusion_Present); 13553 pragma Inline (Null_Exclusion_In_Return_Present); 13554 pragma Inline (Null_Present); 13555 pragma Inline (Null_Record_Present); 13556 pragma Inline (Null_Statement); 13557 pragma Inline (Object_Definition); 13558 pragma Inline (Of_Present); 13559 pragma Inline (Original_Discriminant); 13560 pragma Inline (Original_Entity); 13561 pragma Inline (Others_Discrete_Choices); 13562 pragma Inline (Out_Present); 13563 pragma Inline (Parameter_Associations); 13564 pragma Inline (Parameter_Specifications); 13565 pragma Inline (Parameter_Type); 13566 pragma Inline (Parent_Spec); 13567 pragma Inline (Parent_With); 13568 pragma Inline (Position); 13569 pragma Inline (Pragma_Argument_Associations); 13570 pragma Inline (Pragma_Identifier); 13571 pragma Inline (Pragmas_After); 13572 pragma Inline (Pragmas_Before); 13573 pragma Inline (Pre_Post_Conditions); 13574 pragma Inline (Prefix); 13575 pragma Inline (Premature_Use); 13576 pragma Inline (Present_Expr); 13577 pragma Inline (Prev_Ids); 13578 pragma Inline (Prev_Use_Clause); 13579 pragma Inline (Print_In_Hex); 13580 pragma Inline (Private_Declarations); 13581 pragma Inline (Private_Present); 13582 pragma Inline (Procedure_To_Call); 13583 pragma Inline (Proper_Body); 13584 pragma Inline (Protected_Definition); 13585 pragma Inline (Protected_Present); 13586 pragma Inline (Raises_Constraint_Error); 13587 pragma Inline (Range_Constraint); 13588 pragma Inline (Range_Expression); 13589 pragma Inline (Real_Range_Specification); 13590 pragma Inline (Realval); 13591 pragma Inline (Reason); 13592 pragma Inline (Record_Extension_Part); 13593 pragma Inline (Redundant_Use); 13594 pragma Inline (Renaming_Exception); 13595 pragma Inline (Result_Definition); 13596 pragma Inline (Return_Object_Declarations); 13597 pragma Inline (Return_Statement_Entity); 13598 pragma Inline (Reverse_Present); 13599 pragma Inline (Right_Opnd); 13600 pragma Inline (Rounded_Result); 13601 pragma Inline (SCIL_Controlling_Tag); 13602 pragma Inline (SCIL_Entity); 13603 pragma Inline (SCIL_Tag_Value); 13604 pragma Inline (SCIL_Target_Prim); 13605 pragma Inline (Scope); 13606 pragma Inline (Select_Alternatives); 13607 pragma Inline (Selector_Name); 13608 pragma Inline (Selector_Names); 13609 pragma Inline (Shift_Count_OK); 13610 pragma Inline (Source_Type); 13611 pragma Inline (Specification); 13612 pragma Inline (Split_PPC); 13613 pragma Inline (Statements); 13614 pragma Inline (Storage_Pool); 13615 pragma Inline (Subpool_Handle_Name); 13616 pragma Inline (Strval); 13617 pragma Inline (Subtype_Indication); 13618 pragma Inline (Subtype_Mark); 13619 pragma Inline (Subtype_Marks); 13620 pragma Inline (Suppress_Assignment_Checks); 13621 pragma Inline (Suppress_Loop_Warnings); 13622 pragma Inline (Synchronized_Present); 13623 pragma Inline (Tagged_Present); 13624 pragma Inline (Target); 13625 pragma Inline (Target_Type); 13626 pragma Inline (Task_Definition); 13627 pragma Inline (Task_Present); 13628 pragma Inline (Then_Actions); 13629 pragma Inline (Then_Statements); 13630 pragma Inline (Triggering_Alternative); 13631 pragma Inline (Triggering_Statement); 13632 pragma Inline (Treat_Fixed_As_Integer); 13633 pragma Inline (TSS_Elist); 13634 pragma Inline (Type_Definition); 13635 pragma Inline (Uneval_Old_Accept); 13636 pragma Inline (Uneval_Old_Warn); 13637 pragma Inline (Unit); 13638 pragma Inline (Uninitialized_Variable); 13639 pragma Inline (Unknown_Discriminants_Present); 13640 pragma Inline (Unreferenced_In_Spec); 13641 pragma Inline (Variant_Part); 13642 pragma Inline (Variants); 13643 pragma Inline (Visible_Declarations); 13644 pragma Inline (Used_Operations); 13645 pragma Inline (Was_Attribute_Reference); 13646 pragma Inline (Was_Expression_Function); 13647 pragma Inline (Was_Originally_Stub); 13648 pragma Inline (Withed_Body); 13649 13650 pragma Inline (Set_Abort_Present); 13651 pragma Inline (Set_Abortable_Part); 13652 pragma Inline (Set_Abstract_Present); 13653 pragma Inline (Set_Accept_Handler_Records); 13654 pragma Inline (Set_Accept_Statement); 13655 pragma Inline (Set_Access_Definition); 13656 pragma Inline (Set_Access_To_Subprogram_Definition); 13657 pragma Inline (Set_Access_Types_To_Process); 13658 pragma Inline (Set_Actions); 13659 pragma Inline (Set_Activation_Chain_Entity); 13660 pragma Inline (Set_Acts_As_Spec); 13661 pragma Inline (Set_Actual_Designated_Subtype); 13662 pragma Inline (Set_Address_Warning_Posted); 13663 pragma Inline (Set_Aggregate_Bounds); 13664 pragma Inline (Set_Aliased_Present); 13665 pragma Inline (Set_Alloc_For_BIP_Return); 13666 pragma Inline (Set_All_Others); 13667 pragma Inline (Set_All_Present); 13668 pragma Inline (Set_Alternatives); 13669 pragma Inline (Set_Ancestor_Part); 13670 pragma Inline (Set_Array_Aggregate); 13671 pragma Inline (Set_Aspect_Rep_Item); 13672 pragma Inline (Set_Assignment_OK); 13673 pragma Inline (Set_Associated_Node); 13674 pragma Inline (Set_At_End_Proc); 13675 pragma Inline (Set_Atomic_Sync_Required); 13676 pragma Inline (Set_Attribute_Name); 13677 pragma Inline (Set_Aux_Decls_Node); 13678 pragma Inline (Set_Backwards_OK); 13679 pragma Inline (Set_Bad_Is_Detected); 13680 pragma Inline (Set_Body_Required); 13681 pragma Inline (Set_Body_To_Inline); 13682 pragma Inline (Set_Box_Present); 13683 pragma Inline (Set_By_Ref); 13684 pragma Inline (Set_Char_Literal_Value); 13685 pragma Inline (Set_Chars); 13686 pragma Inline (Set_Check_Address_Alignment); 13687 pragma Inline (Set_Choice_Parameter); 13688 pragma Inline (Set_Choices); 13689 pragma Inline (Set_Class_Present); 13690 pragma Inline (Set_Classifications); 13691 pragma Inline (Set_Cleanup_Actions); 13692 pragma Inline (Set_Comes_From_Extended_Return_Statement); 13693 pragma Inline (Set_Compile_Time_Known_Aggregate); 13694 pragma Inline (Set_Component_Associations); 13695 pragma Inline (Set_Component_Clauses); 13696 pragma Inline (Set_Component_Definition); 13697 pragma Inline (Set_Component_Items); 13698 pragma Inline (Set_Component_List); 13699 pragma Inline (Set_Component_Name); 13700 pragma Inline (Set_Componentwise_Assignment); 13701 pragma Inline (Set_Condition); 13702 pragma Inline (Set_Condition_Actions); 13703 pragma Inline (Set_Config_Pragmas); 13704 pragma Inline (Set_Constant_Present); 13705 pragma Inline (Set_Constraint); 13706 pragma Inline (Set_Constraints); 13707 pragma Inline (Set_Context_Installed); 13708 pragma Inline (Set_Context_Items); 13709 pragma Inline (Set_Context_Pending); 13710 pragma Inline (Set_Contract_Test_Cases); 13711 pragma Inline (Set_Controlling_Argument); 13712 pragma Inline (Set_Conversion_OK); 13713 pragma Inline (Set_Convert_To_Return_False); 13714 pragma Inline (Set_Corresponding_Aspect); 13715 pragma Inline (Set_Corresponding_Body); 13716 pragma Inline (Set_Corresponding_Formal_Spec); 13717 pragma Inline (Set_Corresponding_Generic_Association); 13718 pragma Inline (Set_Corresponding_Integer_Value); 13719 pragma Inline (Set_Corresponding_Spec); 13720 pragma Inline (Set_Corresponding_Spec_Of_Stub); 13721 pragma Inline (Set_Corresponding_Stub); 13722 pragma Inline (Set_Dcheck_Function); 13723 pragma Inline (Set_Declarations); 13724 pragma Inline (Set_Default_Expression); 13725 pragma Inline (Set_Default_Name); 13726 pragma Inline (Set_Default_Storage_Pool); 13727 pragma Inline (Set_Defining_Identifier); 13728 pragma Inline (Set_Defining_Unit_Name); 13729 pragma Inline (Set_Delay_Alternative); 13730 pragma Inline (Set_Delay_Statement); 13731 pragma Inline (Set_Delta_Expression); 13732 pragma Inline (Set_Digits_Expression); 13733 pragma Inline (Set_Discr_Check_Funcs_Built); 13734 pragma Inline (Set_Discrete_Choices); 13735 pragma Inline (Set_Discrete_Range); 13736 pragma Inline (Set_Discrete_Subtype_Definition); 13737 pragma Inline (Set_Discrete_Subtype_Definitions); 13738 pragma Inline (Set_Discriminant_Specifications); 13739 pragma Inline (Set_Discriminant_Type); 13740 pragma Inline (Set_Do_Accessibility_Check); 13741 pragma Inline (Set_Do_Discriminant_Check); 13742 pragma Inline (Set_Do_Division_Check); 13743 pragma Inline (Set_Do_Length_Check); 13744 pragma Inline (Set_Do_Overflow_Check); 13745 pragma Inline (Set_Do_Range_Check); 13746 pragma Inline (Set_Do_Storage_Check); 13747 pragma Inline (Set_Do_Tag_Check); 13748 pragma Inline (Set_Elaborate_All_Desirable); 13749 pragma Inline (Set_Elaborate_All_Present); 13750 pragma Inline (Set_Elaborate_Desirable); 13751 pragma Inline (Set_Elaborate_Present); 13752 pragma Inline (Set_Else_Actions); 13753 pragma Inline (Set_Else_Statements); 13754 pragma Inline (Set_Elsif_Parts); 13755 pragma Inline (Set_Enclosing_Variant); 13756 pragma Inline (Set_End_Label); 13757 pragma Inline (Set_End_Span); 13758 pragma Inline (Set_Entity); 13759 pragma Inline (Set_Entry_Body_Formal_Part); 13760 pragma Inline (Set_Entry_Call_Alternative); 13761 pragma Inline (Set_Entry_Call_Statement); 13762 pragma Inline (Set_Entry_Direct_Name); 13763 pragma Inline (Set_Entry_Index); 13764 pragma Inline (Set_Entry_Index_Specification); 13765 pragma Inline (Set_Etype); 13766 pragma Inline (Set_Exception_Choices); 13767 pragma Inline (Set_Exception_Handlers); 13768 pragma Inline (Set_Exception_Junk); 13769 pragma Inline (Set_Exception_Label); 13770 pragma Inline (Set_Expansion_Delayed); 13771 pragma Inline (Set_Explicit_Actual_Parameter); 13772 pragma Inline (Set_Explicit_Generic_Actual_Parameter); 13773 pragma Inline (Set_Expression); 13774 pragma Inline (Set_Expression_Copy); 13775 pragma Inline (Set_Expressions); 13776 pragma Inline (Set_First_Bit); 13777 pragma Inline (Set_First_Inlined_Subprogram); 13778 pragma Inline (Set_First_Name); 13779 pragma Inline (Set_First_Named_Actual); 13780 pragma Inline (Set_First_Real_Statement); 13781 pragma Inline (Set_First_Subtype_Link); 13782 pragma Inline (Set_Float_Truncate); 13783 pragma Inline (Set_Formal_Type_Definition); 13784 pragma Inline (Set_Forwards_OK); 13785 pragma Inline (Set_From_Aspect_Specification); 13786 pragma Inline (Set_From_At_End); 13787 pragma Inline (Set_From_At_Mod); 13788 pragma Inline (Set_From_Conditional_Expression); 13789 pragma Inline (Set_From_Default); 13790 pragma Inline (Set_Generalized_Indexing); 13791 pragma Inline (Set_Generic_Associations); 13792 pragma Inline (Set_Generic_Formal_Declarations); 13793 pragma Inline (Set_Generic_Parent); 13794 pragma Inline (Set_Generic_Parent_Type); 13795 pragma Inline (Set_Handled_Statement_Sequence); 13796 pragma Inline (Set_Handler_List_Entry); 13797 pragma Inline (Set_Has_Created_Identifier); 13798 pragma Inline (Set_Has_Dereference_Action); 13799 pragma Inline (Set_Has_Dynamic_Length_Check); 13800 pragma Inline (Set_Has_Dynamic_Range_Check); 13801 pragma Inline (Set_Has_Init_Expression); 13802 pragma Inline (Set_Has_Local_Raise); 13803 pragma Inline (Set_Has_No_Elaboration_Code); 13804 pragma Inline (Set_Has_Pragma_Suppress_All); 13805 pragma Inline (Set_Has_Private_View); 13806 pragma Inline (Set_Has_Relative_Deadline_Pragma); 13807 pragma Inline (Set_Has_Self_Reference); 13808 pragma Inline (Set_Has_SP_Choice); 13809 pragma Inline (Set_Has_Storage_Size_Pragma); 13810 pragma Inline (Set_Has_Target_Names); 13811 pragma Inline (Set_Has_Wide_Character); 13812 pragma Inline (Set_Has_Wide_Wide_Character); 13813 pragma Inline (Set_Header_Size_Added); 13814 pragma Inline (Set_Hidden_By_Use_Clause); 13815 pragma Inline (Set_High_Bound); 13816 pragma Inline (Set_Identifier); 13817 pragma Inline (Set_Implicit_With); 13818 pragma Inline (Set_Import_Interface_Present); 13819 pragma Inline (Set_In_Present); 13820 pragma Inline (Set_Includes_Infinities); 13821 pragma Inline (Set_Incomplete_View); 13822 pragma Inline (Set_Inherited_Discriminant); 13823 pragma Inline (Set_Instance_Spec); 13824 pragma Inline (Set_Interface_List); 13825 pragma Inline (Set_Interface_Present); 13826 pragma Inline (Set_Intval); 13827 pragma Inline (Set_Is_Abort_Block); 13828 pragma Inline (Set_Is_Accessibility_Actual); 13829 pragma Inline (Set_Is_Analyzed_Pragma); 13830 pragma Inline (Set_Is_Asynchronous_Call_Block); 13831 pragma Inline (Set_Is_Boolean_Aspect); 13832 pragma Inline (Set_Is_Checked); 13833 pragma Inline (Set_Is_Checked_Ghost_Pragma); 13834 pragma Inline (Set_Is_Component_Left_Opnd); 13835 pragma Inline (Set_Is_Component_Right_Opnd); 13836 pragma Inline (Set_Is_Controlling_Actual); 13837 pragma Inline (Set_Is_Declaration_Level_Node); 13838 pragma Inline (Set_Is_Delayed_Aspect); 13839 pragma Inline (Set_Is_Disabled); 13840 pragma Inline (Set_Is_Dispatching_Call); 13841 pragma Inline (Set_Is_Dynamic_Coextension); 13842 pragma Inline (Set_Is_Effective_Use_Clause); 13843 pragma Inline (Set_Is_Elaboration_Checks_OK_Node); 13844 pragma Inline (Set_Is_Elaboration_Code); 13845 pragma Inline (Set_Is_Elaboration_Warnings_OK_Node); 13846 pragma Inline (Set_Is_Elsif); 13847 pragma Inline (Set_Is_Entry_Barrier_Function); 13848 pragma Inline (Set_Is_Expanded_Build_In_Place_Call); 13849 pragma Inline (Set_Is_Expanded_Contract); 13850 pragma Inline (Set_Is_Finalization_Wrapper); 13851 pragma Inline (Set_Is_Folded_In_Parser); 13852 pragma Inline (Set_Is_Generic_Contract_Pragma); 13853 pragma Inline (Set_Is_Ignored); 13854 pragma Inline (Set_Is_Ignored_Ghost_Pragma); 13855 pragma Inline (Set_Is_In_Discriminant_Check); 13856 pragma Inline (Set_Is_Inherited_Pragma); 13857 pragma Inline (Set_Is_Initialization_Block); 13858 pragma Inline (Set_Is_Known_Guaranteed_ABE); 13859 pragma Inline (Set_Is_Machine_Number); 13860 pragma Inline (Set_Is_Null_Loop); 13861 pragma Inline (Set_Is_Overloaded); 13862 pragma Inline (Set_Is_Power_Of_2_For_Shift); 13863 pragma Inline (Set_Is_Prefixed_Call); 13864 pragma Inline (Set_Is_Protected_Subprogram_Body); 13865 pragma Inline (Set_Is_Qualified_Universal_Literal); 13866 pragma Inline (Set_Is_Read); 13867 pragma Inline (Set_Is_Source_Call); 13868 pragma Inline (Set_Is_SPARK_Mode_On_Node); 13869 pragma Inline (Set_Is_Static_Coextension); 13870 pragma Inline (Set_Is_Static_Expression); 13871 pragma Inline (Set_Is_Subprogram_Descriptor); 13872 pragma Inline (Set_Is_Task_Allocation_Block); 13873 pragma Inline (Set_Is_Task_Body_Procedure); 13874 pragma Inline (Set_Is_Task_Master); 13875 pragma Inline (Set_Is_Write); 13876 pragma Inline (Set_Iteration_Scheme); 13877 pragma Inline (Set_Iterator_Specification); 13878 pragma Inline (Set_Itype); 13879 pragma Inline (Set_Kill_Range_Check); 13880 pragma Inline (Set_Label_Construct); 13881 pragma Inline (Set_Last_Bit); 13882 pragma Inline (Set_Last_Name); 13883 pragma Inline (Set_Left_Opnd); 13884 pragma Inline (Set_Library_Unit); 13885 pragma Inline (Set_Limited_Present); 13886 pragma Inline (Set_Limited_View_Installed); 13887 pragma Inline (Set_Literals); 13888 pragma Inline (Set_Local_Raise_Not_OK); 13889 pragma Inline (Set_Local_Raise_Statements); 13890 pragma Inline (Set_Loop_Actions); 13891 pragma Inline (Set_Loop_Parameter_Specification); 13892 pragma Inline (Set_Low_Bound); 13893 pragma Inline (Set_Mod_Clause); 13894 pragma Inline (Set_More_Ids); 13895 pragma Inline (Set_Must_Be_Byte_Aligned); 13896 pragma Inline (Set_Must_Not_Freeze); 13897 pragma Inline (Set_Must_Not_Override); 13898 pragma Inline (Set_Must_Override); 13899 pragma Inline (Set_Name); 13900 pragma Inline (Set_Names); 13901 pragma Inline (Set_Next_Entity); 13902 pragma Inline (Set_Next_Exit_Statement); 13903 pragma Inline (Set_Next_Implicit_With); 13904 pragma Inline (Set_Next_Named_Actual); 13905 pragma Inline (Set_Next_Pragma); 13906 pragma Inline (Set_Next_Rep_Item); 13907 pragma Inline (Set_Next_Use_Clause); 13908 pragma Inline (Set_No_Ctrl_Actions); 13909 pragma Inline (Set_No_Elaboration_Check); 13910 pragma Inline (Set_No_Entities_Ref_In_Spec); 13911 pragma Inline (Set_No_Initialization); 13912 pragma Inline (Set_No_Minimize_Eliminate); 13913 pragma Inline (Set_No_Side_Effect_Removal); 13914 pragma Inline (Set_No_Truncation); 13915 pragma Inline (Set_Null_Excluding_Subtype); 13916 pragma Inline (Set_Null_Exclusion_Present); 13917 pragma Inline (Set_Null_Exclusion_In_Return_Present); 13918 pragma Inline (Set_Null_Present); 13919 pragma Inline (Set_Null_Record_Present); 13920 pragma Inline (Set_Null_Statement); 13921 pragma Inline (Set_Object_Definition); 13922 pragma Inline (Set_Of_Present); 13923 pragma Inline (Set_Original_Discriminant); 13924 pragma Inline (Set_Original_Entity); 13925 pragma Inline (Set_Others_Discrete_Choices); 13926 pragma Inline (Set_Out_Present); 13927 pragma Inline (Set_Parameter_Associations); 13928 pragma Inline (Set_Parameter_Specifications); 13929 pragma Inline (Set_Parameter_Type); 13930 pragma Inline (Set_Parent_Spec); 13931 pragma Inline (Set_Parent_With); 13932 pragma Inline (Set_Position); 13933 pragma Inline (Set_Pragma_Argument_Associations); 13934 pragma Inline (Set_Pragma_Identifier); 13935 pragma Inline (Set_Pragmas_After); 13936 pragma Inline (Set_Pragmas_Before); 13937 pragma Inline (Set_Pre_Post_Conditions); 13938 pragma Inline (Set_Prefix); 13939 pragma Inline (Set_Premature_Use); 13940 pragma Inline (Set_Present_Expr); 13941 pragma Inline (Set_Prev_Ids); 13942 pragma Inline (Set_Prev_Use_Clause); 13943 pragma Inline (Set_Print_In_Hex); 13944 pragma Inline (Set_Private_Declarations); 13945 pragma Inline (Set_Private_Present); 13946 pragma Inline (Set_Procedure_To_Call); 13947 pragma Inline (Set_Proper_Body); 13948 pragma Inline (Set_Protected_Definition); 13949 pragma Inline (Set_Protected_Present); 13950 pragma Inline (Set_Raises_Constraint_Error); 13951 pragma Inline (Set_Range_Constraint); 13952 pragma Inline (Set_Range_Expression); 13953 pragma Inline (Set_Real_Range_Specification); 13954 pragma Inline (Set_Realval); 13955 pragma Inline (Set_Reason); 13956 pragma Inline (Set_Record_Extension_Part); 13957 pragma Inline (Set_Redundant_Use); 13958 pragma Inline (Set_Renaming_Exception); 13959 pragma Inline (Set_Result_Definition); 13960 pragma Inline (Set_Return_Object_Declarations); 13961 pragma Inline (Set_Reverse_Present); 13962 pragma Inline (Set_Right_Opnd); 13963 pragma Inline (Set_Rounded_Result); 13964 pragma Inline (Set_SCIL_Controlling_Tag); 13965 pragma Inline (Set_SCIL_Entity); 13966 pragma Inline (Set_SCIL_Tag_Value); 13967 pragma Inline (Set_SCIL_Target_Prim); 13968 pragma Inline (Set_Scope); 13969 pragma Inline (Set_Select_Alternatives); 13970 pragma Inline (Set_Selector_Name); 13971 pragma Inline (Set_Selector_Names); 13972 pragma Inline (Set_Shift_Count_OK); 13973 pragma Inline (Set_Source_Type); 13974 pragma Inline (Set_Split_PPC); 13975 pragma Inline (Set_Statements); 13976 pragma Inline (Set_Storage_Pool); 13977 pragma Inline (Set_Strval); 13978 pragma Inline (Set_Subpool_Handle_Name); 13979 pragma Inline (Set_Subtype_Indication); 13980 pragma Inline (Set_Subtype_Mark); 13981 pragma Inline (Set_Subtype_Marks); 13982 pragma Inline (Set_Suppress_Assignment_Checks); 13983 pragma Inline (Set_Suppress_Loop_Warnings); 13984 pragma Inline (Set_Synchronized_Present); 13985 pragma Inline (Set_TSS_Elist); 13986 pragma Inline (Set_Tagged_Present); 13987 pragma Inline (Set_Target); 13988 pragma Inline (Set_Target_Type); 13989 pragma Inline (Set_Task_Definition); 13990 pragma Inline (Set_Task_Present); 13991 pragma Inline (Set_Then_Actions); 13992 pragma Inline (Set_Then_Statements); 13993 pragma Inline (Set_Treat_Fixed_As_Integer); 13994 pragma Inline (Set_Triggering_Alternative); 13995 pragma Inline (Set_Triggering_Statement); 13996 pragma Inline (Set_Type_Definition); 13997 pragma Inline (Set_Uneval_Old_Accept); 13998 pragma Inline (Set_Uneval_Old_Warn); 13999 pragma Inline (Set_Unit); 14000 pragma Inline (Set_Uninitialized_Variable); 14001 pragma Inline (Set_Unknown_Discriminants_Present); 14002 pragma Inline (Set_Unreferenced_In_Spec); 14003 pragma Inline (Set_Used_Operations); 14004 pragma Inline (Set_Variant_Part); 14005 pragma Inline (Set_Variants); 14006 pragma Inline (Set_Visible_Declarations); 14007 pragma Inline (Set_Was_Attribute_Reference); 14008 pragma Inline (Set_Was_Expression_Function); 14009 pragma Inline (Set_Was_Originally_Stub); 14010 pragma Inline (Set_Withed_Body); 14011 14012end Sinfo; 14013