1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S I N F O -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2019, 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 variables Ghost_Mode and Ignored_Ghost_Region, which comprise 551 -- a mechanism called "Ghost regions". 552 -- 553 -- The values of Ghost_Mode are as follows: 554 -- 555 -- 1. Check - All static semantics as defined in SPARK RM 6.9 are in 556 -- effect. The Ghost region has mode Check. 557 -- 558 -- 2. Ignore - Same as Check, ignored Ghost code is not present in ALI 559 -- files, object files, and the final executable. The Ghost region 560 -- has mode Ignore. 561 -- 562 -- 3. None - No Ghost region is in effect 563 -- 564 -- The value of Ignored_Ghost_Region captures the node which initiates an 565 -- ignored Ghost region. 566 -- 567 -- A Ghost region is a compiler operating mode, similar to Check_Syntax, 568 -- however a region is much more finely grained and depends on the policy 569 -- in effect. The region starts prior to the analysis of a Ghost construct 570 -- and ends immediately after its expansion. The region is established as 571 -- follows: 572 -- 573 -- 1. Declarations - Prior to analysis, if the declaration is subject to 574 -- pragma Ghost. 575 -- 576 -- 2. Renaming declarations - Same as 1) or when the renamed entity is 577 -- Ghost. 578 -- 579 -- 3. Completing declarations - Same as 1) or when the declaration is 580 -- partially analyzed and the declaration completes a Ghost entity. 581 -- 582 -- 4. N_Package_Body, N_Subprogram_Body - Same as 1) or when the body is 583 -- partially analyzed and completes a Ghost entity. 584 -- 585 -- 5. N_Assignment_Statement - After the left hand side is analyzed and 586 -- references a Ghost entity. 587 -- 588 -- 6. N_Procedure_Call_Statement - After the name is analyzed and denotes 589 -- a Ghost procedure. 590 -- 591 -- 7. N_Pragma - During analysis, when the related entity is Ghost or the 592 -- pragma encloses a Ghost entity. 593 -- 594 -- 8. Instantiations - Save as 1) or when the instantiation is partially 595 -- analyzed and the generic template is Ghost. 596 -- 597 -- The following routines install a new Ghost region: 598 -- 599 -- Install_Ghost_Region 600 -- Mark_And_Set_Ghost_xxx 601 -- Set_Ghost_Mode 602 -- 603 -- The following routine ends a Ghost region: 604 -- 605 -- Restore_Ghost_Region 606 -- 607 -- A region may be reinstalled similarly to scopes for decoupled expansion 608 -- such as the generation of dispatch tables or the creation of a predicate 609 -- function. 610 -- 611 -- If the mode of a Ghost region is Ignore, any newly created nodes as well 612 -- as source entities are marked as ignored Ghost. In additon, the marking 613 -- process signals all enclosing scopes that an ignored Ghost node resides 614 -- within. The compilation unit where the node resides is also added to an 615 -- auxiliary table for post processing. 616 -- 617 -- After the analysis and expansion of all compilation units takes place 618 -- as well as the instantiation of all inlined [generic] bodies, the GNAT 619 -- driver initiates a separate pass which removes all ignored Ghost nodes 620 -- from all units stored in the auxiliary table. 621 622 -------------------- 623 -- GNATprove Mode -- 624 -------------------- 625 626 -- When a file is compiled in GNATprove mode (-gnatd.F), a very light 627 -- expansion is performed and the analysis must generate a tree in a 628 -- form that meets additional requirements. 629 630 -- This light expansion does two transformations of the tree that cannot 631 -- be postponed till after semantic analysis: 632 633 -- 1. Replace object renamings by renamed object. This requires the 634 -- introduction of temporaries at the point of the renaming, which 635 -- must be properly analyzed. 636 637 -- 2. Fully qualify entity names. This is needed to generate suitable 638 -- local effects and call-graphs in ALI files, with the completely 639 -- qualified names (in particular the suffix to distinguish homonyms). 640 641 -- The tree after this light expansion should be fully analyzed 642 -- semantically, which sometimes requires the insertion of semantic 643 -- preanalysis, for example for subprogram contracts and pragma 644 -- check/assert. In particular, all expression must have their proper type, 645 -- and semantic links should be set between tree nodes (partial to full 646 -- view, etc.) Some kinds of nodes should be either absent, or can be 647 -- ignored by the formal verification backend: 648 649 -- N_Object_Renaming_Declaration: can be ignored safely 650 -- N_Expression_Function: absent (rewritten) 651 -- N_Expression_With_Actions: absent (not generated) 652 653 -- SPARK cross-references are generated from the regular cross-references 654 -- (used for browsing and code understanding) and additional references 655 -- collected during semantic analysis, in particular on all dereferences. 656 -- These SPARK cross-references are output in a separate section of ALI 657 -- files, as described in spark_xrefs.adb. They are the basis for the 658 -- computation of data dependences in GNATprove. This implies that all 659 -- cross-references should be generated in this mode, even those that would 660 -- not make sense from a user point-of-view, and that cross-references that 661 -- do not lead to data dependences for subprograms can be safely ignored. 662 663 -- GNATprove relies on the following front end behaviors: 664 665 -- 1. The first declarations in the list of visible declarations of 666 -- a package declaration for a generic instance, up to the first 667 -- declaration which comes from source, should correspond to 668 -- the "mappings nodes" between formal and actual generic parameters. 669 670 -- 2. In addition pragma Debug statements are removed from the tree 671 -- (rewritten to NULL stmt), since they should be ignored in formal 672 -- verification. 673 674 -- 3. An error is also issued for missing subunits, similar to the 675 -- warning issued when generating code, to avoid formal verification 676 -- of a partial unit. 677 678 -- 4. Unconstrained types are not replaced by constrained types whose 679 -- bounds are generated from an expression: Expand_Subtype_From_Expr 680 -- should be a no-op. 681 682 -- 5. Errors (instead of warnings) are issued on compile-time-known 683 -- constraint errors even though such cases do not correspond to 684 -- illegalities in the Ada RM (this is simply another case where 685 -- GNATprove implements a subset of the full language). 686 -- 687 -- However, there are a few exceptions to this rule for cases where 688 -- we want to allow the GNATprove analysis to proceed (e.g. range 689 -- checks on empty ranges, which typically appear in deactivated 690 -- code in a particular configuration). 691 692 -- 6. Subtypes should match in the AST, even after a generic is 693 -- instantiated. In particular, GNATprove relies on the fact that, 694 -- on a selected component, the type of the selected component is 695 -- the type of the corresponding component in the prefix of the 696 -- selected component. 697 -- 698 -- Note that, in some cases, we know that this rule is broken by the 699 -- frontend. In particular, if the selected component is a packed 700 -- array depending on a discriminant of a unconstrained formal object 701 -- parameter of a generic. 702 703 ---------------- 704 -- SPARK Mode -- 705 ---------------- 706 707 -- The SPARK RM 1.6.5 defines a mode of operation called "SPARK mode" which 708 -- starts a scope where the SPARK language semantics are either On, Off, or 709 -- Auto, where Auto leaves the choice to the tools. A SPARK mode may be 710 -- specified by means of an aspect or a pragma. 711 712 -- The following entities may be subject to a SPARK mode. Entities marked 713 -- with * may possess two differente SPARK modes. 714 715 -- E_Entry 716 -- E_Entry_Family 717 -- E_Function 718 -- E_Generic_Function 719 -- E_Generic_Package * 720 -- E_Generic_Procedure 721 -- E_Operator 722 -- E_Package * 723 -- E_Package_Body * 724 -- E_Procedure 725 -- E_Protected_Body 726 -- E_Protected_Subtype 727 -- E_Protected_Type * 728 -- E_Subprogram_Body 729 -- E_Task_Body 730 -- E_Task_Subtype 731 -- E_Task_Type * 732 -- E_Variable 733 734 -- In order to manage SPARK scopes, the compiler relies on global variables 735 -- SPARK_Mode and SPARK_Mode_Pragma and a mechanism called "SPARK regions." 736 -- Routines Install_SPARK_Mode and Set_SPARK_Mode create a new SPARK region 737 -- and routine Restore_SPARK_Mode ends a SPARK region. A region may be 738 -- reinstalled similarly to scopes. 739 740 ----------------------- 741 -- Check Flag Fields -- 742 ----------------------- 743 744 -- The following flag fields appear in expression nodes: 745 746 -- Do_Division_Check 747 -- Do_Overflow_Check 748 -- Do_Range_Check 749 750 -- These three flags are always set by the front end during semantic 751 -- analysis, on expression nodes that may trigger the corresponding 752 -- check. The front end then inserts or not the check during expansion. In 753 -- particular, these flags should also be correctly set in ASIS mode and 754 -- GNATprove mode. As a special case, the front end does not insert a 755 -- Do_Division_Check flag on float exponentiation expressions, for the case 756 -- where the value is 0.0 and the exponent is negative, although this case 757 -- does lead to a division check failure. 758 759 -- Note: the expander always takes care of the Do_Range check case, 760 -- so this flag will never be set in the expanded tree passed to the 761 -- back end code generator. 762 763 -- Note that this accounts for all nodes that trigger the corresponding 764 -- checks, except for range checks on subtype_indications, which may be 765 -- required to check that a range_constraint is compatible with the given 766 -- subtype (RM 3.2.2(11)). 767 768 -- The following flag fields appear in various nodes: 769 770 -- Do_Accessibility_Check 771 -- Do_Discriminant_Check 772 -- Do_Length_Check 773 -- Do_Storage_Check 774 -- Do_Tag_Check 775 776 -- These flags are used in some specific cases by the front end, either 777 -- during semantic analysis or during expansion, and cannot be expected 778 -- to be set on all nodes that trigger the corresponding check. 779 780 ------------------------ 781 -- Common Flag Fields -- 782 ------------------------ 783 784 -- The following flag fields appear in all nodes: 785 786 -- Analyzed 787 -- This flag is used to indicate that a node (and all its children) have 788 -- been analyzed. It is used to avoid reanalysis of a node that has 789 -- already been analyzed, both for efficiency and functional correctness 790 -- reasons. 791 792 -- Comes_From_Source 793 -- This flag is set if the node comes directly from an explicit construct 794 -- in the source. It is normally on for any nodes built by the scanner or 795 -- parser from the source program, with the exception that in a few cases 796 -- the parser adds nodes to normalize the representation (in particular 797 -- a null statement is added to a package body if there is no begin/end 798 -- initialization section. 799 -- 800 -- Most nodes inserted by the analyzer or expander are not considered 801 -- as coming from source, so the flag is off for such nodes. In a few 802 -- cases, the expander constructs nodes closely equivalent to nodes 803 -- from the source program (e.g. the allocator built for build-in-place 804 -- case), and the Comes_From_Source flag is deliberately set. 805 806 -- Error_Posted 807 -- This flag is used to avoid multiple error messages being posted on or 808 -- referring to the same node. This flag is set if an error message 809 -- refers to a node or is posted on its source location, and has the 810 -- effect of inhibiting further messages involving this same node. 811 812 ----------------------- 813 -- Modify_Tree_For_C -- 814 ----------------------- 815 816 -- If the flag Opt.Modify_Tree_For_C is set True, then the tree is modified 817 -- in ways that help match the semantics better with C, easing the task of 818 -- interfacing to C code generators (other than GCC, where the work is done 819 -- in gigi, and there is no point in changing that), and also making life 820 -- easier for Cprint in generating C source code. 821 822 -- The current modifications implemented are as follows: 823 824 -- N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic nodes 825 -- are eliminated from the tree (since these operations do not exist in 826 -- C), and the operations are rewritten in terms of logical shifts and 827 -- other logical operations that do exist in C. See Exp_Ch4 expansion 828 -- routines for these operators for details of the transformations made. 829 830 -- The right operand of N_Op_Shift_Right and N_Op_Shift_Left is always 831 -- less than the word size (since other values are not well-defined in 832 -- C). This is done using an explicit test if necessary. 833 834 -- Min and Max attributes are expanded into equivalent if expressions, 835 -- dealing properly with side effect issues. 836 837 -- Mod for signed integer types is expanded into equivalent expressions 838 -- using Rem (which is % in C) and other C-available operators. 839 840 -- Functions returning bounded arrays are transformed into procedures 841 -- with an extra out parameter, and the calls updated accordingly. 842 843 -- Aggregates are only kept unexpanded for object declarations, otherwise 844 -- they are systematically expanded into loops (for arrays) and 845 -- individual assignments (for records). 846 847 -- Unconstrained array types are handled by means of fat pointers. 848 849 -- Postconditions are inlined by the frontend since their body may have 850 -- references to itypes defined in the enclosing subprogram. 851 852 ------------------------------------ 853 -- Description of Semantic Fields -- 854 ------------------------------------ 855 856 -- The meaning of the syntactic fields is generally clear from their names 857 -- without any further description, since the names are chosen to 858 -- correspond very closely to the syntax in the reference manual. This 859 -- section describes the usage of the semantic fields, which are used to 860 -- contain additional information determined during semantic analysis. 861 862 -- Accept_Handler_Records (List5-Sem) 863 -- This field is present only in an N_Accept_Alternative node. It is used 864 -- to temporarily hold the exception handler records from an accept 865 -- statement in a selective accept. These exception handlers will 866 -- eventually be placed in the Handler_Records list of the procedure 867 -- built for this accept (see Expand_N_Selective_Accept procedure in 868 -- Exp_Ch9 for further details). 869 870 -- Access_Types_To_Process (Elist2-Sem) 871 -- Present in N_Freeze_Entity nodes for Incomplete or private types. 872 -- Contains the list of access types which may require specific treatment 873 -- when the nature of the type completion is completely known. An example 874 -- of such treatment is the generation of the associated_final_chain. 875 876 -- Actions (List1-Sem) 877 -- This field contains a sequence of actions that are associated with the 878 -- node holding the field. See the individual node types for details of 879 -- how this field is used, as well as the description of the specific use 880 -- for a particular node type. 881 882 -- Activation_Chain_Entity (Node3-Sem) 883 -- This is used in tree nodes representing task activators (blocks, 884 -- subprogram bodies, package declarations, and task bodies). It is 885 -- initially Empty, and then gets set to point to the entity for the 886 -- declared Activation_Chain variable when the first task is declared. 887 -- When tasks are declared in the corresponding declarative region this 888 -- entity is located by name (its name is always _Chain) and the declared 889 -- tasks are added to the chain. Note that N_Extended_Return_Statement 890 -- does not have this attribute, although it does have an activation 891 -- chain. This chain is used to store the tasks temporarily, and is not 892 -- used for activating them. On successful completion of the return 893 -- statement, the tasks are moved to the caller's chain, and the caller 894 -- activates them. 895 896 -- Acts_As_Spec (Flag4-Sem) 897 -- A flag set in the N_Subprogram_Body node for a subprogram body which 898 -- is acting as its own spec. In the case of a library-level subprogram 899 -- the flag is set as well on the parent compilation unit node. 900 901 -- Actual_Designated_Subtype (Node4-Sem) 902 -- Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi 903 -- needs to known the dynamic constrained subtype of the designated 904 -- object, this attribute is set to that type. This is done for 905 -- N_Free_Statements for access-to-classwide types and access to 906 -- unconstrained packed array types, and for N_Explicit_Dereference when 907 -- the designated type is an unconstrained packed array and the 908 -- dereference is the prefix of a 'Size attribute reference. 909 910 -- Address_Warning_Posted (Flag18-Sem) 911 -- Present in N_Attribute_Definition nodes. Set to indicate that we have 912 -- posted a warning for the address clause regarding size or alignment 913 -- issues. Used to inhibit multiple redundant messages. 914 915 -- Aggregate_Bounds (Node3-Sem) 916 -- Present in array N_Aggregate nodes. If the bounds of the aggregate are 917 -- known at compile time, this field points to an N_Range node with those 918 -- bounds. Otherwise Empty. 919 920 -- Alloc_For_BIP_Return (Flag1-Sem) 921 -- Present in N_Allocator nodes. True if the allocator is one of those 922 -- generated for a build-in-place return statement. 923 924 -- All_Others (Flag11-Sem) 925 -- Present in an N_Others_Choice node. This flag is set for an others 926 -- exception where all exceptions are to be caught, even those that are 927 -- not normally handled (in particular the tasking abort signal). This 928 -- is used for translation of the at end handler into a normal exception 929 -- handler. 930 931 -- Aspect_Rep_Item (Node2-Sem) 932 -- Present in N_Aspect_Specification nodes. Points to the corresponding 933 -- pragma/attribute definition node used to process the aspect. 934 935 -- Assignment_OK (Flag15-Sem) 936 -- This flag is set in a subexpression node for an object, indicating 937 -- that the associated object can be modified, even if this would not 938 -- normally be permissible (either by direct assignment, or by being 939 -- passed as an out or in-out parameter). This is used by the expander 940 -- for a number of purposes, including initialization of constants and 941 -- limited type objects (such as tasks), setting discriminant fields, 942 -- setting tag values, etc. N_Object_Declaration nodes also have this 943 -- flag defined. Here it is used to indicate that an initialization 944 -- expression is valid, even where it would normally not be allowed 945 -- (e.g. where the type involved is limited). It is also used to stop 946 -- a Force_Evaluation call for an unchecked conversion, but this usage 947 -- is unclear and not documented ??? 948 949 -- Associated_Node (Node4-Sem) 950 -- Present in nodes that can denote an entity: identifiers, character 951 -- literals, operator symbols, expanded names, operator nodes, and 952 -- attribute reference nodes (all these nodes have an Entity field). 953 -- This field is also present in N_Aggregate, N_Selected_Component, and 954 -- N_Extension_Aggregate nodes. This field is used in generic processing 955 -- to create links between the generic template and the generic copy. 956 -- See Sem_Ch12.Get_Associated_Node for full details. Note that this 957 -- field overlaps Entity, which is fine, since, as explained in Sem_Ch12, 958 -- the normal function of Entity is not required at the point where the 959 -- Associated_Node is set. Note also, that in generic templates, this 960 -- means that the Entity field does not necessarily point to an Entity. 961 -- Since the back end is expected to ignore generic templates, this is 962 -- harmless. 963 964 -- Atomic_Sync_Required (Flag14-Sem) 965 -- This flag is set on a node for which atomic synchronization is 966 -- required for the corresponding reference or modification. 967 968 -- At_End_Proc (Node1) 969 -- This field is present in an N_Handled_Sequence_Of_Statements node. 970 -- It contains an identifier reference for the cleanup procedure to be 971 -- called. See description of this node for further details. 972 973 -- Backwards_OK (Flag6-Sem) 974 -- A flag present in the N_Assignment_Statement node. It is used only 975 -- if the type being assigned is an array type, and is set if analysis 976 -- determines that it is definitely safe to do the copy backwards, i.e. 977 -- starting at the highest addressed element. This is the case if either 978 -- the operands do not overlap, or they may overlap, but if they do, 979 -- then the left operand is at a higher address than the right operand. 980 -- 981 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 982 -- means that the front end could not determine that either direction is 983 -- definitely safe, and a runtime check may be required if the backend 984 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 985 -- set, it means that the front end can assure no overlap of operands. 986 987 -- Body_To_Inline (Node3-Sem) 988 -- Present in subprogram declarations. Denotes analyzed but unexpanded 989 -- body of subprogram, to be used when inlining calls. Present when the 990 -- subprogram has an Inline pragma and inlining is enabled. If the 991 -- declaration is completed by a renaming_as_body, and the renamed entity 992 -- is a subprogram, the Body_To_Inline is the name of that entity, which 993 -- is used directly in later calls to the original subprogram. 994 995 -- Body_Required (Flag13-Sem) 996 -- A flag that appears in the N_Compilation_Unit node indicating that 997 -- the corresponding unit requires a body. For the package case, this 998 -- indicates that a completion is required. In Ada 95, if the flag is not 999 -- set for the package case, then a body may not be present. In Ada 83, 1000 -- if the flag is not set for the package case, then body is optional. 1001 -- For a subprogram declaration, the flag is set except in the case where 1002 -- a pragma Import or Interface applies, in which case no body is 1003 -- permitted (in Ada 83 or Ada 95). 1004 1005 -- By_Ref (Flag5-Sem) 1006 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement, 1007 -- this flag is set when the returned expression is already allocated on 1008 -- the secondary stack and thus the result is passed by reference rather 1009 -- than copied another time. 1010 1011 -- Cleanup_Actions (List5-Sem) 1012 -- Present in block statements created for transient blocks, contains 1013 -- additional cleanup actions carried over from the transient scope. 1014 1015 -- Check_Address_Alignment (Flag11-Sem) 1016 -- A flag present in N_Attribute_Definition clause for a 'Address 1017 -- attribute definition. This flag is set if a dynamic check should be 1018 -- generated at the freeze point for the entity to which this address 1019 -- clause applies. The reason that we need this flag is that we want to 1020 -- check for range checks being suppressed at the point where the 1021 -- attribute definition clause is given, rather than testing this at the 1022 -- freeze point. 1023 1024 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 1025 -- Present in N_Simple_Return_Statement nodes. True if this node was 1026 -- constructed as part of the N_Extended_Return_Statement expansion. 1027 1028 -- Compile_Time_Known_Aggregate (Flag18-Sem) 1029 -- Present in N_Aggregate nodes. Set for aggregates which can be fully 1030 -- evaluated at compile time without raising constraint error. Such 1031 -- aggregates can be passed as is to the back end without any expansion. 1032 -- See Exp_Aggr for specific conditions under which this flag gets set. 1033 1034 -- Componentwise_Assignment (Flag14-Sem) 1035 -- Present in N_Assignment_Statement nodes. Set for a record assignment 1036 -- where all that needs doing is to expand it into component-by-component 1037 -- assignments. This is used internally for the case of tagged types with 1038 -- rep clauses, where we need to avoid recursion (we don't want to try to 1039 -- generate a call to the primitive operation, because this is the case 1040 -- where we are compiling the primitive operation). Note that when we are 1041 -- expanding component assignments in this case, we never assign the _tag 1042 -- field, but we recursively assign components of the parent type. 1043 1044 -- Condition_Actions (List3-Sem) 1045 -- This field appears in else-if nodes and in the iteration scheme node 1046 -- for while loops. This field is only used during semantic processing to 1047 -- temporarily hold actions inserted into the tree. In the tree passed 1048 -- to gigi, the condition actions field is always set to No_List. For 1049 -- details on how this field is used, see the routine Insert_Actions in 1050 -- package Exp_Util, and also the expansion routines for the relevant 1051 -- nodes. 1052 1053 -- Context_Pending (Flag16-Sem) 1054 -- This field appears in Compilation_Unit nodes, to indicate that the 1055 -- context of the unit is being compiled. Used to detect circularities 1056 -- that are not otherwise detected by the loading mechanism. Such 1057 -- circularities can occur in the presence of limited and non-limited 1058 -- with_clauses that mention the same units. 1059 1060 -- Controlling_Argument (Node1-Sem) 1061 -- This field is set in procedure and function call nodes if the call 1062 -- is a dispatching call (it is Empty for a non-dispatching call). It 1063 -- indicates the source of the call's controlling tag. For procedure 1064 -- calls, the Controlling_Argument is one of the actuals. For function 1065 -- that has a dispatching result, it is an entity in the context of the 1066 -- call that can provide a tag, or else it is the tag of the root type 1067 -- of the class. It can also specify a tag directly rather than being a 1068 -- tagged object. The latter is needed by the implementations of AI-239 1069 -- and AI-260. 1070 1071 -- Conversion_OK (Flag14-Sem) 1072 -- A flag set on type conversion nodes to indicate that the conversion 1073 -- is to be considered as being valid, even though it is the case that 1074 -- the conversion is not valid Ada. This is used for attributes Enum_Rep, 1075 -- Fixed_Value and Integer_Value, for internal conversions done for 1076 -- fixed-point operations, and for certain conversions for calls to 1077 -- initialization procedures. If Conversion_OK is set, then Etype must be 1078 -- set (the analyzer assumes that Etype has been set). For the case of 1079 -- fixed-point operands, it also indicates that the conversion is to be 1080 -- direct conversion of the underlying integer result, with no regard to 1081 -- the small operand. 1082 1083 -- Convert_To_Return_False (Flag13-Sem) 1084 -- Present in N_Raise_Expression nodes that appear in the body of the 1085 -- special predicateM function used to test a predicate in the context 1086 -- of a membership test, where raise expression results in returning a 1087 -- value of False rather than raising an exception. 1088 1089 -- Corresponding_Aspect (Node3-Sem) 1090 -- Present in N_Pragma node. Used to point back to the source aspect from 1091 -- the corresponding pragma. This field is Empty for source pragmas. 1092 1093 -- Corresponding_Body (Node5-Sem) 1094 -- This field is set in subprogram declarations, package declarations, 1095 -- entry declarations of protected types, and in generic units. It points 1096 -- to the defining entity for the corresponding body (NOT the node for 1097 -- the body itself). 1098 1099 -- Corresponding_Formal_Spec (Node3-Sem) 1100 -- This field is set in subprogram renaming declarations, where it points 1101 -- to the defining entity for a formal subprogram in the case where the 1102 -- renaming corresponds to a generic formal subprogram association in an 1103 -- instantiation. The field is Empty if the renaming does not correspond 1104 -- to such a formal association. 1105 1106 -- Corresponding_Generic_Association (Node5-Sem) 1107 -- This field is defined for object declarations and object renaming 1108 -- declarations. It is set for the declarations within an instance that 1109 -- map generic formals to their actuals. If set, the field points either 1110 -- to a copy of a default expression for an actual of mode IN or to a 1111 -- generic_association which is the original parent of the expression or 1112 -- name appearing in the declaration. This simplifies ASIS and GNATprove 1113 -- queries. 1114 1115 -- Corresponding_Integer_Value (Uint4-Sem) 1116 -- This field is set in real literals of fixed-point types (it is not 1117 -- used for floating-point types). It contains the integer value used 1118 -- to represent the fixed-point value. It is also set on the universal 1119 -- real literals used to represent bounds of fixed-point base types 1120 -- and their first named subtypes. 1121 1122 -- Corresponding_Spec (Node5-Sem) 1123 -- This field is set in subprogram, package, task, and protected body 1124 -- nodes, where it points to the defining entity in the corresponding 1125 -- spec. The attribute is also set in N_With_Clause nodes where it points 1126 -- to the defining entity for the with'ed spec, and in a subprogram 1127 -- renaming declaration when it is a Renaming_As_Body. The field is Empty 1128 -- if there is no corresponding spec, as in the case of a subprogram body 1129 -- that serves as its own spec. 1130 -- 1131 -- In Ada 2012, Corresponding_Spec is set on expression functions that 1132 -- complete a subprogram declaration. 1133 1134 -- Corresponding_Spec_Of_Stub (Node2-Sem) 1135 -- This field is present in subprogram, package, task, and protected body 1136 -- stubs where it points to the corresponding spec of the stub. Due to 1137 -- clashes in the structure of nodes, we cannot use Corresponding_Spec. 1138 1139 -- Corresponding_Stub (Node3-Sem) 1140 -- This field is present in an N_Subunit node. It holds the node in 1141 -- the parent unit that is the stub declaration for the subunit. It is 1142 -- set when analysis of the stub forces loading of the proper body. If 1143 -- expansion of the proper body creates new declarative nodes, they are 1144 -- inserted at the point of the corresponding_stub. 1145 1146 -- Dcheck_Function (Node5-Sem) 1147 -- This field is present in an N_Variant node, It references the entity 1148 -- for the discriminant checking function for the variant. 1149 1150 -- Default_Expression (Node5-Sem) 1151 -- This field is Empty if there is no default expression. If there is a 1152 -- simple default expression (one with no side effects), then this field 1153 -- simply contains a copy of the Expression field (both point to the tree 1154 -- for the default expression). Default_Expression is used for 1155 -- conformance checking. 1156 1157 -- Default_Storage_Pool (Node3-Sem) 1158 -- This field is present in N_Compilation_Unit_Aux nodes. It is set to a 1159 -- copy of Opt.Default_Pool at the end of the compilation unit. See 1160 -- package Opt for details. This is used for inheriting the 1161 -- Default_Storage_Pool in child units. 1162 1163 -- Discr_Check_Funcs_Built (Flag11-Sem) 1164 -- This flag is present in N_Full_Type_Declaration nodes. It is set when 1165 -- discriminant checking functions are constructed. The purpose is to 1166 -- avoid attempting to set these functions more than once. 1167 1168 -- Do_Accessibility_Check (Flag13-Sem) 1169 -- This flag is set on N_Parameter_Specification nodes to indicate 1170 -- that an accessibility check is required for the parameter. It is 1171 -- not yet decided who takes care of this check (TBD ???). 1172 1173 -- Do_Discriminant_Check (Flag3-Sem) 1174 -- This flag is set on N_Selected_Component nodes to indicate that a 1175 -- discriminant check is required using the discriminant check routine 1176 -- associated with the selector. The actual check is generated by the 1177 -- expander when processing selected components. In the case of 1178 -- Unchecked_Union, the flag is also set, but no discriminant check 1179 -- routine is associated with the selector, and the expander does not 1180 -- generate a check. This flag is also present in assignment statements 1181 -- (and set if the assignment requires a discriminant check), and in type 1182 -- conversion nodes (and set if the conversion requires a check). 1183 1184 -- Do_Division_Check (Flag13-Sem) 1185 -- This flag is set on a division operator (/ mod rem) to indicate 1186 -- that a zero divide check is required. The actual check is dealt 1187 -- with by the backend (all the front end does is to set the flag). 1188 1189 -- Do_Length_Check (Flag4-Sem) 1190 -- This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or, 1191 -- N_Op_Xor, or N_Type_Conversion node to indicate that a length check 1192 -- is required. It is not determined who deals with this flag (???). 1193 1194 -- Do_Overflow_Check (Flag17-Sem) 1195 -- This flag is set on an operator where an overflow check is required on 1196 -- the operation. The actual check is dealt with by the backend (all the 1197 -- front end does is to set the flag). The other cases where this flag is 1198 -- used is on a Type_Conversion node and for attribute reference nodes. 1199 -- For a type conversion, it means that the conversion is from one base 1200 -- type to another, and the value may not fit in the target base type. 1201 -- See also the description of Do_Range_Check for this case. The only 1202 -- attribute references which use this flag are Pred and Succ, where it 1203 -- means that the result should be checked for going outside the base 1204 -- range. Note that this flag is not set for modular types. This flag is 1205 -- also set on if and case expression nodes if we are operating in either 1206 -- MINIMIZED or ELIMINATED overflow checking mode (to make sure that we 1207 -- properly process overflow checking for dependent expressions). 1208 1209 -- Do_Range_Check (Flag9-Sem) 1210 -- This flag is set on an expression which appears in a context where a 1211 -- range check is required. The target type is clear from the context. 1212 -- The contexts in which this flag can appear are the following: 1213 1214 -- Right side of an assignment. In this case the target type is 1215 -- taken from the left side of the assignment, which is referenced 1216 -- by the Name of the N_Assignment_Statement node. 1217 1218 -- Subscript expressions in an indexed component. In this case the 1219 -- target type is determined from the type of the array, which is 1220 -- referenced by the Prefix of the N_Indexed_Component node. 1221 1222 -- Argument expression for a parameter, appearing either directly in 1223 -- the Parameter_Associations list of a call or as the Expression of an 1224 -- N_Parameter_Association node that appears in this list. In either 1225 -- case, the check is against the type of the formal. Note that the 1226 -- flag is relevant only in IN and IN OUT parameters, and will be 1227 -- ignored for OUT parameters, where no check is required in the call, 1228 -- and if a check is required on the return, it is generated explicitly 1229 -- with a type conversion. 1230 1231 -- Initialization expression for the initial value in an object 1232 -- declaration. In this case the Do_Range_Check flag is set on 1233 -- the initialization expression, and the check is against the 1234 -- range of the type of the object being declared. This includes the 1235 -- cases of expressions providing default discriminant values, and 1236 -- expressions used to initialize record components. 1237 1238 -- The expression of a type conversion. In this case the range check is 1239 -- against the target type of the conversion. See also the use of 1240 -- Do_Overflow_Check on a type conversion. The distinction is that the 1241 -- overflow check protects against a value that is outside the range of 1242 -- the target base type, whereas a range check checks that the 1243 -- resulting value (which is a value of the base type of the target 1244 -- type), satisfies the range constraint of the target type. 1245 1246 -- Note: when a range check is required in contexts other than those 1247 -- listed above (e.g. in a return statement), an additional type 1248 -- conversion node is introduced to represent the required check. 1249 1250 -- A special case arises for the arguments of the Pred/Succ attributes. 1251 -- Here the range check needed is against First + 1 .. Last (Pred) or 1252 -- First .. Last - 1 (Succ) of the corresponding base type. Essentially 1253 -- these checks are what would be performed within the implicit body of 1254 -- the functions that correspond to these attributes. In these cases, 1255 -- the Do_Range check flag is set on the argument to the attribute 1256 -- function, and the back end must special case the appropriate range 1257 -- to check against. 1258 1259 -- Do_Storage_Check (Flag17-Sem) 1260 -- This flag is set in an N_Allocator node to indicate that a storage 1261 -- check is required for the allocation, or in an N_Subprogram_Body node 1262 -- to indicate that a stack check is required in the subprogram prologue. 1263 -- The N_Allocator case is handled by the routine that expands the call 1264 -- to the runtime routine. The N_Subprogram_Body case is handled by the 1265 -- backend, and all the semantics does is set the flag. 1266 1267 -- Do_Tag_Check (Flag13-Sem) 1268 -- This flag is set on an N_Assignment_Statement, N_Function_Call, 1269 -- N_Procedure_Call_Statement, N_Type_Conversion, 1270 -- N_Simple_Return_Statement, or N_Extended_Return_Statement 1271 -- node to indicate that the tag check can be suppressed. It is not 1272 -- yet decided how this flag is used (TBD ???). 1273 1274 -- Elaborate_Present (Flag4-Sem) 1275 -- This flag is set in the N_With_Clause node to indicate that pragma 1276 -- Elaborate pragma appears for the with'ed units. 1277 1278 -- Elaborate_All_Desirable (Flag9-Sem) 1279 -- This flag is set in the N_With_Clause mode to indicate that the static 1280 -- elaboration processing has determined that an Elaborate_All pragma is 1281 -- desirable for correct elaboration for this unit. 1282 1283 -- Elaborate_All_Present (Flag14-Sem) 1284 -- This flag is set in the N_With_Clause node to indicate that a 1285 -- pragma Elaborate_All pragma appears for the with'ed units. 1286 1287 -- Elaborate_Desirable (Flag11-Sem) 1288 -- This flag is set in the N_With_Clause mode to indicate that the static 1289 -- elaboration processing has determined that an Elaborate pragma is 1290 -- desirable for correct elaboration for this unit. 1291 1292 -- Else_Actions (List3-Sem) 1293 -- This field is present in if expression nodes. During code 1294 -- expansion we use the Insert_Actions procedure (in Exp_Util) to insert 1295 -- actions at an appropriate place in the tree to get elaborated at the 1296 -- right time. For if expressions, we have to be sure that the actions 1297 -- for the Else branch are only elaborated if the condition is False. 1298 -- The Else_Actions field is used as a temporary parking place for 1299 -- these actions. The final tree is always rewritten to eliminate the 1300 -- need for this field, so in the tree passed to Gigi, this field is 1301 -- always set to No_List. 1302 1303 -- Enclosing_Variant (Node2-Sem) 1304 -- This field is present in the N_Variant node and identifies the Node_Id 1305 -- corresponding to the immediately enclosing variant when the variant is 1306 -- nested, and N_Empty otherwise. Set during semantic processing of the 1307 -- variant part of a record type. 1308 1309 -- Entity (Node4-Sem) 1310 -- Appears in all direct names (identifiers, character literals, and 1311 -- operator symbols), as well as expanded names, and attributes that 1312 -- denote entities, such as 'Class. Points to entity for corresponding 1313 -- defining occurrence. Set after name resolution. For identifiers in a 1314 -- WITH list, the corresponding defining occurrence is in a separately 1315 -- compiled file, and Entity must be set by the library Load procedure. 1316 -- 1317 -- Note: During name resolution, the value in Entity may be temporarily 1318 -- incorrect (e.g. during overload resolution, Entity is initially set to 1319 -- the first possible correct interpretation, and then later modified if 1320 -- necessary to contain the correct value after resolution). 1321 -- 1322 -- Note: This field overlaps Associated_Node, which is used during 1323 -- generic processing (see Sem_Ch12 for details). Note also that in 1324 -- generic templates, this means that the Entity field does not always 1325 -- point to an Entity. Since the back end is expected to ignore generic 1326 -- templates, this is harmless. 1327 -- 1328 -- Note: This field also appears in N_Attribute_Definition_Clause nodes. 1329 -- It is used only for stream attributes definition clauses. In this 1330 -- case, it denotes a (possibly dummy) subprogram entity that is declared 1331 -- conceptually at the point of the clause. Thus the visibility of the 1332 -- attribute definition clause (in the sense of 8.3(23) as amended by 1333 -- AI-195) can be checked by testing the visibility of that subprogram. 1334 -- 1335 -- Note: Normally the Entity field of an identifier points to the entity 1336 -- for the corresponding defining identifier, and hence the Chars field 1337 -- of an identifier will match the Chars field of the entity. However, 1338 -- there is no requirement that these match, and there are obscure cases 1339 -- of generated code where they do not match. 1340 1341 -- Note: Ada 2012 aspect specifications require additional links between 1342 -- identifiers and various attributes. These attributes can be of 1343 -- arbitrary types, and the entity field of identifiers that denote 1344 -- aspects must be used to store arbitrary expressions for later semantic 1345 -- checks. See section on aspect specifications for details. 1346 1347 -- Entity_Or_Associated_Node (Node4-Sem) 1348 -- A synonym for both Entity and Associated_Node. Used by convention in 1349 -- the code when referencing this field in cases where it is not known 1350 -- whether the field contains an Entity or an Associated_Node. 1351 1352 -- Etype (Node5-Sem) 1353 -- Appears in all expression nodes, all direct names, and all entities. 1354 -- Points to the entity for the related type. Set after type resolution. 1355 -- Normally this is the actual subtype of the expression. However, in 1356 -- certain contexts such as the right side of an assignment, subscripts, 1357 -- arguments to calls, returned value in a function, initial value etc. 1358 -- it is the desired target type. In the event that this is different 1359 -- from the actual type, the Do_Range_Check flag will be set if a range 1360 -- check is required. Note: if the Is_Overloaded flag is set, then Etype 1361 -- points to an essentially arbitrary choice from the possible set of 1362 -- types. 1363 1364 -- Exception_Junk (Flag8-Sem) 1365 -- This flag is set in a various nodes appearing in a statement sequence 1366 -- to indicate that the corresponding node is an artifact of the 1367 -- generated code for exception handling, and should be ignored when 1368 -- analyzing the control flow of the relevant sequence of statements 1369 -- (e.g. to check that it does not end with a bad return statement). 1370 1371 -- Exception_Label (Node5-Sem) 1372 -- Appears in N_Push_xxx_Label nodes. Points to the entity of the label 1373 -- to be used for transforming the corresponding exception into a goto, 1374 -- or contains Empty, if this exception is not to be transformed. Also 1375 -- appears in N_Exception_Handler nodes, where, if set, it indicates 1376 -- that there may be a local raise for the handler, so that expansion 1377 -- to allow a goto is required (and this field contains the label for 1378 -- this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details. 1379 1380 -- Expansion_Delayed (Flag11-Sem) 1381 -- Set on aggregates and extension aggregates that need a top-down rather 1382 -- than bottom-up expansion. Typically aggregate expansion happens bottom 1383 -- up. For nested aggregates the expansion is delayed until the enclosing 1384 -- aggregate itself is expanded, e.g. in the context of a declaration. To 1385 -- delay it we set this flag. This is done to avoid creating a temporary 1386 -- for each level of a nested aggregate, and also to prevent the 1387 -- premature generation of constraint checks. This is also a requirement 1388 -- if we want to generate the proper attachment to the internal???? 1389 -- finalization lists (for record with controlled components). Top down 1390 -- expansion of aggregates is also used for in-place array aggregate 1391 -- assignment or initialization. When the full context is known, the 1392 -- target of the assignment or initialization is used to generate the 1393 -- left-hand side of individual assignment to each sub-component. 1394 1395 -- Expression_Copy (Node2-Sem) 1396 -- Present in N_Pragma_Argument_Association nodes. Contains a copy of the 1397 -- original expression. This field is best used to store pragma-dependent 1398 -- modifications performed on the original expression such as replacement 1399 -- of the current type instance or substitutions of primitives. 1400 1401 -- First_Inlined_Subprogram (Node3-Sem) 1402 -- Present in the N_Compilation_Unit node for the main program. Points 1403 -- to a chain of entities for subprograms that are to be inlined. The 1404 -- Next_Inlined_Subprogram field of these entities is used as a link 1405 -- pointer with Empty marking the end of the list. This field is Empty 1406 -- if there are no inlined subprograms or inlining is not active. 1407 1408 -- First_Named_Actual (Node4-Sem) 1409 -- Present in procedure call statement and function call nodes, and also 1410 -- in Intrinsic nodes. Set during semantic analysis to point to the first 1411 -- named parameter where parameters are ordered by declaration order (as 1412 -- opposed to the actual order in the call which may be different due to 1413 -- named associations). Note: this field points to the explicit actual 1414 -- parameter itself, not the N_Parameter_Association node (its parent). 1415 1416 -- First_Real_Statement (Node2-Sem) 1417 -- Present in N_Handled_Sequence_Of_Statements node. Normally set to 1418 -- Empty. Used only when declarations are moved into the statement part 1419 -- of a construct as a result of wrapping an AT END handler that is 1420 -- required to cover the declarations. In this case, this field is used 1421 -- to remember the location in the statements list of the first real 1422 -- statement, i.e. the statement that used to be first in the statement 1423 -- list before the declarations were prepended. 1424 1425 -- First_Subtype_Link (Node5-Sem) 1426 -- Present in N_Freeze_Entity node for an anonymous base type that is 1427 -- implicitly created by the declaration of a first subtype. It points 1428 -- to the entity for the first subtype. 1429 1430 -- Float_Truncate (Flag11-Sem) 1431 -- A flag present in type conversion nodes. This is used for float to 1432 -- integer conversions where truncation is required rather than rounding. 1433 1434 -- Forwards_OK (Flag5-Sem) 1435 -- A flag present in the N_Assignment_Statement node. It is used only 1436 -- if the type being assigned is an array type, and is set if analysis 1437 -- determines that it is definitely safe to do the copy forwards, i.e. 1438 -- starting at the lowest addressed element. This is the case if either 1439 -- the operands do not overlap, or they may overlap, but if they do, 1440 -- then the left operand is at a lower address than the right operand. 1441 -- 1442 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 1443 -- means that the front end could not determine that either direction is 1444 -- definitely safe, and a runtime check may be required if the backend 1445 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 1446 -- set, it means that the front end can assure no overlap of operands. 1447 1448 -- From_Aspect_Specification (Flag13-Sem) 1449 -- Processing of aspect specifications typically results in insertion in 1450 -- the tree of corresponding pragma or attribute definition clause nodes. 1451 -- These generated nodes have the From_Aspect_Specification flag set to 1452 -- indicate that they came from aspect specifications originally. 1453 1454 -- From_At_End (Flag4-Sem) 1455 -- This flag is set on an N_Raise_Statement node if it corresponds to 1456 -- the reraise statement generated as the last statement of an AT END 1457 -- handler when SJLJ exception handling is active. It is used to stop 1458 -- a bogus violation of restriction (No_Exception_Propagation), bogus 1459 -- because if the restriction is set, the reraise is not generated. 1460 1461 -- From_At_Mod (Flag4-Sem) 1462 -- This flag is set on the attribute definition clause node that is 1463 -- generated by a transformation of an at mod phrase in a record 1464 -- representation clause. This is used to give slightly different (Ada 83 1465 -- compatible) semantics to such a clause, namely it is used to specify a 1466 -- minimum acceptable alignment for the base type and all subtypes. In 1467 -- Ada 95 terms, the actual alignment of the base type and all subtypes 1468 -- must be a multiple of the given value, and the representation clause 1469 -- is considered to be type specific instead of subtype specific. 1470 1471 -- From_Conditional_Expression (Flag1-Sem) 1472 -- This flag is set on if and case statements generated by the expansion 1473 -- of if and case expressions respectively. The flag is used to suppress 1474 -- any finalization of controlled objects found within these statements. 1475 1476 -- From_Default (Flag6-Sem) 1477 -- This flag is set on the subprogram renaming declaration created in an 1478 -- instance for a formal subprogram, when the formal is declared with a 1479 -- box, and there is no explicit actual. If the flag is present, the 1480 -- declaration is treated as an implicit reference to the formal in the 1481 -- ali file. 1482 1483 -- Generalized_Indexing (Node4-Sem) 1484 -- Present in N_Indexed_Component nodes. Set for Indexed_Component nodes 1485 -- that are Ada 2012 container indexing operations. The value of the 1486 -- attribute is a function call (possibly dereferenced) that corresponds 1487 -- to the proper expansion of the source indexing operation. Before 1488 -- expansion, the source node is rewritten as the resolved generalized 1489 -- indexing. In ASIS mode, the expansion does not take place, so that 1490 -- the source is preserved and properly annotated with types. 1491 1492 -- Generic_Parent (Node5-Sem) 1493 -- Generic_Parent is defined on declaration nodes that are instances. The 1494 -- value of Generic_Parent is the generic entity from which the instance 1495 -- is obtained. 1496 1497 -- Generic_Parent_Type (Node4-Sem) 1498 -- Generic_Parent_Type is defined on Subtype_Declaration nodes for the 1499 -- actuals of formal private and derived types. Within the instance, the 1500 -- operations on the actual are those inherited from the parent. For a 1501 -- formal private type, the parent type is the generic type itself. The 1502 -- Generic_Parent_Type is also used in an instance to determine whether a 1503 -- private operation overrides an inherited one. 1504 1505 -- Handler_List_Entry (Node2-Sem) 1506 -- This field is present in N_Object_Declaration nodes. It is set only 1507 -- for the Handler_Record entry generated for an exception in zero cost 1508 -- exception handling mode. It references the corresponding item in the 1509 -- handler list, and is used to delete this entry if the corresponding 1510 -- handler is deleted during optimization. For further details on why 1511 -- this is required, see Exp_Ch11.Remove_Handler_Entries. 1512 1513 -- Has_Dereference_Action (Flag13-Sem) 1514 -- This flag is present in N_Explicit_Dereference nodes. It is set to 1515 -- indicate that the expansion has aready produced a call to primitive 1516 -- Dereference of a System.Checked_Pools.Checked_Pool implementation. 1517 -- Such dereference actions are produced for debugging purposes. 1518 1519 -- Has_Dynamic_Length_Check (Flag10-Sem) 1520 -- This flag is present in all expression nodes. It is set to indicate 1521 -- that one of the routines in unit Checks has generated a length check 1522 -- action which has been inserted at the flagged node. This is used to 1523 -- avoid the generation of duplicate checks. 1524 1525 -- Has_Dynamic_Range_Check (Flag12-Sem) 1526 -- This flag is present in N_Subtype_Declaration nodes and on all 1527 -- expression nodes. It is set to indicate that one of the routines in 1528 -- unit Checks has generated a range check action which has been inserted 1529 -- at the flagged node. This is used to avoid the generation of duplicate 1530 -- checks. Why does this occur on N_Subtype_Declaration nodes, what does 1531 -- it mean in that context??? 1532 1533 -- Has_Local_Raise (Flag8-Sem) 1534 -- Present in exception handler nodes. Set if the handler can be entered 1535 -- via a local raise that gets transformed to a goto statement. This will 1536 -- always be set if Local_Raise_Statements is non-empty, but can also be 1537 -- set as a result of generation of N_Raise_xxx nodes, or flags set in 1538 -- nodes requiring generation of back end checks. 1539 1540 -- Has_No_Elaboration_Code (Flag17-Sem) 1541 -- A flag that appears in the N_Compilation_Unit node to indicate whether 1542 -- or not elaboration code is present for this unit. It is initially set 1543 -- true for subprogram specs and bodies and for all generic units and 1544 -- false for non-generic package specs and bodies. Gigi may set the flag 1545 -- in the non-generic package case if it determines that no elaboration 1546 -- code is generated. Note that this flag is not related to the 1547 -- Is_Preelaborated status, there can be preelaborated packages that 1548 -- generate elaboration code, and non-preelaborated packages which do 1549 -- not generate elaboration code. 1550 1551 -- Has_Pragma_Suppress_All (Flag14-Sem) 1552 -- This flag is set in an N_Compilation_Unit node if the Suppress_All 1553 -- pragma appears anywhere in the unit. This accommodates the rather 1554 -- strange placement rules of other compilers (DEC permits it at the 1555 -- end of a unit, and Rational allows it as a program unit pragma). We 1556 -- allow it anywhere at all, and consider it equivalent to a pragma 1557 -- Suppress (All_Checks) appearing at the start of the configuration 1558 -- pragmas for the unit. 1559 1560 -- Has_Private_View (Flag11-Sem) 1561 -- A flag present in generic nodes that have an entity, to indicate that 1562 -- the node has a private type. Used to exchange private and full 1563 -- declarations if the visibility at instantiation is different from the 1564 -- visibility at generic definition. 1565 1566 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 1567 -- A flag present in N_Subprogram_Body and N_Task_Definition nodes to 1568 -- flag the presence of a pragma Relative_Deadline. 1569 1570 -- Has_Self_Reference (Flag13-Sem) 1571 -- Present in N_Aggregate and N_Extension_Aggregate. Indicates that one 1572 -- of the expressions contains an access attribute reference to the 1573 -- enclosing type. Such a self-reference can only appear in default- 1574 -- initialized aggregate for a record type. 1575 1576 -- Has_SP_Choice (Flag15-Sem) 1577 -- Present in all nodes containing a Discrete_Choices field (N_Variant, 1578 -- N_Case_Expression_Alternative, N_Case_Statement_Alternative). Set to 1579 -- True if the Discrete_Choices list has at least one occurrence of a 1580 -- statically predicated subtype. 1581 1582 -- Has_Storage_Size_Pragma (Flag5-Sem) 1583 -- A flag present in an N_Task_Definition node to flag the presence of a 1584 -- Storage_Size pragma. 1585 1586 -- Has_Target_Names (Flag8-Sem) 1587 -- Present in assignment statements. Indicates that the RHS contains 1588 -- target names (see AI12-0125-3) and must be expanded accordingly. 1589 1590 -- Has_Wide_Character (Flag11-Sem) 1591 -- Present in string literals, set if any wide character (i.e. character 1592 -- code outside the Character range but within Wide_Character range) 1593 -- appears in the string. Used to implement pragma preference rules. 1594 1595 -- Has_Wide_Wide_Character (Flag13-Sem) 1596 -- Present in string literals, set if any wide character (i.e. character 1597 -- code outside the Wide_Character range) appears in the string. Used to 1598 -- implement pragma preference rules. 1599 1600 -- Header_Size_Added (Flag11-Sem) 1601 -- Present in N_Attribute_Reference nodes, set only for attribute 1602 -- Max_Size_In_Storage_Elements. The flag indicates that the size of the 1603 -- hidden list header used by the runtime finalization support has been 1604 -- added to the size of the prefix. The flag also prevents the infinite 1605 -- expansion of the same attribute in the said context. 1606 1607 -- Hidden_By_Use_Clause (Elist5-Sem) 1608 -- An entity list present in use clauses that appear within 1609 -- instantiations. For the resolution of local entities, entities 1610 -- introduced by these use clauses have priority over global ones, 1611 -- and outer entities must be explicitly hidden/restored on exit. 1612 1613 -- Implicit_With (Flag16-Sem) 1614 -- Present in N_With_Clause nodes. The flag indicates that the clause 1615 -- does not comes from source and introduces an implicit dependency on 1616 -- a particular unit. Such implicit with clauses are generated by: 1617 -- 1618 -- * ABE mechanism - The static elaboration model of both the default 1619 -- and the legacy ABE mechanism use with clauses to encode implicit 1620 -- Elaborate[_All] pragmas. 1621 -- 1622 -- * Analysis - A with clause for child unit A.B.C is equivalent to 1623 -- a series of clauses that with A, A.B, and A.B.C. Manipulation of 1624 -- contexts utilizes implicit with clauses to emulate the visibility 1625 -- of a particular unit. 1626 -- 1627 -- * RTSfind - The compiler generates code which references entities 1628 -- from the runtime. 1629 1630 -- Import_Interface_Present (Flag16-Sem) 1631 -- This flag is set in an Interface or Import pragma if a matching 1632 -- pragma of the other kind is also present. This is used to avoid 1633 -- generating some unwanted error messages. 1634 1635 -- Includes_Infinities (Flag11-Sem) 1636 -- This flag is present in N_Range nodes. It is set for the range of 1637 -- unconstrained float types defined in Standard, which include not only 1638 -- the given range of values, but also legitimately can include infinite 1639 -- values. This flag is false for any float type for which an explicit 1640 -- range is given by the programmer, even if that range is identical to 1641 -- the range for Float. 1642 1643 -- Incomplete_View (Node2-Sem) 1644 -- Present in full type declarations that are completions of incomplete 1645 -- type declarations. Denotes the corresponding incomplete type 1646 -- declaration. Used to simplify the retrieval of primitive operations 1647 -- that may be declared between the partial and the full view of an 1648 -- untagged type. 1649 1650 -- Inherited_Discriminant (Flag13-Sem) 1651 -- This flag is present in N_Component_Association nodes. It indicates 1652 -- that a given component association in an extension aggregate is the 1653 -- value obtained from a constraint on an ancestor. Used to prevent 1654 -- double expansion when the aggregate has expansion delayed. 1655 1656 -- Instance_Spec (Node5-Sem) 1657 -- This field is present in generic instantiation nodes, and also in 1658 -- formal package declaration nodes (formal package declarations are 1659 -- treated in a manner very similar to package instantiations). It points 1660 -- to the node for the spec of the instance, inserted as part of the 1661 -- semantic processing for instantiations in Sem_Ch12. 1662 1663 -- Is_Abort_Block (Flag4-Sem) 1664 -- Present in N_Block_Statement nodes. True if the block protects a list 1665 -- of statements with an Abort_Defer / Abort_Undefer_Direct pair. 1666 1667 -- Is_Accessibility_Actual (Flag13-Sem) 1668 -- Present in N_Parameter_Association nodes. True if the parameter is 1669 -- an extra actual that carries the accessibility level of the actual 1670 -- for an access parameter, in a function that dispatches on result and 1671 -- is called in a dispatching context. Used to prevent a formal/actual 1672 -- mismatch when the call is rewritten as a dispatching call. 1673 1674 -- Is_Analyzed_Pragma (Flag5-Sem) 1675 -- Present in N_Pragma nodes. Set for delayed pragmas that require a two 1676 -- step analysis. The initial step is peformed by routine Analyze_Pragma 1677 -- and verifies the overall legality of the pragma. The second step takes 1678 -- place in the various Analyze_xxx_In_Decl_Part routines which perform 1679 -- full analysis. The flag prevents the reanalysis of a delayed pragma. 1680 1681 -- Is_Asynchronous_Call_Block (Flag7-Sem) 1682 -- A flag set in a Block_Statement node to indicate that it is the 1683 -- expansion of an asynchronous entry call. Such a block needs cleanup 1684 -- handler to assure that the call is cancelled. 1685 1686 -- Is_Boolean_Aspect (Flag16-Sem) 1687 -- Present in N_Aspect_Specification node. Set if the aspect is for a 1688 -- boolean aspect (i.e. Aspect_Id is in Boolean_Aspect subtype). 1689 1690 -- Is_Checked (Flag11-Sem) 1691 -- Present in N_Aspect_Specification and N_Pragma nodes. Set for an 1692 -- assertion aspect or pragma, or check pragma for an assertion, that 1693 -- is to be checked at run time. If either Is_Checked or Is_Ignored 1694 -- is set (they cannot both be set), then this means that the status of 1695 -- the pragma has been checked at the appropriate point and should not 1696 -- be further modified (in some cases these flags are copied when a 1697 -- pragma is rewritten). 1698 1699 -- Is_Checked_Ghost_Pragma (Flag3-Sem) 1700 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1701 -- related to a checked Ghost entity or encloses a checked Ghost entity. 1702 -- This flag has no relation to Is_Checked. 1703 1704 -- Is_Component_Left_Opnd (Flag13-Sem) 1705 -- Is_Component_Right_Opnd (Flag14-Sem) 1706 -- Present in concatenation nodes, to indicate that the corresponding 1707 -- operand is of the component type of the result. Used in resolving 1708 -- concatenation nodes in instances. 1709 1710 -- Is_Controlling_Actual (Flag16-Sem) 1711 -- This flag is set on an expression that is a controlling argument in 1712 -- a dispatching call. It is off in all other cases. See Sem_Disp for 1713 -- details of its use. 1714 1715 -- Is_Declaration_Level_Node (Flag5-Sem) 1716 -- Present in call marker and instantiation nodes. Set when the constuct 1717 -- appears within the declarations of a block statement, an entry body, 1718 -- a subprogram body, or a task body. The flag aids the ABE Processing 1719 -- phase to catch certain forms of guaranteed ABEs. 1720 1721 -- Is_Delayed_Aspect (Flag14-Sem) 1722 -- Present in N_Pragma and N_Attribute_Definition_Clause nodes which 1723 -- come from aspect specifications, where the evaluation of the aspect 1724 -- must be delayed to the freeze point. This flag is also set True in 1725 -- the corresponding N_Aspect_Specification node. 1726 1727 -- Is_Disabled (Flag15-Sem) 1728 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1729 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1730 -- a Debug_Policy pragma that resulted in totally disabling the flagged 1731 -- aspect or policy as a result of using the GNAT-defined policy DISABLE. 1732 -- If this flag is set, the aspect or policy is not analyzed for semantic 1733 -- correctness, so any expressions etc will not be marked as analyzed. 1734 1735 -- Is_Dispatching_Call (Flag6-Sem) 1736 -- Present in call marker nodes. Set when the related call which prompted 1737 -- the creation of the marker is dispatching. 1738 1739 -- Is_Dynamic_Coextension (Flag18-Sem) 1740 -- Present in allocator nodes, to indicate that this is an allocator 1741 -- for an access discriminant of a dynamically allocated object. The 1742 -- coextension must be deallocated and finalized at the same time as 1743 -- the enclosing object. The partner flag Is_Static_Coextension must 1744 -- be cleared before setting this flag to True. 1745 1746 -- Is_Effective_Use_Clause (Flag1-Sem) 1747 -- Present in both N_Use_Type_Clause and N_Use_Package_Clause to indicate 1748 -- a use clause is "used" in the current source. 1749 1750 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 1751 -- Present in the following nodes: 1752 -- 1753 -- assignment statement 1754 -- attribute reference 1755 -- call marker 1756 -- entry call statement 1757 -- expanded name 1758 -- function call 1759 -- function instantiation 1760 -- identifier 1761 -- package instantiation 1762 -- procedure call statement 1763 -- procedure instantiation 1764 -- requeue statement 1765 -- 1766 -- Set when the node appears within a context which allows the generation 1767 -- of run-time ABE checks. This flag detemines whether the ABE Processing 1768 -- phase generates conditional ABE checks and guaranteed ABE failures. 1769 1770 -- Is_Elaboration_Code (Flag9-Sem) 1771 -- Present in assignment statements. Set for an assignment which updates 1772 -- the elaboration flag of a package or subprogram when the corresponding 1773 -- body is successfully elaborated. 1774 1775 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 1776 -- Present in the following nodes: 1777 -- 1778 -- attribute reference 1779 -- call marker 1780 -- entry call statement 1781 -- function call 1782 -- function instantiation 1783 -- package instantiation 1784 -- procedure call statement 1785 -- procedure instantiation 1786 -- requeue statement 1787 -- 1788 -- Set when the node appears within a context where elaboration warnings 1789 -- are enabled. This flag determines whether the ABE processing phase 1790 -- generates diagnostics on various elaboration issues. 1791 1792 -- Is_Entry_Barrier_Function (Flag8-Sem) 1793 -- This flag is set on N_Subprogram_Declaration and N_Subprogram_Body 1794 -- nodes which emulate the barrier function of a protected entry body. 1795 -- The flag is used when checking for incorrect use of Current_Task. 1796 1797 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 1798 -- This flag is set in an N_Function_Call node to indicate that the extra 1799 -- actuals to support a build-in-place style of call have been added to 1800 -- the call. 1801 1802 -- Is_Expanded_Contract (Flag1-Sem) 1803 -- Present in N_Contract nodes. Set if the contract has already undergone 1804 -- expansion activities. 1805 1806 -- Is_Finalization_Wrapper (Flag9-Sem) 1807 -- This flag is present in N_Block_Statement nodes. It is set when the 1808 -- block acts as a wrapper of a handled construct which has controlled 1809 -- objects. The wrapper prevents interference between exception handlers 1810 -- and At_End handlers. 1811 1812 -- Is_Generic_Contract_Pragma (Flag2-Sem) 1813 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1814 -- a source construct, applies to a generic unit or its body, and denotes 1815 -- one of the following contract-related annotations: 1816 -- Abstract_State 1817 -- Contract_Cases 1818 -- Depends 1819 -- Extensions_Visible 1820 -- Global 1821 -- Initial_Condition 1822 -- Initializes 1823 -- Post 1824 -- Post_Class 1825 -- Postcondition 1826 -- Pre 1827 -- Pre_Class 1828 -- Precondition 1829 -- Refined_Depends 1830 -- Refined_Global 1831 -- Refined_Post 1832 -- Refined_State 1833 -- Test_Case 1834 1835 -- Is_Ignored (Flag9-Sem) 1836 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1837 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1838 -- a Debug_Policy pragma that specified a policy of IGNORE, DISABLE, or 1839 -- OFF, for the pragma/aspect. If there was a Policy pragma specifying 1840 -- a Policy of ON or CHECK, then this flag is reset. If no Policy pragma 1841 -- gives a policy for the aspect or pragma, then there are two cases. For 1842 -- an assertion aspect or pragma (one of the assertion kinds allowed in 1843 -- an Assertion_Policy pragma), then Is_Ignored is set if assertions are 1844 -- ignored because of the absence of a -gnata switch. For any other 1845 -- aspects or pragmas, the flag is off. If this flag is set, the 1846 -- aspect/pragma is fully analyzed and checked for other syntactic 1847 -- and semantic errors, but it does not have any semantic effect. 1848 1849 -- Is_Ignored_Ghost_Pragma (Flag8-Sem) 1850 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1851 -- related to an ignored Ghost entity or encloses ignored Ghost entity. 1852 -- This flag has no relation to Is_Ignored. 1853 1854 -- Is_In_Discriminant_Check (Flag11-Sem) 1855 -- This flag is present in a selected component, and is used to indicate 1856 -- that the reference occurs within a discriminant check. The 1857 -- significance is that optimizations based on assuming that the 1858 -- discriminant check has a correct value cannot be performed in this 1859 -- case (or the discriminant check may be optimized away). 1860 1861 -- Is_Inherited_Pragma (Flag4-Sem) 1862 -- This flag is set in an N_Pragma node that appears in a N_Contract node 1863 -- to indicate that the pragma has been inherited from a parent context. 1864 1865 -- Is_Initialization_Block (Flag1-Sem) 1866 -- Defined in block nodes. Set when the block statement was created by 1867 -- the finalization machinery to wrap initialization statements. This 1868 -- flag aids the ABE Processing phase to suppress the diagnostics of 1869 -- finalization actions in initialization contexts. 1870 1871 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 1872 -- NOTE: this flag is shared between the legacy ABE mechanism and the 1873 -- default ABE mechanism. 1874 -- 1875 -- Present in the following nodes: 1876 -- 1877 -- call marker 1878 -- formal package declaration 1879 -- function call 1880 -- function instantiation 1881 -- package instantiation 1882 -- procedure call statement 1883 -- procedure instantiation 1884 -- 1885 -- Set when the elaboration or evaluation of the scenario results in 1886 -- a guaranteed ABE. The flag is used to suppress the instantiation of 1887 -- generic bodies because gigi cannot handle certain forms of premature 1888 -- instantiation, as well as to prevent the reexamination of the node by 1889 -- the ABE Processing phase. 1890 1891 -- Is_Machine_Number (Flag11-Sem) 1892 -- This flag is set in an N_Real_Literal node to indicate that the value 1893 -- is a machine number. This avoids some unnecessary cases of converting 1894 -- real literals to machine numbers. 1895 1896 -- Is_Null_Loop (Flag16-Sem) 1897 -- This flag is set in an N_Loop_Statement node if the corresponding loop 1898 -- can be determined to be null at compile time. This is used to remove 1899 -- the loop entirely at expansion time. 1900 1901 -- Is_OpenAcc_Environment (Flag13-Sem) 1902 -- This flag is set in an N_Loop_Statement node if it contains an 1903 -- Acc_Data, Acc_Parallel or Add_Kernels pragma. 1904 1905 -- Is_OpenAcc_Loop (Flag14-Sem) 1906 -- This flag is set in an N_Loop_Statement node if it contains an 1907 -- OpenAcc_Loop pragma. 1908 1909 -- Is_Overloaded (Flag5-Sem) 1910 -- A flag present in all expression nodes. Used temporarily during 1911 -- overloading determination. The setting of this flag is not relevant 1912 -- once overloading analysis is complete. 1913 1914 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 1915 -- A flag present only in N_Op_Expon nodes. It is set when the 1916 -- exponentiation is of the form 2 ** N, where the type of N is an 1917 -- unsigned integral subtype whose size does not exceed the size of 1918 -- Standard_Integer (i.e. a type that can be safely converted to 1919 -- Natural), and the exponentiation appears as the right operand of an 1920 -- integer multiplication or an integer division where the dividend is 1921 -- unsigned. It is also required that overflow checking is off for both 1922 -- the exponentiation and the multiply/divide node. If this set of 1923 -- conditions holds, and the flag is set, then the division or 1924 -- multiplication can be (and is) converted to a shift. 1925 1926 -- Is_Prefixed_Call (Flag17-Sem) 1927 -- This flag is set in a selected component within a generic unit, if 1928 -- it resolves to a prefixed call to a primitive operation. The flag 1929 -- is used to prevent accidental overloadings in an instance, when a 1930 -- primitive operation and a private record component may be homographs. 1931 1932 -- Is_Protected_Subprogram_Body (Flag7-Sem) 1933 -- A flag set in a Subprogram_Body block to indicate that it is the 1934 -- implementation of a protected subprogram. Such a body needs cleanup 1935 -- handler to make sure that the associated protected object is unlocked 1936 -- when the subprogram completes. 1937 1938 -- Is_Qualified_Universal_Literal (Flag4-Sem) 1939 -- Present in N_Qualified_Expression nodes. Set when the qualification is 1940 -- converting a universal literal to a specific type. Such qualifiers aid 1941 -- the resolution of accidental overloading of binary or unary operators 1942 -- which may occur in instances. 1943 1944 -- Is_Read (Flag1-Sem) 1945 -- Present in variable reference markers. Set when the original variable 1946 -- reference constitues a read of the variable. 1947 1948 -- Is_Source_Call (Flag4-Sem) 1949 -- Present in call marker nodes. Set when the related call came from 1950 -- source. 1951 1952 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 1953 -- Present in nodes which represent an elaboration scenario. Those are 1954 -- assignment statement, attribute reference, call marker, entry call 1955 -- statement, expanded name, function call, identifier, instantiation, 1956 -- procedure call statement, and requeue statement nodes. Set when the 1957 -- node appears within a context subject to SPARK_Mode On. This flag 1958 -- determines when the SPARK model of elaboration be activated by the 1959 -- ABE Processing phase. 1960 1961 -- Is_Static_Coextension (Flag14-Sem) 1962 -- Present in N_Allocator nodes. Set if the allocator is a coextension 1963 -- of an object allocated on the stack rather than the heap. The partner 1964 -- flag Is_Dynamic_Coextension must be cleared before setting this flag 1965 -- to True. 1966 1967 -- Is_Static_Expression (Flag6-Sem) 1968 -- Indicates that an expression is a static expression according to the 1969 -- rules in RM-4.9. See Sem_Eval for details. 1970 1971 -- Is_Subprogram_Descriptor (Flag16-Sem) 1972 -- Present in N_Object_Declaration, and set only for the object 1973 -- declaration generated for a subprogram descriptor in fast exception 1974 -- mode. See Exp_Ch11 for details of use. 1975 1976 -- Is_Task_Allocation_Block (Flag6-Sem) 1977 -- A flag set in a Block_Statement node to indicate that it is the 1978 -- expansion of a task allocator, or the allocator of an object 1979 -- containing tasks. Such a block requires a cleanup handler to call 1980 -- Expunge_Unactivated_Tasks to complete any tasks that have been 1981 -- allocated but not activated when the allocator completes abnormally. 1982 1983 -- Is_Task_Body_Procedure (Flag1-Sem) 1984 -- This flag is set on N_Subprogram_Declaration and N_Subprogram_Body 1985 -- nodes which emulate the body of a task unit. 1986 1987 -- Is_Task_Master (Flag5-Sem) 1988 -- A flag set in a Subprogram_Body, Block_Statement, or Task_Body node to 1989 -- indicate that the construct is a task master (i.e. has declared tasks 1990 -- or declares an access to a task type). 1991 1992 -- Is_Write (Flag2-Sem) 1993 -- Present in variable reference markers. Set when the original variable 1994 -- reference constitues a write of the variable. 1995 1996 -- Itype (Node1-Sem) 1997 -- Used in N_Itype_Reference node to reference an itype for which it is 1998 -- important to ensure that it is defined. See description of this node 1999 -- for further details. 2000 2001 -- Kill_Range_Check (Flag11-Sem) 2002 -- Used in an N_Unchecked_Type_Conversion node to indicate that the 2003 -- result should not be subjected to range checks. This is used for the 2004 -- implementation of Normalize_Scalars. 2005 2006 -- Label_Construct (Node2-Sem) 2007 -- Used in an N_Implicit_Label_Declaration node. Refers to an N_Label, 2008 -- N_Block_Statement or N_Loop_Statement node to which the label 2009 -- declaration applies. This attribute is used both in the compiler and 2010 -- in the implementation of ASIS queries. The field is left empty for the 2011 -- special labels generated as part of expanding raise statements with a 2012 -- local exception handler. 2013 2014 -- Library_Unit (Node4-Sem) 2015 -- In a stub node, Library_Unit points to the compilation unit node of 2016 -- the corresponding subunit. 2017 -- 2018 -- In a with clause node, Library_Unit points to the spec of the with'ed 2019 -- unit. 2020 -- 2021 -- In a compilation unit node, the usage depends on the unit type: 2022 -- 2023 -- For a library unit body, Library_Unit points to the compilation unit 2024 -- node of the corresponding spec, unless it's a subprogram body with 2025 -- Acts_As_Spec set, in which case it points to itself. 2026 -- 2027 -- For a spec, Library_Unit points to the compilation unit node of the 2028 -- corresponding body, if present. The body will be present if the spec 2029 -- is or contains generics that we needed to instantiate. Similarly, the 2030 -- body will be present if we needed it for inlining purposes. Thus, if 2031 -- we have a spec/body pair, both of which are present, they point to 2032 -- each other via Library_Unit. 2033 -- 2034 -- For a subunit, Library_Unit points to the compilation unit node of 2035 -- the parent body. 2036 -- ??? not (always) true, in (at least some, maybe all?) cases it points 2037 -- to the corresponding spec for the parent body. 2038 -- 2039 -- Note that this field is not used to hold the parent pointer for child 2040 -- unit (which might in any case need to use it for some other purpose as 2041 -- described above). Instead for a child unit, implicit with's are 2042 -- generated for all parents. 2043 2044 -- Local_Raise_Statements (Elist1) 2045 -- This field is present in exception handler nodes. It is set to 2046 -- No_Elist in the normal case. If there is at least one raise statement 2047 -- which can potentially be handled as a local raise, then this field 2048 -- points to a list of raise nodes, which are calls to a routine to raise 2049 -- an exception. These are raise nodes which can be optimized into gotos 2050 -- if the handler turns out to meet the conditions which permit this 2051 -- transformation. Note that this does NOT include instances of the 2052 -- N_Raise_xxx_Error nodes since the transformation of these nodes is 2053 -- handled by the back end (using the N_Push/N_Pop mechanism). 2054 2055 -- Loop_Actions (List2-Sem) 2056 -- A list present in Component_Association nodes in array aggregates. 2057 -- Used to collect actions that must be executed within the loop because 2058 -- they may need to be evaluated anew each time through. 2059 2060 -- Limited_View_Installed (Flag18-Sem) 2061 -- Present in With_Clauses and in package specifications. If set on 2062 -- with_clause, it indicates that this clause has created the current 2063 -- limited view of the designated package. On a package specification, it 2064 -- indicates that the limited view has already been created because the 2065 -- package is mentioned in a limited_with_clause in the closure of the 2066 -- unit being compiled. 2067 2068 -- Local_Raise_Not_OK (Flag7-Sem) 2069 -- Present in N_Exception_Handler nodes. Set if the handler contains 2070 -- a construct (reraise statement, or call to subprogram in package 2071 -- GNAT.Current_Exception) that makes the handler unsuitable as a target 2072 -- for a local raise (one that could otherwise be converted to a goto). 2073 2074 -- Must_Be_Byte_Aligned (Flag14-Sem) 2075 -- This flag is present in N_Attribute_Reference nodes. It can be set 2076 -- only for the Address and Unrestricted_Access attributes. If set it 2077 -- means that the object for which the address/access is given must be on 2078 -- a byte (more accurately a storage unit) boundary. If necessary, a copy 2079 -- of the object is to be made before taking the address (this copy is in 2080 -- the current scope on the stack frame). This is used for certain cases 2081 -- of code generated by the expander that passes parameters by address. 2082 -- 2083 -- The reason the copy is not made by the front end is that the back end 2084 -- has more information about type layout and may be able to (but is not 2085 -- guaranteed to) prevent making unnecessary copies. 2086 2087 -- Must_Not_Freeze (Flag8-Sem) 2088 -- A flag present in all expression nodes. Normally expressions cause 2089 -- freezing as described in the RM. If this flag is set, then this is 2090 -- inhibited. This is used by the analyzer and expander to label nodes 2091 -- that are created by semantic analysis or expansion and which must not 2092 -- cause freezing even though they normally would. This flag is also 2093 -- present in an N_Subtype_Indication node, since we also use these in 2094 -- calls to Freeze_Expression. 2095 2096 -- Next_Entity (Node2-Sem) 2097 -- Present in defining identifiers, defining character literals, and 2098 -- defining operator symbols (i.e. in all entities). The entities of a 2099 -- scope are chained, and this field is used as the forward pointer for 2100 -- this list. See Einfo for further details. 2101 2102 -- Next_Exit_Statement (Node3-Sem) 2103 -- Present in N_Exit_Statement nodes. The exit statements for a loop are 2104 -- chained (in reverse order of appearance) from the First_Exit_Statement 2105 -- field of the E_Loop entity for the loop. Next_Exit_Statement points to 2106 -- the next entry on this chain (Empty = end of list). 2107 2108 -- Next_Implicit_With (Node3-Sem) 2109 -- Present in N_With_Clause. Part of a chain of with_clauses generated 2110 -- in rtsfind to indicate implicit dependencies on predefined units. Used 2111 -- to prevent multiple with_clauses for the same unit in a given context. 2112 -- A postorder traversal of the tree whose nodes are units and whose 2113 -- links are with_clauses defines the order in which CodePeer must 2114 -- examine a compiled unit and its full context. This ordering ensures 2115 -- that any subprogram call is examined after the subprogram declaration 2116 -- has been seen. 2117 2118 -- Next_Named_Actual (Node4-Sem) 2119 -- Present in parameter association nodes. Set during semantic analysis 2120 -- to point to the next named parameter, where parameters are ordered by 2121 -- declaration order (as opposed to the actual order in the call, which 2122 -- may be different due to named associations). Not that this field 2123 -- points to the explicit actual parameter itself, not to the 2124 -- N_Parameter_Association node (its parent). 2125 2126 -- Next_Pragma (Node1-Sem) 2127 -- Present in N_Pragma nodes. Used to create a linked list of pragma 2128 -- nodes. Currently used for two purposes: 2129 -- 2130 -- Create a list of linked Check_Policy pragmas. The head of this list 2131 -- is stored in Opt.Check_Policy_List (which has further details). 2132 -- 2133 -- Used by processing for Pre/Postcondition pragmas to store a list of 2134 -- pragmas associated with the spec of a subprogram (see Sem_Prag for 2135 -- details). 2136 -- 2137 -- Used by processing for pragma SPARK_Mode to store multiple pragmas 2138 -- the apply to the same construct. These are visible/private mode for 2139 -- a package spec and declarative/statement mode for package body. 2140 2141 -- Next_Rep_Item (Node5-Sem) 2142 -- Present in pragma nodes, attribute definition nodes, enumeration rep 2143 -- clauses, record rep clauses, aspect specification nodes. Used to link 2144 -- representation items that apply to an entity. See full description of 2145 -- First_Rep_Item field in Einfo for further details. 2146 2147 -- Next_Use_Clause (Node3-Sem) 2148 -- While use clauses are active during semantic processing, they are 2149 -- chained from the scope stack entry, using Next_Use_Clause as a link 2150 -- pointer, with Empty marking the end of the list. The head pointer is 2151 -- in the scope stack entry (First_Use_Clause). At the end of semantic 2152 -- processing (i.e. when Gigi sees the tree, the contents of this field 2153 -- is undefined and should not be read). 2154 2155 -- No_Ctrl_Actions (Flag7-Sem) 2156 -- Present in N_Assignment_Statement to indicate that no Finalize nor 2157 -- Adjust should take place on this assignment even though the RHS is 2158 -- controlled. Also indicates that the primitive _assign should not be 2159 -- used for a tagged assignment. This is used in init procs and aggregate 2160 -- expansions where the generated assignments are initializations, not 2161 -- real assignments. 2162 2163 -- No_Elaboration_Check (Flag4-Sem) 2164 -- NOTE: this flag is relevant only for the legacy ABE mechanism and 2165 -- should not be used outside of that context. 2166 -- 2167 -- Present in N_Function_Call and N_Procedure_Call_Statement. Indicates 2168 -- that no elaboration check is needed on the call, because it appears in 2169 -- the context of a local Suppress pragma. This is used on calls within 2170 -- task bodies, where the actual elaboration checks are applied after 2171 -- analysis, when the local scope stack is not present 2172 2173 -- No_Entities_Ref_In_Spec (Flag8-Sem) 2174 -- Present in N_With_Clause nodes. Set if the with clause is on the 2175 -- package or subprogram spec where the main unit is the corresponding 2176 -- body, and no entities of the with'ed unit are referenced by the spec 2177 -- (an entity may still be referenced in the body, so this flag is used 2178 -- to generate the proper message (see Sem_Util.Check_Unused_Withs for 2179 -- full details). 2180 2181 -- No_Initialization (Flag13-Sem) 2182 -- Present in N_Object_Declaration and N_Allocator to indicate that the 2183 -- object must not be initialized (by Initialize or call to an init 2184 -- proc). This is needed for controlled aggregates. When the Object 2185 -- declaration has an expression, this flag means that this expression 2186 -- should not be taken into account (needed for in place initialization 2187 -- with aggregates, and for object with an address clause, which are 2188 -- initialized with an assignment at freeze time). 2189 2190 -- No_Minimize_Eliminate (Flag17-Sem) 2191 -- This flag is present in membership operator nodes (N_In/N_Not_In). 2192 -- It is used to indicate that processing for extended overflow checking 2193 -- modes is not required (this is used to prevent infinite recursion). 2194 2195 -- No_Side_Effect_Removal (Flag17-Sem) 2196 -- Present in N_Function_Call nodes. Set when a function call does not 2197 -- require side effect removal. This attribute suppresses the generation 2198 -- of a temporary to capture the result of the function which eventually 2199 -- replaces the function call. 2200 2201 -- No_Truncation (Flag17-Sem) 2202 -- Present in N_Unchecked_Type_Conversion node. This flag has an effect 2203 -- only if the RM_Size of the source is greater than the RM_Size of the 2204 -- target for scalar operands. Normally in such a case we truncate some 2205 -- higher order bits of the source, and then sign/zero extend the result 2206 -- to form the output value. But if this flag is set, then we do not do 2207 -- any truncation, so for example, if an 8 bit input is converted to 5 2208 -- bit result which is in fact stored in 8 bits, then the high order 2209 -- three bits of the target result will be copied from the source. This 2210 -- is used for properly setting out of range values for use by pragmas 2211 -- Initialize_Scalars and Normalize_Scalars. 2212 2213 -- Null_Excluding_Subtype (Flag16) 2214 -- Present in N_Access_To_Object_Definition. Indicates that the subtype 2215 -- indication carries a null-exclusion indicator, which is distinct from 2216 -- the null-exclusion indicator that may precede the access keyword. 2217 2218 -- Original_Discriminant (Node2-Sem) 2219 -- Present in identifiers. Used in references to discriminants that 2220 -- appear in generic units. Because the names of the discriminants may be 2221 -- different in an instance, we use this field to recover the position of 2222 -- the discriminant in the original type, and replace it with the 2223 -- discriminant at the same position in the instantiated type. 2224 2225 -- Original_Entity (Node2-Sem) 2226 -- Present in numeric literals. Used to denote the named number that has 2227 -- been constant-folded into the given literal. If literal is from 2228 -- source, or the result of some other constant-folding operation, then 2229 -- Original_Entity is empty. This field is needed to handle properly 2230 -- named numbers in generic units, where the Associated_Node field 2231 -- interferes with the Entity field, making it impossible to preserve the 2232 -- original entity at the point of instantiation (ASIS problem). 2233 2234 -- Others_Discrete_Choices (List1-Sem) 2235 -- When a case statement or variant is analyzed, the semantic checks 2236 -- determine the actual list of choices that correspond to an others 2237 -- choice. This list is materialized for later use by the expander and 2238 -- the Others_Discrete_Choices field of an N_Others_Choice node points to 2239 -- this materialized list of choices, which is in standard format for a 2240 -- list of discrete choices, except that of course it cannot contain an 2241 -- N_Others_Choice entry. 2242 2243 -- Parent_Spec (Node4-Sem) 2244 -- For a library unit that is a child unit spec (package or subprogram 2245 -- declaration, generic declaration or instantiation, or library level 2246 -- rename) this field points to the compilation unit node for the parent 2247 -- package specification. This field is Empty for library bodies (the 2248 -- parent spec in this case can be found from the corresponding spec). 2249 2250 -- Parent_With (Flag1-Sem) 2251 -- Present in N_With_Clause nodes. The flag indicates that the clause 2252 -- was generated for an ancestor unit to provide proper visibility. A 2253 -- with clause for child unit A.B.C produces two implicit parent with 2254 -- clauses for A and A.B. 2255 2256 -- Premature_Use (Node5-Sem) 2257 -- Present in N_Incomplete_Type_Declaration node. Used for improved 2258 -- error diagnostics: if there is a premature usage of an incomplete 2259 -- type, a subsequently generated error message indicates the position 2260 -- of its full declaration. 2261 2262 -- Present_Expr (Uint3-Sem) 2263 -- Present in an N_Variant node. This has a meaningful value only after 2264 -- Gigi has back annotated the tree with representation information. At 2265 -- this point, it contains a reference to a gcc expression that depends 2266 -- on the values of one or more discriminants. Give a set of discriminant 2267 -- values, this expression evaluates to False (zero) if variant is not 2268 -- present, and True (non-zero) if it is present. See unit Repinfo for 2269 -- further details on gigi back annotation. This field is used during 2270 -- ASIS processing (data decomposition annex) to determine if a field is 2271 -- present or not. 2272 2273 -- Prev_Use_Clause (Node1-Sem) 2274 -- Present in both N_Use_Package_Clause and N_Use_Type_Clause. Used in 2275 -- detection of ineffective use clauses by allowing a chain of related 2276 -- clauses together to avoid traversing the current scope stack. 2277 2278 -- Print_In_Hex (Flag13-Sem) 2279 -- Set on an N_Integer_Literal node to indicate that the value should be 2280 -- printed in hexadecimal in the sprint listing. Has no effect on 2281 -- legality or semantics of program, only on the displayed output. This 2282 -- is used to clarify output from the packed array cases. 2283 2284 -- Procedure_To_Call (Node2-Sem) 2285 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 2286 -- and N_Extended_Return_Statement nodes. References the entity for the 2287 -- declaration of the procedure to be called to accomplish the required 2288 -- operation (i.e. for the Allocate procedure in the case of N_Allocator 2289 -- and N_Simple_Return_Statement and N_Extended_Return_Statement (for 2290 -- allocating the return value), and for the Deallocate procedure in the 2291 -- case of N_Free_Statement. 2292 2293 -- Raises_Constraint_Error (Flag7-Sem) 2294 -- Set on an expression whose evaluation will definitely fail constraint 2295 -- error check. See Sem_Eval for details. 2296 2297 -- Redundant_Use (Flag13-Sem) 2298 -- Present in nodes that can appear as an operand in a use clause or use 2299 -- type clause (identifiers, expanded names, attribute references). Set 2300 -- to indicate that a use is redundant (and therefore need not be undone 2301 -- on scope exit). 2302 2303 -- Renaming_Exception (Node2-Sem) 2304 -- Present in N_Exception_Declaration node. Used to point back to the 2305 -- exception renaming for an exception declared within a subprogram. 2306 -- What happens is that an exception declared in a subprogram is moved 2307 -- to the library level with a unique name, and the original exception 2308 -- becomes a renaming. This link from the library level exception to the 2309 -- renaming declaration allows registering of the proper exception name. 2310 2311 -- Return_Statement_Entity (Node5-Sem) 2312 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement. 2313 -- Points to an E_Return_Statement representing the return statement. 2314 2315 -- Return_Object_Declarations (List3) 2316 -- Present in N_Extended_Return_Statement. Points to a list initially 2317 -- containing a single N_Object_Declaration representing the return 2318 -- object. We use a list (instead of just a pointer to the object decl) 2319 -- because Analyze wants to insert extra actions on this list. 2320 2321 -- Rounded_Result (Flag18-Sem) 2322 -- Present in N_Type_Conversion, N_Op_Divide, and N_Op_Multiply nodes. 2323 -- Used in the fixed-point cases to indicate that the result must be 2324 -- rounded as a result of the use of the 'Round attribute. Also used for 2325 -- integer N_Op_Divide nodes to indicate that the result should be 2326 -- rounded to the nearest integer (breaking ties away from zero), rather 2327 -- than truncated towards zero as usual. These rounded integer operations 2328 -- are the result of expansion of rounded fixed-point divide, conversion 2329 -- and multiplication operations. 2330 2331 -- SCIL_Entity (Node4-Sem) 2332 -- Present in SCIL nodes. References the specific tagged type associated 2333 -- with the SCIL node (for an N_SCIL_Dispatching_Call node, this is 2334 -- the controlling type of the call; for an N_SCIL_Membership_Test node 2335 -- generated as part of testing membership in T'Class, this is T; for an 2336 -- N_SCIL_Dispatch_Table_Tag_Init node, this is the type being declared). 2337 2338 -- SCIL_Controlling_Tag (Node5-Sem) 2339 -- Present in N_SCIL_Dispatching_Call nodes. References the controlling 2340 -- tag of a dispatching call. This is usually an N_Selected_Component 2341 -- node (for a _tag component), but may be an N_Object_Declaration or 2342 -- N_Parameter_Specification node in some cases (e.g., for a call to 2343 -- a classwide streaming operation or a call to an instance of 2344 -- Ada.Tags.Generic_Dispatching_Constructor). 2345 2346 -- SCIL_Tag_Value (Node5-Sem) 2347 -- Present in N_SCIL_Membership_Test nodes. Used to reference the tag 2348 -- of the value that is being tested. 2349 2350 -- SCIL_Target_Prim (Node2-Sem) 2351 -- Present in N_SCIL_Dispatching_Call nodes. References the primitive 2352 -- operation named (statically) in a dispatching call. 2353 2354 -- Scope (Node3-Sem) 2355 -- Present in defining identifiers, defining character literals, and 2356 -- defining operator symbols (i.e. in all entities). The entities of a 2357 -- scope all use this field to reference the corresponding scope entity. 2358 -- See Einfo for further details. 2359 2360 -- Shift_Count_OK (Flag4-Sem) 2361 -- A flag present in shift nodes to indicate that the shift count is 2362 -- known to be in range, i.e. is in the range from zero to word length 2363 -- minus one. If this flag is not set, then the shift count may be 2364 -- outside this range, i.e. larger than the word length, and the code 2365 -- must ensure that such shift counts give the appropriate result. 2366 2367 -- Source_Type (Node1-Sem) 2368 -- Used in an N_Validate_Unchecked_Conversion node to point to the 2369 -- source type entity for the unchecked conversion instantiation 2370 -- which gigi must do size validation for. 2371 2372 -- Split_PPC (Flag17) 2373 -- When a Pre or Post aspect specification is processed, it is broken 2374 -- into AND THEN sections. The leftmost section has Split_PPC set to 2375 -- False, indicating that it is the original specification (e.g. for 2376 -- posting errors). For other sections, Split_PPC is set to True. 2377 -- This flag is set in both the N_Aspect_Specification node itself, 2378 -- and in the pragma which is generated from this node. 2379 2380 -- Storage_Pool (Node1-Sem) 2381 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 2382 -- and N_Extended_Return_Statement nodes. References the entity for the 2383 -- storage pool to be used for the allocate or free call or for the 2384 -- allocation of the returned value from function. Empty indicates that 2385 -- the global default pool is to be used. Note that in the case 2386 -- of a return statement, this field is set only if the function returns 2387 -- value of a type whose size is not known at compile time on the 2388 -- secondary stack. 2389 2390 -- Suppress_Assignment_Checks (Flag18-Sem) 2391 -- Used in generated N_Assignment_Statement nodes to suppress predicate 2392 -- and range checks in cases where the generated code knows that the 2393 -- value being assigned is in range and satisfies any predicate. Also 2394 -- can be set in N_Object_Declaration nodes, to similarly suppress any 2395 -- checks on the initializing value. In assignment statements it also 2396 -- suppresses access checks in the generated code for out- and in-out 2397 -- parameters in entry calls. 2398 2399 -- Suppress_Loop_Warnings (Flag17-Sem) 2400 -- Used in N_Loop_Statement node to indicate that warnings within the 2401 -- body of the loop should be suppressed. This is set when the range 2402 -- of a FOR loop is known to be null, or is probably null (loop would 2403 -- only execute if invalid values are present). 2404 2405 -- Target (Node1-Sem) 2406 -- Present in call and variable reference marker nodes. References the 2407 -- entity of the original entity, operator, or subprogram being invoked, 2408 -- or the original variable being read or written. 2409 2410 -- Target_Type (Node2-Sem) 2411 -- Used in an N_Validate_Unchecked_Conversion node to point to the target 2412 -- type entity for the unchecked conversion instantiation which gigi must 2413 -- do size validation for. 2414 2415 -- Then_Actions (List3-Sem) 2416 -- This field is present in if expression nodes. During code expansion 2417 -- we use the Insert_Actions procedure (in Exp_Util) to insert actions 2418 -- at an appropriate place in the tree to get elaborated at the right 2419 -- time. For if expressions, we have to be sure that the actions for 2420 -- for the Then branch are only elaborated if the condition is True. 2421 -- The Then_Actions field is used as a temporary parking place for 2422 -- these actions. The final tree is always rewritten to eliminate the 2423 -- need for this field, so in the tree passed to Gigi, this field is 2424 -- always set to No_List. 2425 2426 -- Treat_Fixed_As_Integer (Flag14-Sem) 2427 -- This flag appears in operator nodes for divide, multiply, mod, and rem 2428 -- on fixed-point operands. It indicates that the operands are to be 2429 -- treated as integer values, ignoring small values. This flag is only 2430 -- set as a result of expansion of fixed-point operations. Typically a 2431 -- fixed-point multiplication in the source generates subsidiary 2432 -- multiplication and division operations that work with the underlying 2433 -- integer values and have this flag set. Note that this flag is not 2434 -- needed on other arithmetic operations (add, neg, subtract etc.) since 2435 -- in these cases it is always the case that fixed is treated as integer. 2436 -- The Etype field MUST be set if this flag is set. The analyzer knows to 2437 -- leave such nodes alone, and whoever makes them must set the correct 2438 -- Etype value. 2439 2440 -- TSS_Elist (Elist3-Sem) 2441 -- Present in N_Freeze_Entity nodes. Holds an element list containing 2442 -- entries for each TSS (type support subprogram) associated with the 2443 -- frozen type. The elements of the list are the entities for the 2444 -- subprograms (see package Exp_TSS for further details). Set to No_Elist 2445 -- if there are no type support subprograms for the type or if the freeze 2446 -- node is not for a type. 2447 2448 -- Uneval_Old_Accept (Flag7-Sem) 2449 -- Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'A' 2450 -- (accept) at the point where the pragma is encountered (including the 2451 -- case of a pragma generated from an aspect specification). It is this 2452 -- setting that is relevant, rather than the setting at the point where 2453 -- a contract is finally analyzed after the delay till the freeze point. 2454 2455 -- Uneval_Old_Warn (Flag18-Sem) 2456 -- Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'W' 2457 -- (warn) at the point where the pragma is encountered (including the 2458 -- case of a pragma generated from an aspect specification). It is this 2459 -- setting that is relevant, rather than the setting at the point where 2460 -- a contract is finally analyzed after the delay till the freeze point. 2461 2462 -- Unreferenced_In_Spec (Flag7-Sem) 2463 -- Present in N_With_Clause nodes. Set if the with clause is on the 2464 -- package or subprogram spec where the main unit is the corresponding 2465 -- body, and is not referenced by the spec (it may still be referenced by 2466 -- the body, so this flag is used to generate the proper message (see 2467 -- Sem_Util.Check_Unused_Withs for details) 2468 2469 -- Uninitialized_Variable (Node3-Sem) 2470 -- Present in N_Formal_Private_Type_Definition and in N_Private_ 2471 -- Extension_Declarations. Indicates that a variable in a generic unit 2472 -- whose type is a formal private or derived type is read without being 2473 -- initialized. Used to warn if the corresponding actual type is not 2474 -- a fully initialized type. 2475 2476 -- Used_Operations (Elist2-Sem) 2477 -- Present in N_Use_Type_Clause nodes. Holds the list of operations that 2478 -- are made potentially use-visible by the clause. Simplifies processing 2479 -- on exit from the scope of the use_type_clause, in particular in the 2480 -- case of Use_All_Type, when those operations several scopes. 2481 2482 -- Was_Attribute_Reference (Flag2-Sem) 2483 -- Present in N_Subprogram_Body. Set to True if the original source is an 2484 -- attribute reference which is an actual in a generic instantiation. The 2485 -- instantiation prologue renames these attributes, and expansion later 2486 -- converts them into subprogram bodies. 2487 2488 -- Was_Expression_Function (Flag18-Sem) 2489 -- Present in N_Subprogram_Body. True if the original source had an 2490 -- N_Expression_Function, which was converted to the N_Subprogram_Body 2491 -- by Analyze_Expression_Function. This is needed by ASIS to correctly 2492 -- recreate the expression function (for the instance body) when the 2493 -- completion of a generic function declaration is an expression 2494 -- function. 2495 2496 -- Was_Originally_Stub (Flag13-Sem) 2497 -- This flag is set in the node for a proper body that replaces stub. 2498 -- During the analysis procedure, stubs in some situations get rewritten 2499 -- by the corresponding bodies, and we set this flag to remember that 2500 -- this happened. Note that it is not good enough to rely on the use of 2501 -- Original_Node here because of the case of nested instantiations where 2502 -- the substituted node can be copied. 2503 2504 -------------------------------------------------- 2505 -- Note on Use of End_Label and End_Span Fields -- 2506 -------------------------------------------------- 2507 2508 -- Several constructs have end lines: 2509 2510 -- Loop Statement end loop [loop_IDENTIFIER]; 2511 -- Package Specification end [[PARENT_UNIT_NAME .] IDENTIFIER] 2512 -- Task Definition end [task_IDENTIFIER] 2513 -- Protected Definition end [protected_IDENTIFIER] 2514 -- Protected Body end [protected_IDENTIFIER] 2515 2516 -- Block Statement end [block_IDENTIFIER]; 2517 -- Subprogram Body end [DESIGNATOR]; 2518 -- Package Body end [[PARENT_UNIT_NAME .] IDENTIFIER]; 2519 -- Task Body end [task_IDENTIFIER]; 2520 -- Accept Statement end [entry_IDENTIFIER]]; 2521 -- Entry Body end [entry_IDENTIFIER]; 2522 2523 -- If Statement end if; 2524 -- Case Statement end case; 2525 2526 -- Record Definition end record; 2527 -- Enumeration Definition ); 2528 2529 -- The End_Label and End_Span fields are used to mark the locations of 2530 -- these lines, and also keep track of the label in the case where a label 2531 -- is present. 2532 2533 -- For the first group above, the End_Label field of the corresponding node 2534 -- is used to point to the label identifier. In the case where there is no 2535 -- label in the source, the parser supplies a dummy identifier (with 2536 -- Comes_From_Source set to False), and the Sloc of this dummy identifier 2537 -- marks the location of the token following the END token. 2538 2539 -- For the second group, the use of End_Label is similar, but the End_Label 2540 -- is found in the N_Handled_Sequence_Of_Statements node. This is done 2541 -- simply because in some cases there is no room in the parent node. 2542 2543 -- For the third group, there is never any label, and instead of using 2544 -- End_Label, we use the End_Span field which gives the location of the 2545 -- token following END, relative to the starting Sloc of the construct, 2546 -- i.e. add Sloc (Node) + End_Span (Node) to get the Sloc of the IF or CASE 2547 -- following the End_Label. 2548 2549 -- The record definition case is handled specially, we treat it as though 2550 -- it required an optional label which is never present, and so the parser 2551 -- always builds a dummy identifier with Comes From Source set False. The 2552 -- reason we do this, rather than using End_Span in this case, is that we 2553 -- want to generate a cross-ref entry for the end of a record, since it 2554 -- represents a scope for name declaration purposes. 2555 2556 -- The enumeration definition case is handled in an exactly similar manner, 2557 -- building a dummy identifier to get a cross-reference. 2558 2559 -- Note: the reason we store the difference as a Uint, instead of storing 2560 -- the Source_Ptr value directly, is that Source_Ptr values cannot be 2561 -- distinguished from other types of values, and we count on all general 2562 -- use fields being self describing. To make things easier for clients, 2563 -- note that we provide function End_Location, and procedure 2564 -- Set_End_Location to allow access to the logical value (which is the 2565 -- Source_Ptr value for the end token). 2566 2567 --------------------- 2568 -- Syntactic Nodes -- 2569 --------------------- 2570 2571 --------------------- 2572 -- 2.3 Identifier -- 2573 --------------------- 2574 2575 -- IDENTIFIER ::= IDENTIFIER_LETTER {[UNDERLINE] LETTER_OR_DIGIT} 2576 -- LETTER_OR_DIGIT ::= IDENTIFIER_LETTER | DIGIT 2577 2578 -- An IDENTIFIER shall not be a reserved word 2579 2580 -- In the Ada grammar identifiers are the bottom level tokens which have 2581 -- very few semantics. Actual program identifiers are direct names. If 2582 -- we were being 100% honest with the grammar, then we would have a node 2583 -- called N_Direct_Name which would point to an identifier. However, 2584 -- that's too many extra nodes, so we just use the N_Identifier node 2585 -- directly as a direct name, and it contains the expression fields and 2586 -- Entity field that correspond to its use as a direct name. In those 2587 -- few cases where identifiers appear in contexts where they are not 2588 -- direct names (pragmas, pragma argument associations, attribute 2589 -- references and attribute definition clauses), the Chars field of the 2590 -- node contains the Name_Id for the identifier name. 2591 2592 -- Note: in GNAT, a reserved word can be treated as an identifier in two 2593 -- cases. First, an incorrect use of a reserved word as an identifier is 2594 -- diagnosed and then treated as a normal identifier. Second, an 2595 -- attribute designator of the form of a reserved word (access, delta, 2596 -- digits, range) is treated as an identifier. 2597 2598 -- Note: The set of letters that is permitted in an identifier depends 2599 -- on the character set in use. See package Csets for full details. 2600 2601 -- N_Identifier 2602 -- Sloc points to identifier 2603 -- Chars (Name1) contains the Name_Id for the identifier 2604 -- Entity (Node4-Sem) 2605 -- Associated_Node (Node4-Sem) 2606 -- Original_Discriminant (Node2-Sem) 2607 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 2608 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 2609 -- Has_Private_View (Flag11-Sem) (set in generic units) 2610 -- Redundant_Use (Flag13-Sem) 2611 -- Atomic_Sync_Required (Flag14-Sem) 2612 -- plus fields for expression 2613 2614 -------------------------- 2615 -- 2.4 Numeric Literal -- 2616 -------------------------- 2617 2618 -- NUMERIC_LITERAL ::= DECIMAL_LITERAL | BASED_LITERAL 2619 2620 ---------------------------- 2621 -- 2.4.1 Decimal Literal -- 2622 ---------------------------- 2623 2624 -- DECIMAL_LITERAL ::= NUMERAL [.NUMERAL] [EXPONENT] 2625 2626 -- NUMERAL ::= DIGIT {[UNDERLINE] DIGIT} 2627 2628 -- EXPONENT ::= E [+] NUMERAL | E - NUMERAL 2629 2630 -- Decimal literals appear in the tree as either integer literal nodes 2631 -- or real literal nodes, depending on whether a period is present. 2632 2633 -- Note: literal nodes appear as a result of direct use of literals 2634 -- in the source program, and also as the result of evaluating 2635 -- expressions at compile time. In the latter case, it is possible 2636 -- to construct real literals that have no syntactic representation 2637 -- using the standard literal format. Such literals are listed by 2638 -- Sprint using the notation [numerator / denominator]. 2639 2640 -- Note: the value of an integer literal node created by the front end 2641 -- is never outside the range of values of the base type. However, it 2642 -- can be the case that the created value is outside the range of the 2643 -- particular subtype. This happens in the case of integer overflows 2644 -- with checks suppressed. 2645 2646 -- N_Integer_Literal 2647 -- Sloc points to literal 2648 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2649 -- has been constant-folded into its literal value. 2650 -- Intval (Uint3) contains integer value of literal 2651 -- Print_In_Hex (Flag13-Sem) 2652 -- plus fields for expression 2653 2654 -- N_Real_Literal 2655 -- Sloc points to literal 2656 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2657 -- has been constant-folded into its literal value. 2658 -- Realval (Ureal3) contains real value of literal 2659 -- Corresponding_Integer_Value (Uint4-Sem) 2660 -- Is_Machine_Number (Flag11-Sem) 2661 -- plus fields for expression 2662 2663 -------------------------- 2664 -- 2.4.2 Based Literal -- 2665 -------------------------- 2666 2667 -- BASED_LITERAL ::= 2668 -- BASE # BASED_NUMERAL [.BASED_NUMERAL] # [EXPONENT] 2669 2670 -- BASE ::= NUMERAL 2671 2672 -- BASED_NUMERAL ::= 2673 -- EXTENDED_DIGIT {[UNDERLINE] EXTENDED_DIGIT} 2674 2675 -- EXTENDED_DIGIT ::= DIGIT | A | B | C | D | E | F 2676 2677 -- Based literals appear in the tree as either integer literal nodes 2678 -- or real literal nodes, depending on whether a period is present. 2679 2680 ---------------------------- 2681 -- 2.5 Character Literal -- 2682 ---------------------------- 2683 2684 -- CHARACTER_LITERAL ::= ' GRAPHIC_CHARACTER ' 2685 2686 -- N_Character_Literal 2687 -- Sloc points to literal 2688 -- Chars (Name1) contains the Name_Id for the identifier 2689 -- Char_Literal_Value (Uint2) contains the literal value 2690 -- Entity (Node4-Sem) 2691 -- Associated_Node (Node4-Sem) 2692 -- Has_Private_View (Flag11-Sem) set in generic units. 2693 -- plus fields for expression 2694 2695 -- Note: the Entity field will be missing (set to Empty) for character 2696 -- literals whose type is Standard.Wide_Character or Standard.Character 2697 -- or a type derived from one of these two. In this case the character 2698 -- literal stands for its own coding. The reason we take this irregular 2699 -- short cut is to avoid the need to build lots of junk defining 2700 -- character literal nodes. 2701 2702 ------------------------- 2703 -- 2.6 String Literal -- 2704 ------------------------- 2705 2706 -- STRING LITERAL ::= "{STRING_ELEMENT}" 2707 2708 -- A STRING_ELEMENT is either a pair of quotation marks ("), or a 2709 -- single GRAPHIC_CHARACTER other than a quotation mark. 2710 -- 2711 -- Is_Folded_In_Parser is True if the parser created this literal by 2712 -- folding a sequence of "&" operators. For example, if the source code 2713 -- says "aaa" & "bbb" & "ccc", and this produces "aaabbbccc", the flag 2714 -- is set. This flag is needed because the parser doesn't know about 2715 -- visibility, so the folded result might be wrong, and semantic 2716 -- analysis needs to check for that. 2717 2718 -- N_String_Literal 2719 -- Sloc points to literal 2720 -- Strval (Str3) contains Id of string value 2721 -- Has_Wide_Character (Flag11-Sem) 2722 -- Has_Wide_Wide_Character (Flag13-Sem) 2723 -- Is_Folded_In_Parser (Flag4) 2724 -- plus fields for expression 2725 2726 ------------------ 2727 -- 2.7 Comment -- 2728 ------------------ 2729 2730 -- A COMMENT starts with two adjacent hyphens and extends up to the 2731 -- end of the line. A COMMENT may appear on any line of a program. 2732 2733 -- Comments are skipped by the scanner and do not appear in the tree. 2734 -- It is possible to reconstruct the position of comments with respect 2735 -- to the elements of the tree by using the source position (Sloc) 2736 -- pointers that appear in every tree node. 2737 2738 ----------------- 2739 -- 2.8 Pragma -- 2740 ----------------- 2741 2742 -- PRAGMA ::= pragma IDENTIFIER 2743 -- [(PRAGMA_ARGUMENT_ASSOCIATION {, PRAGMA_ARGUMENT_ASSOCIATION})]; 2744 2745 -- Note that a pragma may appear in the tree anywhere a declaration 2746 -- or a statement may appear, as well as in some other situations 2747 -- which are explicitly documented. 2748 2749 -- N_Pragma 2750 -- Sloc points to PRAGMA 2751 -- Next_Pragma (Node1-Sem) 2752 -- Pragma_Argument_Associations (List2) (set to No_List if none) 2753 -- Corresponding_Aspect (Node3-Sem) (set to Empty if not present) 2754 -- Pragma_Identifier (Node4) 2755 -- Next_Rep_Item (Node5-Sem) 2756 -- Is_Generic_Contract_Pragma (Flag2-Sem) 2757 -- Is_Checked_Ghost_Pragma (Flag3-Sem) 2758 -- Is_Inherited_Pragma (Flag4-Sem) 2759 -- Is_Analyzed_Pragma (Flag5-Sem) 2760 -- Class_Present (Flag6) set if from Aspect with 'Class 2761 -- Uneval_Old_Accept (Flag7-Sem) 2762 -- Is_Ignored_Ghost_Pragma (Flag8-Sem) 2763 -- Is_Ignored (Flag9-Sem) 2764 -- Is_Checked (Flag11-Sem) 2765 -- From_Aspect_Specification (Flag13-Sem) 2766 -- Is_Delayed_Aspect (Flag14-Sem) 2767 -- Is_Disabled (Flag15-Sem) 2768 -- Import_Interface_Present (Flag16-Sem) 2769 -- Split_PPC (Flag17) set if corresponding aspect had Split_PPC set 2770 -- Uneval_Old_Warn (Flag18-Sem) 2771 2772 -- Note: we should have a section on what pragmas are passed on to 2773 -- the back end to be processed. This section should note that pragma 2774 -- Psect_Object is always converted to Common_Object, but there are 2775 -- undoubtedly many other similar notes required ??? 2776 2777 -- Note: utility functions Pragma_Name_Unmapped and Pragma_Name may be 2778 -- applied to pragma nodes to obtain the Chars or its mapped version. 2779 2780 -- Note: if From_Aspect_Specification is set, then Sloc points to the 2781 -- aspect name, as does the Pragma_Identifier. In this case if the 2782 -- pragma has a local name argument (such as pragma Inline), it is 2783 -- resolved to point to the specific entity affected by the pragma. 2784 2785 -------------------------------------- 2786 -- 2.8 Pragma Argument Association -- 2787 -------------------------------------- 2788 2789 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2790 -- [pragma_argument_IDENTIFIER =>] NAME 2791 -- | [pragma_argument_IDENTIFIER =>] EXPRESSION 2792 2793 -- In Ada 2012, there are two more possibilities: 2794 2795 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2796 -- [pragma_argument_ASPECT_MARK =>] NAME 2797 -- | [pragma_argument_ASPECT_MARK =>] EXPRESSION 2798 2799 -- where the interesting allowed cases (which do not fit the syntax of 2800 -- the first alternative above) are 2801 2802 -- ASPECT_MARK => Pre'Class | 2803 -- Post'Class | 2804 -- Type_Invariant'Class | 2805 -- Invariant'Class 2806 2807 -- We allow this special usage in all Ada modes, but it would be a 2808 -- pain to allow these aspects to pervade the pragma syntax, and the 2809 -- representation of pragma nodes internally. So what we do is to 2810 -- replace these ASPECT_MARK forms with identifiers whose name is one 2811 -- of the special internal names _Pre, _Post, or _Type_Invariant. 2812 2813 -- We do a similar replacement of these Aspect_Mark forms in the 2814 -- Expression of a pragma argument association for the cases of 2815 -- the first arguments of any Check pragmas and Check_Policy pragmas 2816 2817 -- N_Pragma_Argument_Association 2818 -- Sloc points to first token in association 2819 -- Chars (Name1) (set to No_Name if no pragma argument identifier) 2820 -- Expression_Copy (Node2-Sem) 2821 -- Expression (Node3) 2822 2823 ------------------------ 2824 -- 2.9 Reserved Word -- 2825 ------------------------ 2826 2827 -- Reserved words are parsed by the scanner, and returned as the 2828 -- corresponding token types (e.g. PACKAGE is returned as Tok_Package) 2829 2830 ---------------------------- 2831 -- 3.1 Basic Declaration -- 2832 ---------------------------- 2833 2834 -- BASIC_DECLARATION ::= 2835 -- TYPE_DECLARATION | SUBTYPE_DECLARATION 2836 -- | OBJECT_DECLARATION | NUMBER_DECLARATION 2837 -- | SUBPROGRAM_DECLARATION | ABSTRACT_SUBPROGRAM_DECLARATION 2838 -- | PACKAGE_DECLARATION | RENAMING_DECLARATION 2839 -- | EXCEPTION_DECLARATION | GENERIC_DECLARATION 2840 -- | GENERIC_INSTANTIATION 2841 2842 -- Basic declaration also includes IMPLICIT_LABEL_DECLARATION 2843 -- see further description in section on semantic nodes. 2844 2845 -- Also, in the tree that is constructed, a pragma may appear 2846 -- anywhere that a declaration may appear. 2847 2848 ------------------------------ 2849 -- 3.1 Defining Identifier -- 2850 ------------------------------ 2851 2852 -- DEFINING_IDENTIFIER ::= IDENTIFIER 2853 2854 -- A defining identifier is an entity, which has additional fields 2855 -- depending on the setting of the Ekind field. These additional 2856 -- fields are defined (and access subprograms declared) in package 2857 -- Einfo. 2858 2859 -- Note: N_Defining_Identifier is an extended node whose fields are 2860 -- deliberately layed out to match the layout of fields in an ordinary 2861 -- N_Identifier node allowing for easy alteration of an identifier 2862 -- node into a defining identifier node. For details, see procedure 2863 -- Sinfo.CN.Change_Identifier_To_Defining_Identifier. 2864 2865 -- N_Defining_Identifier 2866 -- Sloc points to identifier 2867 -- Chars (Name1) contains the Name_Id for the identifier 2868 -- Next_Entity (Node2-Sem) 2869 -- Scope (Node3-Sem) 2870 -- Etype (Node5-Sem) 2871 2872 ----------------------------- 2873 -- 3.2.1 Type Declaration -- 2874 ----------------------------- 2875 2876 -- TYPE_DECLARATION ::= 2877 -- FULL_TYPE_DECLARATION 2878 -- | INCOMPLETE_TYPE_DECLARATION 2879 -- | PRIVATE_TYPE_DECLARATION 2880 -- | PRIVATE_EXTENSION_DECLARATION 2881 2882 ---------------------------------- 2883 -- 3.2.1 Full Type Declaration -- 2884 ---------------------------------- 2885 2886 -- FULL_TYPE_DECLARATION ::= 2887 -- type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 2888 -- is TYPE_DEFINITION 2889 -- [ASPECT_SPECIFICATIONS]; 2890 -- | TASK_TYPE_DECLARATION 2891 -- | PROTECTED_TYPE_DECLARATION 2892 2893 -- The full type declaration node is used only for the first case. The 2894 -- second case (concurrent type declaration), is represented directly 2895 -- by a task type declaration or a protected type declaration. 2896 2897 -- N_Full_Type_Declaration 2898 -- Sloc points to TYPE 2899 -- Defining_Identifier (Node1) 2900 -- Incomplete_View (Node2-Sem) 2901 -- Discriminant_Specifications (List4) (set to No_List if none) 2902 -- Type_Definition (Node3) 2903 -- Discr_Check_Funcs_Built (Flag11-Sem) 2904 2905 ---------------------------- 2906 -- 3.2.1 Type Definition -- 2907 ---------------------------- 2908 2909 -- TYPE_DEFINITION ::= 2910 -- ENUMERATION_TYPE_DEFINITION | INTEGER_TYPE_DEFINITION 2911 -- | REAL_TYPE_DEFINITION | ARRAY_TYPE_DEFINITION 2912 -- | RECORD_TYPE_DEFINITION | ACCESS_TYPE_DEFINITION 2913 -- | DERIVED_TYPE_DEFINITION | INTERFACE_TYPE_DEFINITION 2914 2915 -------------------------------- 2916 -- 3.2.2 Subtype Declaration -- 2917 -------------------------------- 2918 2919 -- SUBTYPE_DECLARATION ::= 2920 -- subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION 2921 -- [ASPECT_SPECIFICATIONS]; 2922 2923 -- The subtype indication field is set to Empty for subtypes 2924 -- declared in package Standard (Positive, Natural). 2925 2926 -- N_Subtype_Declaration 2927 -- Sloc points to SUBTYPE 2928 -- Defining_Identifier (Node1) 2929 -- Null_Exclusion_Present (Flag11) 2930 -- Subtype_Indication (Node5) 2931 -- Generic_Parent_Type (Node4-Sem) (set for an actual derived type). 2932 -- Exception_Junk (Flag8-Sem) 2933 -- Has_Dynamic_Range_Check (Flag12-Sem) 2934 2935 ------------------------------- 2936 -- 3.2.2 Subtype Indication -- 2937 ------------------------------- 2938 2939 -- SUBTYPE_INDICATION ::= SUBTYPE_MARK [CONSTRAINT] 2940 2941 -- Note: if no constraint is present, the subtype indication appears 2942 -- directly in the tree as a subtype mark. The N_Subtype_Indication 2943 -- node is used only if a constraint is present. 2944 2945 -- Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule 2946 -- with the null-exclusion part (see AI-231), we had to introduce a new 2947 -- attribute in all the parents of subtype_indication nodes to indicate 2948 -- if the null-exclusion is present. 2949 2950 -- Note: the reason that this node has expression fields is that a 2951 -- subtype indication can appear as an operand of a membership test. 2952 2953 -- N_Subtype_Indication 2954 -- Sloc points to first token of subtype mark 2955 -- Subtype_Mark (Node4) 2956 -- Constraint (Node3) 2957 -- Etype (Node5-Sem) 2958 -- Must_Not_Freeze (Flag8-Sem) 2959 2960 -- Note: Depending on context, the Etype is either the entity of the 2961 -- Subtype_Mark field, or it is an itype constructed to reify the 2962 -- subtype indication. In particular, such itypes are created for a 2963 -- subtype indication that appears in an array type declaration. This 2964 -- simplifies constraint checking in indexed components. 2965 2966 -- For subtype indications that appear in scalar type and subtype 2967 -- declarations, the Etype is the entity of the subtype mark. 2968 2969 ------------------------- 2970 -- 3.2.2 Subtype Mark -- 2971 ------------------------- 2972 2973 -- SUBTYPE_MARK ::= subtype_NAME 2974 2975 ----------------------- 2976 -- 3.2.2 Constraint -- 2977 ----------------------- 2978 2979 -- CONSTRAINT ::= SCALAR_CONSTRAINT | COMPOSITE_CONSTRAINT 2980 2981 ------------------------------ 2982 -- 3.2.2 Scalar Constraint -- 2983 ------------------------------ 2984 2985 -- SCALAR_CONSTRAINT ::= 2986 -- RANGE_CONSTRAINT | DIGITS_CONSTRAINT | DELTA_CONSTRAINT 2987 2988 --------------------------------- 2989 -- 3.2.2 Composite Constraint -- 2990 --------------------------------- 2991 2992 -- COMPOSITE_CONSTRAINT ::= 2993 -- INDEX_CONSTRAINT | DISCRIMINANT_CONSTRAINT 2994 2995 ------------------------------- 2996 -- 3.3.1 Object Declaration -- 2997 ------------------------------- 2998 2999 -- OBJECT_DECLARATION ::= 3000 -- DEFINING_IDENTIFIER_LIST : [aliased] [constant] 3001 -- [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION] 3002 -- [ASPECT_SPECIFICATIONS]; 3003 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 3004 -- ACCESS_DEFINITION [:= EXPRESSION] 3005 -- [ASPECT_SPECIFICATIONS]; 3006 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 3007 -- ARRAY_TYPE_DEFINITION [:= EXPRESSION] 3008 -- [ASPECT_SPECIFICATIONS]; 3009 -- | SINGLE_TASK_DECLARATION 3010 -- | SINGLE_PROTECTED_DECLARATION 3011 3012 -- Note: aliased is not permitted in Ada 83 mode 3013 3014 -- The N_Object_Declaration node is only for the first three cases. 3015 -- Single task declaration is handled by P_Task (9.1) 3016 -- Single protected declaration is handled by P_protected (9.5) 3017 3018 -- Although the syntax allows multiple identifiers in the list, the 3019 -- semantics is as though successive declarations were given with 3020 -- identical type definition and expression components. To simplify 3021 -- semantic processing, the parser represents a multiple declaration 3022 -- case as a sequence of single declarations, using the More_Ids and 3023 -- Prev_Ids flags to preserve the original source form as described 3024 -- in the section on "Handling of Defining Identifier Lists". 3025 3026 -- The flag Has_Init_Expression is set if an initializing expression 3027 -- is present. Normally it is set if and only if Expression contains 3028 -- a non-empty value, but there is an exception to this. When the 3029 -- initializing expression is an aggregate which requires explicit 3030 -- assignments, the Expression field gets set to Empty, but this flag 3031 -- is still set, so we don't forget we had an initializing expression. 3032 3033 -- Note: if a range check is required for the initialization 3034 -- expression then the Do_Range_Check flag is set in the Expression, 3035 -- with the check being done against the type given by the object 3036 -- definition, which is also the Etype of the defining identifier. 3037 3038 -- Note: the contents of the Expression field must be ignored (i.e. 3039 -- treated as though it were Empty) if No_Initialization is set True. 3040 3041 -- Note: the back end places some restrictions on the form of the 3042 -- Expression field. If the object being declared is Atomic, then 3043 -- the Expression may not have the form of an aggregate (since this 3044 -- might cause the back end to generate separate assignments). In this 3045 -- case the front end must generate an extra temporary and initialize 3046 -- this temporary as required (the temporary itself is not atomic). 3047 3048 -- Note: there is no node kind for object definition. Instead, the 3049 -- corresponding field holds a subtype indication, an array type 3050 -- definition, or (Ada 2005, AI-406) an access definition. 3051 3052 -- N_Object_Declaration 3053 -- Sloc points to first identifier 3054 -- Defining_Identifier (Node1) 3055 -- Aliased_Present (Flag4) 3056 -- Constant_Present (Flag17) set if CONSTANT appears 3057 -- Null_Exclusion_Present (Flag11) 3058 -- Object_Definition (Node4) subtype indic./array type def./access def. 3059 -- Expression (Node3) (set to Empty if not present) 3060 -- Handler_List_Entry (Node2-Sem) 3061 -- Corresponding_Generic_Association (Node5-Sem) 3062 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3063 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3064 -- No_Initialization (Flag13-Sem) 3065 -- Assignment_OK (Flag15-Sem) 3066 -- Exception_Junk (Flag8-Sem) 3067 -- Is_Subprogram_Descriptor (Flag16-Sem) 3068 -- Has_Init_Expression (Flag14) 3069 -- Suppress_Assignment_Checks (Flag18-Sem) 3070 3071 ------------------------------------- 3072 -- 3.3.1 Defining Identifier List -- 3073 ------------------------------------- 3074 3075 -- DEFINING_IDENTIFIER_LIST ::= 3076 -- DEFINING_IDENTIFIER {, DEFINING_IDENTIFIER} 3077 3078 ------------------------------- 3079 -- 3.3.2 Number Declaration -- 3080 ------------------------------- 3081 3082 -- NUMBER_DECLARATION ::= 3083 -- DEFINING_IDENTIFIER_LIST : constant := static_EXPRESSION; 3084 3085 -- Although the syntax allows multiple identifiers in the list, the 3086 -- semantics is as though successive declarations were given with 3087 -- identical expressions. To simplify semantic processing, the parser 3088 -- represents a multiple declaration case as a sequence of single 3089 -- declarations, using the More_Ids and Prev_Ids flags to preserve 3090 -- the original source form as described in the section on "Handling 3091 -- of Defining Identifier Lists". 3092 3093 -- N_Number_Declaration 3094 -- Sloc points to first identifier 3095 -- Defining_Identifier (Node1) 3096 -- Expression (Node3) 3097 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3098 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3099 3100 ---------------------------------- 3101 -- 3.4 Derived Type Definition -- 3102 ---------------------------------- 3103 3104 -- DERIVED_TYPE_DEFINITION ::= 3105 -- [abstract] [limited] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION 3106 -- [[and INTERFACE_LIST] RECORD_EXTENSION_PART] 3107 3108 -- Note: ABSTRACT, LIMITED, and record extension part are not permitted 3109 -- in Ada 83 mode. 3110 3111 -- Note: a record extension part is required if ABSTRACT is present 3112 3113 -- N_Derived_Type_Definition 3114 -- Sloc points to NEW 3115 -- Abstract_Present (Flag4) 3116 -- Null_Exclusion_Present (Flag11) (set to False if not present) 3117 -- Subtype_Indication (Node5) 3118 -- Record_Extension_Part (Node3) (set to Empty if not present) 3119 -- Limited_Present (Flag17) 3120 -- Task_Present (Flag5) set in task interfaces 3121 -- Protected_Present (Flag6) set in protected interfaces 3122 -- Synchronized_Present (Flag7) set in interfaces 3123 -- Interface_List (List2) (set to No_List if none) 3124 -- Interface_Present (Flag16) set in abstract interfaces 3125 3126 -- Note: Task_Present, Protected_Present, Synchronized_Present, 3127 -- Interface_List, and Interface_Present are used for abstract 3128 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 3129 3130 --------------------------- 3131 -- 3.5 Range Constraint -- 3132 --------------------------- 3133 3134 -- RANGE_CONSTRAINT ::= range RANGE 3135 3136 -- N_Range_Constraint 3137 -- Sloc points to RANGE 3138 -- Range_Expression (Node4) 3139 3140 ---------------- 3141 -- 3.5 Range -- 3142 ---------------- 3143 3144 -- RANGE ::= 3145 -- RANGE_ATTRIBUTE_REFERENCE 3146 -- | SIMPLE_EXPRESSION .. SIMPLE_EXPRESSION 3147 3148 -- Note: the case of a range given as a range attribute reference 3149 -- appears directly in the tree as an attribute reference. 3150 3151 -- Note: the field name for a reference to a range is Range_Expression 3152 -- rather than Range, because range is a reserved keyword in Ada. 3153 3154 -- Note: the reason that this node has expression fields is that a 3155 -- range can appear as an operand of a membership test. The Etype 3156 -- field is the type of the range (we do NOT construct an implicit 3157 -- subtype to represent the range exactly). 3158 3159 -- N_Range 3160 -- Sloc points to .. 3161 -- Low_Bound (Node1) 3162 -- High_Bound (Node2) 3163 -- Includes_Infinities (Flag11) 3164 -- plus fields for expression 3165 3166 -- Note: if the range appears in a context, such as a subtype 3167 -- declaration, where range checks are required on one or both of 3168 -- the expression fields, then type conversion nodes are inserted 3169 -- to represent the required checks. 3170 3171 ---------------------------------------- 3172 -- 3.5.1 Enumeration Type Definition -- 3173 ---------------------------------------- 3174 3175 -- ENUMERATION_TYPE_DEFINITION ::= 3176 -- (ENUMERATION_LITERAL_SPECIFICATION 3177 -- {, ENUMERATION_LITERAL_SPECIFICATION}) 3178 3179 -- Note: the Literals field in the node described below is null for 3180 -- the case of the standard types CHARACTER and WIDE_CHARACTER, for 3181 -- which special processing handles these types as special cases. 3182 3183 -- N_Enumeration_Type_Definition 3184 -- Sloc points to left parenthesis 3185 -- Literals (List1) (Empty for CHARACTER or WIDE_CHARACTER) 3186 -- End_Label (Node4) (set to Empty if internally generated record) 3187 3188 ---------------------------------------------- 3189 -- 3.5.1 Enumeration Literal Specification -- 3190 ---------------------------------------------- 3191 3192 -- ENUMERATION_LITERAL_SPECIFICATION ::= 3193 -- DEFINING_IDENTIFIER | DEFINING_CHARACTER_LITERAL 3194 3195 --------------------------------------- 3196 -- 3.5.1 Defining Character Literal -- 3197 --------------------------------------- 3198 3199 -- DEFINING_CHARACTER_LITERAL ::= CHARACTER_LITERAL 3200 3201 -- A defining character literal is an entity, which has additional 3202 -- fields depending on the setting of the Ekind field. These 3203 -- additional fields are defined (and access subprograms declared) 3204 -- in package Einfo. 3205 3206 -- Note: N_Defining_Character_Literal is an extended node whose fields 3207 -- are deliberate layed out to match the layout of fields in an ordinary 3208 -- N_Character_Literal node allowing for easy alteration of a character 3209 -- literal node into a defining character literal node. For details, see 3210 -- Sinfo.CN.Change_Character_Literal_To_Defining_Character_Literal. 3211 3212 -- N_Defining_Character_Literal 3213 -- Sloc points to literal 3214 -- Chars (Name1) contains the Name_Id for the identifier 3215 -- Next_Entity (Node2-Sem) 3216 -- Scope (Node3-Sem) 3217 -- Etype (Node5-Sem) 3218 3219 ------------------------------------ 3220 -- 3.5.4 Integer Type Definition -- 3221 ------------------------------------ 3222 3223 -- Note: there is an error in this rule in the latest version of the 3224 -- grammar, so we have retained the old rule pending clarification. 3225 3226 -- INTEGER_TYPE_DEFINITION ::= 3227 -- SIGNED_INTEGER_TYPE_DEFINITION 3228 -- | MODULAR_TYPE_DEFINITION 3229 3230 ------------------------------------------- 3231 -- 3.5.4 Signed Integer Type Definition -- 3232 ------------------------------------------- 3233 3234 -- SIGNED_INTEGER_TYPE_DEFINITION ::= 3235 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 3236 3237 -- Note: the Low_Bound and High_Bound fields are set to Empty 3238 -- for integer types defined in package Standard. 3239 3240 -- N_Signed_Integer_Type_Definition 3241 -- Sloc points to RANGE 3242 -- Low_Bound (Node1) 3243 -- High_Bound (Node2) 3244 3245 ------------------------------------ 3246 -- 3.5.4 Modular Type Definition -- 3247 ------------------------------------ 3248 3249 -- MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION 3250 3251 -- N_Modular_Type_Definition 3252 -- Sloc points to MOD 3253 -- Expression (Node3) 3254 3255 --------------------------------- 3256 -- 3.5.6 Real Type Definition -- 3257 --------------------------------- 3258 3259 -- REAL_TYPE_DEFINITION ::= 3260 -- FLOATING_POINT_DEFINITION | FIXED_POINT_DEFINITION 3261 3262 -------------------------------------- 3263 -- 3.5.7 Floating Point Definition -- 3264 -------------------------------------- 3265 3266 -- FLOATING_POINT_DEFINITION ::= 3267 -- digits static_SIMPLE_EXPRESSION [REAL_RANGE_SPECIFICATION] 3268 3269 -- Note: The Digits_Expression and Real_Range_Specifications fields 3270 -- are set to Empty for floating-point types declared in Standard. 3271 3272 -- N_Floating_Point_Definition 3273 -- Sloc points to DIGITS 3274 -- Digits_Expression (Node2) 3275 -- Real_Range_Specification (Node4) (set to Empty if not present) 3276 3277 ------------------------------------- 3278 -- 3.5.7 Real Range Specification -- 3279 ------------------------------------- 3280 3281 -- REAL_RANGE_SPECIFICATION ::= 3282 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 3283 3284 -- N_Real_Range_Specification 3285 -- Sloc points to RANGE 3286 -- Low_Bound (Node1) 3287 -- High_Bound (Node2) 3288 3289 ----------------------------------- 3290 -- 3.5.9 Fixed Point Definition -- 3291 ----------------------------------- 3292 3293 -- FIXED_POINT_DEFINITION ::= 3294 -- ORDINARY_FIXED_POINT_DEFINITION | DECIMAL_FIXED_POINT_DEFINITION 3295 3296 -------------------------------------------- 3297 -- 3.5.9 Ordinary Fixed Point Definition -- 3298 -------------------------------------------- 3299 3300 -- ORDINARY_FIXED_POINT_DEFINITION ::= 3301 -- delta static_EXPRESSION REAL_RANGE_SPECIFICATION 3302 3303 -- Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 3304 3305 -- N_Ordinary_Fixed_Point_Definition 3306 -- Sloc points to DELTA 3307 -- Delta_Expression (Node3) 3308 -- Real_Range_Specification (Node4) 3309 3310 ------------------------------------------- 3311 -- 3.5.9 Decimal Fixed Point Definition -- 3312 ------------------------------------------- 3313 3314 -- DECIMAL_FIXED_POINT_DEFINITION ::= 3315 -- delta static_EXPRESSION 3316 -- digits static_EXPRESSION [REAL_RANGE_SPECIFICATION] 3317 3318 -- Note: decimal types are not permitted in Ada 83 mode 3319 3320 -- N_Decimal_Fixed_Point_Definition 3321 -- Sloc points to DELTA 3322 -- Delta_Expression (Node3) 3323 -- Digits_Expression (Node2) 3324 -- Real_Range_Specification (Node4) (set to Empty if not present) 3325 3326 ------------------------------ 3327 -- 3.5.9 Digits Constraint -- 3328 ------------------------------ 3329 3330 -- DIGITS_CONSTRAINT ::= 3331 -- digits static_EXPRESSION [RANGE_CONSTRAINT] 3332 3333 -- Note: in Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 3334 -- Note: in Ada 95, reduced accuracy subtypes are obsolescent 3335 3336 -- N_Digits_Constraint 3337 -- Sloc points to DIGITS 3338 -- Digits_Expression (Node2) 3339 -- Range_Constraint (Node4) (set to Empty if not present) 3340 3341 -------------------------------- 3342 -- 3.6 Array Type Definition -- 3343 -------------------------------- 3344 3345 -- ARRAY_TYPE_DEFINITION ::= 3346 -- UNCONSTRAINED_ARRAY_DEFINITION | CONSTRAINED_ARRAY_DEFINITION 3347 3348 ----------------------------------------- 3349 -- 3.6 Unconstrained Array Definition -- 3350 ----------------------------------------- 3351 3352 -- UNCONSTRAINED_ARRAY_DEFINITION ::= 3353 -- array (INDEX_SUBTYPE_DEFINITION {, INDEX_SUBTYPE_DEFINITION}) of 3354 -- COMPONENT_DEFINITION 3355 3356 -- Note: dimensionality of array is indicated by number of entries in 3357 -- the Subtype_Marks list, which has one entry for each dimension. 3358 3359 -- N_Unconstrained_Array_Definition 3360 -- Sloc points to ARRAY 3361 -- Subtype_Marks (List2) 3362 -- Component_Definition (Node4) 3363 3364 ----------------------------------- 3365 -- 3.6 Index Subtype Definition -- 3366 ----------------------------------- 3367 3368 -- INDEX_SUBTYPE_DEFINITION ::= SUBTYPE_MARK range <> 3369 3370 -- There is no explicit node in the tree for an index subtype 3371 -- definition since the N_Unconstrained_Array_Definition node 3372 -- incorporates the type marks which appear in this context. 3373 3374 --------------------------------------- 3375 -- 3.6 Constrained Array Definition -- 3376 --------------------------------------- 3377 3378 -- CONSTRAINED_ARRAY_DEFINITION ::= 3379 -- array (DISCRETE_SUBTYPE_DEFINITION 3380 -- {, DISCRETE_SUBTYPE_DEFINITION}) 3381 -- of COMPONENT_DEFINITION 3382 3383 -- Note: dimensionality of array is indicated by number of entries 3384 -- in the Discrete_Subtype_Definitions list, which has one entry 3385 -- for each dimension. 3386 3387 -- N_Constrained_Array_Definition 3388 -- Sloc points to ARRAY 3389 -- Discrete_Subtype_Definitions (List2) 3390 -- Component_Definition (Node4) 3391 3392 -- Note: although the language allows the full syntax for discrete 3393 -- subtype definitions (i.e. a discrete subtype indication or a range), 3394 -- in the generated tree, we always rewrite these as N_Range nodes. 3395 3396 -------------------------------------- 3397 -- 3.6 Discrete Subtype Definition -- 3398 -------------------------------------- 3399 3400 -- DISCRETE_SUBTYPE_DEFINITION ::= 3401 -- discrete_SUBTYPE_INDICATION | RANGE 3402 3403 ------------------------------- 3404 -- 3.6 Component Definition -- 3405 ------------------------------- 3406 3407 -- COMPONENT_DEFINITION ::= 3408 -- [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION 3409 3410 -- Note: although the syntax does not permit a component definition to 3411 -- be an anonymous array (and the parser will diagnose such an attempt 3412 -- with an appropriate message), it is possible for anonymous arrays 3413 -- to appear as component definitions. The semantics and back end handle 3414 -- this case properly, and the expander in fact generates such cases. 3415 -- Access_Definition is an optional field that gives support to 3416 -- Ada 2005 (AI-230). The parser generates nodes that have either the 3417 -- Subtype_Indication field or else the Access_Definition field. 3418 3419 -- N_Component_Definition 3420 -- Sloc points to ALIASED, ACCESS, or to first token of subtype mark 3421 -- Aliased_Present (Flag4) 3422 -- Null_Exclusion_Present (Flag11) 3423 -- Subtype_Indication (Node5) (set to Empty if not present) 3424 -- Access_Definition (Node3) (set to Empty if not present) 3425 3426 ----------------------------- 3427 -- 3.6.1 Index Constraint -- 3428 ----------------------------- 3429 3430 -- INDEX_CONSTRAINT ::= (DISCRETE_RANGE {, DISCRETE_RANGE}) 3431 3432 -- It is not in general possible to distinguish between discriminant 3433 -- constraints and index constraints at parse time, since a simple 3434 -- name could be either the subtype mark of a discrete range, or an 3435 -- expression in a discriminant association with no name. Either 3436 -- entry appears simply as the name, and the semantic parse must 3437 -- distinguish between the two cases. Thus we use a common tree 3438 -- node format for both of these constraint types. 3439 3440 -- See Discriminant_Constraint for format of node 3441 3442 --------------------------- 3443 -- 3.6.1 Discrete Range -- 3444 --------------------------- 3445 3446 -- DISCRETE_RANGE ::= discrete_SUBTYPE_INDICATION | RANGE 3447 3448 ---------------------------- 3449 -- 3.7 Discriminant Part -- 3450 ---------------------------- 3451 3452 -- DISCRIMINANT_PART ::= 3453 -- UNKNOWN_DISCRIMINANT_PART | KNOWN_DISCRIMINANT_PART 3454 3455 ------------------------------------ 3456 -- 3.7 Unknown Discriminant Part -- 3457 ------------------------------------ 3458 3459 -- UNKNOWN_DISCRIMINANT_PART ::= (<>) 3460 3461 -- Note: unknown discriminant parts are not permitted in Ada 83 mode 3462 3463 -- There is no explicit node in the tree for an unknown discriminant 3464 -- part. Instead the Unknown_Discriminants_Present flag is set in the 3465 -- parent node. 3466 3467 ---------------------------------- 3468 -- 3.7 Known Discriminant Part -- 3469 ---------------------------------- 3470 3471 -- KNOWN_DISCRIMINANT_PART ::= 3472 -- (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION}) 3473 3474 ------------------------------------- 3475 -- 3.7 Discriminant Specification -- 3476 ------------------------------------- 3477 3478 -- DISCRIMINANT_SPECIFICATION ::= 3479 -- DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK 3480 -- [:= DEFAULT_EXPRESSION] 3481 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 3482 -- [:= DEFAULT_EXPRESSION] 3483 3484 -- Although the syntax allows multiple identifiers in the list, the 3485 -- semantics is as though successive specifications were given with 3486 -- identical type definition and expression components. To simplify 3487 -- semantic processing, the parser represents a multiple declaration 3488 -- case as a sequence of single specifications, using the More_Ids and 3489 -- Prev_Ids flags to preserve the original source form as described 3490 -- in the section on "Handling of Defining Identifier Lists". 3491 3492 -- N_Discriminant_Specification 3493 -- Sloc points to first identifier 3494 -- Defining_Identifier (Node1) 3495 -- Null_Exclusion_Present (Flag11) 3496 -- Discriminant_Type (Node5) subtype mark or access parameter definition 3497 -- Expression (Node3) (set to Empty if no default expression) 3498 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3499 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3500 3501 ----------------------------- 3502 -- 3.7 Default Expression -- 3503 ----------------------------- 3504 3505 -- DEFAULT_EXPRESSION ::= EXPRESSION 3506 3507 ------------------------------------ 3508 -- 3.7.1 Discriminant Constraint -- 3509 ------------------------------------ 3510 3511 -- DISCRIMINANT_CONSTRAINT ::= 3512 -- (DISCRIMINANT_ASSOCIATION {, DISCRIMINANT_ASSOCIATION}) 3513 3514 -- It is not in general possible to distinguish between discriminant 3515 -- constraints and index constraints at parse time, since a simple 3516 -- name could be either the subtype mark of a discrete range, or an 3517 -- expression in a discriminant association with no name. Either 3518 -- entry appears simply as the name, and the semantic parse must 3519 -- distinguish between the two cases. Thus we use a common tree 3520 -- node format for both of these constraint types. 3521 3522 -- N_Index_Or_Discriminant_Constraint 3523 -- Sloc points to left paren 3524 -- Constraints (List1) points to list of discrete ranges or 3525 -- discriminant associations 3526 3527 ------------------------------------- 3528 -- 3.7.1 Discriminant Association -- 3529 ------------------------------------- 3530 3531 -- DISCRIMINANT_ASSOCIATION ::= 3532 -- [discriminant_SELECTOR_NAME 3533 -- {| discriminant_SELECTOR_NAME} =>] EXPRESSION 3534 3535 -- Note: a discriminant association that has no selector name list 3536 -- appears directly as an expression in the tree. 3537 3538 -- N_Discriminant_Association 3539 -- Sloc points to first token of discriminant association 3540 -- Selector_Names (List1) (always non-empty, since if no selector 3541 -- names are present, this node is not used, see comment above) 3542 -- Expression (Node3) 3543 3544 --------------------------------- 3545 -- 3.8 Record Type Definition -- 3546 --------------------------------- 3547 3548 -- RECORD_TYPE_DEFINITION ::= 3549 -- [[abstract] tagged] [limited] RECORD_DEFINITION 3550 3551 -- Note: ABSTRACT, TAGGED, LIMITED are not permitted in Ada 83 mode 3552 3553 -- There is no explicit node in the tree for a record type definition. 3554 -- Instead the flags for Tagged_Present and Limited_Present appear in 3555 -- the N_Record_Definition node for a record definition appearing in 3556 -- the context of a record type definition. 3557 3558 ---------------------------- 3559 -- 3.8 Record Definition -- 3560 ---------------------------- 3561 3562 -- RECORD_DEFINITION ::= 3563 -- record 3564 -- COMPONENT_LIST 3565 -- end record 3566 -- | null record 3567 3568 -- Note: the Abstract_Present, Tagged_Present, and Limited_Present 3569 -- flags appear only for a record definition appearing in a record 3570 -- type definition. 3571 3572 -- Note: the NULL RECORD case is not permitted in Ada 83 3573 3574 -- N_Record_Definition 3575 -- Sloc points to RECORD or NULL 3576 -- End_Label (Node4) (set to Empty if internally generated record) 3577 -- Abstract_Present (Flag4) 3578 -- Tagged_Present (Flag15) 3579 -- Limited_Present (Flag17) 3580 -- Component_List (Node1) empty in null record case 3581 -- Null_Present (Flag13) set in null record case 3582 -- Task_Present (Flag5) set in task interfaces 3583 -- Protected_Present (Flag6) set in protected interfaces 3584 -- Synchronized_Present (Flag7) set in interfaces 3585 -- Interface_Present (Flag16) set in abstract interfaces 3586 -- Interface_List (List2) (set to No_List if none) 3587 3588 -- Note: Task_Present, Protected_Present, Synchronized _Present, 3589 -- Interface_List and Interface_Present are used for abstract 3590 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 3591 3592 ------------------------- 3593 -- 3.8 Component List -- 3594 ------------------------- 3595 3596 -- COMPONENT_LIST ::= 3597 -- COMPONENT_ITEM {COMPONENT_ITEM} 3598 -- | {COMPONENT_ITEM} VARIANT_PART 3599 -- | null; 3600 3601 -- N_Component_List 3602 -- Sloc points to first token of component list 3603 -- Component_Items (List3) 3604 -- Variant_Part (Node4) (set to Empty if no variant part) 3605 -- Null_Present (Flag13) 3606 3607 ------------------------- 3608 -- 3.8 Component Item -- 3609 ------------------------- 3610 3611 -- COMPONENT_ITEM ::= COMPONENT_DECLARATION | REPRESENTATION_CLAUSE 3612 3613 -- Note: A component item can also be a pragma, and in the tree 3614 -- that is obtained after semantic processing, a component item 3615 -- can be an N_Null node resulting from a non-recognized pragma. 3616 3617 -------------------------------- 3618 -- 3.8 Component Declaration -- 3619 -------------------------------- 3620 3621 -- COMPONENT_DECLARATION ::= 3622 -- DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION 3623 -- [:= DEFAULT_EXPRESSION] 3624 -- [ASPECT_SPECIFICATIONS]; 3625 3626 -- Note: although the syntax does not permit a component definition to 3627 -- be an anonymous array (and the parser will diagnose such an attempt 3628 -- with an appropriate message), it is possible for anonymous arrays 3629 -- to appear as component definitions. The semantics and back end handle 3630 -- this case properly, and the expander in fact generates such cases. 3631 3632 -- Although the syntax allows multiple identifiers in the list, the 3633 -- semantics is as though successive declarations were given with the 3634 -- same component definition and expression components. To simplify 3635 -- semantic processing, the parser represents a multiple declaration 3636 -- case as a sequence of single declarations, using the More_Ids and 3637 -- Prev_Ids flags to preserve the original source form as described 3638 -- in the section on "Handling of Defining Identifier Lists". 3639 3640 -- N_Component_Declaration 3641 -- Sloc points to first identifier 3642 -- Defining_Identifier (Node1) 3643 -- Component_Definition (Node4) 3644 -- Expression (Node3) (set to Empty if no default expression) 3645 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3646 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3647 3648 ------------------------- 3649 -- 3.8.1 Variant Part -- 3650 ------------------------- 3651 3652 -- VARIANT_PART ::= 3653 -- case discriminant_DIRECT_NAME is 3654 -- VARIANT {VARIANT} 3655 -- end case; 3656 3657 -- Note: the variants list can contain pragmas as well as variants. 3658 -- In a properly formed program there is at least one variant. 3659 3660 -- N_Variant_Part 3661 -- Sloc points to CASE 3662 -- Name (Node2) 3663 -- Variants (List1) 3664 3665 -------------------- 3666 -- 3.8.1 Variant -- 3667 -------------------- 3668 3669 -- VARIANT ::= 3670 -- when DISCRETE_CHOICE_LIST => 3671 -- COMPONENT_LIST 3672 3673 -- N_Variant 3674 -- Sloc points to WHEN 3675 -- Discrete_Choices (List4) 3676 -- Component_List (Node1) 3677 -- Enclosing_Variant (Node2-Sem) 3678 -- Present_Expr (Uint3-Sem) 3679 -- Dcheck_Function (Node5-Sem) 3680 -- Has_SP_Choice (Flag15-Sem) 3681 3682 -- Note: in the list of Discrete_Choices, the tree passed to the back 3683 -- end does not have choice entries corresponding to names of statically 3684 -- predicated subtypes. Such entries are always expanded out to the list 3685 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 3686 -- mode also has this expansion, but done with a proper Rewrite call on 3687 -- the N_Variant node so that ASIS can properly retrieve the original. 3688 3689 --------------------------------- 3690 -- 3.8.1 Discrete Choice List -- 3691 --------------------------------- 3692 3693 -- DISCRETE_CHOICE_LIST ::= DISCRETE_CHOICE {| DISCRETE_CHOICE} 3694 3695 ---------------------------- 3696 -- 3.8.1 Discrete Choice -- 3697 ---------------------------- 3698 3699 -- DISCRETE_CHOICE ::= EXPRESSION | DISCRETE_RANGE | others 3700 3701 -- Note: in Ada 83 mode, the expression must be a simple expression 3702 3703 -- The only choice that appears explicitly is the OTHERS choice, as 3704 -- defined here. Other cases of discrete choice (expression and 3705 -- discrete range) appear directly. This production is also used 3706 -- for the OTHERS possibility of an exception choice. 3707 3708 -- Note: in accordance with the syntax, the parser does not check that 3709 -- OTHERS appears at the end on its own in a choice list context. This 3710 -- is a semantic check. 3711 3712 -- N_Others_Choice 3713 -- Sloc points to OTHERS 3714 -- Others_Discrete_Choices (List1-Sem) 3715 -- All_Others (Flag11-Sem) 3716 3717 ---------------------------------- 3718 -- 3.9.1 Record Extension Part -- 3719 ---------------------------------- 3720 3721 -- RECORD_EXTENSION_PART ::= with RECORD_DEFINITION 3722 3723 -- Note: record extension parts are not permitted in Ada 83 mode 3724 3725 -------------------------------------- 3726 -- 3.9.4 Interface Type Definition -- 3727 -------------------------------------- 3728 3729 -- INTERFACE_TYPE_DEFINITION ::= 3730 -- [limited | task | protected | synchronized] 3731 -- interface [interface_list] 3732 3733 -- Note: Interfaces are implemented with N_Record_Definition and 3734 -- N_Derived_Type_Definition nodes because most of the support 3735 -- for the analysis of abstract types has been reused to 3736 -- analyze abstract interfaces. 3737 3738 ---------------------------------- 3739 -- 3.10 Access Type Definition -- 3740 ---------------------------------- 3741 3742 -- ACCESS_TYPE_DEFINITION ::= 3743 -- ACCESS_TO_OBJECT_DEFINITION 3744 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3745 3746 -------------------------- 3747 -- 3.10 Null Exclusion -- 3748 -------------------------- 3749 3750 -- NULL_EXCLUSION ::= not null 3751 3752 --------------------------------------- 3753 -- 3.10 Access To Object Definition -- 3754 --------------------------------------- 3755 3756 -- ACCESS_TO_OBJECT_DEFINITION ::= 3757 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] 3758 -- SUBTYPE_INDICATION 3759 3760 -- N_Access_To_Object_Definition 3761 -- Sloc points to ACCESS 3762 -- All_Present (Flag15) 3763 -- Null_Exclusion_Present (Flag11) 3764 -- Null_Excluding_Subtype (Flag16) 3765 -- Subtype_Indication (Node5) 3766 -- Constant_Present (Flag17) 3767 3768 ----------------------------------- 3769 -- 3.10 General Access Modifier -- 3770 ----------------------------------- 3771 3772 -- GENERAL_ACCESS_MODIFIER ::= all | constant 3773 3774 -- Note: general access modifiers are not permitted in Ada 83 mode 3775 3776 -- There is no explicit node in the tree for general access modifier. 3777 -- Instead the All_Present or Constant_Present flags are set in the 3778 -- parent node. 3779 3780 ------------------------------------------- 3781 -- 3.10 Access To Subprogram Definition -- 3782 ------------------------------------------- 3783 3784 -- ACCESS_TO_SUBPROGRAM_DEFINITION 3785 -- [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE 3786 -- | [NULL_EXCLUSION] access [protected] function 3787 -- PARAMETER_AND_RESULT_PROFILE 3788 3789 -- Note: access to subprograms are not permitted in Ada 83 mode 3790 3791 -- N_Access_Function_Definition 3792 -- Sloc points to ACCESS 3793 -- Null_Exclusion_Present (Flag11) 3794 -- Null_Exclusion_In_Return_Present (Flag14) 3795 -- Protected_Present (Flag6) 3796 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3797 -- Result_Definition (Node4) result subtype (subtype mark or access def) 3798 3799 -- N_Access_Procedure_Definition 3800 -- Sloc points to ACCESS 3801 -- Null_Exclusion_Present (Flag11) 3802 -- Protected_Present (Flag6) 3803 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3804 3805 ----------------------------- 3806 -- 3.10 Access Definition -- 3807 ----------------------------- 3808 3809 -- ACCESS_DEFINITION ::= 3810 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK 3811 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3812 3813 -- Note: access to subprograms are an Ada 2005 (AI-254) extension 3814 3815 -- N_Access_Definition 3816 -- Sloc points to ACCESS 3817 -- Null_Exclusion_Present (Flag11) 3818 -- All_Present (Flag15) 3819 -- Constant_Present (Flag17) 3820 -- Subtype_Mark (Node4) 3821 -- Access_To_Subprogram_Definition (Node3) (set to Empty if not present) 3822 3823 ----------------------------------------- 3824 -- 3.10.1 Incomplete Type Declaration -- 3825 ----------------------------------------- 3826 3827 -- INCOMPLETE_TYPE_DECLARATION ::= 3828 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED]; 3829 3830 -- N_Incomplete_Type_Declaration 3831 -- Sloc points to TYPE 3832 -- Defining_Identifier (Node1) 3833 -- Discriminant_Specifications (List4) (set to No_List if no 3834 -- discriminant part, or if the discriminant part is an 3835 -- unknown discriminant part) 3836 -- Premature_Use (Node5-Sem) used for improved diagnostics. 3837 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 3838 -- Tagged_Present (Flag15) 3839 3840 ---------------------------- 3841 -- 3.11 Declarative Part -- 3842 ---------------------------- 3843 3844 -- DECLARATIVE_PART ::= {DECLARATIVE_ITEM} 3845 3846 -- Note: although the parser enforces the syntactic requirement that 3847 -- a declarative part can contain only declarations, the semantic 3848 -- processing may add statements to the list of actions in a 3849 -- declarative part, so the code generator should be prepared 3850 -- to accept a statement in this position. 3851 3852 ---------------------------- 3853 -- 3.11 Declarative Item -- 3854 ---------------------------- 3855 3856 -- DECLARATIVE_ITEM ::= BASIC_DECLARATIVE_ITEM | BODY 3857 3858 ---------------------------------- 3859 -- 3.11 Basic Declarative Item -- 3860 ---------------------------------- 3861 3862 -- BASIC_DECLARATIVE_ITEM ::= 3863 -- BASIC_DECLARATION | REPRESENTATION_CLAUSE | USE_CLAUSE 3864 3865 ---------------- 3866 -- 3.11 Body -- 3867 ---------------- 3868 3869 -- BODY ::= PROPER_BODY | BODY_STUB 3870 3871 ----------------------- 3872 -- 3.11 Proper Body -- 3873 ----------------------- 3874 3875 -- PROPER_BODY ::= 3876 -- SUBPROGRAM_BODY | PACKAGE_BODY | TASK_BODY | PROTECTED_BODY 3877 3878 --------------- 3879 -- 4.1 Name -- 3880 --------------- 3881 3882 -- NAME ::= 3883 -- DIRECT_NAME | EXPLICIT_DEREFERENCE 3884 -- | INDEXED_COMPONENT | SLICE 3885 -- | SELECTED_COMPONENT | ATTRIBUTE_REFERENCE 3886 -- | TYPE_CONVERSION | FUNCTION_CALL 3887 -- | CHARACTER_LITERAL 3888 3889 ---------------------- 3890 -- 4.1 Direct Name -- 3891 ---------------------- 3892 3893 -- DIRECT_NAME ::= IDENTIFIER | OPERATOR_SYMBOL 3894 3895 ----------------- 3896 -- 4.1 Prefix -- 3897 ----------------- 3898 3899 -- PREFIX ::= NAME | IMPLICIT_DEREFERENCE 3900 3901 ------------------------------- 3902 -- 4.1 Explicit Dereference -- 3903 ------------------------------- 3904 3905 -- EXPLICIT_DEREFERENCE ::= NAME . all 3906 3907 -- N_Explicit_Dereference 3908 -- Sloc points to ALL 3909 -- Prefix (Node3) 3910 -- Actual_Designated_Subtype (Node4-Sem) 3911 -- Has_Dereference_Action (Flag13-Sem) 3912 -- Atomic_Sync_Required (Flag14-Sem) 3913 -- plus fields for expression 3914 3915 ------------------------------- 3916 -- 4.1 Implicit Dereference -- 3917 ------------------------------- 3918 3919 -- IMPLICIT_DEREFERENCE ::= NAME 3920 3921 ------------------------------ 3922 -- 4.1.1 Indexed Component -- 3923 ------------------------------ 3924 3925 -- INDEXED_COMPONENT ::= PREFIX (EXPRESSION {, EXPRESSION}) 3926 3927 -- Note: the parser may generate this node in some situations where it 3928 -- should be a function call. The semantic pass must correct this 3929 -- misidentification (which is inevitable at the parser level). 3930 3931 -- N_Indexed_Component 3932 -- Sloc contains a copy of the Sloc value of the Prefix 3933 -- Prefix (Node3) 3934 -- Expressions (List1) 3935 -- Generalized_Indexing (Node4-Sem) 3936 -- Atomic_Sync_Required (Flag14-Sem) 3937 -- plus fields for expression 3938 3939 -- Note: if any of the subscripts requires a range check, then the 3940 -- Do_Range_Check flag is set on the corresponding expression, with 3941 -- the index type being determined from the type of the Prefix, which 3942 -- references the array being indexed. 3943 3944 -- Note: in a fully analyzed and expanded indexed component node, and 3945 -- hence in any such node that gigi sees, if the prefix is an access 3946 -- type, then an explicit dereference operation has been inserted. 3947 3948 ------------------ 3949 -- 4.1.2 Slice -- 3950 ------------------ 3951 3952 -- SLICE ::= PREFIX (DISCRETE_RANGE) 3953 3954 -- Note: an implicit subtype is created to describe the resulting 3955 -- type, so that the bounds of this type are the bounds of the slice. 3956 3957 -- N_Slice 3958 -- Sloc points to first token of prefix 3959 -- Prefix (Node3) 3960 -- Discrete_Range (Node4) 3961 -- plus fields for expression 3962 3963 ------------------------------- 3964 -- 4.1.3 Selected Component -- 3965 ------------------------------- 3966 3967 -- SELECTED_COMPONENT ::= PREFIX . SELECTOR_NAME 3968 3969 -- Note: selected components that are semantically expanded names get 3970 -- changed during semantic processing into the separate N_Expanded_Name 3971 -- node. See description of this node in the section on semantic nodes. 3972 3973 -- N_Selected_Component 3974 -- Sloc points to the period 3975 -- Prefix (Node3) 3976 -- Selector_Name (Node2) 3977 -- Associated_Node (Node4-Sem) 3978 -- Do_Discriminant_Check (Flag3-Sem) 3979 -- Is_In_Discriminant_Check (Flag11-Sem) 3980 -- Atomic_Sync_Required (Flag14-Sem) 3981 -- Is_Prefixed_Call (Flag17-Sem) 3982 -- plus fields for expression 3983 3984 -------------------------- 3985 -- 4.1.3 Selector Name -- 3986 -------------------------- 3987 3988 -- SELECTOR_NAME ::= IDENTIFIER | CHARACTER_LITERAL | OPERATOR_SYMBOL 3989 3990 -------------------------------- 3991 -- 4.1.4 Attribute Reference -- 3992 -------------------------------- 3993 3994 -- ATTRIBUTE_REFERENCE ::= PREFIX ' ATTRIBUTE_DESIGNATOR 3995 3996 -- Note: the syntax is quite ambiguous at this point. Consider: 3997 3998 -- A'Length (X) X is part of the attribute designator 3999 -- A'Pos (X) X is an explicit actual parameter of function A'Pos 4000 -- A'Class (X) X is the expression of a type conversion 4001 4002 -- It would be possible for the parser to distinguish these cases 4003 -- by looking at the attribute identifier. However, that would mean 4004 -- more work in introducing new implementation defined attributes, 4005 -- and also it would mean that special processing for attributes 4006 -- would be scattered around, instead of being centralized in the 4007 -- semantic routine that handles an N_Attribute_Reference node. 4008 -- Consequently, the parser in all the above cases stores the 4009 -- expression (X in these examples) as a single element list in 4010 -- in the Expressions field of the N_Attribute_Reference node. 4011 4012 -- Similarly, for attributes like Max which take two arguments, 4013 -- we store the two arguments as a two element list in the 4014 -- Expressions field. Of course it is clear at parse time that 4015 -- this case is really a function call with an attribute as the 4016 -- prefix, but it turns out to be convenient to handle the two 4017 -- argument case in a similar manner to the one argument case, 4018 -- and indeed in general the parser will accept any number of 4019 -- expressions in this position and store them as a list in the 4020 -- attribute reference node. This allows for future addition of 4021 -- attributes that take more than two arguments. 4022 4023 -- Note: named associates are not permitted in function calls where 4024 -- the function is an attribute (see RM 6.4(3)) so it is legitimate 4025 -- to skip the normal subprogram argument processing. 4026 4027 -- Note: for the attributes whose designators are technically keywords, 4028 -- i.e. digits, access, delta, range, the Attribute_Name field contains 4029 -- the corresponding name, even though no identifier is involved. 4030 4031 -- Note: the generated code may contain stream attributes applied to 4032 -- limited types for which no stream routines exist officially. In such 4033 -- case, the result is to use the stream attribute for the underlying 4034 -- full type, or in the case of a protected type, the components 4035 -- (including any discriminants) are merely streamed in order. 4036 4037 -- See Exp_Attr for a complete description of which attributes are 4038 -- passed onto Gigi, and which are handled entirely by the front end. 4039 4040 -- Gigi restriction: For the Pos attribute, the prefix cannot be 4041 -- a non-standard enumeration type or a nonzero/zero semantics 4042 -- boolean type, so the value is simply the stored representation. 4043 4044 -- Gigi requirement: For the Mechanism_Code attribute, if the prefix 4045 -- references a subprogram that is a renaming, then the front end must 4046 -- rewrite the attribute to refer directly to the renamed entity. 4047 4048 -- Note: syntactically the prefix of an attribute reference must be a 4049 -- name, and this (somewhat artificial) requirement is enforced by the 4050 -- parser. However, for many attributes, such as 'Valid, it is quite 4051 -- reasonable to apply the attribute to any value, and hence to any 4052 -- expression. Internally in the tree, the prefix is an expression which 4053 -- does not have to be a name, and this is handled fine by the semantic 4054 -- analysis and expansion, and back ends. This arises for the case of 4055 -- attribute references built by the expander (e.g. 'Valid for the case 4056 -- of an implicit validity check). 4057 4058 -- Note: In generated code, the Address and Unrestricted_Access 4059 -- attributes can be applied to any expression, and the meaning is 4060 -- to create an object containing the value (the object is in the 4061 -- current stack frame), and pass the address of this value. If the 4062 -- Must_Be_Byte_Aligned flag is set, then the object whose address 4063 -- is taken must be on a byte (storage unit) boundary, and if it is 4064 -- not (or may not be), then the generated code must create a copy 4065 -- that is byte aligned, and pass the address of this copy. 4066 4067 -- N_Attribute_Reference 4068 -- Sloc points to apostrophe 4069 -- Prefix (Node3) (general expression, see note above) 4070 -- Attribute_Name (Name2) identifier name from attribute designator 4071 -- Expressions (List1) (set to No_List if no associated expressions) 4072 -- Entity (Node4-Sem) used if the attribute yields a type 4073 -- Associated_Node (Node4-Sem) 4074 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 4075 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 4076 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 4077 -- Header_Size_Added (Flag11-Sem) 4078 -- Redundant_Use (Flag13-Sem) 4079 -- Must_Be_Byte_Aligned (Flag14-Sem) 4080 -- plus fields for expression 4081 4082 -- Note: in Modify_Tree_For_C mode, Max and Min attributes are expanded 4083 -- into equivalent if expressions, properly taking care of side effects. 4084 4085 --------------------------------- 4086 -- 4.1.4 Attribute Designator -- 4087 --------------------------------- 4088 4089 -- ATTRIBUTE_DESIGNATOR ::= 4090 -- IDENTIFIER [(static_EXPRESSION)] 4091 -- | access | delta | digits 4092 4093 -- There is no explicit node in the tree for an attribute designator. 4094 -- Instead the Attribute_Name and Expressions fields of the parent 4095 -- node (N_Attribute_Reference node) hold the information. 4096 4097 -- Note: if ACCESS, DELTA, or DIGITS appears in an attribute 4098 -- designator, then they are treated as identifiers internally 4099 -- rather than the keywords of the same name. 4100 4101 -------------------------------------- 4102 -- 4.1.4 Range Attribute Reference -- 4103 -------------------------------------- 4104 4105 -- RANGE_ATTRIBUTE_REFERENCE ::= PREFIX ' RANGE_ATTRIBUTE_DESIGNATOR 4106 4107 -- A range attribute reference is represented in the tree using the 4108 -- normal N_Attribute_Reference node. 4109 4110 --------------------------------------- 4111 -- 4.1.4 Range Attribute Designator -- 4112 --------------------------------------- 4113 4114 -- RANGE_ATTRIBUTE_DESIGNATOR ::= Range [(static_EXPRESSION)] 4115 4116 -- A range attribute designator is represented in the tree using the 4117 -- normal N_Attribute_Reference node. 4118 4119 -------------------- 4120 -- 4.3 Aggregate -- 4121 -------------------- 4122 4123 -- AGGREGATE ::= 4124 -- RECORD_AGGREGATE | EXTENSION_AGGREGATE | ARRAY_AGGREGATE 4125 4126 ----------------------------- 4127 -- 4.3.1 Record Aggregate -- 4128 ----------------------------- 4129 4130 -- RECORD_AGGREGATE ::= (RECORD_COMPONENT_ASSOCIATION_LIST) 4131 4132 -- N_Aggregate 4133 -- Sloc points to left parenthesis 4134 -- Expressions (List1) (set to No_List if none or null record case) 4135 -- Component_Associations (List2) (set to No_List if none) 4136 -- Null_Record_Present (Flag17) 4137 -- Aggregate_Bounds (Node3-Sem) 4138 -- Associated_Node (Node4-Sem) 4139 -- Compile_Time_Known_Aggregate (Flag18-Sem) 4140 -- Expansion_Delayed (Flag11-Sem) 4141 -- Has_Self_Reference (Flag13-Sem) 4142 -- plus fields for expression 4143 4144 -- Note: this structure is used for both record and array aggregates 4145 -- since the two cases are not separable by the parser. The parser 4146 -- makes no attempt to enforce consistency here, so it is up to the 4147 -- semantic phase to make sure that the aggregate is consistent (i.e. 4148 -- that it is not a "half-and-half" case that mixes record and array 4149 -- syntax). In particular, for a record aggregate, the expressions 4150 -- field will be set if there are positional associations. 4151 4152 -- Note: N_Aggregate is not used for all aggregates; in particular, 4153 -- there is a separate node kind for extension aggregates. 4154 4155 -- Note: gigi/gcc can handle array aggregates correctly providing that 4156 -- they are entirely positional, and the array subtype involved has a 4157 -- known at compile time length and is not bit packed, or a convention 4158 -- Fortran array with more than one dimension. If these conditions 4159 -- are not met, then the front end must translate the aggregate into 4160 -- an appropriate set of assignments into a temporary. 4161 4162 -- Note: for the record aggregate case, gigi/gcc can handle most cases 4163 -- of record aggregates, including those for packed, and rep-claused 4164 -- records, and also variant records, providing that there are no 4165 -- variable length fields whose size is not known at compile time, 4166 -- and providing that the aggregate is presented in fully named form. 4167 4168 -- The other situation in which array aggregates and record aggregates 4169 -- cannot be passed to the back end is if assignment to one or more 4170 -- components itself needs expansion, e.g. in the case of an assignment 4171 -- of an object of a controlled type. In such cases, the front end 4172 -- must expand the aggregate to a series of assignments, and apply 4173 -- the required expansion to the individual assignment statements. 4174 4175 ---------------------------------------------- 4176 -- 4.3.1 Record Component Association List -- 4177 ---------------------------------------------- 4178 4179 -- RECORD_COMPONENT_ASSOCIATION_LIST ::= 4180 -- RECORD_COMPONENT_ASSOCIATION {, RECORD_COMPONENT_ASSOCIATION} 4181 -- | null record 4182 4183 -- There is no explicit node in the tree for a record component 4184 -- association list. Instead the Null_Record_Present flag is set in 4185 -- the parent node for the NULL RECORD case. 4186 4187 ------------------------------------------------------ 4188 -- 4.3.1 Record Component Association (also 4.3.3) -- 4189 ------------------------------------------------------ 4190 4191 -- RECORD_COMPONENT_ASSOCIATION ::= 4192 -- [COMPONENT_CHOICE_LIST =>] EXPRESSION 4193 4194 -- N_Component_Association 4195 -- Sloc points to first selector name 4196 -- Choices (List1) 4197 -- Loop_Actions (List2-Sem) 4198 -- Expression (Node3) (empty if Box_Present) 4199 -- Box_Present (Flag15) 4200 -- Inherited_Discriminant (Flag13) 4201 4202 -- Note: this structure is used for both record component associations 4203 -- and array component associations, since the two cases aren't always 4204 -- separable by the parser. The choices list may represent either a 4205 -- list of selector names in the record aggregate case, or a list of 4206 -- discrete choices in the array aggregate case or an N_Others_Choice 4207 -- node (which appears as a singleton list). Box_Present gives support 4208 -- to Ada 2005 (AI-287). 4209 4210 ---------------------------------- 4211 -- 4.3.1 Component Choice List -- 4212 ---------------------------------- 4213 4214 -- COMPONENT_CHOICE_LIST ::= 4215 -- component_SELECTOR_NAME {| component_SELECTOR_NAME} 4216 -- | others 4217 4218 -- The entries of a component choice list appear in the Choices list of 4219 -- the associated N_Component_Association, as either selector names, or 4220 -- as an N_Others_Choice node. 4221 4222 -------------------------------- 4223 -- 4.3.2 Extension Aggregate -- 4224 -------------------------------- 4225 4226 -- EXTENSION_AGGREGATE ::= 4227 -- (ANCESTOR_PART with RECORD_COMPONENT_ASSOCIATION_LIST) 4228 4229 -- Note: extension aggregates are not permitted in Ada 83 mode 4230 4231 -- N_Extension_Aggregate 4232 -- Sloc points to left parenthesis 4233 -- Ancestor_Part (Node3) 4234 -- Associated_Node (Node4-Sem) 4235 -- Expressions (List1) (set to No_List if none or null record case) 4236 -- Component_Associations (List2) (set to No_List if none) 4237 -- Null_Record_Present (Flag17) 4238 -- Expansion_Delayed (Flag11-Sem) 4239 -- Has_Self_Reference (Flag13-Sem) 4240 -- plus fields for expression 4241 4242 -------------------------- 4243 -- 4.3.2 Ancestor Part -- 4244 -------------------------- 4245 4246 -- ANCESTOR_PART ::= EXPRESSION | SUBTYPE_MARK 4247 4248 ---------------------------- 4249 -- 4.3.3 Array Aggregate -- 4250 ---------------------------- 4251 4252 -- ARRAY_AGGREGATE ::= 4253 -- POSITIONAL_ARRAY_AGGREGATE | NAMED_ARRAY_AGGREGATE 4254 4255 --------------------------------------- 4256 -- 4.3.3 Positional Array Aggregate -- 4257 --------------------------------------- 4258 4259 -- POSITIONAL_ARRAY_AGGREGATE ::= 4260 -- (EXPRESSION, EXPRESSION {, EXPRESSION}) 4261 -- | (EXPRESSION {, EXPRESSION}, others => EXPRESSION) 4262 4263 -- See Record_Aggregate (4.3.1) for node structure 4264 4265 ---------------------------------- 4266 -- 4.3.3 Named Array Aggregate -- 4267 ---------------------------------- 4268 4269 -- NAMED_ARRAY_AGGREGATE ::= 4270 -- (ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION}) 4271 4272 -- See Record_Aggregate (4.3.1) for node structure 4273 4274 ---------------------------------------- 4275 -- 4.3.3 Array Component Association -- 4276 ---------------------------------------- 4277 4278 -- ARRAY_COMPONENT_ASSOCIATION ::= 4279 -- DISCRETE_CHOICE_LIST => EXPRESSION 4280 -- | ITERATED_COMPONENT_ASSOCIATION 4281 4282 -- See Record_Component_Association (4.3.1) for node structure 4283 -- The iterated_component_association is introduced into the 4284 -- Corrigendum of Ada_2012 by AI12-061. 4285 4286 ------------------------------------------ 4287 -- 4.3.3 Iterated component Association -- 4288 ------------------------------------------ 4289 4290 -- ITERATED_COMPONENT_ASSOCIATION ::= 4291 -- for DEFINING_IDENTIFIER in DISCRETE_CHOICE_LIST => EXPRESSION 4292 4293 -- N_Iterated_Component_Association 4294 -- Sloc points to FOR 4295 -- Defining_Identifier (Node1) 4296 -- Loop_Actions (List2-Sem) 4297 -- Expression (Node3) 4298 -- Discrete_Choices (List4) 4299 -- Box_Present (Flag15) 4300 4301 -- Note that Box_Present is always False, but it is intentionally added 4302 -- for completeness. 4303 4304 ---------------------------- 4305 -- 4.3.4 Delta Aggregate -- 4306 ---------------------------- 4307 4308 -- N_Delta_Aggregate 4309 -- Sloc points to left parenthesis 4310 -- Expression (Node3) 4311 -- Component_Associations (List2) 4312 4313 -------------------------------------------------- 4314 -- 4.4 Expression/Relation/Term/Factor/Primary -- 4315 -------------------------------------------------- 4316 4317 -- EXPRESSION ::= 4318 -- RELATION {LOGICAL_OPERATOR RELATION} 4319 4320 -- CHOICE_EXPRESSION ::= 4321 -- CHOICE_RELATION {LOGICAL_OPERATOR CHOICE_RELATION} 4322 4323 -- CHOICE_RELATION ::= 4324 -- SIMPLE_EXPRESSION [RELATIONAL_OPERATOR SIMPLE_EXPRESSION] 4325 4326 -- RELATION ::= 4327 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 4328 -- | RAISE_EXPRESSION 4329 4330 -- MEMBERSHIP_CHOICE_LIST ::= 4331 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 4332 4333 -- MEMBERSHIP_CHOICE ::= 4334 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 4335 4336 -- LOGICAL_OPERATOR ::= and | and then | or | or else | xor 4337 4338 -- SIMPLE_EXPRESSION ::= 4339 -- [UNARY_ADDING_OPERATOR] TERM {BINARY_ADDING_OPERATOR TERM} 4340 4341 -- TERM ::= FACTOR {MULTIPLYING_OPERATOR FACTOR} 4342 4343 -- FACTOR ::= PRIMARY [** PRIMARY] | abs PRIMARY | not PRIMARY 4344 4345 -- No nodes are generated for any of these constructs. Instead, the 4346 -- node for the operator appears directly. When we refer to an 4347 -- expression in this description, we mean any of the possible 4348 -- constituent components of an expression (e.g. identifier is 4349 -- an example of an expression). 4350 4351 -- Note: the above syntax is that Ada 2012 syntax which restricts 4352 -- choice relations to simple expressions to avoid ambiguities in 4353 -- some contexts with set membership notation. It has been decided 4354 -- that in retrospect, the Ada 95 change allowing general expressions 4355 -- in this context was a mistake, so we have reverted to the above 4356 -- syntax in Ada 95 and Ada 2005 modes (the restriction to simple 4357 -- expressions was there in Ada 83 from the start). 4358 4359 ------------------ 4360 -- 4.4 Primary -- 4361 ------------------ 4362 4363 -- PRIMARY ::= 4364 -- NUMERIC_LITERAL | null 4365 -- | STRING_LITERAL | AGGREGATE 4366 -- | NAME | QUALIFIED_EXPRESSION 4367 -- | ALLOCATOR | (EXPRESSION) 4368 4369 -- Usually there is no explicit node in the tree for primary. Instead 4370 -- the constituent (e.g. AGGREGATE) appears directly. There are two 4371 -- exceptions. First, there is an explicit node for a null primary. 4372 4373 -- N_Null 4374 -- Sloc points to NULL 4375 -- plus fields for expression 4376 4377 -- Second, the case of (EXPRESSION) is handled specially. Ada requires 4378 -- that the parser keep track of which subexpressions are enclosed 4379 -- in parentheses, and how many levels of parentheses are used. This 4380 -- information is required for optimization purposes, and also for 4381 -- some semantic checks (e.g. (((1))) in a procedure spec does not 4382 -- conform with ((((1)))) in the body). 4383 4384 -- The parentheses are recorded by keeping a Paren_Count field in every 4385 -- subexpression node (it is actually present in all nodes, but only 4386 -- used in subexpression nodes). This count records the number of 4387 -- levels of parentheses. If the number of levels in the source exceeds 4388 -- the maximum accommodated by this count, then the count is simply left 4389 -- at the maximum value. This means that there are some pathological 4390 -- cases of failure to detect conformance failures (e.g. an expression 4391 -- with 500 levels of parens will conform with one with 501 levels), 4392 -- but we do not need to lose sleep over this. 4393 4394 -- Historical note: in versions of GNAT prior to 1.75, there was a node 4395 -- type N_Parenthesized_Expression used to accurately record unlimited 4396 -- numbers of levels of parentheses. However, it turned out to be a 4397 -- real nuisance to have to take into account the possible presence of 4398 -- this node during semantic analysis, since basically parentheses have 4399 -- zero relevance to semantic analysis. 4400 4401 -- Note: the level of parentheses always present in things like 4402 -- aggregates does not count, only the parentheses in the primary 4403 -- (EXPRESSION) affect the setting of the Paren_Count field. 4404 4405 -- 2nd Note: the contents of the Expression field must be ignored (i.e. 4406 -- treated as though it were Empty) if No_Initialization is set True. 4407 4408 -------------------------------------- 4409 -- 4.5 Short-Circuit Control Forms -- 4410 -------------------------------------- 4411 4412 -- EXPRESSION ::= 4413 -- RELATION {and then RELATION} | RELATION {or else RELATION} 4414 4415 -- Gigi restriction: For both these control forms, the operand and 4416 -- result types are always Standard.Boolean. The expander inserts the 4417 -- required conversion operations where needed to ensure this is the 4418 -- case. 4419 4420 -- N_And_Then 4421 -- Sloc points to AND of AND THEN 4422 -- Left_Opnd (Node2) 4423 -- Right_Opnd (Node3) 4424 -- Actions (List1-Sem) 4425 -- plus fields for expression 4426 4427 -- N_Or_Else 4428 -- Sloc points to OR of OR ELSE 4429 -- Left_Opnd (Node2) 4430 -- Right_Opnd (Node3) 4431 -- Actions (List1-Sem) 4432 -- plus fields for expression 4433 4434 -- Note: The Actions field is used to hold actions associated with 4435 -- the right hand operand. These have to be treated specially since 4436 -- they are not unconditionally executed. See Insert_Actions for a 4437 -- more detailed description of how these actions are handled. 4438 4439 --------------------------- 4440 -- 4.5 Membership Tests -- 4441 --------------------------- 4442 4443 -- RELATION ::= 4444 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 4445 4446 -- MEMBERSHIP_CHOICE_LIST ::= 4447 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 4448 4449 -- MEMBERSHIP_CHOICE ::= 4450 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 4451 4452 -- Note: although the grammar above allows only a range or a subtype 4453 -- mark, the parser in fact will accept any simple expression in place 4454 -- of a subtype mark. This means that the semantic analyzer must be able 4455 -- to deal with, and diagnose a simple expression other than a name for 4456 -- the right operand. This simplifies error recovery in the parser. 4457 4458 -- The Alternatives field below is present only if there is more than 4459 -- one Membership_Choice present (which is legitimate only in Ada 2012 4460 -- mode) in which case Right_Opnd is Empty, and Alternatives contains 4461 -- the list of choices. In the tree passed to the back end, Alternatives 4462 -- is always No_List, and Right_Opnd is set (i.e. the expansion circuit 4463 -- expands out the complex set membership case using simple membership 4464 -- and equality operations). 4465 4466 -- Should we rename Alternatives here to Membership_Choices ??? 4467 4468 -- N_In 4469 -- Sloc points to IN 4470 -- Left_Opnd (Node2) 4471 -- Right_Opnd (Node3) 4472 -- Alternatives (List4) (set to No_List if only one set alternative) 4473 -- No_Minimize_Eliminate (Flag17) 4474 -- plus fields for expression 4475 4476 -- N_Not_In 4477 -- Sloc points to NOT of NOT IN 4478 -- Left_Opnd (Node2) 4479 -- Right_Opnd (Node3) 4480 -- Alternatives (List4) (set to No_List if only one set alternative) 4481 -- No_Minimize_Eliminate (Flag17) 4482 -- plus fields for expression 4483 4484 -------------------- 4485 -- 4.5 Operators -- 4486 -------------------- 4487 4488 -- LOGICAL_OPERATOR ::= and | or | xor 4489 4490 -- RELATIONAL_OPERATOR ::= = | /= | < | <= | > | >= 4491 4492 -- BINARY_ADDING_OPERATOR ::= + | - | & 4493 4494 -- UNARY_ADDING_OPERATOR ::= + | - 4495 4496 -- MULTIPLYING_OPERATOR ::= * | / | mod | rem 4497 4498 -- HIGHEST_PRECEDENCE_OPERATOR ::= ** | abs | not 4499 4500 -- Sprint syntax if Treat_Fixed_As_Integer is set: 4501 4502 -- x #* y 4503 -- x #/ y 4504 -- x #mod y 4505 -- x #rem y 4506 4507 -- Gigi restriction: For * / mod rem with fixed-point operands, Gigi 4508 -- will only be given nodes with the Treat_Fixed_As_Integer flag set. 4509 -- All handling of smalls for multiplication and division is handled 4510 -- by the front end (mod and rem result only from expansion). Gigi 4511 -- thus never needs to worry about small values (for other operators 4512 -- operating on fixed-point, e.g. addition, the small value does not 4513 -- have any semantic effect anyway, these are always integer operations. 4514 4515 -- Gigi restriction: For all operators taking Boolean operands, the 4516 -- type is always Standard.Boolean. The expander inserts the required 4517 -- conversion operations where needed to ensure this is the case. 4518 4519 -- N_Op_And 4520 -- Sloc points to AND 4521 -- Do_Length_Check (Flag4-Sem) 4522 -- plus fields for binary operator 4523 -- plus fields for expression 4524 4525 -- N_Op_Or 4526 -- Sloc points to OR 4527 -- Do_Length_Check (Flag4-Sem) 4528 -- plus fields for binary operator 4529 -- plus fields for expression 4530 4531 -- N_Op_Xor 4532 -- Sloc points to XOR 4533 -- Do_Length_Check (Flag4-Sem) 4534 -- plus fields for binary operator 4535 -- plus fields for expression 4536 4537 -- N_Op_Eq 4538 -- Sloc points to = 4539 -- plus fields for binary operator 4540 -- plus fields for expression 4541 4542 -- N_Op_Ne 4543 -- Sloc points to /= 4544 -- plus fields for binary operator 4545 -- plus fields for expression 4546 4547 -- N_Op_Lt 4548 -- Sloc points to < 4549 -- plus fields for binary operator 4550 -- plus fields for expression 4551 4552 -- N_Op_Le 4553 -- Sloc points to <= 4554 -- plus fields for binary operator 4555 -- plus fields for expression 4556 4557 -- N_Op_Gt 4558 -- Sloc points to > 4559 -- plus fields for binary operator 4560 -- plus fields for expression 4561 4562 -- N_Op_Ge 4563 -- Sloc points to >= 4564 -- plus fields for binary operator 4565 -- plus fields for expression 4566 4567 -- N_Op_Add 4568 -- Sloc points to + (binary) 4569 -- plus fields for binary operator 4570 -- plus fields for expression 4571 4572 -- N_Op_Subtract 4573 -- Sloc points to - (binary) 4574 -- plus fields for binary operator 4575 -- plus fields for expression 4576 4577 -- N_Op_Concat 4578 -- Sloc points to & 4579 -- Is_Component_Left_Opnd (Flag13-Sem) 4580 -- Is_Component_Right_Opnd (Flag14-Sem) 4581 -- plus fields for binary operator 4582 -- plus fields for expression 4583 4584 -- N_Op_Multiply 4585 -- Sloc points to * 4586 -- Treat_Fixed_As_Integer (Flag14-Sem) 4587 -- Rounded_Result (Flag18-Sem) 4588 -- plus fields for binary operator 4589 -- plus fields for expression 4590 4591 -- N_Op_Divide 4592 -- Sloc points to / 4593 -- Treat_Fixed_As_Integer (Flag14-Sem) 4594 -- Do_Division_Check (Flag13-Sem) 4595 -- Rounded_Result (Flag18-Sem) 4596 -- plus fields for binary operator 4597 -- plus fields for expression 4598 4599 -- N_Op_Mod 4600 -- Sloc points to MOD 4601 -- Treat_Fixed_As_Integer (Flag14-Sem) 4602 -- Do_Division_Check (Flag13-Sem) 4603 -- plus fields for binary operator 4604 -- plus fields for expression 4605 4606 -- N_Op_Rem 4607 -- Sloc points to REM 4608 -- Treat_Fixed_As_Integer (Flag14-Sem) 4609 -- Do_Division_Check (Flag13-Sem) 4610 -- plus fields for binary operator 4611 -- plus fields for expression 4612 4613 -- N_Op_Expon 4614 -- Sloc points to ** 4615 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 4616 -- plus fields for binary operator 4617 -- plus fields for expression 4618 4619 -- N_Op_Plus 4620 -- Sloc points to + (unary) 4621 -- plus fields for unary operator 4622 -- plus fields for expression 4623 4624 -- N_Op_Minus 4625 -- Sloc points to - (unary) 4626 -- plus fields for unary operator 4627 -- plus fields for expression 4628 4629 -- N_Op_Abs 4630 -- Sloc points to ABS 4631 -- plus fields for unary operator 4632 -- plus fields for expression 4633 4634 -- N_Op_Not 4635 -- Sloc points to NOT 4636 -- plus fields for unary operator 4637 -- plus fields for expression 4638 4639 -- See also shift operators in section B.2 4640 4641 -- Note on fixed-point operations passed to Gigi: For adding operators, 4642 -- the semantics is to treat these simply as integer operations, with 4643 -- the small values being ignored (the bounds are already stored in 4644 -- units of small, so that constraint checking works as usual). For the 4645 -- case of multiply/divide/rem/mod operations, Gigi will only see fixed 4646 -- point operands if the Treat_Fixed_As_Integer flag is set and will 4647 -- thus treat these nodes in identical manner, ignoring small values. 4648 4649 -- Note on equality/inequality tests for records. In the expanded tree, 4650 -- record comparisons are always expanded to be a series of component 4651 -- comparisons, so the back end will never see an equality or inequality 4652 -- operation with operands of a record type. 4653 4654 -- Note on overflow handling: When the overflow checking mode is set to 4655 -- MINIMIZED or ELIMINATED, nodes for signed arithmetic operations may 4656 -- be modified to use a larger type for the operands and result. In 4657 -- the case where the computed range exceeds that of Long_Long_Integer, 4658 -- and we are running in ELIMINATED mode, the operator node will be 4659 -- changed to be a call to the appropriate routine in System.Bignums. 4660 4661 -- Note: In Modify_Tree_For_C mode, we do not generate an N_Op_Mod node 4662 -- for signed integer types (since there is no equivalent operator in 4663 -- C). Instead we rewrite such an operation in terms of REM (which is 4664 -- % in C) and other C-available operators. 4665 4666 ------------------------------------ 4667 -- 4.5.7 Conditional Expressions -- 4668 ------------------------------------ 4669 4670 -- CONDITIONAL_EXPRESSION ::= IF_EXPRESSION | CASE_EXPRESSION 4671 4672 -------------------------- 4673 -- 4.5.7 If Expression -- 4674 -------------------------- 4675 4676 -- IF_EXPRESSION ::= 4677 -- if CONDITION then DEPENDENT_EXPRESSION 4678 -- {elsif CONDITION then DEPENDENT_EXPRESSION} 4679 -- [else DEPENDENT_EXPRESSION] 4680 4681 -- DEPENDENT_EXPRESSION ::= EXPRESSION 4682 4683 -- Note: if we have (IF x1 THEN x2 ELSIF x3 THEN x4 ELSE x5) then it 4684 -- is represented as (IF x1 THEN x2 ELSE (IF x3 THEN x4 ELSE x5)) and 4685 -- the Is_Elsif flag is set on the inner if expression. 4686 4687 -- N_If_Expression 4688 -- Sloc points to IF or ELSIF keyword 4689 -- Expressions (List1) 4690 -- Then_Actions (List2-Sem) 4691 -- Else_Actions (List3-Sem) 4692 -- Is_Elsif (Flag13) (set if comes from ELSIF) 4693 -- Do_Overflow_Check (Flag17-Sem) 4694 -- plus fields for expression 4695 4696 -- Expressions here is a three-element list, whose first element is the 4697 -- condition, the second element is the dependent expression after THEN 4698 -- and the third element is the dependent expression after the ELSE 4699 -- (explicitly set to True if missing). 4700 4701 -- Note: the Then_Actions and Else_Actions fields are always set to 4702 -- No_List in the tree passed to the back end. These are used only 4703 -- for temporary processing purposes in the expander. Even though they 4704 -- are semantic fields, their parent pointers are set because analysis 4705 -- of actions nodes in those lists may generate additional actions that 4706 -- need to know their insertion point (for example for the creation of 4707 -- transient scopes). 4708 4709 -- Note: in the tree passed to the back end, if the result type is 4710 -- an unconstrained array, the if expression can only appears in the 4711 -- initializing expression of an object declaration (this avoids the 4712 -- back end having to create a variable length temporary on the fly). 4713 4714 ---------------------------- 4715 -- 4.5.7 Case Expression -- 4716 ---------------------------- 4717 4718 -- CASE_EXPRESSION ::= 4719 -- case SELECTING_EXPRESSION is 4720 -- CASE_EXPRESSION_ALTERNATIVE 4721 -- {,CASE_EXPRESSION_ALTERNATIVE} 4722 4723 -- Note that the Alternatives cannot include pragmas (this contrasts 4724 -- with the situation of case statements where pragmas are allowed). 4725 4726 -- N_Case_Expression 4727 -- Sloc points to CASE 4728 -- Expression (Node3) (the selecting expression) 4729 -- Alternatives (List4) (the case expression alternatives) 4730 -- Do_Overflow_Check (Flag17-Sem) 4731 4732 ---------------------------------------- 4733 -- 4.5.7 Case Expression Alternative -- 4734 ---------------------------------------- 4735 4736 -- CASE_EXPRESSION_ALTERNATIVE ::= 4737 -- when DISCRETE_CHOICE_LIST => 4738 -- DEPENDENT_EXPRESSION 4739 4740 -- N_Case_Expression_Alternative 4741 -- Sloc points to WHEN 4742 -- Actions (List1) 4743 -- Discrete_Choices (List4) 4744 -- Expression (Node3) 4745 -- Has_SP_Choice (Flag15-Sem) 4746 4747 -- Note: The Actions field temporarily holds any actions associated with 4748 -- evaluation of the Expression. During expansion of the case expression 4749 -- these actions are wrapped into an N_Expressions_With_Actions node 4750 -- replacing the original expression. 4751 4752 -- Note: this node never appears in the tree passed to the back end, 4753 -- since the expander converts case expressions into case statements. 4754 4755 --------------------------------- 4756 -- 4.5.8 Quantified Expression -- 4757 --------------------------------- 4758 4759 -- QUANTIFIED_EXPRESSION ::= 4760 -- for QUANTIFIER LOOP_PARAMETER_SPECIFICATION => PREDICATE 4761 -- | for QUANTIFIER ITERATOR_SPECIFICATION => PREDICATE 4762 -- 4763 -- QUANTIFIER ::= all | some 4764 4765 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4766 -- is present at a time, in which case the other one is empty. 4767 4768 -- N_Quantified_Expression 4769 -- Sloc points to FOR 4770 -- Iterator_Specification (Node2) 4771 -- Loop_Parameter_Specification (Node4) 4772 -- Condition (Node1) 4773 -- All_Present (Flag15) 4774 4775 -------------------------- 4776 -- 4.6 Type Conversion -- 4777 -------------------------- 4778 4779 -- TYPE_CONVERSION ::= 4780 -- SUBTYPE_MARK (EXPRESSION) | SUBTYPE_MARK (NAME) 4781 4782 -- In the (NAME) case, the name is stored as the expression 4783 4784 -- Note: the parser never generates a type conversion node, since it 4785 -- looks like an indexed component which is generated by preference. 4786 -- The semantic pass must correct this misidentification. 4787 4788 -- Gigi handles conversions that involve no change in the root type, 4789 -- and also all conversions from integer to floating-point types. 4790 -- Conversions from floating-point to integer are only handled in 4791 -- the case where Float_Truncate flag set. Other conversions from 4792 -- floating-point to integer (involving rounding) and all conversions 4793 -- involving fixed-point types are handled by the expander. 4794 4795 -- Sprint syntax if Float_Truncate set: X^(Y) 4796 -- Sprint syntax if Conversion_OK set X?(Y) 4797 -- Sprint syntax if both flags set X?^(Y) 4798 4799 -- Note: If either the operand or result type is fixed-point, Gigi will 4800 -- only see a type conversion node with Conversion_OK set. The front end 4801 -- takes care of all handling of small's for fixed-point conversions. 4802 4803 -- N_Type_Conversion 4804 -- Sloc points to first token of subtype mark 4805 -- Subtype_Mark (Node4) 4806 -- Expression (Node3) 4807 -- Do_Discriminant_Check (Flag3-Sem) 4808 -- Do_Length_Check (Flag4-Sem) 4809 -- Float_Truncate (Flag11-Sem) 4810 -- Do_Tag_Check (Flag13-Sem) 4811 -- Conversion_OK (Flag14-Sem) 4812 -- Do_Overflow_Check (Flag17-Sem) 4813 -- Rounded_Result (Flag18-Sem) 4814 -- plus fields for expression 4815 4816 -- Note: if a range check is required, then the Do_Range_Check flag 4817 -- is set in the Expression with the check being done against the 4818 -- target type range (after the base type conversion, if any). 4819 4820 ------------------------------- 4821 -- 4.7 Qualified Expression -- 4822 ------------------------------- 4823 4824 -- QUALIFIED_EXPRESSION ::= 4825 -- SUBTYPE_MARK ' (EXPRESSION) | SUBTYPE_MARK ' AGGREGATE 4826 4827 -- Note: the parentheses in the (EXPRESSION) case are deemed to enclose 4828 -- the expression, so the Expression field of this node always points 4829 -- to a parenthesized expression in this case (i.e. Paren_Count will 4830 -- always be non-zero for the referenced expression if it is not an 4831 -- aggregate). 4832 4833 -- N_Qualified_Expression 4834 -- Sloc points to apostrophe 4835 -- Subtype_Mark (Node4) 4836 -- Expression (Node3) expression or aggregate 4837 -- Is_Qualified_Universal_Literal (Flag4-Sem) 4838 -- plus fields for expression 4839 4840 -------------------- 4841 -- 4.8 Allocator -- 4842 -------------------- 4843 4844 -- ALLOCATOR ::= 4845 -- new [SUBPOOL_SPECIFICATION] SUBTYPE_INDICATION 4846 -- | new [SUBPOOL_SPECIFICATION] QUALIFIED_EXPRESSION 4847 -- 4848 -- SUBPOOL_SPECIFICATION ::= (subpool_handle_NAME) 4849 4850 -- Sprint syntax (when storage pool present) 4851 -- new xxx (storage_pool = pool) 4852 -- or 4853 -- new (subpool) xxx (storage_pool = pool) 4854 4855 -- N_Allocator 4856 -- Sloc points to NEW 4857 -- Expression (Node3) subtype indication or qualified expression 4858 -- Subpool_Handle_Name (Node4) (set to Empty if not present) 4859 -- Storage_Pool (Node1-Sem) 4860 -- Procedure_To_Call (Node2-Sem) 4861 -- Alloc_For_BIP_Return (Flag1-Sem) 4862 -- Null_Exclusion_Present (Flag11) 4863 -- No_Initialization (Flag13-Sem) 4864 -- Is_Static_Coextension (Flag14-Sem) 4865 -- Do_Storage_Check (Flag17-Sem) 4866 -- Is_Dynamic_Coextension (Flag18-Sem) 4867 -- plus fields for expression 4868 4869 -- Note: like all nodes, the N_Allocator has the Comes_From_Source flag. 4870 -- This flag has a special function in conjunction with the restriction 4871 -- No_Implicit_Heap_Allocations, which will be triggered if this flag 4872 -- is not set. This means that if a source allocator is replaced with 4873 -- a constructed allocator, the Comes_From_Source flag should be copied 4874 -- to the newly created allocator. 4875 4876 --------------------------------- 4877 -- 5.1 Sequence Of Statements -- 4878 --------------------------------- 4879 4880 -- SEQUENCE_OF_STATEMENTS ::= STATEMENT {STATEMENT} 4881 4882 -- Note: Although the parser will not accept a declaration as a 4883 -- statement, the semantic analyzer may insert declarations (e.g. 4884 -- declarations of implicit types needed for execution of other 4885 -- statements) into a sequence of statements, so the code generator 4886 -- should be prepared to accept a declaration where a statement is 4887 -- expected. Note also that pragmas can appear as statements. 4888 4889 -------------------- 4890 -- 5.1 Statement -- 4891 -------------------- 4892 4893 -- STATEMENT ::= 4894 -- {LABEL} SIMPLE_STATEMENT | {LABEL} COMPOUND_STATEMENT 4895 4896 -- There is no explicit node in the tree for a statement. Instead, the 4897 -- individual statement appears directly. Labels are treated as a 4898 -- kind of statement, i.e. they are linked into a statement list at 4899 -- the point they appear, so the labeled statement appears following 4900 -- the label or labels in the statement list. 4901 4902 --------------------------- 4903 -- 5.1 Simple Statement -- 4904 --------------------------- 4905 4906 -- SIMPLE_STATEMENT ::= NULL_STATEMENT 4907 -- | ASSIGNMENT_STATEMENT | EXIT_STATEMENT 4908 -- | GOTO_STATEMENT | PROCEDURE_CALL_STATEMENT 4909 -- | SIMPLE_RETURN_STATEMENT | ENTRY_CALL_STATEMENT 4910 -- | REQUEUE_STATEMENT | DELAY_STATEMENT 4911 -- | ABORT_STATEMENT | RAISE_STATEMENT 4912 -- | CODE_STATEMENT 4913 4914 ----------------------------- 4915 -- 5.1 Compound Statement -- 4916 ----------------------------- 4917 4918 -- COMPOUND_STATEMENT ::= 4919 -- IF_STATEMENT | CASE_STATEMENT 4920 -- | LOOP_STATEMENT | BLOCK_STATEMENT 4921 -- | EXTENDED_RETURN_STATEMENT 4922 -- | ACCEPT_STATEMENT | SELECT_STATEMENT 4923 4924 ------------------------- 4925 -- 5.1 Null Statement -- 4926 ------------------------- 4927 4928 -- NULL_STATEMENT ::= null; 4929 4930 -- N_Null_Statement 4931 -- Sloc points to NULL 4932 4933 ---------------- 4934 -- 5.1 Label -- 4935 ---------------- 4936 4937 -- LABEL ::= <<label_STATEMENT_IDENTIFIER>> 4938 4939 -- Note that the occurrence of a label is not a defining identifier, 4940 -- but rather a referencing occurrence. The defining occurrence is 4941 -- in the implicit label declaration which occurs in the innermost 4942 -- enclosing block. 4943 4944 -- N_Label 4945 -- Sloc points to << 4946 -- Identifier (Node1) direct name of statement identifier 4947 -- Exception_Junk (Flag8-Sem) 4948 4949 -- Note: Before Ada 2012, a label is always followed by a statement, 4950 -- and this is true in the tree even in Ada 2012 mode (the parser 4951 -- inserts a null statement marked with Comes_From_Source False). 4952 4953 ------------------------------- 4954 -- 5.1 Statement Identifier -- 4955 ------------------------------- 4956 4957 -- STATEMENT_IDENTIFIER ::= DIRECT_NAME 4958 4959 -- The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier 4960 -- (not an OPERATOR_SYMBOL) 4961 4962 ------------------------------- 4963 -- 5.2 Assignment Statement -- 4964 ------------------------------- 4965 4966 -- ASSIGNMENT_STATEMENT ::= 4967 -- variable_NAME := EXPRESSION; 4968 4969 -- N_Assignment_Statement 4970 -- Sloc points to := 4971 -- Name (Node2) 4972 -- Expression (Node3) 4973 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 4974 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 4975 -- Do_Discriminant_Check (Flag3-Sem) 4976 -- Do_Length_Check (Flag4-Sem) 4977 -- Forwards_OK (Flag5-Sem) 4978 -- Backwards_OK (Flag6-Sem) 4979 -- No_Ctrl_Actions (Flag7-Sem) 4980 -- Has_Target_Names (Flag8-Sem) 4981 -- Is_Elaboration_Code (Flag9-Sem) 4982 -- Do_Tag_Check (Flag13-Sem) 4983 -- Componentwise_Assignment (Flag14-Sem) 4984 -- Suppress_Assignment_Checks (Flag18-Sem) 4985 4986 -- Note: if a range check is required, then the Do_Range_Check flag 4987 -- is set in the Expression (right hand side), with the check being 4988 -- done against the type of the Name (left hand side). 4989 4990 -- Note: the back end places some restrictions on the form of the 4991 -- Expression field. If the object being assigned to is Atomic, then 4992 -- the Expression may not have the form of an aggregate (since this 4993 -- might cause the back end to generate separate assignments). In this 4994 -- case the front end must generate an extra temporary and initialize 4995 -- this temporary as required (the temporary itself is not atomic). 4996 4997 ------------------ 4998 -- Target_Name -- 4999 ------------------ 5000 5001 -- N_Target_Name 5002 -- Sloc points to @ 5003 -- Etype (Node5-Sem) 5004 5005 -- Note (Ada 2020): node is used during analysis as a placeholder for 5006 -- the value of the LHS of the enclosing assignment statement. Node is 5007 -- eventually rewritten together with enclosing assignment, and backends 5008 -- are not aware of it. 5009 5010 ----------------------- 5011 -- 5.3 If Statement -- 5012 ----------------------- 5013 5014 -- IF_STATEMENT ::= 5015 -- if CONDITION then 5016 -- SEQUENCE_OF_STATEMENTS 5017 -- {elsif CONDITION then 5018 -- SEQUENCE_OF_STATEMENTS} 5019 -- [else 5020 -- SEQUENCE_OF_STATEMENTS] 5021 -- end if; 5022 5023 -- Gigi restriction: This expander ensures that the type of the 5024 -- Condition fields is always Standard.Boolean, even if the type 5025 -- in the source is some non-standard boolean type. 5026 5027 -- N_If_Statement 5028 -- Sloc points to IF 5029 -- Condition (Node1) 5030 -- Then_Statements (List2) 5031 -- Elsif_Parts (List3) (set to No_List if none present) 5032 -- Else_Statements (List4) (set to No_List if no else part present) 5033 -- End_Span (Uint5) (set to Uint_0 if expander generated) 5034 -- From_Conditional_Expression (Flag1-Sem) 5035 5036 -- N_Elsif_Part 5037 -- Sloc points to ELSIF 5038 -- Condition (Node1) 5039 -- Then_Statements (List2) 5040 -- Condition_Actions (List3-Sem) 5041 5042 -------------------- 5043 -- 5.3 Condition -- 5044 -------------------- 5045 5046 -- CONDITION ::= boolean_EXPRESSION 5047 5048 ------------------------- 5049 -- 5.4 Case Statement -- 5050 ------------------------- 5051 5052 -- CASE_STATEMENT ::= 5053 -- case EXPRESSION is 5054 -- CASE_STATEMENT_ALTERNATIVE 5055 -- {CASE_STATEMENT_ALTERNATIVE} 5056 -- end case; 5057 5058 -- Note: the Alternatives can contain pragmas. These only occur at 5059 -- the start of the list, since any pragmas occurring after the first 5060 -- alternative are absorbed into the corresponding statement sequence. 5061 5062 -- N_Case_Statement 5063 -- Sloc points to CASE 5064 -- Expression (Node3) 5065 -- Alternatives (List4) 5066 -- End_Span (Uint5) (set to Uint_0 if expander generated) 5067 -- From_Conditional_Expression (Flag1-Sem) 5068 5069 -- Note: Before Ada 2012, a pragma in a statement sequence is always 5070 -- followed by a statement, and this is true in the tree even in Ada 5071 -- 2012 mode (the parser inserts a null statement marked with the flag 5072 -- Comes_From_Source False). 5073 5074 ------------------------------------- 5075 -- 5.4 Case Statement Alternative -- 5076 ------------------------------------- 5077 5078 -- CASE_STATEMENT_ALTERNATIVE ::= 5079 -- when DISCRETE_CHOICE_LIST => 5080 -- SEQUENCE_OF_STATEMENTS 5081 5082 -- N_Case_Statement_Alternative 5083 -- Sloc points to WHEN 5084 -- Discrete_Choices (List4) 5085 -- Statements (List3) 5086 -- Has_SP_Choice (Flag15-Sem) 5087 5088 -- Note: in the list of Discrete_Choices, the tree passed to the back 5089 -- end does not have choice entries corresponding to names of statically 5090 -- predicated subtypes. Such entries are always expanded out to the list 5091 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 5092 -- mode does not have this expansion, and has the original choices. 5093 5094 ------------------------- 5095 -- 5.5 Loop Statement -- 5096 ------------------------- 5097 5098 -- LOOP_STATEMENT ::= 5099 -- [loop_STATEMENT_IDENTIFIER :] 5100 -- [ITERATION_SCHEME] loop 5101 -- SEQUENCE_OF_STATEMENTS 5102 -- end loop [loop_IDENTIFIER]; 5103 5104 -- Note: The occurrence of a loop label is not a defining identifier 5105 -- but rather a referencing occurrence. The defining occurrence is in 5106 -- the implicit label declaration which occurs in the innermost 5107 -- enclosing block. 5108 5109 -- Note: there is always a loop statement identifier present in the 5110 -- tree, even if none was given in the source. In the case where no loop 5111 -- identifier is given in the source, the parser creates a name of the 5112 -- form _Loop_n, where n is a decimal integer (the two underlines ensure 5113 -- that the loop names created in this manner do not conflict with any 5114 -- user defined identifiers), and the flag Has_Created_Identifier is set 5115 -- to True. The only exception to the rule that all loop statement nodes 5116 -- have identifiers occurs for loops constructed by the expander, and 5117 -- the semantic analyzer will create and supply dummy loop identifiers 5118 -- in these cases. 5119 5120 -- N_Loop_Statement 5121 -- Sloc points to LOOP 5122 -- Identifier (Node1) loop identifier (set to Empty if no identifier) 5123 -- Iteration_Scheme (Node2) (set to Empty if no iteration scheme) 5124 -- Statements (List3) 5125 -- End_Label (Node4) 5126 -- Is_OpenAcc_Environment (Flag13-Sem) 5127 -- Is_OpenAcc_Loop (Flag14-Sem) 5128 -- Has_Created_Identifier (Flag15) 5129 -- Is_Null_Loop (Flag16) 5130 -- Suppress_Loop_Warnings (Flag17) 5131 5132 -- Note: the parser fills in the Identifier field if there is an 5133 -- explicit loop identifier. Otherwise the parser leaves this field 5134 -- set to Empty, and then the semantic processing for a loop statement 5135 -- creates an identifier, setting the Has_Created_Identifier flag to 5136 -- True. So after semantic analysis, the Identifier is always set, 5137 -- referencing an identifier whose entity has an Ekind of E_Loop. 5138 5139 --------------------------- 5140 -- 5.5 Iteration Scheme -- 5141 --------------------------- 5142 5143 -- ITERATION_SCHEME ::= 5144 -- while CONDITION 5145 -- | for LOOP_PARAMETER_SPECIFICATION 5146 -- | for ITERATOR_SPECIFICATION 5147 5148 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 5149 -- is present at a time, in which case the other one is empty. Both are 5150 -- empty in the case of a WHILE loop. 5151 5152 -- Gigi restriction: The expander ensures that the type of the Condition 5153 -- field is always Standard.Boolean, even if the type in the source is 5154 -- some non-standard boolean type. 5155 5156 -- N_Iteration_Scheme 5157 -- Sloc points to WHILE or FOR 5158 -- Condition (Node1) (set to Empty if FOR case) 5159 -- Condition_Actions (List3-Sem) 5160 -- Iterator_Specification (Node2) (set to Empty if WHILE case) 5161 -- Loop_Parameter_Specification (Node4) (set to Empty if WHILE case) 5162 5163 --------------------------------------- 5164 -- 5.5 Loop Parameter Specification -- 5165 --------------------------------------- 5166 5167 -- LOOP_PARAMETER_SPECIFICATION ::= 5168 -- DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION 5169 5170 -- N_Loop_Parameter_Specification 5171 -- Sloc points to first identifier 5172 -- Defining_Identifier (Node1) 5173 -- Reverse_Present (Flag15) 5174 -- Discrete_Subtype_Definition (Node4) 5175 5176 ----------------------------------- 5177 -- 5.5.1 Iterator Specification -- 5178 ----------------------------------- 5179 5180 -- ITERATOR_SPECIFICATION ::= 5181 -- DEFINING_IDENTIFIER in [reverse] NAME 5182 -- | DEFINING_IDENTIFIER [: SUBTYPE_INDICATION] of [reverse] NAME 5183 5184 -- N_Iterator_Specification 5185 -- Sloc points to defining identifier 5186 -- Defining_Identifier (Node1) 5187 -- Name (Node2) 5188 -- Reverse_Present (Flag15) 5189 -- Of_Present (Flag16) 5190 -- Subtype_Indication (Node5) 5191 5192 -- Note: The Of_Present flag distinguishes the two forms 5193 5194 -------------------------- 5195 -- 5.6 Block Statement -- 5196 -------------------------- 5197 5198 -- BLOCK_STATEMENT ::= 5199 -- [block_STATEMENT_IDENTIFIER:] 5200 -- [declare 5201 -- DECLARATIVE_PART] 5202 -- begin 5203 -- HANDLED_SEQUENCE_OF_STATEMENTS 5204 -- end [block_IDENTIFIER]; 5205 5206 -- Note that the occurrence of a block identifier is not a defining 5207 -- identifier, but rather a referencing occurrence. The defining 5208 -- occurrence is an E_Block entity declared by the implicit label 5209 -- declaration which occurs in the innermost enclosing block statement 5210 -- or body; the block identifier denotes that E_Block. 5211 5212 -- For block statements that come from source code, there is always a 5213 -- block statement identifier present in the tree, denoting an E_Block. 5214 -- In the case where no block identifier is given in the source, 5215 -- the parser creates a name of the form B_n, where n is a decimal 5216 -- integer, and the flag Has_Created_Identifier is set to True. Blocks 5217 -- constructed by the expander usually have no identifier, and no 5218 -- corresponding entity. 5219 5220 -- Note: the block statement created for an extended return statement 5221 -- has an entity, and this entity is an E_Return_Statement, rather than 5222 -- the usual E_Block. 5223 5224 -- Note: Exception_Junk is set for the wrapping blocks created during 5225 -- local raise optimization (Exp_Ch11.Expand_Local_Exception_Handlers). 5226 5227 -- Note: from a control flow viewpoint, a block statement defines an 5228 -- extended basic block, i.e. the entry of the block dominates every 5229 -- statement in the sequence. When generating new statements with 5230 -- exception handlers in the expander at the end of a sequence that 5231 -- comes from source code, it can be necessary to wrap them all in a 5232 -- block statement in order to expose the implicit control flow to 5233 -- gigi and thus prevent it from issuing bogus control flow warnings. 5234 5235 -- N_Block_Statement 5236 -- Sloc points to DECLARE or BEGIN 5237 -- Identifier (Node1) block direct name (set to Empty if not present) 5238 -- Declarations (List2) (set to No_List if no DECLARE part) 5239 -- Handled_Statement_Sequence (Node4) 5240 -- Activation_Chain_Entity (Node3-Sem) 5241 -- Cleanup_Actions (List5-Sem) 5242 -- Has_Created_Identifier (Flag15) 5243 -- Is_Asynchronous_Call_Block (Flag7) 5244 -- Is_Task_Allocation_Block (Flag6) 5245 -- Exception_Junk (Flag8-Sem) 5246 -- Is_Abort_Block (Flag4-Sem) 5247 -- Is_Finalization_Wrapper (Flag9-Sem) 5248 -- Is_Initialization_Block (Flag1-Sem) 5249 -- Is_Task_Master (Flag5-Sem) 5250 5251 ------------------------- 5252 -- 5.7 Exit Statement -- 5253 ------------------------- 5254 5255 -- EXIT_STATEMENT ::= exit [loop_NAME] [when CONDITION]; 5256 5257 -- Gigi restriction: The expander ensures that the type of the Condition 5258 -- field is always Standard.Boolean, even if the type in the source is 5259 -- some non-standard boolean type. 5260 5261 -- N_Exit_Statement 5262 -- Sloc points to EXIT 5263 -- Name (Node2) (set to Empty if no loop name present) 5264 -- Condition (Node1) (set to Empty if no WHEN part present) 5265 -- Next_Exit_Statement (Node3-Sem): Next exit on chain 5266 5267 ------------------------- 5268 -- 5.9 Goto Statement -- 5269 ------------------------- 5270 5271 -- GOTO_STATEMENT ::= goto label_NAME; 5272 5273 -- N_Goto_Statement 5274 -- Sloc points to GOTO 5275 -- Name (Node2) 5276 -- Exception_Junk (Flag8-Sem) 5277 5278 --------------------------------- 5279 -- 6.1 Subprogram Declaration -- 5280 --------------------------------- 5281 5282 -- SUBPROGRAM_DECLARATION ::= 5283 -- SUBPROGRAM_SPECIFICATION 5284 -- [ASPECT_SPECIFICATIONS]; 5285 5286 -- N_Subprogram_Declaration 5287 -- Sloc points to FUNCTION or PROCEDURE 5288 -- Specification (Node1) 5289 -- Body_To_Inline (Node3-Sem) 5290 -- Corresponding_Body (Node5-Sem) 5291 -- Parent_Spec (Node4-Sem) 5292 -- Is_Entry_Barrier_Function (Flag8-Sem) 5293 -- Is_Task_Body_Procedure (Flag1-Sem) 5294 5295 ------------------------------------------ 5296 -- 6.1 Abstract Subprogram Declaration -- 5297 ------------------------------------------ 5298 5299 -- ABSTRACT_SUBPROGRAM_DECLARATION ::= 5300 -- SUBPROGRAM_SPECIFICATION is abstract 5301 -- [ASPECT_SPECIFICATIONS]; 5302 5303 -- N_Abstract_Subprogram_Declaration 5304 -- Sloc points to ABSTRACT 5305 -- Specification (Node1) 5306 5307 ----------------------------------- 5308 -- 6.1 Subprogram Specification -- 5309 ----------------------------------- 5310 5311 -- SUBPROGRAM_SPECIFICATION ::= 5312 -- [[not] overriding] 5313 -- procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE 5314 -- | [[not] overriding] 5315 -- function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE 5316 5317 -- Note: there are no separate nodes for the profiles, instead the 5318 -- information appears directly in the following nodes. 5319 5320 -- N_Function_Specification 5321 -- Sloc points to FUNCTION 5322 -- Defining_Unit_Name (Node1) (the designator) 5323 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5324 -- Null_Exclusion_Present (Flag11) 5325 -- Result_Definition (Node4) for result subtype 5326 -- Generic_Parent (Node5-Sem) 5327 -- Must_Override (Flag14) set if overriding indicator present 5328 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5329 5330 -- N_Procedure_Specification 5331 -- Sloc points to PROCEDURE 5332 -- Defining_Unit_Name (Node1) 5333 -- Null_Statement (Node2-Sem) NULL statement for body, if Null_Present 5334 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5335 -- Generic_Parent (Node5-Sem) 5336 -- Null_Present (Flag13) set for null procedure case (Ada 2005 feature) 5337 -- Must_Override (Flag14) set if overriding indicator present 5338 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5339 5340 -- Note: overriding indicator is an Ada 2005 feature 5341 5342 --------------------- 5343 -- 6.1 Designator -- 5344 --------------------- 5345 5346 -- DESIGNATOR ::= 5347 -- [PARENT_UNIT_NAME .] IDENTIFIER | OPERATOR_SYMBOL 5348 5349 -- Designators that are simply identifiers or operator symbols appear 5350 -- directly in the tree in this form. The following node is used only 5351 -- in the case where the designator has a parent unit name component. 5352 5353 -- N_Designator 5354 -- Sloc points to period 5355 -- Name (Node2) holds the parent unit name 5356 -- Identifier (Node1) 5357 5358 -- Note: Name is always non-Empty, since this node is only used for the 5359 -- case where a parent library unit package name is present. 5360 5361 -- Note that the identifier can also be an operator symbol here 5362 5363 ------------------------------ 5364 -- 6.1 Defining Designator -- 5365 ------------------------------ 5366 5367 -- DEFINING_DESIGNATOR ::= 5368 -- DEFINING_PROGRAM_UNIT_NAME | DEFINING_OPERATOR_SYMBOL 5369 5370 ------------------------------------- 5371 -- 6.1 Defining Program Unit Name -- 5372 ------------------------------------- 5373 5374 -- DEFINING_PROGRAM_UNIT_NAME ::= 5375 -- [PARENT_UNIT_NAME .] DEFINING_IDENTIFIER 5376 5377 -- The parent unit name is present only in the case of a child unit name 5378 -- (permissible only for Ada 95 for a library level unit, i.e. a unit 5379 -- at scope level one). If no such name is present, the defining program 5380 -- unit name is represented simply as the defining identifier. In the 5381 -- child unit case, the following node is used to represent the child 5382 -- unit name. 5383 5384 -- N_Defining_Program_Unit_Name 5385 -- Sloc points to period 5386 -- Name (Node2) holds the parent unit name 5387 -- Defining_Identifier (Node1) 5388 5389 -- Note: Name is always non-Empty, since this node is only used for the 5390 -- case where a parent unit name is present. 5391 5392 -------------------------- 5393 -- 6.1 Operator Symbol -- 5394 -------------------------- 5395 5396 -- OPERATOR_SYMBOL ::= STRING_LITERAL 5397 5398 -- Note: the fields of the N_Operator_Symbol node are laid out to match 5399 -- the corresponding fields of an N_Character_Literal node. This allows 5400 -- easy conversion of the operator symbol node into a character literal 5401 -- node in the case where a string constant of the form of an operator 5402 -- symbol is scanned out as such, but turns out semantically to be a 5403 -- string literal that is not an operator. For details see Sinfo.CN. 5404 -- Change_Operator_Symbol_To_String_Literal. 5405 5406 -- N_Operator_Symbol 5407 -- Sloc points to literal 5408 -- Chars (Name1) contains the Name_Id for the operator symbol 5409 -- Strval (Str3) Id of string value. This is used if the operator 5410 -- symbol turns out to be a normal string after all. 5411 -- Entity (Node4-Sem) 5412 -- Associated_Node (Node4-Sem) 5413 -- Etype (Node5-Sem) 5414 -- Has_Private_View (Flag11-Sem) set in generic units 5415 5416 -- Note: the Strval field may be set to No_String for generated 5417 -- operator symbols that are known not to be string literals 5418 -- semantically. 5419 5420 ----------------------------------- 5421 -- 6.1 Defining Operator Symbol -- 5422 ----------------------------------- 5423 5424 -- DEFINING_OPERATOR_SYMBOL ::= OPERATOR_SYMBOL 5425 5426 -- A defining operator symbol is an entity, which has additional 5427 -- fields depending on the setting of the Ekind field. These 5428 -- additional fields are defined (and access subprograms declared) 5429 -- in package Einfo. 5430 5431 -- Note: N_Defining_Operator_Symbol is an extended node whose fields 5432 -- are deliberately layed out to match the layout of fields in an 5433 -- ordinary N_Operator_Symbol node allowing for easy alteration of 5434 -- an operator symbol node into a defining operator symbol node. 5435 -- See Sinfo.CN.Change_Operator_Symbol_To_Defining_Operator_Symbol 5436 -- for further details. 5437 5438 -- N_Defining_Operator_Symbol 5439 -- Sloc points to literal 5440 -- Chars (Name1) contains the Name_Id for the operator symbol 5441 -- Next_Entity (Node2-Sem) 5442 -- Scope (Node3-Sem) 5443 -- Etype (Node5-Sem) 5444 5445 ---------------------------- 5446 -- 6.1 Parameter Profile -- 5447 ---------------------------- 5448 5449 -- PARAMETER_PROFILE ::= [FORMAL_PART] 5450 5451 --------------------------------------- 5452 -- 6.1 Parameter and Result Profile -- 5453 --------------------------------------- 5454 5455 -- PARAMETER_AND_RESULT_PROFILE ::= 5456 -- [FORMAL_PART] return [NULL_EXCLUSION] SUBTYPE_MARK 5457 -- | [FORMAL_PART] return ACCESS_DEFINITION 5458 5459 -- There is no explicit node in the tree for a parameter and result 5460 -- profile. Instead the information appears directly in the parent. 5461 5462 ---------------------- 5463 -- 6.1 Formal Part -- 5464 ---------------------- 5465 5466 -- FORMAL_PART ::= 5467 -- (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION}) 5468 5469 ---------------------------------- 5470 -- 6.1 Parameter Specification -- 5471 ---------------------------------- 5472 5473 -- PARAMETER_SPECIFICATION ::= 5474 -- DEFINING_IDENTIFIER_LIST : [ALIASED] MODE [NULL_EXCLUSION] 5475 -- SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 5476 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 5477 -- [:= DEFAULT_EXPRESSION] 5478 5479 -- Although the syntax allows multiple identifiers in the list, the 5480 -- semantics is as though successive specifications were given with 5481 -- identical type definition and expression components. To simplify 5482 -- semantic processing, the parser represents a multiple declaration 5483 -- case as a sequence of single Specifications, using the More_Ids and 5484 -- Prev_Ids flags to preserve the original source form as described 5485 -- in the section on "Handling of Defining Identifier Lists". 5486 5487 -- ALIASED can only be present in Ada 2012 mode 5488 5489 -- N_Parameter_Specification 5490 -- Sloc points to first identifier 5491 -- Defining_Identifier (Node1) 5492 -- Aliased_Present (Flag4) 5493 -- In_Present (Flag15) 5494 -- Out_Present (Flag17) 5495 -- Null_Exclusion_Present (Flag11) 5496 -- Parameter_Type (Node2) subtype mark or access definition 5497 -- Expression (Node3) (set to Empty if no default expression present) 5498 -- Do_Accessibility_Check (Flag13-Sem) 5499 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5500 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5501 -- Default_Expression (Node5-Sem) 5502 5503 --------------- 5504 -- 6.1 Mode -- 5505 --------------- 5506 5507 -- MODE ::= [in] | in out | out 5508 5509 -- There is no explicit node in the tree for the Mode. Instead the 5510 -- In_Present and Out_Present flags are set in the parent node to 5511 -- record the presence of keywords specifying the mode. 5512 5513 -------------------------- 5514 -- 6.3 Subprogram Body -- 5515 -------------------------- 5516 5517 -- SUBPROGRAM_BODY ::= 5518 -- SUBPROGRAM_SPECIFICATION [ASPECT_SPECIFICATIONS] is 5519 -- DECLARATIVE_PART 5520 -- begin 5521 -- HANDLED_SEQUENCE_OF_STATEMENTS 5522 -- end [DESIGNATOR]; 5523 5524 -- N_Subprogram_Body 5525 -- Sloc points to FUNCTION or PROCEDURE 5526 -- Specification (Node1) 5527 -- Declarations (List2) 5528 -- Handled_Statement_Sequence (Node4) 5529 -- Activation_Chain_Entity (Node3-Sem) 5530 -- Corresponding_Spec (Node5-Sem) 5531 -- Acts_As_Spec (Flag4-Sem) 5532 -- Bad_Is_Detected (Flag15) used only by parser 5533 -- Do_Storage_Check (Flag17-Sem) 5534 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 5535 -- Is_Entry_Barrier_Function (Flag8-Sem) 5536 -- Is_Protected_Subprogram_Body (Flag7-Sem) 5537 -- Is_Task_Body_Procedure (Flag1-Sem) 5538 -- Is_Task_Master (Flag5-Sem) 5539 -- Was_Attribute_Reference (Flag2-Sem) 5540 -- Was_Expression_Function (Flag18-Sem) 5541 -- Was_Originally_Stub (Flag13-Sem) 5542 5543 ----------------------------------- 5544 -- 6.4 Procedure Call Statement -- 5545 ----------------------------------- 5546 5547 -- PROCEDURE_CALL_STATEMENT ::= 5548 -- procedure_NAME; | procedure_PREFIX ACTUAL_PARAMETER_PART; 5549 5550 -- Note: the reason that a procedure call has expression fields is that 5551 -- it semantically resembles an expression, e.g. overloading is allowed 5552 -- and a type is concocted for semantic processing purposes. Certain of 5553 -- these fields, such as Parens are not relevant, but it is easier to 5554 -- just supply all of them together. 5555 5556 -- N_Procedure_Call_Statement 5557 -- Sloc points to first token of name or prefix 5558 -- Name (Node2) stores name or prefix 5559 -- Parameter_Associations (List3) (set to No_List if no 5560 -- actual parameter part) 5561 -- First_Named_Actual (Node4-Sem) 5562 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5563 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 5564 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 5565 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 5566 -- No_Elaboration_Check (Flag4-Sem) 5567 -- Do_Tag_Check (Flag13-Sem) 5568 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 5569 -- plus fields for expression 5570 5571 -- If any IN parameter requires a range check, then the corresponding 5572 -- argument expression has the Do_Range_Check flag set, and the range 5573 -- check is done against the formal type. Note that this argument 5574 -- expression may appear directly in the Parameter_Associations list, 5575 -- or may be a descendant of an N_Parameter_Association node that 5576 -- appears in this list. 5577 5578 ------------------------ 5579 -- 6.4 Function Call -- 5580 ------------------------ 5581 5582 -- FUNCTION_CALL ::= 5583 -- function_NAME | function_PREFIX ACTUAL_PARAMETER_PART 5584 5585 -- Note: the parser may generate an indexed component node or simply 5586 -- a name node instead of a function call node. The semantic pass must 5587 -- correct this misidentification. 5588 5589 -- N_Function_Call 5590 -- Sloc points to first token of name or prefix 5591 -- Name (Node2) stores name or prefix 5592 -- Parameter_Associations (List3) (set to No_List if no 5593 -- actual parameter part) 5594 -- First_Named_Actual (Node4-Sem) 5595 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5596 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 5597 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 5598 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 5599 -- No_Elaboration_Check (Flag4-Sem) 5600 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 5601 -- Do_Tag_Check (Flag13-Sem) 5602 -- No_Side_Effect_Removal (Flag17-Sem) 5603 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 5604 -- plus fields for expression 5605 5606 -------------------------------- 5607 -- 6.4 Actual Parameter Part -- 5608 -------------------------------- 5609 5610 -- ACTUAL_PARAMETER_PART ::= 5611 -- (PARAMETER_ASSOCIATION {,PARAMETER_ASSOCIATION}) 5612 5613 -------------------------------- 5614 -- 6.4 Parameter Association -- 5615 -------------------------------- 5616 5617 -- PARAMETER_ASSOCIATION ::= 5618 -- [formal_parameter_SELECTOR_NAME =>] EXPLICIT_ACTUAL_PARAMETER 5619 5620 -- Note: the N_Parameter_Association node is built only if a formal 5621 -- parameter selector name is present, otherwise the parameter 5622 -- association appears in the tree simply as the node for the 5623 -- explicit actual parameter. 5624 5625 -- N_Parameter_Association 5626 -- Sloc points to formal parameter 5627 -- Selector_Name (Node2) (always non-Empty) 5628 -- Explicit_Actual_Parameter (Node3) 5629 -- Next_Named_Actual (Node4-Sem) 5630 -- Is_Accessibility_Actual (Flag13-Sem) 5631 5632 --------------------------- 5633 -- 6.4 Actual Parameter -- 5634 --------------------------- 5635 5636 -- EXPLICIT_ACTUAL_PARAMETER ::= 5637 -- EXPRESSION | variable_NAME | REDUCTION_EXPRESSION_PARAMETER 5638 5639 --------------------------- 5640 -- 6.5 Return Statement -- 5641 --------------------------- 5642 5643 -- SIMPLE_RETURN_STATEMENT ::= return [EXPRESSION]; 5644 5645 -- EXTENDED_RETURN_STATEMENT ::= 5646 -- return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5647 -- [:= EXPRESSION] [do 5648 -- HANDLED_SEQUENCE_OF_STATEMENTS 5649 -- end return]; 5650 5651 -- RETURN_SUBTYPE_INDICATION ::= SUBTYPE_INDICATION | ACCESS_DEFINITION 5652 5653 -- The term "return statement" is defined in 6.5 to mean either a 5654 -- SIMPLE_RETURN_STATEMENT or an EXTENDED_RETURN_STATEMENT. We avoid 5655 -- the use of this term, since it used to mean someting else in earlier 5656 -- versions of Ada. 5657 5658 -- N_Simple_Return_Statement 5659 -- Sloc points to RETURN 5660 -- Return_Statement_Entity (Node5-Sem) 5661 -- Expression (Node3) (set to Empty if no expression present) 5662 -- Storage_Pool (Node1-Sem) 5663 -- Procedure_To_Call (Node2-Sem) 5664 -- Do_Tag_Check (Flag13-Sem) 5665 -- By_Ref (Flag5-Sem) 5666 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 5667 5668 -- Note: Return_Statement_Entity points to an E_Return_Statement 5669 5670 -- If a range check is required, then Do_Range_Check is set on the 5671 -- Expression. The check is against the return subtype of the function. 5672 5673 -- N_Extended_Return_Statement 5674 -- Sloc points to RETURN 5675 -- Return_Statement_Entity (Node5-Sem) 5676 -- Return_Object_Declarations (List3) 5677 -- Handled_Statement_Sequence (Node4) (set to Empty if not present) 5678 -- Storage_Pool (Node1-Sem) 5679 -- Procedure_To_Call (Node2-Sem) 5680 -- Do_Tag_Check (Flag13-Sem) 5681 -- By_Ref (Flag5-Sem) 5682 5683 -- Note: Return_Statement_Entity points to an E_Return_Statement. 5684 5685 -- Note that Return_Object_Declarations is a list containing the 5686 -- N_Object_Declaration -- see comment on this field above. 5687 5688 -- The declared object will have Is_Return_Object = True. 5689 5690 -- There is no such syntactic category as return_object_declaration 5691 -- in the RM. Return_Object_Declarations represents this portion of 5692 -- the syntax for EXTENDED_RETURN_STATEMENT: 5693 -- DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5694 -- [:= EXPRESSION] 5695 5696 -- There are two entities associated with an extended_return_statement: 5697 -- the Return_Statement_Entity represents the statement itself, 5698 -- and the Defining_Identifier of the Object_Declaration in 5699 -- Return_Object_Declarations represents the object being 5700 -- returned. N_Simple_Return_Statement has only the former. 5701 5702 ------------------------------ 5703 -- 6.8 Expression Function -- 5704 ------------------------------ 5705 5706 -- EXPRESSION_FUNCTION ::= 5707 -- FUNCTION SPECIFICATION IS (EXPRESSION) 5708 -- [ASPECT_SPECIFICATIONS]; 5709 5710 -- N_Expression_Function 5711 -- Sloc points to FUNCTION 5712 -- Specification (Node1) 5713 -- Expression (Node3) 5714 -- Corresponding_Spec (Node5-Sem) 5715 5716 ------------------------------ 5717 -- 7.1 Package Declaration -- 5718 ------------------------------ 5719 5720 -- PACKAGE_DECLARATION ::= 5721 -- PACKAGE_SPECIFICATION; 5722 5723 -- Note: the activation chain entity for a package spec is used for 5724 -- all tasks declared in the package spec, or in the package body. 5725 5726 -- N_Package_Declaration 5727 -- Sloc points to PACKAGE 5728 -- Specification (Node1) 5729 -- Corresponding_Body (Node5-Sem) 5730 -- Parent_Spec (Node4-Sem) 5731 -- Activation_Chain_Entity (Node3-Sem) 5732 5733 -------------------------------- 5734 -- 7.1 Package Specification -- 5735 -------------------------------- 5736 5737 -- PACKAGE_SPECIFICATION ::= 5738 -- package DEFINING_PROGRAM_UNIT_NAME 5739 -- [ASPECT_SPECIFICATIONS] 5740 -- is 5741 -- {BASIC_DECLARATIVE_ITEM} 5742 -- [private 5743 -- {BASIC_DECLARATIVE_ITEM}] 5744 -- end [[PARENT_UNIT_NAME .] IDENTIFIER] 5745 5746 -- N_Package_Specification 5747 -- Sloc points to PACKAGE 5748 -- Defining_Unit_Name (Node1) 5749 -- Visible_Declarations (List2) 5750 -- Private_Declarations (List3) (set to No_List if no private 5751 -- part present) 5752 -- End_Label (Node4) 5753 -- Generic_Parent (Node5-Sem) 5754 -- Limited_View_Installed (Flag18-Sem) 5755 5756 ----------------------- 5757 -- 7.1 Package Body -- 5758 ----------------------- 5759 5760 -- PACKAGE_BODY ::= 5761 -- package body DEFINING_PROGRAM_UNIT_NAME 5762 -- [ASPECT_SPECIFICATIONS] 5763 -- is 5764 -- DECLARATIVE_PART 5765 -- [begin 5766 -- HANDLED_SEQUENCE_OF_STATEMENTS] 5767 -- end [[PARENT_UNIT_NAME .] IDENTIFIER]; 5768 5769 -- N_Package_Body 5770 -- Sloc points to PACKAGE 5771 -- Defining_Unit_Name (Node1) 5772 -- Declarations (List2) 5773 -- Handled_Statement_Sequence (Node4) (set to Empty if no HSS present) 5774 -- Corresponding_Spec (Node5-Sem) 5775 -- Was_Originally_Stub (Flag13-Sem) 5776 5777 -- Note: if a source level package does not contain a handled sequence 5778 -- of statements, then the parser supplies a dummy one with a null 5779 -- sequence of statements. Comes_From_Source will be False in this 5780 -- constructed sequence. The reason we need this is for the End_Label 5781 -- field in the HSS. 5782 5783 ----------------------------------- 5784 -- 7.4 Private Type Declaration -- 5785 ----------------------------------- 5786 5787 -- PRIVATE_TYPE_DECLARATION ::= 5788 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 5789 -- is [[abstract] tagged] [limited] private 5790 -- [ASPECT_SPECIFICATIONS]; 5791 5792 -- Note: TAGGED is not permitted in Ada 83 mode 5793 5794 -- N_Private_Type_Declaration 5795 -- Sloc points to TYPE 5796 -- Defining_Identifier (Node1) 5797 -- Discriminant_Specifications (List4) (set to No_List if no 5798 -- discriminant part) 5799 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5800 -- Abstract_Present (Flag4) 5801 -- Tagged_Present (Flag15) 5802 -- Limited_Present (Flag17) 5803 5804 ---------------------------------------- 5805 -- 7.4 Private Extension Declaration -- 5806 ---------------------------------------- 5807 5808 -- PRIVATE_EXTENSION_DECLARATION ::= 5809 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is 5810 -- [abstract] [limited | synchronized] 5811 -- new ancestor_SUBTYPE_INDICATION [and INTERFACE_LIST] 5812 -- with private [ASPECT_SPECIFICATIONS]; 5813 5814 -- Note: LIMITED, and private extension declarations are not allowed 5815 -- in Ada 83 mode. 5816 5817 -- N_Private_Extension_Declaration 5818 -- Sloc points to TYPE 5819 -- Defining_Identifier (Node1) 5820 -- Uninitialized_Variable (Node3-Sem) 5821 -- Discriminant_Specifications (List4) (set to No_List if no 5822 -- discriminant part) 5823 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5824 -- Abstract_Present (Flag4) 5825 -- Limited_Present (Flag17) 5826 -- Synchronized_Present (Flag7) 5827 -- Subtype_Indication (Node5) 5828 -- Interface_List (List2) (set to No_List if none) 5829 5830 --------------------- 5831 -- 8.4 Use Clause -- 5832 --------------------- 5833 5834 -- USE_CLAUSE ::= USE_PACKAGE_CLAUSE | USE_TYPE_CLAUSE 5835 5836 ----------------------------- 5837 -- 8.4 Use Package Clause -- 5838 ----------------------------- 5839 5840 -- USE_PACKAGE_CLAUSE ::= use package_NAME {, package_NAME}; 5841 5842 -- N_Use_Package_Clause 5843 -- Sloc points to USE 5844 -- Prev_Use_Clause (Node1-Sem) 5845 -- Name (Node2) 5846 -- Next_Use_Clause (Node3-Sem) 5847 -- Associated_Node (Node4-Sem) 5848 -- Hidden_By_Use_Clause (Elist5-Sem) 5849 -- Is_Effective_Use_Clause (Flag1) 5850 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5851 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5852 5853 -------------------------- 5854 -- 8.4 Use Type Clause -- 5855 -------------------------- 5856 5857 -- USE_TYPE_CLAUSE ::= use [ALL] type SUBTYPE_MARK {, SUBTYPE_MARK}; 5858 5859 -- Note: use type clause is not permitted in Ada 83 mode 5860 5861 -- Note: the ALL keyword can appear only in Ada 2012 mode 5862 5863 -- N_Use_Type_Clause 5864 -- Sloc points to USE 5865 -- Prev_Use_Clause (Node1-Sem) 5866 -- Used_Operations (Elist2-Sem) 5867 -- Next_Use_Clause (Node3-Sem) 5868 -- Subtype_Mark (Node4) 5869 -- Hidden_By_Use_Clause (Elist5-Sem) 5870 -- Is_Effective_Use_Clause (Flag1) 5871 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5872 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5873 -- All_Present (Flag15) 5874 5875 ------------------------------- 5876 -- 8.5 Renaming Declaration -- 5877 ------------------------------- 5878 5879 -- RENAMING_DECLARATION ::= 5880 -- OBJECT_RENAMING_DECLARATION 5881 -- | EXCEPTION_RENAMING_DECLARATION 5882 -- | PACKAGE_RENAMING_DECLARATION 5883 -- | SUBPROGRAM_RENAMING_DECLARATION 5884 -- | GENERIC_RENAMING_DECLARATION 5885 5886 -------------------------------------- 5887 -- 8.5 Object Renaming Declaration -- 5888 -------------------------------------- 5889 5890 -- OBJECT_RENAMING_DECLARATION ::= 5891 -- DEFINING_IDENTIFIER : 5892 -- [NULL_EXCLUSION] SUBTYPE_MARK renames object_NAME 5893 -- [ASPECT_SPECIFICATIONS]; 5894 -- | DEFINING_IDENTIFIER : 5895 -- ACCESS_DEFINITION renames object_NAME 5896 -- [ASPECT_SPECIFICATIONS]; 5897 5898 -- Note: Access_Definition is an optional field that gives support to 5899 -- Ada 2005 (AI-230). The parser generates nodes that have either the 5900 -- Subtype_Indication field or else the Access_Definition field. 5901 5902 -- N_Object_Renaming_Declaration 5903 -- Sloc points to first identifier 5904 -- Defining_Identifier (Node1) 5905 -- Null_Exclusion_Present (Flag11) (set to False if not present) 5906 -- Subtype_Mark (Node4) (set to Empty if not present) 5907 -- Access_Definition (Node3) (set to Empty if not present) 5908 -- Name (Node2) 5909 -- Corresponding_Generic_Association (Node5-Sem) 5910 5911 ----------------------------------------- 5912 -- 8.5 Exception Renaming Declaration -- 5913 ----------------------------------------- 5914 5915 -- EXCEPTION_RENAMING_DECLARATION ::= 5916 -- DEFINING_IDENTIFIER : exception renames exception_NAME 5917 -- [ASPECT_SPECIFICATIONS]; 5918 5919 -- N_Exception_Renaming_Declaration 5920 -- Sloc points to first identifier 5921 -- Defining_Identifier (Node1) 5922 -- Name (Node2) 5923 5924 --------------------------------------- 5925 -- 8.5 Package Renaming Declaration -- 5926 --------------------------------------- 5927 5928 -- PACKAGE_RENAMING_DECLARATION ::= 5929 -- package DEFINING_PROGRAM_UNIT_NAME renames package_NAME 5930 -- [ASPECT_SPECIFICATIONS]; 5931 5932 -- N_Package_Renaming_Declaration 5933 -- Sloc points to PACKAGE 5934 -- Defining_Unit_Name (Node1) 5935 -- Name (Node2) 5936 -- Parent_Spec (Node4-Sem) 5937 5938 ------------------------------------------ 5939 -- 8.5 Subprogram Renaming Declaration -- 5940 ------------------------------------------ 5941 5942 -- SUBPROGRAM_RENAMING_DECLARATION ::= 5943 -- SUBPROGRAM_SPECIFICATION renames callable_entity_NAME 5944 -- [ASPECT_SPECIFICATIONS]; 5945 5946 -- N_Subprogram_Renaming_Declaration 5947 -- Sloc points to RENAMES 5948 -- Specification (Node1) 5949 -- Name (Node2) 5950 -- Parent_Spec (Node4-Sem) 5951 -- Corresponding_Spec (Node5-Sem) 5952 -- Corresponding_Formal_Spec (Node3-Sem) 5953 -- From_Default (Flag6-Sem) 5954 5955 ----------------------------------------- 5956 -- 8.5.5 Generic Renaming Declaration -- 5957 ----------------------------------------- 5958 5959 -- GENERIC_RENAMING_DECLARATION ::= 5960 -- generic package DEFINING_PROGRAM_UNIT_NAME 5961 -- renames generic_package_NAME 5962 -- [ASPECT_SPECIFICATIONS]; 5963 -- | generic procedure DEFINING_PROGRAM_UNIT_NAME 5964 -- renames generic_procedure_NAME 5965 -- [ASPECT_SPECIFICATIONS]; 5966 -- | generic function DEFINING_PROGRAM_UNIT_NAME 5967 -- renames generic_function_NAME 5968 -- [ASPECT_SPECIFICATIONS]; 5969 5970 -- N_Generic_Package_Renaming_Declaration 5971 -- Sloc points to GENERIC 5972 -- Defining_Unit_Name (Node1) 5973 -- Name (Node2) 5974 -- Parent_Spec (Node4-Sem) 5975 5976 -- N_Generic_Procedure_Renaming_Declaration 5977 -- Sloc points to GENERIC 5978 -- Defining_Unit_Name (Node1) 5979 -- Name (Node2) 5980 -- Parent_Spec (Node4-Sem) 5981 5982 -- N_Generic_Function_Renaming_Declaration 5983 -- Sloc points to GENERIC 5984 -- Defining_Unit_Name (Node1) 5985 -- Name (Node2) 5986 -- Parent_Spec (Node4-Sem) 5987 5988 -------------------------------- 5989 -- 9.1 Task Type Declaration -- 5990 -------------------------------- 5991 5992 -- TASK_TYPE_DECLARATION ::= 5993 -- task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 5994 -- [ASPECT_SPECIFICATIONS] 5995 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 5996 5997 -- N_Task_Type_Declaration 5998 -- Sloc points to TASK 5999 -- Defining_Identifier (Node1) 6000 -- Discriminant_Specifications (List4) (set to No_List if no 6001 -- discriminant part) 6002 -- Interface_List (List2) (set to No_List if none) 6003 -- Task_Definition (Node3) (set to Empty if not present) 6004 -- Corresponding_Body (Node5-Sem) 6005 6006 ---------------------------------- 6007 -- 9.1 Single Task Declaration -- 6008 ---------------------------------- 6009 6010 -- SINGLE_TASK_DECLARATION ::= 6011 -- task DEFINING_IDENTIFIER 6012 -- [ASPECT_SPECIFICATIONS] 6013 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 6014 6015 -- N_Single_Task_Declaration 6016 -- Sloc points to TASK 6017 -- Defining_Identifier (Node1) 6018 -- Interface_List (List2) (set to No_List if none) 6019 -- Task_Definition (Node3) (set to Empty if not present) 6020 6021 -------------------------- 6022 -- 9.1 Task Definition -- 6023 -------------------------- 6024 6025 -- TASK_DEFINITION ::= 6026 -- {TASK_ITEM} 6027 -- [private 6028 -- {TASK_ITEM}] 6029 -- end [task_IDENTIFIER] 6030 6031 -- Note: as a result of semantic analysis, the list of task items can 6032 -- include implicit type declarations resulting from entry families. 6033 6034 -- N_Task_Definition 6035 -- Sloc points to first token of task definition 6036 -- Visible_Declarations (List2) 6037 -- Private_Declarations (List3) (set to No_List if no private part) 6038 -- End_Label (Node4) 6039 -- Has_Storage_Size_Pragma (Flag5-Sem) 6040 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 6041 6042 -------------------- 6043 -- 9.1 Task Item -- 6044 -------------------- 6045 6046 -- TASK_ITEM ::= ENTRY_DECLARATION | REPRESENTATION_CLAUSE 6047 6048 -------------------- 6049 -- 9.1 Task Body -- 6050 -------------------- 6051 6052 -- TASK_BODY ::= 6053 -- task body task_DEFINING_IDENTIFIER 6054 -- [ASPECT_SPECIFICATIONS] 6055 -- is 6056 -- DECLARATIVE_PART 6057 -- begin 6058 -- HANDLED_SEQUENCE_OF_STATEMENTS 6059 -- end [task_IDENTIFIER]; 6060 6061 -- Gigi restriction: This node never appears 6062 6063 -- N_Task_Body 6064 -- Sloc points to TASK 6065 -- Defining_Identifier (Node1) 6066 -- Declarations (List2) 6067 -- Handled_Statement_Sequence (Node4) 6068 -- Is_Task_Master (Flag5-Sem) 6069 -- Activation_Chain_Entity (Node3-Sem) 6070 -- Corresponding_Spec (Node5-Sem) 6071 -- Was_Originally_Stub (Flag13-Sem) 6072 6073 ------------------------------------- 6074 -- 9.4 Protected Type Declaration -- 6075 ------------------------------------- 6076 6077 -- PROTECTED_TYPE_DECLARATION ::= 6078 -- protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 6079 -- [ASPECT_SPECIFICATIONS] 6080 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 6081 6082 -- Note: protected type declarations are not permitted in Ada 83 mode 6083 6084 -- N_Protected_Type_Declaration 6085 -- Sloc points to PROTECTED 6086 -- Defining_Identifier (Node1) 6087 -- Discriminant_Specifications (List4) (set to No_List if no 6088 -- discriminant part) 6089 -- Interface_List (List2) (set to No_List if none) 6090 -- Protected_Definition (Node3) 6091 -- Corresponding_Body (Node5-Sem) 6092 6093 --------------------------------------- 6094 -- 9.4 Single Protected Declaration -- 6095 --------------------------------------- 6096 6097 -- SINGLE_PROTECTED_DECLARATION ::= 6098 -- protected DEFINING_IDENTIFIER 6099 -- [ASPECT_SPECIFICATIONS] 6100 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 6101 6102 -- Note: single protected declarations are not allowed in Ada 83 mode 6103 6104 -- N_Single_Protected_Declaration 6105 -- Sloc points to PROTECTED 6106 -- Defining_Identifier (Node1) 6107 -- Interface_List (List2) (set to No_List if none) 6108 -- Protected_Definition (Node3) 6109 6110 ------------------------------- 6111 -- 9.4 Protected Definition -- 6112 ------------------------------- 6113 6114 -- PROTECTED_DEFINITION ::= 6115 -- {PROTECTED_OPERATION_DECLARATION} 6116 -- [private 6117 -- {PROTECTED_ELEMENT_DECLARATION}] 6118 -- end [protected_IDENTIFIER] 6119 6120 -- N_Protected_Definition 6121 -- Sloc points to first token of protected definition 6122 -- Visible_Declarations (List2) 6123 -- Private_Declarations (List3) (set to No_List if no private part) 6124 -- End_Label (Node4) 6125 6126 ------------------------------------------ 6127 -- 9.4 Protected Operation Declaration -- 6128 ------------------------------------------ 6129 6130 -- PROTECTED_OPERATION_DECLARATION ::= 6131 -- SUBPROGRAM_DECLARATION 6132 -- | ENTRY_DECLARATION 6133 -- | REPRESENTATION_CLAUSE 6134 6135 ---------------------------------------- 6136 -- 9.4 Protected Element Declaration -- 6137 ---------------------------------------- 6138 6139 -- PROTECTED_ELEMENT_DECLARATION ::= 6140 -- PROTECTED_OPERATION_DECLARATION | COMPONENT_DECLARATION 6141 6142 ------------------------- 6143 -- 9.4 Protected Body -- 6144 ------------------------- 6145 6146 -- PROTECTED_BODY ::= 6147 -- protected body DEFINING_IDENTIFIER 6148 -- [ASPECT_SPECIFICATIONS]; 6149 -- is 6150 -- {PROTECTED_OPERATION_ITEM} 6151 -- end [protected_IDENTIFIER]; 6152 6153 -- Note: protected bodies are not allowed in Ada 83 mode 6154 6155 -- Gigi restriction: This node never appears 6156 6157 -- N_Protected_Body 6158 -- Sloc points to PROTECTED 6159 -- Defining_Identifier (Node1) 6160 -- Declarations (List2) protected operation items (and pragmas) 6161 -- End_Label (Node4) 6162 -- Corresponding_Spec (Node5-Sem) 6163 -- Was_Originally_Stub (Flag13-Sem) 6164 6165 ----------------------------------- 6166 -- 9.4 Protected Operation Item -- 6167 ----------------------------------- 6168 6169 -- PROTECTED_OPERATION_ITEM ::= 6170 -- SUBPROGRAM_DECLARATION 6171 -- | SUBPROGRAM_BODY 6172 -- | ENTRY_BODY 6173 -- | REPRESENTATION_CLAUSE 6174 6175 ------------------------------ 6176 -- 9.5.2 Entry Declaration -- 6177 ------------------------------ 6178 6179 -- ENTRY_DECLARATION ::= 6180 -- [[not] overriding] 6181 -- entry DEFINING_IDENTIFIER 6182 -- [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE 6183 -- [ASPECT_SPECIFICATIONS]; 6184 6185 -- N_Entry_Declaration 6186 -- Sloc points to ENTRY 6187 -- Defining_Identifier (Node1) 6188 -- Discrete_Subtype_Definition (Node4) (set to Empty if not present) 6189 -- Parameter_Specifications (List3) (set to No_List if no formal part) 6190 -- Corresponding_Body (Node5-Sem) 6191 -- Must_Override (Flag14) set if overriding indicator present 6192 -- Must_Not_Override (Flag15) set if not_overriding indicator present 6193 6194 -- Note: overriding indicator is an Ada 2005 feature 6195 6196 ----------------------------- 6197 -- 9.5.2 Accept statement -- 6198 ----------------------------- 6199 6200 -- ACCEPT_STATEMENT ::= 6201 -- accept entry_DIRECT_NAME 6202 -- [(ENTRY_INDEX)] PARAMETER_PROFILE [do 6203 -- HANDLED_SEQUENCE_OF_STATEMENTS 6204 -- end [entry_IDENTIFIER]]; 6205 6206 -- Gigi restriction: This node never appears 6207 6208 -- Note: there are no explicit declarations allowed in an accept 6209 -- statement. However, the implicit declarations for any statement 6210 -- identifiers (labels and block/loop identifiers) are declarations 6211 -- that belong logically to the accept statement, and that is why 6212 -- there is a Declarations field in this node. 6213 6214 -- N_Accept_Statement 6215 -- Sloc points to ACCEPT 6216 -- Entry_Direct_Name (Node1) 6217 -- Entry_Index (Node5) (set to Empty if not present) 6218 -- Parameter_Specifications (List3) (set to No_List if no formal part) 6219 -- Handled_Statement_Sequence (Node4) 6220 -- Declarations (List2) (set to No_List if no declarations) 6221 6222 ------------------------ 6223 -- 9.5.2 Entry Index -- 6224 ------------------------ 6225 6226 -- ENTRY_INDEX ::= EXPRESSION 6227 6228 ----------------------- 6229 -- 9.5.2 Entry Body -- 6230 ----------------------- 6231 6232 -- ENTRY_BODY ::= 6233 -- entry DEFINING_IDENTIFIER ENTRY_BODY_FORMAL_PART ENTRY_BARRIER is 6234 -- DECLARATIVE_PART 6235 -- begin 6236 -- HANDLED_SEQUENCE_OF_STATEMENTS 6237 -- end [entry_IDENTIFIER]; 6238 6239 -- ENTRY_BARRIER ::= when CONDITION 6240 6241 -- Note: we store the CONDITION of the ENTRY_BARRIER in the node for 6242 -- the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting 6243 -- too full (it would otherwise have too many fields) 6244 6245 -- Gigi restriction: This node never appears 6246 6247 -- N_Entry_Body 6248 -- Sloc points to ENTRY 6249 -- Defining_Identifier (Node1) 6250 -- Entry_Body_Formal_Part (Node5) 6251 -- Declarations (List2) 6252 -- Handled_Statement_Sequence (Node4) 6253 -- Activation_Chain_Entity (Node3-Sem) 6254 6255 ----------------------------------- 6256 -- 9.5.2 Entry Body Formal Part -- 6257 ----------------------------------- 6258 6259 -- ENTRY_BODY_FORMAL_PART ::= 6260 -- [(ENTRY_INDEX_SPECIFICATION)] PARAMETER_PROFILE 6261 6262 -- Note that an entry body formal part node is present even if it is 6263 -- empty. This reflects the grammar, in which it is the components of 6264 -- the entry body formal part that are optional, not the entry body 6265 -- formal part itself. Also this means that the barrier condition 6266 -- always has somewhere to be stored. 6267 6268 -- Gigi restriction: This node never appears 6269 6270 -- N_Entry_Body_Formal_Part 6271 -- Sloc points to first token 6272 -- Entry_Index_Specification (Node4) (set to Empty if not present) 6273 -- Parameter_Specifications (List3) (set to No_List if no formal part) 6274 -- Condition (Node1) from entry barrier of entry body 6275 6276 -------------------------- 6277 -- 9.5.2 Entry Barrier -- 6278 -------------------------- 6279 6280 -- ENTRY_BARRIER ::= when CONDITION 6281 6282 -------------------------------------- 6283 -- 9.5.2 Entry Index Specification -- 6284 -------------------------------------- 6285 6286 -- ENTRY_INDEX_SPECIFICATION ::= 6287 -- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION 6288 6289 -- Gigi restriction: This node never appears 6290 6291 -- N_Entry_Index_Specification 6292 -- Sloc points to FOR 6293 -- Defining_Identifier (Node1) 6294 -- Discrete_Subtype_Definition (Node4) 6295 6296 --------------------------------- 6297 -- 9.5.3 Entry Call Statement -- 6298 --------------------------------- 6299 6300 -- ENTRY_CALL_STATEMENT ::= entry_NAME [ACTUAL_PARAMETER_PART]; 6301 6302 -- The parser may generate a procedure call for this construct. The 6303 -- semantic pass must correct this misidentification where needed. 6304 6305 -- Gigi restriction: This node never appears 6306 6307 -- N_Entry_Call_Statement 6308 -- Sloc points to first token of name 6309 -- Name (Node2) 6310 -- Parameter_Associations (List3) (set to No_List if no 6311 -- actual parameter part) 6312 -- First_Named_Actual (Node4-Sem) 6313 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 6314 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 6315 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 6316 6317 ------------------------------ 6318 -- 9.5.4 Requeue Statement -- 6319 ------------------------------ 6320 6321 -- REQUEUE_STATEMENT ::= requeue entry_NAME [with abort]; 6322 6323 -- Note: requeue statements are not permitted in Ada 83 mode 6324 6325 -- Gigi restriction: This node never appears 6326 6327 -- N_Requeue_Statement 6328 -- Sloc points to REQUEUE 6329 -- Name (Node2) 6330 -- Abort_Present (Flag15) 6331 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 6332 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 6333 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 6334 6335 -------------------------- 6336 -- 9.6 Delay Statement -- 6337 -------------------------- 6338 6339 -- DELAY_STATEMENT ::= 6340 -- DELAY_UNTIL_STATEMENT 6341 -- | DELAY_RELATIVE_STATEMENT 6342 6343 -------------------------------- 6344 -- 9.6 Delay Until Statement -- 6345 -------------------------------- 6346 6347 -- DELAY_UNTIL_STATEMENT ::= delay until delay_EXPRESSION; 6348 6349 -- Note: delay until statements are not permitted in Ada 83 mode 6350 6351 -- Gigi restriction: This node never appears 6352 6353 -- N_Delay_Until_Statement 6354 -- Sloc points to DELAY 6355 -- Expression (Node3) 6356 6357 ----------------------------------- 6358 -- 9.6 Delay Relative Statement -- 6359 ----------------------------------- 6360 6361 -- DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION; 6362 6363 -- Gigi restriction: This node never appears 6364 6365 -- N_Delay_Relative_Statement 6366 -- Sloc points to DELAY 6367 -- Expression (Node3) 6368 6369 --------------------------- 6370 -- 9.7 Select Statement -- 6371 --------------------------- 6372 6373 -- SELECT_STATEMENT ::= 6374 -- SELECTIVE_ACCEPT 6375 -- | TIMED_ENTRY_CALL 6376 -- | CONDITIONAL_ENTRY_CALL 6377 -- | ASYNCHRONOUS_SELECT 6378 6379 ----------------------------- 6380 -- 9.7.1 Selective Accept -- 6381 ----------------------------- 6382 6383 -- SELECTIVE_ACCEPT ::= 6384 -- select 6385 -- [GUARD] 6386 -- SELECT_ALTERNATIVE 6387 -- {or 6388 -- [GUARD] 6389 -- SELECT_ALTERNATIVE} 6390 -- [else 6391 -- SEQUENCE_OF_STATEMENTS] 6392 -- end select; 6393 6394 -- Gigi restriction: This node never appears 6395 6396 -- Note: the guard expression, if present, appears in the node for 6397 -- the select alternative. 6398 6399 -- N_Selective_Accept 6400 -- Sloc points to SELECT 6401 -- Select_Alternatives (List1) 6402 -- Else_Statements (List4) (set to No_List if no else part) 6403 6404 ------------------ 6405 -- 9.7.1 Guard -- 6406 ------------------ 6407 6408 -- GUARD ::= when CONDITION => 6409 6410 -- As noted above, the CONDITION that is part of a GUARD is included 6411 -- in the node for the select alternative for convenience. 6412 6413 ------------------------------- 6414 -- 9.7.1 Select Alternative -- 6415 ------------------------------- 6416 6417 -- SELECT_ALTERNATIVE ::= 6418 -- ACCEPT_ALTERNATIVE 6419 -- | DELAY_ALTERNATIVE 6420 -- | TERMINATE_ALTERNATIVE 6421 6422 ------------------------------- 6423 -- 9.7.1 Accept Alternative -- 6424 ------------------------------- 6425 6426 -- ACCEPT_ALTERNATIVE ::= 6427 -- ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS] 6428 6429 -- Gigi restriction: This node never appears 6430 6431 -- N_Accept_Alternative 6432 -- Sloc points to ACCEPT 6433 -- Accept_Statement (Node2) 6434 -- Condition (Node1) from the guard (set to Empty if no guard present) 6435 -- Statements (List3) (set to Empty_List if no statements) 6436 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6437 -- Accept_Handler_Records (List5-Sem) 6438 6439 ------------------------------ 6440 -- 9.7.1 Delay Alternative -- 6441 ------------------------------ 6442 6443 -- DELAY_ALTERNATIVE ::= 6444 -- DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS] 6445 6446 -- Gigi restriction: This node never appears 6447 6448 -- N_Delay_Alternative 6449 -- Sloc points to DELAY 6450 -- Delay_Statement (Node2) 6451 -- Condition (Node1) from the guard (set to Empty if no guard present) 6452 -- Statements (List3) (set to Empty_List if no statements) 6453 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6454 6455 ---------------------------------- 6456 -- 9.7.1 Terminate Alternative -- 6457 ---------------------------------- 6458 6459 -- TERMINATE_ALTERNATIVE ::= terminate; 6460 6461 -- Gigi restriction: This node never appears 6462 6463 -- N_Terminate_Alternative 6464 -- Sloc points to TERMINATE 6465 -- Condition (Node1) from the guard (set to Empty if no guard present) 6466 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6467 -- Pragmas_After (List5) pragmas after alt (set to No_List if none) 6468 6469 ----------------------------- 6470 -- 9.7.2 Timed Entry Call -- 6471 ----------------------------- 6472 6473 -- TIMED_ENTRY_CALL ::= 6474 -- select 6475 -- ENTRY_CALL_ALTERNATIVE 6476 -- or 6477 -- DELAY_ALTERNATIVE 6478 -- end select; 6479 6480 -- Gigi restriction: This node never appears 6481 6482 -- N_Timed_Entry_Call 6483 -- Sloc points to SELECT 6484 -- Entry_Call_Alternative (Node1) 6485 -- Delay_Alternative (Node4) 6486 6487 ----------------------------------- 6488 -- 9.7.2 Entry Call Alternative -- 6489 ----------------------------------- 6490 6491 -- ENTRY_CALL_ALTERNATIVE ::= 6492 -- PROCEDURE_OR_ENTRY_CALL [SEQUENCE_OF_STATEMENTS] 6493 6494 -- PROCEDURE_OR_ENTRY_CALL ::= 6495 -- PROCEDURE_CALL_STATEMENT | ENTRY_CALL_STATEMENT 6496 6497 -- Gigi restriction: This node never appears 6498 6499 -- N_Entry_Call_Alternative 6500 -- Sloc points to first token of entry call statement 6501 -- Entry_Call_Statement (Node1) 6502 -- Statements (List3) (set to Empty_List if no statements) 6503 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6504 6505 ----------------------------------- 6506 -- 9.7.3 Conditional Entry Call -- 6507 ----------------------------------- 6508 6509 -- CONDITIONAL_ENTRY_CALL ::= 6510 -- select 6511 -- ENTRY_CALL_ALTERNATIVE 6512 -- else 6513 -- SEQUENCE_OF_STATEMENTS 6514 -- end select; 6515 6516 -- Gigi restriction: This node never appears 6517 6518 -- N_Conditional_Entry_Call 6519 -- Sloc points to SELECT 6520 -- Entry_Call_Alternative (Node1) 6521 -- Else_Statements (List4) 6522 6523 -------------------------------- 6524 -- 9.7.4 Asynchronous Select -- 6525 -------------------------------- 6526 6527 -- ASYNCHRONOUS_SELECT ::= 6528 -- select 6529 -- TRIGGERING_ALTERNATIVE 6530 -- then abort 6531 -- ABORTABLE_PART 6532 -- end select; 6533 6534 -- Note: asynchronous select is not permitted in Ada 83 mode 6535 6536 -- Gigi restriction: This node never appears 6537 6538 -- N_Asynchronous_Select 6539 -- Sloc points to SELECT 6540 -- Triggering_Alternative (Node1) 6541 -- Abortable_Part (Node2) 6542 6543 ----------------------------------- 6544 -- 9.7.4 Triggering Alternative -- 6545 ----------------------------------- 6546 6547 -- TRIGGERING_ALTERNATIVE ::= 6548 -- TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS] 6549 6550 -- Gigi restriction: This node never appears 6551 6552 -- N_Triggering_Alternative 6553 -- Sloc points to first token of triggering statement 6554 -- Triggering_Statement (Node1) 6555 -- Statements (List3) (set to Empty_List if no statements) 6556 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6557 6558 --------------------------------- 6559 -- 9.7.4 Triggering Statement -- 6560 --------------------------------- 6561 6562 -- TRIGGERING_STATEMENT ::= PROCEDURE_OR_ENTRY_CALL | DELAY_STATEMENT 6563 6564 --------------------------- 6565 -- 9.7.4 Abortable Part -- 6566 --------------------------- 6567 6568 -- ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS 6569 6570 -- Gigi restriction: This node never appears 6571 6572 -- N_Abortable_Part 6573 -- Sloc points to ABORT 6574 -- Statements (List3) 6575 6576 -------------------------- 6577 -- 9.8 Abort Statement -- 6578 -------------------------- 6579 6580 -- ABORT_STATEMENT ::= abort task_NAME {, task_NAME}; 6581 6582 -- Gigi restriction: This node never appears 6583 6584 -- N_Abort_Statement 6585 -- Sloc points to ABORT 6586 -- Names (List2) 6587 6588 ------------------------- 6589 -- 10.1.1 Compilation -- 6590 ------------------------- 6591 6592 -- COMPILATION ::= {COMPILATION_UNIT} 6593 6594 -- There is no explicit node in the tree for a compilation, since in 6595 -- general the compiler is processing only a single compilation unit 6596 -- at a time. It is possible to parse multiple units in syntax check 6597 -- only mode, but the trees are discarded in that case. 6598 6599 ------------------------------ 6600 -- 10.1.1 Compilation Unit -- 6601 ------------------------------ 6602 6603 -- COMPILATION_UNIT ::= 6604 -- CONTEXT_CLAUSE LIBRARY_ITEM 6605 -- | CONTEXT_CLAUSE SUBUNIT 6606 6607 -- The N_Compilation_Unit node itself represents the above syntax. 6608 -- However, there are two additional items not reflected in the above 6609 -- syntax. First we have the global declarations that are added by the 6610 -- code generator. These are outer level declarations (so they cannot 6611 -- be represented as being inside the units). An example is the wrapper 6612 -- subprograms that are created to do ABE checking. As always a list of 6613 -- declarations can contain actions as well (i.e. statements), and such 6614 -- statements are executed as part of the elaboration of the unit. Note 6615 -- that all such declarations are elaborated before the library unit. 6616 6617 -- Similarly, certain actions need to be elaborated at the completion 6618 -- of elaboration of the library unit (notably the statement that sets 6619 -- the Boolean flag indicating that elaboration is complete). 6620 6621 -- The third item not reflected in the syntax is pragmas that appear 6622 -- after the compilation unit. As always pragmas are a problem since 6623 -- they are not part of the formal syntax, but can be stuck into the 6624 -- source following a set of ad hoc rules, and we have to find an ad 6625 -- hoc way of sticking them into the tree. For pragmas that appear 6626 -- before the library unit, we just consider them to be part of the 6627 -- context clause, and pragmas can appear in the Context_Items list 6628 -- of the compilation unit. However, pragmas can also appear after 6629 -- the library item. 6630 6631 -- To deal with all these problems, we create an auxiliary node for 6632 -- a compilation unit, referenced from the N_Compilation_Unit node, 6633 -- that contains these items. 6634 6635 -- N_Compilation_Unit 6636 -- Sloc points to first token of defining unit name 6637 -- Library_Unit (Node4-Sem) corresponding/parent spec/body 6638 -- Context_Items (List1) context items and pragmas preceding unit 6639 -- Private_Present (Flag15) set if library unit has private keyword 6640 -- Unit (Node2) library item or subunit 6641 -- Aux_Decls_Node (Node5) points to the N_Compilation_Unit_Aux node 6642 -- Has_No_Elaboration_Code (Flag17-Sem) 6643 -- Body_Required (Flag13-Sem) set for spec if body is required 6644 -- Acts_As_Spec (Flag4-Sem) flag for subprogram body with no spec 6645 -- Context_Pending (Flag16-Sem) 6646 -- First_Inlined_Subprogram (Node3-Sem) 6647 -- Has_Pragma_Suppress_All (Flag14-Sem) 6648 6649 -- N_Compilation_Unit_Aux 6650 -- Sloc is a copy of the Sloc from the N_Compilation_Unit node 6651 -- Declarations (List2) (set to No_List if no global declarations) 6652 -- Actions (List1) (set to No_List if no actions) 6653 -- Pragmas_After (List5) pragmas after unit (set to No_List if none) 6654 -- Config_Pragmas (List4) config pragmas (set to Empty_List if none) 6655 -- Default_Storage_Pool (Node3-Sem) 6656 6657 -------------------------- 6658 -- 10.1.1 Library Item -- 6659 -------------------------- 6660 6661 -- LIBRARY_ITEM ::= 6662 -- [private] LIBRARY_UNIT_DECLARATION 6663 -- | LIBRARY_UNIT_BODY 6664 -- | [private] LIBRARY_UNIT_RENAMING_DECLARATION 6665 6666 -- Note: PRIVATE is not allowed in Ada 83 mode 6667 6668 -- There is no explicit node in the tree for library item, instead 6669 -- the declaration or body, and the flag for private if present, 6670 -- appear in the N_Compilation_Unit node. 6671 6672 -------------------------------------- 6673 -- 10.1.1 Library Unit Declaration -- 6674 -------------------------------------- 6675 6676 -- LIBRARY_UNIT_DECLARATION ::= 6677 -- SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION 6678 -- | GENERIC_DECLARATION | GENERIC_INSTANTIATION 6679 6680 ----------------------------------------------- 6681 -- 10.1.1 Library Unit Renaming Declaration -- 6682 ----------------------------------------------- 6683 6684 -- LIBRARY_UNIT_RENAMING_DECLARATION ::= 6685 -- PACKAGE_RENAMING_DECLARATION 6686 -- | GENERIC_RENAMING_DECLARATION 6687 -- | SUBPROGRAM_RENAMING_DECLARATION 6688 6689 ------------------------------- 6690 -- 10.1.1 Library unit body -- 6691 ------------------------------- 6692 6693 -- LIBRARY_UNIT_BODY ::= SUBPROGRAM_BODY | PACKAGE_BODY 6694 6695 ------------------------------ 6696 -- 10.1.1 Parent Unit Name -- 6697 ------------------------------ 6698 6699 -- PARENT_UNIT_NAME ::= NAME 6700 6701 ---------------------------- 6702 -- 10.1.2 Context clause -- 6703 ---------------------------- 6704 6705 -- CONTEXT_CLAUSE ::= {CONTEXT_ITEM} 6706 6707 -- The context clause can include pragmas, and any pragmas that appear 6708 -- before the context clause proper (i.e. all configuration pragmas, 6709 -- also appear at the front of this list). 6710 6711 -------------------------- 6712 -- 10.1.2 Context_Item -- 6713 -------------------------- 6714 6715 -- CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE | WITH_TYPE_CLAUSE 6716 6717 ------------------------- 6718 -- 10.1.2 With clause -- 6719 ------------------------- 6720 6721 -- WITH_CLAUSE ::= 6722 -- with library_unit_NAME {,library_unit_NAME}; 6723 6724 -- A separate With clause is built for each name, so that we have 6725 -- a Corresponding_Spec field for each with'ed spec. The flags 6726 -- First_Name and Last_Name are used to reconstruct the exact 6727 -- source form. When a list of names appears in one with clause, 6728 -- the first name in the list has First_Name set, and the last 6729 -- has Last_Name set. If the with clause has only one name, then 6730 -- both of the flags First_Name and Last_Name are set in this name. 6731 6732 -- Note: in the case of implicit with's that are installed by the 6733 -- Rtsfind routine, Implicit_With is set, and the Sloc is typically 6734 -- set to Standard_Location, but it is incorrect to test the Sloc 6735 -- to find out if a with clause is implicit, test the flag instead. 6736 6737 -- N_With_Clause 6738 -- Sloc points to first token of library unit name 6739 -- Name (Node2) 6740 -- Private_Present (Flag15) set if with_clause has private keyword 6741 -- Limited_Present (Flag17) set if LIMITED is present 6742 -- Next_Implicit_With (Node3-Sem) 6743 -- Library_Unit (Node4-Sem) 6744 -- Corresponding_Spec (Node5-Sem) 6745 -- First_Name (Flag5) (set to True if first name or only one name) 6746 -- Last_Name (Flag6) (set to True if last name or only one name) 6747 -- Context_Installed (Flag13-Sem) 6748 -- Elaborate_Present (Flag4-Sem) 6749 -- Elaborate_All_Present (Flag14-Sem) 6750 -- Elaborate_All_Desirable (Flag9-Sem) 6751 -- Elaborate_Desirable (Flag11-Sem) 6752 -- Implicit_With (Flag16-Sem) 6753 -- Limited_View_Installed (Flag18-Sem) 6754 -- Parent_With (Flag1-Sem) 6755 -- Unreferenced_In_Spec (Flag7-Sem) 6756 -- No_Entities_Ref_In_Spec (Flag8-Sem) 6757 6758 -- Note: Limited_Present and Limited_View_Installed are used to support 6759 -- the implementation of Ada 2005 (AI-50217). 6760 6761 -- Similarly, Private_Present is used to support the implementation of 6762 -- Ada 2005 (AI-50262). 6763 6764 -- Note: if the WITH clause refers to a standard library unit, then a 6765 -- limited with clause is changed into a normal with clause, because we 6766 -- are not prepared to deal with limited with in the context of Rtsfind. 6767 -- So in this case, the Limited_Present flag will be False in the final 6768 -- tree. However, we do NOT do this transformation in ASIS mode, so for 6769 -- ASIS the flag will remain set in this situation. 6770 6771 ---------------------- 6772 -- With_Type clause -- 6773 ---------------------- 6774 6775 -- This is a GNAT extension, used to implement mutually recursive 6776 -- types declared in different packages. 6777 6778 -- Note: this is now obsolete. The functionality of this construct 6779 -- is now implemented by the Ada 2005 limited_with_clause. 6780 6781 --------------------- 6782 -- 10.2 Body stub -- 6783 --------------------- 6784 6785 -- BODY_STUB ::= 6786 -- SUBPROGRAM_BODY_STUB 6787 -- | PACKAGE_BODY_STUB 6788 -- | TASK_BODY_STUB 6789 -- | PROTECTED_BODY_STUB 6790 6791 ---------------------------------- 6792 -- 10.1.3 Subprogram Body Stub -- 6793 ---------------------------------- 6794 6795 -- SUBPROGRAM_BODY_STUB ::= 6796 -- SUBPROGRAM_SPECIFICATION is separate 6797 -- [ASPECT_SPECIFICATION]; 6798 6799 -- N_Subprogram_Body_Stub 6800 -- Sloc points to FUNCTION or PROCEDURE 6801 -- Specification (Node1) 6802 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6803 -- Library_Unit (Node4-Sem) points to the subunit 6804 -- Corresponding_Body (Node5-Sem) 6805 6806 ------------------------------- 6807 -- 10.1.3 Package Body Stub -- 6808 ------------------------------- 6809 6810 -- PACKAGE_BODY_STUB ::= 6811 -- package body DEFINING_IDENTIFIER is separate 6812 -- [ASPECT_SPECIFICATION]; 6813 6814 -- N_Package_Body_Stub 6815 -- Sloc points to PACKAGE 6816 -- Defining_Identifier (Node1) 6817 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6818 -- Library_Unit (Node4-Sem) points to the subunit 6819 -- Corresponding_Body (Node5-Sem) 6820 6821 ---------------------------- 6822 -- 10.1.3 Task Body Stub -- 6823 ---------------------------- 6824 6825 -- TASK_BODY_STUB ::= 6826 -- task body DEFINING_IDENTIFIER is separate 6827 -- [ASPECT_SPECIFICATION]; 6828 6829 -- N_Task_Body_Stub 6830 -- Sloc points to TASK 6831 -- Defining_Identifier (Node1) 6832 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6833 -- Library_Unit (Node4-Sem) points to the subunit 6834 -- Corresponding_Body (Node5-Sem) 6835 6836 --------------------------------- 6837 -- 10.1.3 Protected Body Stub -- 6838 --------------------------------- 6839 6840 -- PROTECTED_BODY_STUB ::= 6841 -- protected body DEFINING_IDENTIFIER is separate 6842 -- [ASPECT_SPECIFICATION]; 6843 6844 -- Note: protected body stubs are not allowed in Ada 83 mode 6845 6846 -- N_Protected_Body_Stub 6847 -- Sloc points to PROTECTED 6848 -- Defining_Identifier (Node1) 6849 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6850 -- Library_Unit (Node4-Sem) points to the subunit 6851 -- Corresponding_Body (Node5-Sem) 6852 6853 --------------------- 6854 -- 10.1.3 Subunit -- 6855 --------------------- 6856 6857 -- SUBUNIT ::= separate (PARENT_UNIT_NAME) PROPER_BODY 6858 6859 -- N_Subunit 6860 -- Sloc points to SEPARATE 6861 -- Name (Node2) is the name of the parent unit 6862 -- Proper_Body (Node1) is the subunit body 6863 -- Corresponding_Stub (Node3-Sem) is the stub declaration for the unit. 6864 6865 --------------------------------- 6866 -- 11.1 Exception Declaration -- 6867 --------------------------------- 6868 6869 -- EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception 6870 -- [ASPECT_SPECIFICATIONS]; 6871 6872 -- For consistency with object declarations etc., the parser converts 6873 -- the case of multiple identifiers being declared to a series of 6874 -- declarations in which the expression is copied, using the More_Ids 6875 -- and Prev_Ids flags to remember the source form as described in the 6876 -- section on "Handling of Defining Identifier Lists". 6877 6878 -- N_Exception_Declaration 6879 -- Sloc points to EXCEPTION 6880 -- Defining_Identifier (Node1) 6881 -- Expression (Node3-Sem) 6882 -- Renaming_Exception (Node2-Sem) 6883 -- More_Ids (Flag5) (set to False if no more identifiers in list) 6884 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 6885 6886 ------------------------------------------ 6887 -- 11.2 Handled Sequence Of Statements -- 6888 ------------------------------------------ 6889 6890 -- HANDLED_SEQUENCE_OF_STATEMENTS ::= 6891 -- SEQUENCE_OF_STATEMENTS 6892 -- [exception 6893 -- EXCEPTION_HANDLER 6894 -- {EXCEPTION_HANDLER}] 6895 -- [at end 6896 -- cleanup_procedure_call (param, param, param, ...);] 6897 6898 -- The AT END phrase is a GNAT extension to provide for cleanups. It is 6899 -- used only internally currently, but is considered to be syntactic. 6900 -- At the moment, the only cleanup action allowed is a single call to 6901 -- a parameterless procedure, and the Identifier field of the node is 6902 -- the procedure to be called. The cleanup action occurs whenever the 6903 -- sequence of statements is left for any reason. The possible reasons 6904 -- are: 6905 -- 1. reaching the end of the sequence 6906 -- 2. exit, return, or goto 6907 -- 3. exception or abort 6908 -- For some back ends, such as gcc with ZCX, "at end" is implemented 6909 -- entirely in the back end. In this case, a handled sequence of 6910 -- statements with an "at end" cannot also have exception handlers. 6911 -- For other back ends, such as gcc with front-end SJLJ, the 6912 -- implementation is split between the front end and back end; the front 6913 -- end implements 3, and the back end implements 1 and 2. In this case, 6914 -- if there is an "at end", the front end inserts the appropriate 6915 -- exception handler, and this handler takes precedence over "at end" 6916 -- in case of exception. 6917 6918 -- The inserted exception handler is of the form: 6919 6920 -- when all others => 6921 -- cleanup; 6922 -- raise; 6923 6924 -- where cleanup is the procedure to be called. The reason we do this is 6925 -- so that the front end can handle the necessary entries in the 6926 -- exception tables, and other exception handler actions required as 6927 -- part of the normal handling for exception handlers. 6928 6929 -- The AT END cleanup handler protects only the sequence of statements 6930 -- (not the associated declarations of the parent), just like exception 6931 -- handlers. The big difference is that the cleanup procedure is called 6932 -- on either a normal or an abnormal exit from the statement sequence. 6933 6934 -- Note: the list of Exception_Handlers can contain pragmas as well 6935 -- as actual handlers. In practice these pragmas can only occur at 6936 -- the start of the list, since any pragmas occurring later on will 6937 -- be included in the statement list of the corresponding handler. 6938 6939 -- Note: although in the Ada syntax, the sequence of statements in 6940 -- a handled sequence of statements can only contain statements, we 6941 -- allow free mixing of declarations and statements in the resulting 6942 -- expanded tree. This is for example used to deal with the case of 6943 -- a cleanup procedure that must handle declarations as well as the 6944 -- statements of a block. 6945 6946 -- Note: the cleanup_procedure_call does not go through the common 6947 -- processing for calls, which in particular means that it will not be 6948 -- automatically inlined in all cases, even though the procedure to be 6949 -- called is marked inline. More specifically, if the procedure comes 6950 -- from another unit than the main source unit, for example a run-time 6951 -- unit, then it needs to be manually added to the list of bodies to be 6952 -- inlined by invoking Add_Inlined_Body on it. 6953 6954 -- N_Handled_Sequence_Of_Statements 6955 -- Sloc points to first token of first statement 6956 -- Statements (List3) 6957 -- End_Label (Node4) (set to Empty if expander generated) 6958 -- Exception_Handlers (List5) (set to No_List if none present) 6959 -- At_End_Proc (Node1) (set to Empty if no clean up procedure) 6960 -- First_Real_Statement (Node2-Sem) 6961 6962 -- Note: the parent always contains a Declarations field which contains 6963 -- declarations associated with the handled sequence of statements. This 6964 -- is true even in the case of an accept statement (see description of 6965 -- the N_Accept_Statement node). 6966 6967 -- End_Label refers to the containing construct 6968 6969 ----------------------------- 6970 -- 11.2 Exception Handler -- 6971 ----------------------------- 6972 6973 -- EXCEPTION_HANDLER ::= 6974 -- when [CHOICE_PARAMETER_SPECIFICATION :] 6975 -- EXCEPTION_CHOICE {| EXCEPTION_CHOICE} => 6976 -- SEQUENCE_OF_STATEMENTS 6977 6978 -- Note: choice parameter specification is not allowed in Ada 83 mode 6979 6980 -- N_Exception_Handler 6981 -- Sloc points to WHEN 6982 -- Choice_Parameter (Node2) (set to Empty if not present) 6983 -- Exception_Choices (List4) 6984 -- Statements (List3) 6985 -- Exception_Label (Node5-Sem) (set to Empty of not present) 6986 -- Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present) 6987 -- Local_Raise_Not_OK (Flag7-Sem) 6988 -- Has_Local_Raise (Flag8-Sem) 6989 6990 ------------------------------------------ 6991 -- 11.2 Choice parameter specification -- 6992 ------------------------------------------ 6993 6994 -- CHOICE_PARAMETER_SPECIFICATION ::= DEFINING_IDENTIFIER 6995 6996 ---------------------------- 6997 -- 11.2 Exception Choice -- 6998 ---------------------------- 6999 7000 -- EXCEPTION_CHOICE ::= exception_NAME | others 7001 7002 -- Except in the case of OTHERS, no explicit node appears in the tree 7003 -- for exception choice. Instead the exception name appears directly. 7004 -- An OTHERS choice is represented by a N_Others_Choice node (see 7005 -- section 3.8.1. 7006 7007 -- Note: for the exception choice created for an at end handler, the 7008 -- exception choice is an N_Others_Choice node with All_Others set. 7009 7010 --------------------------- 7011 -- 11.3 Raise Statement -- 7012 --------------------------- 7013 7014 -- RAISE_STATEMENT ::= raise [exception_NAME]; 7015 7016 -- In Ada 2005, we have 7017 7018 -- RAISE_STATEMENT ::= 7019 -- raise; | raise exception_NAME [with string_EXPRESSION]; 7020 7021 -- N_Raise_Statement 7022 -- Sloc points to RAISE 7023 -- Name (Node2) (set to Empty if no exception name present) 7024 -- Expression (Node3) (set to Empty if no expression present) 7025 -- From_At_End (Flag4-Sem) 7026 7027 ---------------------------- 7028 -- 11.3 Raise Expression -- 7029 ---------------------------- 7030 7031 -- RAISE_EXPRESSION ::= raise exception_NAME [with string_EXPRESSION] 7032 7033 -- N_Raise_Expression 7034 -- Sloc points to RAISE 7035 -- Name (Node2) (always present) 7036 -- Expression (Node3) (set to Empty if no expression present) 7037 -- Convert_To_Return_False (Flag13-Sem) 7038 -- plus fields for expression 7039 7040 ------------------------------- 7041 -- 12.1 Generic Declaration -- 7042 ------------------------------- 7043 7044 -- GENERIC_DECLARATION ::= 7045 -- GENERIC_SUBPROGRAM_DECLARATION | GENERIC_PACKAGE_DECLARATION 7046 7047 ------------------------------------------ 7048 -- 12.1 Generic Subprogram Declaration -- 7049 ------------------------------------------ 7050 7051 -- GENERIC_SUBPROGRAM_DECLARATION ::= 7052 -- GENERIC_FORMAL_PART SUBPROGRAM_SPECIFICATION 7053 -- [ASPECT_SPECIFICATIONS]; 7054 7055 -- Note: Generic_Formal_Declarations can include pragmas 7056 7057 -- N_Generic_Subprogram_Declaration 7058 -- Sloc points to GENERIC 7059 -- Specification (Node1) subprogram specification 7060 -- Corresponding_Body (Node5-Sem) 7061 -- Generic_Formal_Declarations (List2) from generic formal part 7062 -- Parent_Spec (Node4-Sem) 7063 7064 --------------------------------------- 7065 -- 12.1 Generic Package Declaration -- 7066 --------------------------------------- 7067 7068 -- GENERIC_PACKAGE_DECLARATION ::= 7069 -- GENERIC_FORMAL_PART PACKAGE_SPECIFICATION 7070 -- [ASPECT_SPECIFICATIONS]; 7071 7072 -- Note: when we do generics right, the Activation_Chain_Entity entry 7073 -- for this node can be removed (since the expander won't see generic 7074 -- units any more)???. 7075 7076 -- Note: Generic_Formal_Declarations can include pragmas 7077 7078 -- N_Generic_Package_Declaration 7079 -- Sloc points to GENERIC 7080 -- Specification (Node1) package specification 7081 -- Corresponding_Body (Node5-Sem) 7082 -- Generic_Formal_Declarations (List2) from generic formal part 7083 -- Parent_Spec (Node4-Sem) 7084 -- Activation_Chain_Entity (Node3-Sem) 7085 7086 ------------------------------- 7087 -- 12.1 Generic Formal Part -- 7088 ------------------------------- 7089 7090 -- GENERIC_FORMAL_PART ::= 7091 -- generic {GENERIC_FORMAL_PARAMETER_DECLARATION | USE_CLAUSE} 7092 7093 ------------------------------------------------ 7094 -- 12.1 Generic Formal Parameter Declaration -- 7095 ------------------------------------------------ 7096 7097 -- GENERIC_FORMAL_PARAMETER_DECLARATION ::= 7098 -- FORMAL_OBJECT_DECLARATION 7099 -- | FORMAL_TYPE_DECLARATION 7100 -- | FORMAL_SUBPROGRAM_DECLARATION 7101 -- | FORMAL_PACKAGE_DECLARATION 7102 7103 --------------------------------- 7104 -- 12.3 Generic Instantiation -- 7105 --------------------------------- 7106 7107 -- GENERIC_INSTANTIATION ::= 7108 -- package DEFINING_PROGRAM_UNIT_NAME is 7109 -- new generic_package_NAME [GENERIC_ACTUAL_PART] 7110 -- [ASPECT_SPECIFICATIONS]; 7111 -- | [[not] overriding] 7112 -- procedure DEFINING_PROGRAM_UNIT_NAME is 7113 -- new generic_procedure_NAME [GENERIC_ACTUAL_PART] 7114 -- [ASPECT_SPECIFICATIONS]; 7115 -- | [[not] overriding] 7116 -- function DEFINING_DESIGNATOR is 7117 -- new generic_function_NAME [GENERIC_ACTUAL_PART] 7118 -- [ASPECT_SPECIFICATIONS]; 7119 7120 -- N_Package_Instantiation 7121 -- Sloc points to PACKAGE 7122 -- Defining_Unit_Name (Node1) 7123 -- Name (Node2) 7124 -- Generic_Associations (List3) (set to No_List if no 7125 -- generic actual part) 7126 -- Parent_Spec (Node4-Sem) 7127 -- Instance_Spec (Node5-Sem) 7128 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7129 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7130 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7131 -- Is_Declaration_Level_Node (Flag5-Sem) 7132 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7133 7134 -- N_Procedure_Instantiation 7135 -- Sloc points to PROCEDURE 7136 -- Defining_Unit_Name (Node1) 7137 -- Name (Node2) 7138 -- Parent_Spec (Node4-Sem) 7139 -- Generic_Associations (List3) (set to No_List if no 7140 -- generic actual part) 7141 -- Instance_Spec (Node5-Sem) 7142 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7143 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7144 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7145 -- Is_Declaration_Level_Node (Flag5-Sem) 7146 -- Must_Override (Flag14) set if overriding indicator present 7147 -- Must_Not_Override (Flag15) set if not_overriding indicator present 7148 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7149 7150 -- N_Function_Instantiation 7151 -- Sloc points to FUNCTION 7152 -- Defining_Unit_Name (Node1) 7153 -- Name (Node2) 7154 -- Generic_Associations (List3) (set to No_List if no 7155 -- generic actual part) 7156 -- Parent_Spec (Node4-Sem) 7157 -- Instance_Spec (Node5-Sem) 7158 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7159 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7160 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7161 -- Is_Declaration_Level_Node (Flag5-Sem) 7162 -- Must_Override (Flag14) set if overriding indicator present 7163 -- Must_Not_Override (Flag15) set if not_overriding indicator present 7164 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7165 7166 -- Note: overriding indicator is an Ada 2005 feature 7167 7168 ------------------------------- 7169 -- 12.3 Generic Actual Part -- 7170 ------------------------------- 7171 7172 -- GENERIC_ACTUAL_PART ::= 7173 -- (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION}) 7174 7175 ------------------------------- 7176 -- 12.3 Generic Association -- 7177 ------------------------------- 7178 7179 -- GENERIC_ASSOCIATION ::= 7180 -- [generic_formal_parameter_SELECTOR_NAME =>] 7181 7182 -- Note: unlike the procedure call case, a generic association node 7183 -- is generated for every association, even if no formal parameter 7184 -- selector name is present. In this case the parser will leave the 7185 -- Selector_Name field set to Empty, to be filled in later by the 7186 -- semantic pass. 7187 7188 -- In Ada 2005, a formal may be associated with a box, if the 7189 -- association is part of the list of actuals for a formal package. 7190 -- If the association is given by OTHERS => <>, the association is 7191 -- an N_Others_Choice. 7192 7193 -- N_Generic_Association 7194 -- Sloc points to first token of generic association 7195 -- Selector_Name (Node2) (set to Empty if no formal 7196 -- parameter selector name) 7197 -- Explicit_Generic_Actual_Parameter (Node1) (Empty if box present) 7198 -- Box_Present (Flag15) (for formal_package associations with a box) 7199 7200 --------------------------------------------- 7201 -- 12.3 Explicit Generic Actual Parameter -- 7202 --------------------------------------------- 7203 7204 -- EXPLICIT_GENERIC_ACTUAL_PARAMETER ::= 7205 -- EXPRESSION | variable_NAME | subprogram_NAME 7206 -- | entry_NAME | SUBTYPE_MARK | package_instance_NAME 7207 7208 ------------------------------------- 7209 -- 12.4 Formal Object Declaration -- 7210 ------------------------------------- 7211 7212 -- FORMAL_OBJECT_DECLARATION ::= 7213 -- DEFINING_IDENTIFIER_LIST : 7214 -- MODE [NULL_EXCLUSION] SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 7215 -- [ASPECT_SPECIFICATIONS]; 7216 -- | DEFINING_IDENTIFIER_LIST : 7217 -- MODE ACCESS_DEFINITION [:= DEFAULT_EXPRESSION] 7218 -- [ASPECT_SPECIFICATIONS]; 7219 7220 -- Although the syntax allows multiple identifiers in the list, the 7221 -- semantics is as though successive declarations were given with 7222 -- identical type definition and expression components. To simplify 7223 -- semantic processing, the parser represents a multiple declaration 7224 -- case as a sequence of single declarations, using the More_Ids and 7225 -- Prev_Ids flags to preserve the original source form as described 7226 -- in the section on "Handling of Defining Identifier Lists". 7227 7228 -- N_Formal_Object_Declaration 7229 -- Sloc points to first identifier 7230 -- Defining_Identifier (Node1) 7231 -- In_Present (Flag15) 7232 -- Out_Present (Flag17) 7233 -- Null_Exclusion_Present (Flag11) (set to False if not present) 7234 -- Subtype_Mark (Node4) (set to Empty if not present) 7235 -- Access_Definition (Node3) (set to Empty if not present) 7236 -- Default_Expression (Node5) (set to Empty if no default expression) 7237 -- More_Ids (Flag5) (set to False if no more identifiers in list) 7238 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 7239 7240 ----------------------------------- 7241 -- 12.5 Formal Type Declaration -- 7242 ----------------------------------- 7243 7244 -- FORMAL_TYPE_DECLARATION ::= 7245 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 7246 -- is FORMAL_TYPE_DEFINITION 7247 -- [ASPECT_SPECIFICATIONS]; 7248 -- | type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [is tagged] 7249 7250 -- N_Formal_Type_Declaration 7251 -- Sloc points to TYPE 7252 -- Defining_Identifier (Node1) 7253 -- Formal_Type_Definition (Node3) 7254 -- Discriminant_Specifications (List4) (set to No_List if no 7255 -- discriminant part) 7256 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 7257 7258 ---------------------------------- 7259 -- 12.5 Formal type definition -- 7260 ---------------------------------- 7261 7262 -- FORMAL_TYPE_DEFINITION ::= 7263 -- FORMAL_PRIVATE_TYPE_DEFINITION 7264 -- | FORMAL_DERIVED_TYPE_DEFINITION 7265 -- | FORMAL_DISCRETE_TYPE_DEFINITION 7266 -- | FORMAL_SIGNED_INTEGER_TYPE_DEFINITION 7267 -- | FORMAL_MODULAR_TYPE_DEFINITION 7268 -- | FORMAL_FLOATING_POINT_DEFINITION 7269 -- | FORMAL_ORDINARY_FIXED_POINT_DEFINITION 7270 -- | FORMAL_DECIMAL_FIXED_POINT_DEFINITION 7271 -- | FORMAL_ARRAY_TYPE_DEFINITION 7272 -- | FORMAL_ACCESS_TYPE_DEFINITION 7273 -- | FORMAL_INTERFACE_TYPE_DEFINITION 7274 -- | FORMAL_INCOMPLETE_TYPE_DEFINITION 7275 7276 -- The Ada 2012 syntax introduces two new non-terminals: 7277 -- Formal_{Complete,Incomplete}_Type_Declaration just to introduce 7278 -- the latter category. Here we introduce an incomplete type definition 7279 -- in order to preserve as much as possible the existing structure. 7280 7281 --------------------------------------------- 7282 -- 12.5.1 Formal Private Type Definition -- 7283 --------------------------------------------- 7284 7285 -- FORMAL_PRIVATE_TYPE_DEFINITION ::= 7286 -- [[abstract] tagged] [limited] private 7287 7288 -- Note: TAGGED is not allowed in Ada 83 mode 7289 7290 -- N_Formal_Private_Type_Definition 7291 -- Sloc points to PRIVATE 7292 -- Uninitialized_Variable (Node3-Sem) 7293 -- Abstract_Present (Flag4) 7294 -- Tagged_Present (Flag15) 7295 -- Limited_Present (Flag17) 7296 7297 -------------------------------------------- 7298 -- 12.5.1 Formal Derived Type Definition -- 7299 -------------------------------------------- 7300 7301 -- FORMAL_DERIVED_TYPE_DEFINITION ::= 7302 -- [abstract] [limited | synchronized] 7303 -- new SUBTYPE_MARK [[and INTERFACE_LIST] with private] 7304 -- Note: this construct is not allowed in Ada 83 mode 7305 7306 -- N_Formal_Derived_Type_Definition 7307 -- Sloc points to NEW 7308 -- Subtype_Mark (Node4) 7309 -- Private_Present (Flag15) 7310 -- Abstract_Present (Flag4) 7311 -- Limited_Present (Flag17) 7312 -- Synchronized_Present (Flag7) 7313 -- Interface_List (List2) (set to No_List if none) 7314 7315 ----------------------------------------------- 7316 -- 12.5.1 Formal Incomplete Type Definition -- 7317 ----------------------------------------------- 7318 7319 -- FORMAL_INCOMPLETE_TYPE_DEFINITION ::= [tagged] 7320 7321 -- N_Formal_Incomplete_Type_Definition 7322 -- Sloc points to identifier of parent 7323 -- Tagged_Present (Flag15) 7324 7325 --------------------------------------------- 7326 -- 12.5.2 Formal Discrete Type Definition -- 7327 --------------------------------------------- 7328 7329 -- FORMAL_DISCRETE_TYPE_DEFINITION ::= (<>) 7330 7331 -- N_Formal_Discrete_Type_Definition 7332 -- Sloc points to ( 7333 7334 --------------------------------------------------- 7335 -- 12.5.2 Formal Signed Integer Type Definition -- 7336 --------------------------------------------------- 7337 7338 -- FORMAL_SIGNED_INTEGER_TYPE_DEFINITION ::= range <> 7339 7340 -- N_Formal_Signed_Integer_Type_Definition 7341 -- Sloc points to RANGE 7342 7343 -------------------------------------------- 7344 -- 12.5.2 Formal Modular Type Definition -- 7345 -------------------------------------------- 7346 7347 -- FORMAL_MODULAR_TYPE_DEFINITION ::= mod <> 7348 7349 -- N_Formal_Modular_Type_Definition 7350 -- Sloc points to MOD 7351 7352 ---------------------------------------------- 7353 -- 12.5.2 Formal Floating Point Definition -- 7354 ---------------------------------------------- 7355 7356 -- FORMAL_FLOATING_POINT_DEFINITION ::= digits <> 7357 7358 -- N_Formal_Floating_Point_Definition 7359 -- Sloc points to DIGITS 7360 7361 ---------------------------------------------------- 7362 -- 12.5.2 Formal Ordinary Fixed Point Definition -- 7363 ---------------------------------------------------- 7364 7365 -- FORMAL_ORDINARY_FIXED_POINT_DEFINITION ::= delta <> 7366 7367 -- N_Formal_Ordinary_Fixed_Point_Definition 7368 -- Sloc points to DELTA 7369 7370 --------------------------------------------------- 7371 -- 12.5.2 Formal Decimal Fixed Point Definition -- 7372 --------------------------------------------------- 7373 7374 -- FORMAL_DECIMAL_FIXED_POINT_DEFINITION ::= delta <> digits <> 7375 7376 -- Note: formal decimal fixed point definition not allowed in Ada 83 7377 7378 -- N_Formal_Decimal_Fixed_Point_Definition 7379 -- Sloc points to DELTA 7380 7381 ------------------------------------------ 7382 -- 12.5.3 Formal Array Type Definition -- 7383 ------------------------------------------ 7384 7385 -- FORMAL_ARRAY_TYPE_DEFINITION ::= ARRAY_TYPE_DEFINITION 7386 7387 ------------------------------------------- 7388 -- 12.5.4 Formal Access Type Definition -- 7389 ------------------------------------------- 7390 7391 -- FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION 7392 7393 ---------------------------------------------- 7394 -- 12.5.5 Formal Interface Type Definition -- 7395 ---------------------------------------------- 7396 7397 -- FORMAL_INTERFACE_TYPE_DEFINITION ::= INTERFACE_TYPE_DEFINITION 7398 7399 ----------------------------------------- 7400 -- 12.6 Formal Subprogram Declaration -- 7401 ----------------------------------------- 7402 7403 -- FORMAL_SUBPROGRAM_DECLARATION ::= 7404 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION 7405 -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION 7406 7407 -------------------------------------------------- 7408 -- 12.6 Formal Concrete Subprogram Declaration -- 7409 -------------------------------------------------- 7410 7411 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::= 7412 -- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT] 7413 -- [ASPECT_SPECIFICATIONS]; 7414 7415 -- N_Formal_Concrete_Subprogram_Declaration 7416 -- Sloc points to WITH 7417 -- Specification (Node1) 7418 -- Default_Name (Node2) (set to Empty if no subprogram default) 7419 -- Box_Present (Flag15) 7420 7421 -- Note: if no subprogram default is present, then Name is set 7422 -- to Empty, and Box_Present is False. 7423 7424 -------------------------------------------------- 7425 -- 12.6 Formal Abstract Subprogram Declaration -- 7426 -------------------------------------------------- 7427 7428 -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::= 7429 -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT] 7430 -- [ASPECT_SPECIFICATIONS]; 7431 7432 -- N_Formal_Abstract_Subprogram_Declaration 7433 -- Sloc points to WITH 7434 -- Specification (Node1) 7435 -- Default_Name (Node2) (set to Empty if no subprogram default) 7436 -- Box_Present (Flag15) 7437 7438 -- Note: if no subprogram default is present, then Name is set 7439 -- to Empty, and Box_Present is False. 7440 7441 ------------------------------ 7442 -- 12.6 Subprogram Default -- 7443 ------------------------------ 7444 7445 -- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <> 7446 7447 -- There is no separate node in the tree for a subprogram default. 7448 -- Instead the parent (N_Formal_Concrete_Subprogram_Declaration 7449 -- or N_Formal_Abstract_Subprogram_Declaration) node contains the 7450 -- default name or box indication, as needed. 7451 7452 ------------------------ 7453 -- 12.6 Default Name -- 7454 ------------------------ 7455 7456 -- DEFAULT_NAME ::= NAME 7457 7458 -------------------------------------- 7459 -- 12.7 Formal Package Declaration -- 7460 -------------------------------------- 7461 7462 -- FORMAL_PACKAGE_DECLARATION ::= 7463 -- with package DEFINING_IDENTIFIER 7464 -- is new generic_package_NAME FORMAL_PACKAGE_ACTUAL_PART 7465 -- [ASPECT_SPECIFICATIONS]; 7466 7467 -- Note: formal package declarations not allowed in Ada 83 mode 7468 7469 -- N_Formal_Package_Declaration 7470 -- Sloc points to WITH 7471 -- Defining_Identifier (Node1) 7472 -- Name (Node2) 7473 -- Generic_Associations (List3) (set to No_List if (<>) case or 7474 -- empty generic actual part) 7475 -- Box_Present (Flag15) 7476 -- Instance_Spec (Node5-Sem) 7477 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7478 7479 -------------------------------------- 7480 -- 12.7 Formal Package Actual Part -- 7481 -------------------------------------- 7482 7483 -- FORMAL_PACKAGE_ACTUAL_PART ::= 7484 -- ([OTHERS] => <>) 7485 -- | [GENERIC_ACTUAL_PART] 7486 -- (FORMAL_PACKAGE_ASSOCIATION {. FORMAL_PACKAGE_ASSOCIATION} 7487 7488 -- FORMAL_PACKAGE_ASSOCIATION ::= 7489 -- GENERIC_ASSOCIATION 7490 -- | GENERIC_FORMAL_PARAMETER_SELECTOR_NAME => <> 7491 7492 -- There is no explicit node in the tree for a formal package actual 7493 -- part. Instead the information appears in the parent node (i.e. the 7494 -- formal package declaration node itself). 7495 7496 -- There is no explicit node for a formal package association. All of 7497 -- them are represented either by a generic association, possibly with 7498 -- Box_Present, or by an N_Others_Choice. 7499 7500 --------------------------------- 7501 -- 13.1 Representation clause -- 7502 --------------------------------- 7503 7504 -- REPRESENTATION_CLAUSE ::= 7505 -- ATTRIBUTE_DEFINITION_CLAUSE 7506 -- | ENUMERATION_REPRESENTATION_CLAUSE 7507 -- | RECORD_REPRESENTATION_CLAUSE 7508 -- | AT_CLAUSE 7509 7510 ---------------------- 7511 -- 13.1 Local Name -- 7512 ---------------------- 7513 7514 -- LOCAL_NAME := 7515 -- DIRECT_NAME 7516 -- | DIRECT_NAME'ATTRIBUTE_DESIGNATOR 7517 -- | library_unit_NAME 7518 7519 -- The construct DIRECT_NAME'ATTRIBUTE_DESIGNATOR appears in the tree 7520 -- as an attribute reference, which has essentially the same form. 7521 7522 --------------------------------------- 7523 -- 13.3 Attribute definition clause -- 7524 --------------------------------------- 7525 7526 -- ATTRIBUTE_DEFINITION_CLAUSE ::= 7527 -- for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use EXPRESSION; 7528 -- | for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use NAME; 7529 7530 -- In Ada 83, the expression must be a simple expression and the 7531 -- local name must be a direct name. 7532 7533 -- Note: the only attribute definition clause that is processed by 7534 -- gigi is an address clause. For all other cases, the information 7535 -- is extracted by the front end and either results in setting entity 7536 -- information, e.g. Esize for the Size clause, or in appropriate 7537 -- expansion actions (e.g. in the case of Storage_Size). 7538 7539 -- For an address clause, Gigi constructs the appropriate addressing 7540 -- code. It also ensures that no aliasing optimizations are made 7541 -- for the object for which the address clause appears. 7542 7543 -- Note: for an address clause used to achieve an overlay: 7544 7545 -- A : Integer; 7546 -- B : Integer; 7547 -- for B'Address use A'Address; 7548 7549 -- the above rule means that Gigi will ensure that no optimizations 7550 -- will be made for B that would violate the implementation advice 7551 -- of RM 13.3(19). However, this advice applies only to B and not 7552 -- to A, which seems unfortunate. The GNAT front end will mark the 7553 -- object A as volatile to also prevent unwanted optimization 7554 -- assumptions based on no aliasing being made for B. 7555 7556 -- N_Attribute_Definition_Clause 7557 -- Sloc points to FOR 7558 -- Name (Node2) the local name 7559 -- Chars (Name1) the identifier name from the attribute designator 7560 -- Expression (Node3) the expression or name 7561 -- Entity (Node4-Sem) 7562 -- Next_Rep_Item (Node5-Sem) 7563 -- From_At_Mod (Flag4-Sem) 7564 -- Check_Address_Alignment (Flag11-Sem) 7565 -- From_Aspect_Specification (Flag13-Sem) 7566 -- Is_Delayed_Aspect (Flag14-Sem) 7567 -- Address_Warning_Posted (Flag18-Sem) 7568 7569 -- Note: if From_Aspect_Specification is set, then Sloc points to the 7570 -- aspect name, and Entity is resolved already to reference the entity 7571 -- to which the aspect applies. 7572 7573 ----------------------------------- 7574 -- 13.3.1 Aspect Specifications -- 7575 ----------------------------------- 7576 7577 -- We modify the RM grammar here, the RM grammar is: 7578 7579 -- ASPECT_SPECIFICATION ::= 7580 -- with ASPECT_MARK [=> ASPECT_DEFINITION] {, 7581 -- ASPECT_MARK [=> ASPECT_DEFINITION] } 7582 7583 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7584 7585 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7586 7587 -- That's inconvenient, since there is no non-terminal name for a single 7588 -- entry in the list of aspects. So we use this grammar instead: 7589 7590 -- ASPECT_SPECIFICATIONS ::= 7591 -- with ASPECT_SPECIFICATION {, ASPECT_SPECIFICATION} 7592 7593 -- ASPECT_SPECIFICATION => 7594 -- ASPECT_MARK [=> ASPECT_DEFINITION] 7595 7596 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7597 7598 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7599 7600 -- Note that for Annotate, the ASPECT_DEFINITION is a pure positional 7601 -- aggregate with the elements of the aggregate corresponding to the 7602 -- successive arguments of the corresponding pragma. 7603 7604 -- See separate package Aspects for details on the incorporation of 7605 -- these nodes into the tree, and how aspect specifications for a given 7606 -- declaration node are associated with that node. 7607 7608 -- N_Aspect_Specification 7609 -- Sloc points to aspect identifier 7610 -- Identifier (Node1) aspect identifier 7611 -- Aspect_Rep_Item (Node2-Sem) 7612 -- Expression (Node3) Aspect_Definition (set to Empty if none) 7613 -- Entity (Node4-Sem) entity to which the aspect applies 7614 -- Next_Rep_Item (Node5-Sem) 7615 -- Class_Present (Flag6) Set if 'Class present 7616 -- Is_Ignored (Flag9-Sem) 7617 -- Is_Checked (Flag11-Sem) 7618 -- Is_Delayed_Aspect (Flag14-Sem) 7619 -- Is_Disabled (Flag15-Sem) 7620 -- Is_Boolean_Aspect (Flag16-Sem) 7621 -- Split_PPC (Flag17) Set if split pre/post attribute 7622 7623 -- Note: Aspect_Specification is an Ada 2012 feature 7624 7625 -- Note: The Identifier serves to identify the aspect involved (it 7626 -- is the aspect whose name corresponds to the Chars field). This 7627 -- means that the other fields of this identifier are unused, and 7628 -- in particular we use the Entity field of this identifier to save 7629 -- a copy of the expression for visibility analysis, see spec of 7630 -- Sem_Ch13 for full details of this usage. 7631 7632 -- In the case of aspects of the form xxx'Class, the aspect identifier 7633 -- is for xxx, and Class_Present is set to True. 7634 7635 -- Note: When a Pre or Post aspect specification is processed, it is 7636 -- broken into AND THEN sections. The left most section has Split_PPC 7637 -- set to False, indicating that it is the original specification (e.g. 7638 -- for posting errors). For the other sections, Split_PPC is set True. 7639 7640 --------------------------------------------- 7641 -- 13.4 Enumeration representation clause -- 7642 --------------------------------------------- 7643 7644 -- ENUMERATION_REPRESENTATION_CLAUSE ::= 7645 -- for first_subtype_LOCAL_NAME use ENUMERATION_AGGREGATE; 7646 7647 -- In Ada 83, the name must be a direct name 7648 7649 -- N_Enumeration_Representation_Clause 7650 -- Sloc points to FOR 7651 -- Identifier (Node1) direct name 7652 -- Array_Aggregate (Node3) 7653 -- Next_Rep_Item (Node5-Sem) 7654 7655 --------------------------------- 7656 -- 13.4 Enumeration aggregate -- 7657 --------------------------------- 7658 7659 -- ENUMERATION_AGGREGATE ::= ARRAY_AGGREGATE 7660 7661 ------------------------------------------ 7662 -- 13.5.1 Record representation clause -- 7663 ------------------------------------------ 7664 7665 -- RECORD_REPRESENTATION_CLAUSE ::= 7666 -- for first_subtype_LOCAL_NAME use 7667 -- record [MOD_CLAUSE] 7668 -- {COMPONENT_CLAUSE} 7669 -- end record; 7670 7671 -- Gigi restriction: Mod_Clause is always Empty (if present it is 7672 -- replaced by a corresponding Alignment attribute definition clause). 7673 7674 -- Note: Component_Clauses can include pragmas 7675 7676 -- N_Record_Representation_Clause 7677 -- Sloc points to FOR 7678 -- Identifier (Node1) direct name 7679 -- Mod_Clause (Node2) (set to Empty if no mod clause present) 7680 -- Component_Clauses (List3) 7681 -- Next_Rep_Item (Node5-Sem) 7682 7683 ------------------------------ 7684 -- 13.5.1 Component clause -- 7685 ------------------------------ 7686 7687 -- COMPONENT_CLAUSE ::= 7688 -- component_LOCAL_NAME at POSITION 7689 -- range FIRST_BIT .. LAST_BIT; 7690 7691 -- N_Component_Clause 7692 -- Sloc points to AT 7693 -- Component_Name (Node1) points to Name or Attribute_Reference 7694 -- Position (Node2) 7695 -- First_Bit (Node3) 7696 -- Last_Bit (Node4) 7697 7698 ---------------------- 7699 -- 13.5.1 Position -- 7700 ---------------------- 7701 7702 -- POSITION ::= static_EXPRESSION 7703 7704 ----------------------- 7705 -- 13.5.1 First_Bit -- 7706 ----------------------- 7707 7708 -- FIRST_BIT ::= static_SIMPLE_EXPRESSION 7709 7710 ---------------------- 7711 -- 13.5.1 Last_Bit -- 7712 ---------------------- 7713 7714 -- LAST_BIT ::= static_SIMPLE_EXPRESSION 7715 7716 -------------------------- 7717 -- 13.8 Code statement -- 7718 -------------------------- 7719 7720 -- CODE_STATEMENT ::= QUALIFIED_EXPRESSION; 7721 7722 -- Note: in GNAT, the qualified expression has the form 7723 7724 -- Asm_Insn'(Asm (...)); 7725 7726 -- See package System.Machine_Code in file s-maccod.ads for details on 7727 -- the allowed parameters to Asm. There are two ways this node can 7728 -- arise, as a code statement, in which case the expression is the 7729 -- qualified expression, or as a result of the expansion of an intrinsic 7730 -- call to the Asm or Asm_Input procedure. 7731 7732 -- N_Code_Statement 7733 -- Sloc points to first token of the expression 7734 -- Expression (Node3) 7735 7736 -- Note: package Exp_Code contains an abstract functional interface 7737 -- for use by Gigi in accessing the data from N_Code_Statement nodes. 7738 7739 ------------------------ 7740 -- 13.12 Restriction -- 7741 ------------------------ 7742 7743 -- RESTRICTION ::= 7744 -- restriction_IDENTIFIER 7745 -- | restriction_parameter_IDENTIFIER => EXPRESSION 7746 7747 -- There is no explicit node for restrictions. Instead the restriction 7748 -- appears in normal pragma syntax as a pragma argument association, 7749 -- which has the same syntactic form. 7750 7751 -------------------------- 7752 -- B.2 Shift Operators -- 7753 -------------------------- 7754 7755 -- Calls to the intrinsic shift functions are converted to one of 7756 -- the following shift nodes, which have the form of normal binary 7757 -- operator names. Note that for a given shift operation, one node 7758 -- covers all possible types, as for normal operators. 7759 7760 -- Note: it is perfectly permissible for the expander to generate 7761 -- shift operation nodes directly, in which case they will be analyzed 7762 -- and parsed in the usual manner. 7763 7764 -- Sprint syntax: shift-function-name!(expr, count) 7765 7766 -- Note: the Left_Opnd field holds the first argument (the value to 7767 -- be shifted). The Right_Opnd field holds the second argument (the 7768 -- shift count). The Chars field is the name of the intrinsic function. 7769 7770 -- N_Op_Rotate_Left 7771 -- Sloc points to the function name 7772 -- plus fields for binary operator 7773 -- plus fields for expression 7774 -- Shift_Count_OK (Flag4-Sem) 7775 7776 -- N_Op_Rotate_Right 7777 -- Sloc points to the function name 7778 -- plus fields for binary operator 7779 -- plus fields for expression 7780 -- Shift_Count_OK (Flag4-Sem) 7781 7782 -- N_Op_Shift_Left 7783 -- Sloc points to the function name 7784 -- plus fields for binary operator 7785 -- plus fields for expression 7786 -- Shift_Count_OK (Flag4-Sem) 7787 7788 -- N_Op_Shift_Right_Arithmetic 7789 -- Sloc points to the function name 7790 -- plus fields for binary operator 7791 -- plus fields for expression 7792 -- Shift_Count_OK (Flag4-Sem) 7793 7794 -- N_Op_Shift_Right 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 -- Note: N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic 7801 -- never appear in the expanded tree if Modify_Tree_For_C mode is set. 7802 7803 -- Note: For N_Op_Shift_Left and N_Op_Shift_Right, the right operand is 7804 -- always less than the word size if Modify_Tree_For_C mode is set. 7805 7806 -------------------------- 7807 -- Obsolescent Features -- 7808 -------------------------- 7809 7810 -- The syntax descriptions and tree nodes for obsolescent features are 7811 -- grouped together, corresponding to their location in appendix I in 7812 -- the RM. However, parsing and semantic analysis for these constructs 7813 -- is located in an appropriate chapter (see individual notes). 7814 7815 --------------------------- 7816 -- J.3 Delta Constraint -- 7817 --------------------------- 7818 7819 -- Note: the parse routine for this construct is located in section 7820 -- 3.5.9 of Par-Ch3, and semantic analysis is in Sem_Ch3, which is 7821 -- where delta constraint logically belongs. 7822 7823 -- DELTA_CONSTRAINT ::= DELTA static_EXPRESSION [RANGE_CONSTRAINT] 7824 7825 -- N_Delta_Constraint 7826 -- Sloc points to DELTA 7827 -- Delta_Expression (Node3) 7828 -- Range_Constraint (Node4) (set to Empty if not present) 7829 7830 -------------------- 7831 -- J.7 At Clause -- 7832 -------------------- 7833 7834 -- AT_CLAUSE ::= for DIRECT_NAME use at EXPRESSION; 7835 7836 -- Note: the parse routine for this construct is located in Par-Ch13, 7837 -- and the semantic analysis is in Sem_Ch13, where at clause logically 7838 -- belongs if it were not obsolescent. 7839 7840 -- Note: in Ada 83 the expression must be a simple expression 7841 7842 -- Gigi restriction: This node never appears, it is rewritten as an 7843 -- address attribute definition clause. 7844 7845 -- N_At_Clause 7846 -- Sloc points to FOR 7847 -- Identifier (Node1) 7848 -- Expression (Node3) 7849 7850 --------------------- 7851 -- J.8 Mod clause -- 7852 --------------------- 7853 7854 -- MOD_CLAUSE ::= at mod static_EXPRESSION; 7855 7856 -- Note: the parse routine for this construct is located in Par-Ch13, 7857 -- and the semantic analysis is in Sem_Ch13, where mod clause logically 7858 -- belongs if it were not obsolescent. 7859 7860 -- Note: in Ada 83, the expression must be a simple expression 7861 7862 -- Gigi restriction: this node never appears. It is replaced 7863 -- by a corresponding Alignment attribute definition clause. 7864 7865 -- Note: pragmas can appear before and after the MOD_CLAUSE since 7866 -- its name has "clause" in it. This is rather strange, but is quite 7867 -- definitely specified. The pragmas before are collected in the 7868 -- Pragmas_Before field of the mod clause node itself, and pragmas 7869 -- after are simply swallowed up in the list of component clauses. 7870 7871 -- N_Mod_Clause 7872 -- Sloc points to AT 7873 -- Expression (Node3) 7874 -- Pragmas_Before (List4) Pragmas before mod clause (No_List if none) 7875 7876 -------------------- 7877 -- Semantic Nodes -- 7878 -------------------- 7879 7880 -- These semantic nodes are used to hold additional semantic information. 7881 -- They are inserted into the tree as a result of semantic processing. 7882 -- Although there are no legitimate source syntax constructions that 7883 -- correspond directly to these nodes, we need a source syntax for the 7884 -- reconstructed tree printed by Sprint, and the node descriptions here 7885 -- show this syntax. 7886 7887 ----------------- 7888 -- Call_Marker -- 7889 ----------------- 7890 7891 -- This node is created during the analysis/resolution of entry calls, 7892 -- requeues, and subprogram calls. It performs several functions: 7893 7894 -- * Call markers provide a uniform model for handling calls by the 7895 -- ABE mechanism, regardless of whether expansion took place. 7896 7897 -- * The call marker captures the target of the related call along 7898 -- with other attributes which are either unavailabe or expensive 7899 -- to recompute once analysis, resolution, and expansion are over. 7900 7901 -- * The call marker aids the ABE Processing phase by signaling the 7902 -- presence of a call in case the original call was transformed by 7903 -- expansion. 7904 7905 -- * The call marker acts as a reference point for the insertion of 7906 -- run-time conditional ABE checks or guaranteed ABE failures. 7907 7908 -- Sprint syntax: #target# 7909 7910 -- The Sprint syntax shown above is not enabled by default 7911 7912 -- N_Call_Marker 7913 -- Sloc points to Sloc of original call 7914 -- Target (Node1-Sem) 7915 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 7916 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 7917 -- Is_Elaboration_Warnings_OK_Node (Flag3-Sem) 7918 -- Is_Source_Call (Flag4-Sem) 7919 -- Is_Declaration_Level_Node (Flag5-Sem) 7920 -- Is_Dispatching_Call (Flag6-Sem) 7921 -- Is_Known_Guaranteed_ABE (Flag18-Sem) 7922 7923 ------------------------ 7924 -- Compound Statement -- 7925 ------------------------ 7926 7927 -- This node is created by the analyzer/expander to handle some 7928 -- expansion cases where a sequence of actions needs to be captured 7929 -- within a single node (which acts as a container and allows the 7930 -- entire list of actions to be moved around as a whole) appearing 7931 -- in a sequence of statements. 7932 7933 -- This is the statement counterpart to the expression node 7934 -- N_Expression_With_Actions. 7935 7936 -- The required semantics is that the set of actions is executed in 7937 -- the order in which it appears, as though they appeared by themselves 7938 -- in the enclosing list of declarations or statements. Unlike what 7939 -- happens when using an N_Block_Statement, no new scope is introduced. 7940 7941 -- Note: for the time being, this is used only as a transient 7942 -- representation during expansion, and all compound statement nodes 7943 -- must be exploded back to their constituent statements before handing 7944 -- the tree to the back end. 7945 7946 -- Sprint syntax: do 7947 -- action; 7948 -- action; 7949 -- ... 7950 -- action; 7951 -- end; 7952 7953 -- N_Compound_Statement 7954 -- Actions (List1) 7955 7956 -------------- 7957 -- Contract -- 7958 -------------- 7959 7960 -- This node is used to hold the various parts of an entry, subprogram 7961 -- [body] or package [body] contract, in particular: 7962 -- Abstract states declared by a package declaration 7963 -- Contract cases that apply to a subprogram 7964 -- Dependency relations of inputs and output of a subprogram 7965 -- Global annotations classifying data as input or output 7966 -- Initialization sequences for a package declaration 7967 -- Pre- and postconditions that apply to a subprogram 7968 7969 -- The node appears in an entry and [generic] subprogram [body] entity. 7970 7971 -- Sprint syntax: <none> as the node should not appear in the tree, but 7972 -- only attached to an entry or [generic] subprogram 7973 -- entity. 7974 7975 -- N_Contract 7976 -- Sloc points to the subprogram's name 7977 -- Pre_Post_Conditions (Node1-Sem) (set to Empty if none) 7978 -- Contract_Test_Cases (Node2-Sem) (set to Empty if none) 7979 -- Classifications (Node3-Sem) (set to Empty if none) 7980 -- Is_Expanded_Contract (Flag1-Sem) 7981 7982 -- Pre_Post_Conditions contains a collection of pragmas that correspond 7983 -- to pre- and postconditions associated with an entry or a subprogram 7984 -- [body or stub]. The pragmas can either come from source or be the 7985 -- byproduct of aspect expansion. Currently the following pragmas appear 7986 -- in this list: 7987 -- Post 7988 -- Postcondition 7989 -- Pre 7990 -- Precondition 7991 -- Refined_Post 7992 -- The ordering in the list is in LIFO fashion. 7993 7994 -- Note that there might be multiple preconditions or postconditions 7995 -- in this list, either because they come from separate pragmas in the 7996 -- source, or because a Pre (resp. Post) aspect specification has been 7997 -- broken into AND THEN sections. See Split_PPC for details. 7998 7999 -- In GNATprove mode, the inherited classwide pre- and postconditions 8000 -- (suitably specialized for the specific type of the overriding 8001 -- operation) are also in this list. 8002 8003 -- Contract_Test_Cases contains a collection of pragmas that correspond 8004 -- to aspects/pragmas Contract_Cases and Test_Case. The ordering in the 8005 -- list is in LIFO fashion. 8006 8007 -- Classifications contains pragmas that either declare, categorize, or 8008 -- establish dependencies between subprogram or package inputs and 8009 -- outputs. Currently the following pragmas appear in this list: 8010 -- Abstract_States 8011 -- Async_Readers 8012 -- Async_Writers 8013 -- Constant_After_Elaboration 8014 -- Depends 8015 -- Effective_Reads 8016 -- Effective_Writes 8017 -- Extensions_Visible 8018 -- Global 8019 -- Initial_Condition 8020 -- Initializes 8021 -- Part_Of 8022 -- Refined_Depends 8023 -- Refined_Global 8024 -- Refined_States 8025 -- Volatile_Function 8026 -- The ordering is in LIFO fashion. 8027 8028 ------------------- 8029 -- Expanded Name -- 8030 ------------------- 8031 8032 -- The N_Expanded_Name node is used to represent a selected component 8033 -- name that has been resolved to an expanded name. The semantic phase 8034 -- replaces N_Selected_Component nodes that represent names by the use 8035 -- of this node, leaving the N_Selected_Component node used only when 8036 -- the prefix is a record or protected type. 8037 8038 -- The fields of the N_Expanded_Name node are layed out identically 8039 -- to those of the N_Selected_Component node, allowing conversion of 8040 -- an expanded name node to a selected component node to be done 8041 -- easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name. 8042 8043 -- There is no special sprint syntax for an expanded name 8044 8045 -- N_Expanded_Name 8046 -- Sloc points to the period 8047 -- Chars (Name1) copy of Chars field of selector name 8048 -- Prefix (Node3) 8049 -- Selector_Name (Node2) 8050 -- Entity (Node4-Sem) 8051 -- Associated_Node (Node4-Sem) 8052 -- Is_Elaboration_Checks_OK_Node (Flag1-Sem) 8053 -- Is_SPARK_Mode_On_Node (Flag2-Sem) 8054 -- Has_Private_View (Flag11-Sem) set in generic units 8055 -- Redundant_Use (Flag13-Sem) 8056 -- Atomic_Sync_Required (Flag14-Sem) 8057 -- plus fields for expression 8058 8059 ----------------------------- 8060 -- Expression With Actions -- 8061 ----------------------------- 8062 8063 -- This node is created by the analyzer/expander to handle some 8064 -- expansion cases, notably short-circuit forms where there are 8065 -- actions associated with the right-hand side operand. 8066 8067 -- The N_Expression_With_Actions node represents an expression with 8068 -- an associated set of actions (which are executable statements and 8069 -- declarations, as might occur in a handled statement sequence). 8070 8071 -- The required semantics is that the set of actions is executed in 8072 -- the order in which it appears just before the expression is 8073 -- evaluated (and these actions must only be executed if the value 8074 -- of the expression is evaluated). The node is considered to be 8075 -- a subexpression, whose value is the value of the Expression after 8076 -- executing all the actions. 8077 8078 -- If the actions contain declarations, then these declarations may 8079 -- be referenced within the expression. However note that there is 8080 -- no proper scope associated with the expression-with-action, so the 8081 -- back-end will elaborate them in the context of the enclosing scope. 8082 8083 -- Sprint syntax: do 8084 -- action; 8085 -- action; 8086 -- ... 8087 -- action; 8088 -- in expression end 8089 8090 -- N_Expression_With_Actions 8091 -- Actions (List1) 8092 -- Expression (Node3) 8093 -- plus fields for expression 8094 8095 -- Note: In the final generated tree presented to the code generator, 8096 -- the actions list is always non-null, since there is no point in this 8097 -- node if the actions are Empty. During semantic analysis there are 8098 -- cases where it is convenient to temporarily generate an empty actions 8099 -- list. This arises in cases where we create such an empty actions 8100 -- list, and it may or may not end up being a place where additional 8101 -- actions are inserted. The expander removes such empty cases after 8102 -- the expression of the node is fully analyzed and expanded, at which 8103 -- point it is safe to remove it, since no more actions can be inserted. 8104 8105 -- Note: In Modify_Tree_For_C, we never generate any declarations in 8106 -- the action list, which can contain only non-declarative statements. 8107 8108 -------------------- 8109 -- Free Statement -- 8110 -------------------- 8111 8112 -- The N_Free_Statement node is generated as a result of a call to an 8113 -- instantiation of Unchecked_Deallocation. The instantiation of this 8114 -- generic is handled specially and generates this node directly. 8115 8116 -- Sprint syntax: free expression 8117 8118 -- N_Free_Statement 8119 -- Sloc is copied from the unchecked deallocation call 8120 -- Expression (Node3) argument to unchecked deallocation call 8121 -- Storage_Pool (Node1-Sem) 8122 -- Procedure_To_Call (Node2-Sem) 8123 -- Actual_Designated_Subtype (Node4-Sem) 8124 8125 -- Note: in the case where a debug source file is generated, the Sloc 8126 -- for this node points to the FREE keyword in the Sprint file output. 8127 8128 ------------------- 8129 -- Freeze Entity -- 8130 ------------------- 8131 8132 -- This node marks the point in a declarative part at which an entity 8133 -- declared therein becomes frozen. The expander places initialization 8134 -- procedures for types at those points. Gigi uses the freezing point 8135 -- to elaborate entities that may depend on previous private types. 8136 8137 -- See the section in Einfo "Delayed Freezing and Elaboration" for 8138 -- a full description of the use of this node. 8139 8140 -- The Entity field points back to the entity for the type (whose 8141 -- Freeze_Node field points back to this freeze node). 8142 8143 -- The Actions field contains a list of declarations and statements 8144 -- generated by the expander which are associated with the freeze 8145 -- node, and are elaborated as though the freeze node were replaced 8146 -- by this sequence of actions. 8147 8148 -- Note: the Sloc field in the freeze node references a construct 8149 -- associated with the freezing point. This is used for posting 8150 -- messages in some error/warning situations, e.g. the case where 8151 -- a primitive operation of a tagged type is declared too late. 8152 8153 -- Sprint syntax: freeze entity-name [ 8154 -- freeze actions 8155 -- ] 8156 8157 -- N_Freeze_Entity 8158 -- Sloc points near freeze point (see above special note) 8159 -- Entity (Node4-Sem) 8160 -- Access_Types_To_Process (Elist2-Sem) (set to No_Elist if none) 8161 -- TSS_Elist (Elist3-Sem) (set to No_Elist if no associated TSS's) 8162 -- Actions (List1) (set to No_List if no freeze actions) 8163 -- First_Subtype_Link (Node5-Sem) (set to Empty if no link) 8164 8165 -- The Actions field holds actions associated with the freeze. These 8166 -- actions are elaborated at the point where the type is frozen. 8167 8168 -- Note: in the case where a debug source file is generated, the Sloc 8169 -- for this node points to the FREEZE keyword in the Sprint file output. 8170 8171 --------------------------- 8172 -- Freeze Generic Entity -- 8173 --------------------------- 8174 8175 -- The freeze point of an entity indicates the point at which the 8176 -- information needed to generate code for the entity is complete. 8177 -- The freeze node for an entity triggers expander activities, such as 8178 -- build initialization procedures, and backend activities, such as 8179 -- completing the elaboration of packages. 8180 8181 -- For entities declared within a generic unit, for which no code is 8182 -- generated, the freeze point is not equally meaningful. However, in 8183 -- Ada 2012 several semantic checks on declarations must be delayed to 8184 -- the freeze point, and we need to include such a mark in the tree to 8185 -- trigger these checks. The Freeze_Generic_Entity node plays no other 8186 -- role, and is ignored by the expander and the back-end. 8187 8188 -- Sprint syntax: freeze_generic entity-name 8189 8190 -- N_Freeze_Generic_Entity 8191 -- Sloc points near freeze point 8192 -- Entity (Node4-Sem) 8193 8194 -------------------------------- 8195 -- Implicit Label Declaration -- 8196 -------------------------------- 8197 8198 -- An implicit label declaration is created for every occurrence of a 8199 -- label on a statement or a label on a block or loop. It is chained 8200 -- in the declarations of the innermost enclosing block as specified 8201 -- in RM section 5.1 (3). 8202 8203 -- The Defining_Identifier is the actual identifier for the statement 8204 -- identifier. Note that the occurrence of the label is a reference, NOT 8205 -- the defining occurrence. The defining occurrence occurs at the head 8206 -- of the innermost enclosing block, and is represented by this node. 8207 8208 -- Note: from the grammar, this might better be called an implicit 8209 -- statement identifier declaration, but the term we choose seems 8210 -- friendlier, since at least informally statement identifiers are 8211 -- called labels in both cases (i.e. when used in labels, and when 8212 -- used as the identifiers of blocks and loops). 8213 8214 -- Note: although this is logically a semantic node, since it does not 8215 -- correspond directly to a source syntax construction, these nodes are 8216 -- actually created by the parser in a post pass done just after parsing 8217 -- is complete, before semantic analysis is started (see Par.Labl). 8218 8219 -- Sprint syntax: labelname : label; 8220 8221 -- N_Implicit_Label_Declaration 8222 -- Sloc points to the << token for a statement identifier, or to the 8223 -- LOOP, DECLARE, or BEGIN token for a loop or block identifier 8224 -- Defining_Identifier (Node1) 8225 -- Label_Construct (Node2-Sem) 8226 8227 -- Note: in the case where a debug source file is generated, the Sloc 8228 -- for this node points to the label name in the generated declaration. 8229 8230 --------------------- 8231 -- Itype Reference -- 8232 --------------------- 8233 8234 -- This node is used to create a reference to an Itype. The only purpose 8235 -- is to make sure the Itype is defined if this is the first reference. 8236 8237 -- A typical use of this node is when an Itype is to be referenced in 8238 -- two branches of an IF statement. In this case it is important that 8239 -- the first use of the Itype not be inside the conditional, since then 8240 -- it might not be defined if the other branch of the IF is taken, in 8241 -- the case where the definition generates elaboration code. 8242 8243 -- The Itype field points to the referenced Itype 8244 8245 -- Sprint syntax: reference itype-name 8246 8247 -- N_Itype_Reference 8248 -- Sloc points to the node generating the reference 8249 -- Itype (Node1-Sem) 8250 8251 -- Note: in the case where a debug source file is generated, the Sloc 8252 -- for this node points to the REFERENCE keyword in the file output. 8253 8254 --------------------- 8255 -- Raise xxx Error -- 8256 --------------------- 8257 8258 -- One of these nodes is created during semantic analysis to replace 8259 -- a node for an expression that is determined to definitely raise 8260 -- the corresponding exception. 8261 8262 -- The N_Raise_xxx_Error node may also stand alone in place 8263 -- of a declaration or statement, in which case it simply causes 8264 -- the exception to be raised (i.e. it is equivalent to a raise 8265 -- statement that raises the corresponding exception). This use 8266 -- is distinguished by the fact that the Etype in this case is 8267 -- Standard_Void_Type; in the subexpression case, the Etype is the 8268 -- same as the type of the subexpression which it replaces. 8269 8270 -- If Condition is empty, then the raise is unconditional. If the 8271 -- Condition field is non-empty, it is a boolean expression which is 8272 -- first evaluated, and the exception is raised only if the value of the 8273 -- expression is True. In the unconditional case, the creation of this 8274 -- node is usually accompanied by a warning message (unless it appears 8275 -- within the right operand of a short-circuit form whose left argument 8276 -- is static and decisively eliminates elaboration of the raise 8277 -- operation). The condition field can ONLY be present when the node is 8278 -- used as a statement form; it must NOT be present in the case where 8279 -- the node appears within an expression. 8280 8281 -- The exception is generated with a message that contains the 8282 -- file name and line number, and then appended text. The Reason 8283 -- code shows the text to be added. The Reason code is an element 8284 -- of the type Types.RT_Exception_Code, and indicates both the 8285 -- message to be added, and the exception to be raised (which must 8286 -- match the node type). The value is stored by storing a Uint which 8287 -- is the Pos value of the enumeration element in this type. 8288 8289 -- Gigi restriction: This expander ensures that the type of the 8290 -- Condition field is always Standard.Boolean, even if the type 8291 -- in the source is some non-standard boolean type. 8292 8293 -- Sprint syntax: [xxx_error "msg"] 8294 -- or: [xxx_error when condition "msg"] 8295 8296 -- N_Raise_Constraint_Error 8297 -- Sloc references related construct 8298 -- Condition (Node1) (set to Empty if no condition) 8299 -- Reason (Uint3) 8300 -- plus fields for expression 8301 8302 -- N_Raise_Program_Error 8303 -- Sloc references related construct 8304 -- Condition (Node1) (set to Empty if no condition) 8305 -- Reason (Uint3) 8306 -- plus fields for expression 8307 8308 -- N_Raise_Storage_Error 8309 -- Sloc references related construct 8310 -- Condition (Node1) (set to Empty if no condition) 8311 -- Reason (Uint3) 8312 -- plus fields for expression 8313 8314 -- Note: Sloc is copied from the expression generating the exception. 8315 -- In the case where a debug source file is generated, the Sloc for 8316 -- this node points to the left bracket in the Sprint file output. 8317 8318 -- Note: the back end may be required to translate these nodes into 8319 -- appropriate goto statements. See description of N_Push/Pop_xxx_Label. 8320 8321 --------------------------------------------- 8322 -- Optimization of Exception Raise to Goto -- 8323 --------------------------------------------- 8324 8325 -- In some cases, the front end will determine that any exception raised 8326 -- by the back end for a certain exception should be transformed into a 8327 -- goto statement. 8328 8329 -- There are three kinds of exceptions raised by the back end (note that 8330 -- for this purpose we consider gigi to be part of the back end in the 8331 -- gcc case): 8332 8333 -- 1. Exceptions resulting from N_Raise_xxx_Error nodes 8334 -- 2. Exceptions from checks triggered by Do_xxx_Check flags 8335 -- 3. Other cases not specifically marked by the front end 8336 8337 -- Normally all such exceptions are translated into calls to the proper 8338 -- Rcheck_xx procedure, where xx encodes both the exception to be raised 8339 -- and the exception message. 8340 8341 -- The front end may determine that for a particular sequence of code, 8342 -- exceptions in any of these three categories for a particular builtin 8343 -- exception should result in a goto, rather than a call to Rcheck_xx. 8344 -- The exact sequence to be generated is: 8345 8346 -- Local_Raise (exception'Identity); 8347 -- goto Label 8348 8349 -- The front end marks such a sequence of code by bracketing it with 8350 -- push and pop nodes: 8351 8352 -- N_Push_xxx_Label (referencing the label) 8353 -- ... 8354 -- (code where transformation is expected for exception xxx) 8355 -- ... 8356 -- N_Pop_xxx_Label 8357 8358 -- The use of push/pop reflects the fact that such regions can properly 8359 -- nest, and one special case is a subregion in which no transformation 8360 -- is allowed. Such a region is marked by a N_Push_xxx_Label node whose 8361 -- Exception_Label field is Empty. 8362 8363 -- N_Push_Constraint_Error_Label 8364 -- Sloc references first statement in region covered 8365 -- Exception_Label (Node5-Sem) 8366 8367 -- N_Push_Program_Error_Label 8368 -- Sloc references first statement in region covered 8369 -- Exception_Label (Node5-Sem) 8370 8371 -- N_Push_Storage_Error_Label 8372 -- Sloc references first statement in region covered 8373 -- Exception_Label (Node5-Sem) 8374 8375 -- N_Pop_Constraint_Error_Label 8376 -- Sloc references last statement in region covered 8377 8378 -- N_Pop_Program_Error_Label 8379 -- Sloc references last statement in region covered 8380 8381 -- N_Pop_Storage_Error_Label 8382 -- Sloc references last statement in region covered 8383 8384 --------------- 8385 -- Reference -- 8386 --------------- 8387 8388 -- For a number of purposes, we need to construct references to objects. 8389 -- These references are subsequently treated as normal access values. 8390 -- An example is the construction of the parameter block passed to a 8391 -- task entry. The N_Reference node is provided for this purpose. It is 8392 -- similar in effect to the use of the Unrestricted_Access attribute, 8393 -- and like Unrestricted_Access can be applied to objects which would 8394 -- not be valid prefixes for the Unchecked_Access attribute (e.g. 8395 -- objects which are not aliased, and slices). In addition it can be 8396 -- applied to composite type values as well as objects, including string 8397 -- values and aggregates. 8398 8399 -- Note: we use the Prefix field for this expression so that the 8400 -- resulting node can be treated using common code with the attribute 8401 -- nodes for the 'Access and related attributes. Logically it would make 8402 -- more sense to call it an Expression field, but then we would have to 8403 -- special case the treatment of the N_Reference node. 8404 8405 -- Note: evaluating a N_Reference node is guaranteed to yield a non-null 8406 -- value at run time. Therefore, it is valid to set Is_Known_Non_Null on 8407 -- a temporary initialized to a N_Reference node in order to eliminate 8408 -- superfluous access checks. 8409 8410 -- Sprint syntax: prefix'reference 8411 8412 -- N_Reference 8413 -- Sloc is copied from the expression 8414 -- Prefix (Node3) 8415 -- plus fields for expression 8416 8417 -- Note: in the case where a debug source file is generated, the Sloc 8418 -- for this node points to the quote in the Sprint file output. 8419 8420 ---------------- 8421 -- SCIL Nodes -- 8422 ---------------- 8423 8424 -- SCIL nodes are special nodes added to the tree when the CodePeer mode 8425 -- is active. They are only generated if SCIL generation is enabled. 8426 -- A standard tree-walk will not encounter these nodes even if they 8427 -- are present; these nodes are only accessible via the function 8428 -- SCIL_LL.Get_SCIL_Node. These nodes have no associated dynamic 8429 -- semantics. 8430 8431 -- Sprint syntax: [ <node kind> ] 8432 -- No semantic field values are displayed. 8433 8434 -- N_SCIL_Dispatch_Table_Tag_Init 8435 -- Sloc references a node for a tag initialization 8436 -- SCIL_Entity (Node4-Sem) 8437 -- 8438 -- An N_SCIL_Dispatch_Table_Tag_Init node may be associated (via 8439 -- Get_SCIL_Node) with the N_Object_Declaration node corresponding to 8440 -- the declaration of the dispatch table for a tagged type. 8441 8442 -- N_SCIL_Dispatching_Call 8443 -- Sloc references the node of a dispatching call 8444 -- SCIL_Target_Prim (Node2-Sem) 8445 -- SCIL_Entity (Node4-Sem) 8446 -- SCIL_Controlling_Tag (Node5-Sem) 8447 -- 8448 -- An N_Scil_Dispatching call node may be associated (via Get_SCIL_Node) 8449 -- with the N_Procedure_Call_Statement or N_Function_Call node (or a 8450 -- rewriting thereof) corresponding to a dispatching call. 8451 8452 -- N_SCIL_Membership_Test 8453 -- Sloc references the node of a membership test 8454 -- SCIL_Tag_Value (Node5-Sem) 8455 -- SCIL_Entity (Node4-Sem) 8456 -- 8457 -- An N_Scil_Membership_Test node may be associated (via Get_SCIL_Node) 8458 -- with the N_In node (or a rewriting thereof) corresponding to a 8459 -- classwide membership test. 8460 8461 -------------------------- 8462 -- Unchecked Expression -- 8463 -------------------------- 8464 8465 -- An unchecked expression is one that must be analyzed and resolved 8466 -- with all checks off, regardless of the current setting of scope 8467 -- suppress flags. 8468 8469 -- Sprint syntax: `(expression) 8470 8471 -- Note: this node is always removed from the tree (and replaced by 8472 -- its constituent expression) on completion of analysis, so it only 8473 -- appears in intermediate trees, and will never be seen by Gigi. 8474 8475 -- N_Unchecked_Expression 8476 -- Sloc is a copy of the Sloc of the expression 8477 -- Expression (Node3) 8478 -- plus fields for expression 8479 8480 -- Note: in the case where a debug source file is generated, the Sloc 8481 -- for this node points to the back quote in the Sprint file output. 8482 8483 ------------------------------- 8484 -- Unchecked Type Conversion -- 8485 ------------------------------- 8486 8487 -- An unchecked type conversion node represents the semantic action 8488 -- corresponding to a call to an instantiation of Unchecked_Conversion. 8489 -- It is generated as a result of actual use of Unchecked_Conversion 8490 -- and also the expander generates unchecked type conversion nodes 8491 -- directly for expansion of complex semantic actions. 8492 8493 -- Note: an unchecked type conversion is a variable as far as the 8494 -- semantics are concerned, which is convenient for the expander. 8495 -- This does not change what Ada source programs are legal, since 8496 -- clearly a function call to an instantiation of Unchecked_Conversion 8497 -- is not a variable in any case. 8498 8499 -- Sprint syntax: subtype-mark!(expression) 8500 8501 -- N_Unchecked_Type_Conversion 8502 -- Sloc points to related node in source 8503 -- Subtype_Mark (Node4) 8504 -- Expression (Node3) 8505 -- Kill_Range_Check (Flag11-Sem) 8506 -- No_Truncation (Flag17-Sem) 8507 -- plus fields for expression 8508 8509 -- Note: in the case where a debug source file is generated, the Sloc 8510 -- for this node points to the exclamation in the Sprint file output. 8511 8512 ----------------------------------- 8513 -- Validate_Unchecked_Conversion -- 8514 ----------------------------------- 8515 8516 -- The front end does most of the validation of unchecked conversion, 8517 -- including checking sizes (this is done after the back end is called 8518 -- to take advantage of back-annotation of calculated sizes). 8519 8520 -- The front end also deals with specific cases that are not allowed 8521 -- e.g. involving unconstrained array types. 8522 8523 -- For the case of the standard gigi backend, this means that all 8524 -- checks are done in the front end. 8525 8526 -- However, in the case of specialized back-ends, in particular the JVM 8527 -- backend in the past, additional requirements and restrictions may 8528 -- apply to unchecked conversion, and these are most conveniently 8529 -- performed in the specialized back-end. 8530 8531 -- To accommodate this requirement, for such back ends, the following 8532 -- special node is generated recording an unchecked conversion that 8533 -- needs to be validated. The back end should post an appropriate 8534 -- error message if the unchecked conversion is invalid or warrants 8535 -- a special warning message. 8536 8537 -- Source_Type and Target_Type point to the entities for the two 8538 -- types involved in the unchecked conversion instantiation that 8539 -- is to be validated. 8540 8541 -- Sprint syntax: validate Unchecked_Conversion (source, target); 8542 8543 -- N_Validate_Unchecked_Conversion 8544 -- Sloc points to instantiation (location for warning message) 8545 -- Source_Type (Node1-Sem) 8546 -- Target_Type (Node2-Sem) 8547 8548 -- Note: in the case where a debug source file is generated, the Sloc 8549 -- for this node points to the VALIDATE keyword in the file output. 8550 8551 ------------------------------- 8552 -- Variable_Reference_Marker -- 8553 ------------------------------- 8554 8555 -- This node is created during the analysis of direct or expanded names, 8556 -- and the resolution of entry and subprogram calls. It performs several 8557 -- functions: 8558 8559 -- * Variable reference markers provide a uniform model for handling 8560 -- variable references by the ABE mechanism, regardless of whether 8561 -- expansion took place. 8562 8563 -- * The variable reference marker captures the entity of the variable 8564 -- being read or written. 8565 8566 -- * The variable reference markers aid the ABE Processing phase by 8567 -- signaling the presence of a call in case the original variable 8568 -- reference was transformed by expansion. 8569 8570 -- Sprint syntax: r#target# -- for a read 8571 -- rw#target# -- for a read/write 8572 -- w#target# -- for a write 8573 8574 -- The Sprint syntax shown above is not enabled by default 8575 8576 -- N_Variable_Reference_Marker 8577 -- Sloc points to Sloc of original variable reference 8578 -- Target (Node1-Sem) 8579 -- Is_Read (Flag1-Sem) 8580 -- Is_Write (Flag2-Sem) 8581 8582 ----------- 8583 -- Empty -- 8584 ----------- 8585 8586 -- Used as the contents of the Nkind field of the dummy Empty node and in 8587 -- some other situations to indicate an uninitialized value. 8588 8589 -- N_Empty 8590 -- Chars (Name1) is set to No_Name 8591 8592 ----------- 8593 -- Error -- 8594 ----------- 8595 8596 -- Used as the contents of the Nkind field of the dummy Error node. 8597 -- Has an Etype field, which gets set to Any_Type later on, to help 8598 -- error recovery (Error_Posted is also set in the Error node). 8599 8600 -- N_Error 8601 -- Chars (Name1) is set to Error_Name 8602 -- Etype (Node5-Sem) 8603 8604 -------------------------- 8605 -- Node Type Definition -- 8606 -------------------------- 8607 8608 -- The following is the definition of the Node_Kind type. As previously 8609 -- discussed, this is separated off to allow rearrangement of the order to 8610 -- facilitate definition of subtype ranges. The comments show the subtype 8611 -- classes which apply to each set of node kinds. The first entry in the 8612 -- comment characterizes the following list of nodes. 8613 8614 type Node_Kind is ( 8615 N_Unused_At_Start, 8616 8617 -- N_Representation_Clause 8618 8619 N_At_Clause, 8620 N_Component_Clause, 8621 N_Enumeration_Representation_Clause, 8622 N_Mod_Clause, 8623 N_Record_Representation_Clause, 8624 8625 -- N_Representation_Clause, N_Has_Chars 8626 8627 N_Attribute_Definition_Clause, 8628 8629 -- N_Has_Chars 8630 8631 N_Empty, 8632 N_Pragma_Argument_Association, 8633 8634 -- N_Has_Etype, N_Has_Chars 8635 8636 -- Note: of course N_Error does not really have Etype or Chars fields, 8637 -- and any attempt to access these fields in N_Error will cause an 8638 -- error, but historically this always has been positioned so that an 8639 -- "in N_Has_Chars" or "in N_Has_Etype" test yields true for N_Error. 8640 -- Most likely this makes coding easier somewhere but still seems 8641 -- undesirable. To be investigated some time ??? 8642 8643 N_Error, 8644 8645 -- N_Entity, N_Has_Etype, N_Has_Chars 8646 8647 N_Defining_Character_Literal, 8648 N_Defining_Identifier, 8649 N_Defining_Operator_Symbol, 8650 8651 -- N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity 8652 8653 N_Expanded_Name, 8654 8655 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 8656 -- N_Has_Chars, N_Has_Entity 8657 8658 N_Identifier, 8659 N_Operator_Symbol, 8660 8661 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 8662 -- N_Has_Chars, N_Has_Entity 8663 8664 N_Character_Literal, 8665 8666 -- N_Binary_Op, N_Op, N_Subexpr, 8667 -- N_Has_Etype, N_Has_Chars, N_Has_Entity 8668 8669 N_Op_Add, 8670 N_Op_Concat, 8671 N_Op_Expon, 8672 N_Op_Subtract, 8673 8674 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Treat_Fixed_As_Integer 8675 -- N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator 8676 8677 N_Op_Divide, 8678 N_Op_Mod, 8679 N_Op_Multiply, 8680 N_Op_Rem, 8681 8682 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8683 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8684 8685 N_Op_And, 8686 8687 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8688 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare 8689 8690 N_Op_Eq, 8691 N_Op_Ge, 8692 N_Op_Gt, 8693 N_Op_Le, 8694 N_Op_Lt, 8695 N_Op_Ne, 8696 8697 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8698 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8699 8700 N_Op_Or, 8701 N_Op_Xor, 8702 8703 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype, 8704 -- N_Op_Shift, N_Has_Chars, N_Has_Entity 8705 8706 N_Op_Rotate_Left, 8707 N_Op_Rotate_Right, 8708 N_Op_Shift_Left, 8709 N_Op_Shift_Right, 8710 N_Op_Shift_Right_Arithmetic, 8711 8712 -- N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype, 8713 -- N_Has_Chars, N_Has_Entity 8714 8715 N_Op_Abs, 8716 N_Op_Minus, 8717 N_Op_Not, 8718 N_Op_Plus, 8719 8720 -- N_Subexpr, N_Has_Etype, N_Has_Entity 8721 8722 N_Attribute_Reference, 8723 8724 -- N_Subexpr, N_Has_Etype, N_Membership_Test 8725 8726 N_In, 8727 N_Not_In, 8728 8729 -- N_Subexpr, N_Has_Etype, N_Short_Circuit 8730 8731 N_And_Then, 8732 N_Or_Else, 8733 8734 -- N_Subexpr, N_Has_Etype, N_Subprogram_Call 8735 8736 N_Function_Call, 8737 N_Procedure_Call_Statement, 8738 8739 -- N_Subexpr, N_Has_Etype, N_Raise_xxx_Error 8740 8741 N_Raise_Constraint_Error, 8742 N_Raise_Program_Error, 8743 N_Raise_Storage_Error, 8744 8745 -- N_Subexpr, N_Has_Etype, N_Numeric_Or_String_Literal 8746 8747 N_Integer_Literal, 8748 N_Real_Literal, 8749 N_String_Literal, 8750 8751 -- N_Subexpr, N_Has_Etype 8752 8753 N_Explicit_Dereference, 8754 N_Expression_With_Actions, 8755 N_If_Expression, 8756 N_Indexed_Component, 8757 N_Null, 8758 N_Qualified_Expression, 8759 N_Quantified_Expression, 8760 N_Aggregate, 8761 N_Allocator, 8762 N_Case_Expression, 8763 N_Delta_Aggregate, 8764 N_Extension_Aggregate, 8765 N_Raise_Expression, 8766 N_Range, 8767 N_Reference, 8768 N_Selected_Component, 8769 N_Slice, 8770 N_Target_Name, 8771 N_Type_Conversion, 8772 N_Unchecked_Expression, 8773 N_Unchecked_Type_Conversion, 8774 8775 -- N_Has_Etype 8776 8777 N_Subtype_Indication, 8778 8779 -- N_Declaration 8780 8781 N_Component_Declaration, 8782 N_Entry_Declaration, 8783 N_Expression_Function, 8784 N_Formal_Object_Declaration, 8785 N_Formal_Type_Declaration, 8786 N_Full_Type_Declaration, 8787 N_Incomplete_Type_Declaration, 8788 N_Iterator_Specification, 8789 N_Loop_Parameter_Specification, 8790 N_Object_Declaration, 8791 N_Protected_Type_Declaration, 8792 N_Private_Extension_Declaration, 8793 N_Private_Type_Declaration, 8794 N_Subtype_Declaration, 8795 8796 -- N_Subprogram_Specification, N_Declaration 8797 8798 N_Function_Specification, 8799 N_Procedure_Specification, 8800 8801 -- N_Access_To_Subprogram_Definition 8802 8803 N_Access_Function_Definition, 8804 N_Access_Procedure_Definition, 8805 8806 -- N_Later_Decl_Item 8807 8808 N_Task_Type_Declaration, 8809 8810 -- N_Body_Stub, N_Later_Decl_Item 8811 8812 N_Package_Body_Stub, 8813 N_Protected_Body_Stub, 8814 N_Subprogram_Body_Stub, 8815 N_Task_Body_Stub, 8816 8817 -- N_Generic_Instantiation, N_Later_Decl_Item 8818 -- N_Subprogram_Instantiation 8819 8820 N_Function_Instantiation, 8821 N_Procedure_Instantiation, 8822 8823 -- N_Generic_Instantiation, N_Later_Decl_Item 8824 8825 N_Package_Instantiation, 8826 8827 -- N_Unit_Body, N_Later_Decl_Item, N_Proper_Body 8828 8829 N_Package_Body, 8830 N_Subprogram_Body, 8831 8832 -- N_Later_Decl_Item, N_Proper_Body 8833 8834 N_Protected_Body, 8835 N_Task_Body, 8836 8837 -- N_Later_Decl_Item 8838 8839 N_Implicit_Label_Declaration, 8840 N_Package_Declaration, 8841 N_Single_Task_Declaration, 8842 N_Subprogram_Declaration, 8843 N_Use_Package_Clause, 8844 8845 -- N_Generic_Declaration, N_Later_Decl_Item 8846 8847 N_Generic_Package_Declaration, 8848 N_Generic_Subprogram_Declaration, 8849 8850 -- N_Array_Type_Definition 8851 8852 N_Constrained_Array_Definition, 8853 N_Unconstrained_Array_Definition, 8854 8855 -- N_Renaming_Declaration 8856 8857 N_Exception_Renaming_Declaration, 8858 N_Object_Renaming_Declaration, 8859 N_Package_Renaming_Declaration, 8860 N_Subprogram_Renaming_Declaration, 8861 8862 -- N_Generic_Renaming_Declaration, N_Renaming_Declaration 8863 8864 N_Generic_Function_Renaming_Declaration, 8865 N_Generic_Package_Renaming_Declaration, 8866 N_Generic_Procedure_Renaming_Declaration, 8867 8868 -- N_Statement_Other_Than_Procedure_Call 8869 8870 N_Abort_Statement, 8871 N_Accept_Statement, 8872 N_Assignment_Statement, 8873 N_Asynchronous_Select, 8874 N_Block_Statement, 8875 N_Case_Statement, 8876 N_Code_Statement, 8877 N_Compound_Statement, 8878 N_Conditional_Entry_Call, 8879 8880 -- N_Statement_Other_Than_Procedure_Call, N_Delay_Statement 8881 8882 N_Delay_Relative_Statement, 8883 N_Delay_Until_Statement, 8884 8885 -- N_Statement_Other_Than_Procedure_Call 8886 8887 N_Entry_Call_Statement, 8888 N_Free_Statement, 8889 N_Goto_Statement, 8890 N_Loop_Statement, 8891 N_Null_Statement, 8892 N_Raise_Statement, 8893 N_Requeue_Statement, 8894 N_Simple_Return_Statement, 8895 N_Extended_Return_Statement, 8896 N_Selective_Accept, 8897 N_Timed_Entry_Call, 8898 8899 -- N_Statement_Other_Than_Procedure_Call, N_Has_Condition 8900 8901 N_Exit_Statement, 8902 N_If_Statement, 8903 8904 -- N_Has_Condition 8905 8906 N_Accept_Alternative, 8907 N_Delay_Alternative, 8908 N_Elsif_Part, 8909 N_Entry_Body_Formal_Part, 8910 N_Iteration_Scheme, 8911 N_Terminate_Alternative, 8912 8913 -- N_Formal_Subprogram_Declaration 8914 8915 N_Formal_Abstract_Subprogram_Declaration, 8916 N_Formal_Concrete_Subprogram_Declaration, 8917 8918 -- N_Push_xxx_Label, N_Push_Pop_xxx_Label 8919 8920 N_Push_Constraint_Error_Label, 8921 N_Push_Program_Error_Label, 8922 N_Push_Storage_Error_Label, 8923 8924 -- N_Pop_xxx_Label, N_Push_Pop_xxx_Label 8925 8926 N_Pop_Constraint_Error_Label, 8927 N_Pop_Program_Error_Label, 8928 N_Pop_Storage_Error_Label, 8929 8930 -- SCIL nodes 8931 8932 N_SCIL_Dispatch_Table_Tag_Init, 8933 N_SCIL_Dispatching_Call, 8934 N_SCIL_Membership_Test, 8935 8936 -- Other nodes (not part of any subtype class) 8937 8938 N_Abortable_Part, 8939 N_Abstract_Subprogram_Declaration, 8940 N_Access_Definition, 8941 N_Access_To_Object_Definition, 8942 N_Aspect_Specification, 8943 N_Call_Marker, 8944 N_Case_Expression_Alternative, 8945 N_Case_Statement_Alternative, 8946 N_Compilation_Unit, 8947 N_Compilation_Unit_Aux, 8948 N_Component_Association, 8949 N_Component_Definition, 8950 N_Component_List, 8951 N_Contract, 8952 N_Derived_Type_Definition, 8953 N_Decimal_Fixed_Point_Definition, 8954 N_Defining_Program_Unit_Name, 8955 N_Delta_Constraint, 8956 N_Designator, 8957 N_Digits_Constraint, 8958 N_Discriminant_Association, 8959 N_Discriminant_Specification, 8960 N_Enumeration_Type_Definition, 8961 N_Entry_Body, 8962 N_Entry_Call_Alternative, 8963 N_Entry_Index_Specification, 8964 N_Exception_Declaration, 8965 N_Exception_Handler, 8966 N_Floating_Point_Definition, 8967 N_Formal_Decimal_Fixed_Point_Definition, 8968 N_Formal_Derived_Type_Definition, 8969 N_Formal_Discrete_Type_Definition, 8970 N_Formal_Floating_Point_Definition, 8971 N_Formal_Modular_Type_Definition, 8972 N_Formal_Ordinary_Fixed_Point_Definition, 8973 N_Formal_Package_Declaration, 8974 N_Formal_Private_Type_Definition, 8975 N_Formal_Incomplete_Type_Definition, 8976 N_Formal_Signed_Integer_Type_Definition, 8977 N_Freeze_Entity, 8978 N_Freeze_Generic_Entity, 8979 N_Generic_Association, 8980 N_Handled_Sequence_Of_Statements, 8981 N_Index_Or_Discriminant_Constraint, 8982 N_Iterated_Component_Association, 8983 N_Itype_Reference, 8984 N_Label, 8985 N_Modular_Type_Definition, 8986 N_Number_Declaration, 8987 N_Ordinary_Fixed_Point_Definition, 8988 N_Others_Choice, 8989 N_Package_Specification, 8990 N_Parameter_Association, 8991 N_Parameter_Specification, 8992 N_Pragma, 8993 N_Protected_Definition, 8994 N_Range_Constraint, 8995 N_Real_Range_Specification, 8996 N_Record_Definition, 8997 N_Signed_Integer_Type_Definition, 8998 N_Single_Protected_Declaration, 8999 N_Subunit, 9000 N_Task_Definition, 9001 N_Triggering_Alternative, 9002 N_Use_Type_Clause, 9003 N_Validate_Unchecked_Conversion, 9004 N_Variable_Reference_Marker, 9005 N_Variant, 9006 N_Variant_Part, 9007 N_With_Clause, 9008 N_Unused_At_End); 9009 9010 for Node_Kind'Size use 8; 9011 -- The data structures in Atree assume this 9012 9013 ---------------------------- 9014 -- Node Class Definitions -- 9015 ---------------------------- 9016 9017 subtype N_Access_To_Subprogram_Definition is Node_Kind range 9018 N_Access_Function_Definition .. 9019 N_Access_Procedure_Definition; 9020 9021 subtype N_Array_Type_Definition is Node_Kind range 9022 N_Constrained_Array_Definition .. 9023 N_Unconstrained_Array_Definition; 9024 9025 subtype N_Binary_Op is Node_Kind range 9026 N_Op_Add .. 9027 N_Op_Shift_Right_Arithmetic; 9028 9029 subtype N_Body_Stub is Node_Kind range 9030 N_Package_Body_Stub .. 9031 N_Task_Body_Stub; 9032 9033 subtype N_Declaration is Node_Kind range 9034 N_Component_Declaration .. 9035 N_Procedure_Specification; 9036 -- Note: this includes all constructs normally thought of as declarations 9037 -- except those which are separately grouped as later declarations. 9038 9039 subtype N_Delay_Statement is Node_Kind range 9040 N_Delay_Relative_Statement .. 9041 N_Delay_Until_Statement; 9042 9043 subtype N_Direct_Name is Node_Kind range 9044 N_Identifier .. 9045 N_Character_Literal; 9046 9047 subtype N_Entity is Node_Kind range 9048 N_Defining_Character_Literal .. 9049 N_Defining_Operator_Symbol; 9050 9051 subtype N_Formal_Subprogram_Declaration is Node_Kind range 9052 N_Formal_Abstract_Subprogram_Declaration .. 9053 N_Formal_Concrete_Subprogram_Declaration; 9054 9055 subtype N_Generic_Declaration is Node_Kind range 9056 N_Generic_Package_Declaration .. 9057 N_Generic_Subprogram_Declaration; 9058 9059 subtype N_Generic_Instantiation is Node_Kind range 9060 N_Function_Instantiation .. 9061 N_Package_Instantiation; 9062 9063 subtype N_Generic_Renaming_Declaration is Node_Kind range 9064 N_Generic_Function_Renaming_Declaration .. 9065 N_Generic_Procedure_Renaming_Declaration; 9066 9067 subtype N_Has_Chars is Node_Kind range 9068 N_Attribute_Definition_Clause .. 9069 N_Op_Plus; 9070 9071 subtype N_Has_Entity is Node_Kind range 9072 N_Expanded_Name .. 9073 N_Attribute_Reference; 9074 -- Nodes that have Entity fields 9075 -- Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity, 9076 -- N_Aspect_Specification, or N_Attribute_Definition_Clause. 9077 9078 subtype N_Has_Etype is Node_Kind range 9079 N_Error .. 9080 N_Subtype_Indication; 9081 9082 subtype N_Has_Treat_Fixed_As_Integer is Node_Kind range 9083 N_Op_Divide .. 9084 N_Op_Rem; 9085 9086 subtype N_Multiplying_Operator is Node_Kind range 9087 N_Op_Divide .. 9088 N_Op_Rem; 9089 9090 subtype N_Later_Decl_Item is Node_Kind range 9091 N_Task_Type_Declaration .. 9092 N_Generic_Subprogram_Declaration; 9093 -- Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes 9094 -- only those items which can appear as later declarative items. This also 9095 -- includes N_Implicit_Label_Declaration which is not specifically in the 9096 -- grammar but may appear as a valid later declarative items. It does NOT 9097 -- include N_Pragma which can also appear among later declarative items. 9098 -- It does however include N_Protected_Body, which is a bit peculiar, but 9099 -- harmless since this cannot appear in Ada 83 mode anyway. 9100 9101 subtype N_Membership_Test is Node_Kind range 9102 N_In .. 9103 N_Not_In; 9104 9105 subtype N_Numeric_Or_String_Literal is Node_Kind range 9106 N_Integer_Literal .. 9107 N_String_Literal; 9108 9109 subtype N_Op is Node_Kind range 9110 N_Op_Add .. 9111 N_Op_Plus; 9112 9113 subtype N_Op_Boolean is Node_Kind range 9114 N_Op_And .. 9115 N_Op_Xor; 9116 -- Binary operators which take operands of a boolean type, and yield 9117 -- a result of a boolean type. 9118 9119 subtype N_Op_Compare is Node_Kind range 9120 N_Op_Eq .. 9121 N_Op_Ne; 9122 9123 subtype N_Op_Shift is Node_Kind range 9124 N_Op_Rotate_Left .. 9125 N_Op_Shift_Right_Arithmetic; 9126 9127 subtype N_Proper_Body is Node_Kind range 9128 N_Package_Body .. 9129 N_Task_Body; 9130 9131 subtype N_Push_xxx_Label is Node_Kind range 9132 N_Push_Constraint_Error_Label .. 9133 N_Push_Storage_Error_Label; 9134 9135 subtype N_Pop_xxx_Label is Node_Kind range 9136 N_Pop_Constraint_Error_Label .. 9137 N_Pop_Storage_Error_Label; 9138 9139 subtype N_Push_Pop_xxx_Label is Node_Kind range 9140 N_Push_Constraint_Error_Label .. 9141 N_Pop_Storage_Error_Label; 9142 9143 subtype N_Raise_xxx_Error is Node_Kind range 9144 N_Raise_Constraint_Error .. 9145 N_Raise_Storage_Error; 9146 9147 subtype N_Renaming_Declaration is Node_Kind range 9148 N_Exception_Renaming_Declaration .. 9149 N_Generic_Procedure_Renaming_Declaration; 9150 9151 subtype N_Representation_Clause is Node_Kind range 9152 N_At_Clause .. 9153 N_Attribute_Definition_Clause; 9154 9155 subtype N_Short_Circuit is Node_Kind range 9156 N_And_Then .. 9157 N_Or_Else; 9158 9159 subtype N_SCIL_Node is Node_Kind range 9160 N_SCIL_Dispatch_Table_Tag_Init .. 9161 N_SCIL_Membership_Test; 9162 9163 subtype N_Statement_Other_Than_Procedure_Call is Node_Kind range 9164 N_Abort_Statement .. 9165 N_If_Statement; 9166 -- Note that this includes all statement types except for the cases of the 9167 -- N_Procedure_Call_Statement which is considered to be a subexpression 9168 -- (since overloading is possible, so it needs to go through the normal 9169 -- overloading resolution for expressions). 9170 9171 subtype N_Subprogram_Call is Node_Kind range 9172 N_Function_Call .. 9173 N_Procedure_Call_Statement; 9174 9175 subtype N_Subprogram_Instantiation is Node_Kind range 9176 N_Function_Instantiation .. 9177 N_Procedure_Instantiation; 9178 9179 subtype N_Has_Condition is Node_Kind range 9180 N_Exit_Statement .. 9181 N_Terminate_Alternative; 9182 -- Nodes with condition fields (does not include N_Raise_xxx_Error) 9183 9184 subtype N_Subexpr is Node_Kind range 9185 N_Expanded_Name .. 9186 N_Unchecked_Type_Conversion; 9187 -- Nodes with expression fields 9188 9189 subtype N_Subprogram_Specification is Node_Kind range 9190 N_Function_Specification .. 9191 N_Procedure_Specification; 9192 9193 subtype N_Unary_Op is Node_Kind range 9194 N_Op_Abs .. 9195 N_Op_Plus; 9196 9197 subtype N_Unit_Body is Node_Kind range 9198 N_Package_Body .. 9199 N_Subprogram_Body; 9200 9201 --------------------------- 9202 -- Node Access Functions -- 9203 --------------------------- 9204 9205 -- The following functions return the contents of the indicated field of 9206 -- the node referenced by the argument, which is a Node_Id. They provide 9207 -- logical access to fields in the node which could be accessed using the 9208 -- Atree.Unchecked_Access package, but the idea is always to use these 9209 -- higher level routines which preserve strong typing. In debug mode, 9210 -- these routines check that they are being applied to an appropriate 9211 -- node, as well as checking that the node is in range. 9212 9213 function Abort_Present 9214 (N : Node_Id) return Boolean; -- Flag15 9215 9216 function Abortable_Part 9217 (N : Node_Id) return Node_Id; -- Node2 9218 9219 function Abstract_Present 9220 (N : Node_Id) return Boolean; -- Flag4 9221 9222 function Accept_Handler_Records 9223 (N : Node_Id) return List_Id; -- List5 9224 9225 function Accept_Statement 9226 (N : Node_Id) return Node_Id; -- Node2 9227 9228 function Access_Definition 9229 (N : Node_Id) return Node_Id; -- Node3 9230 9231 function Access_To_Subprogram_Definition 9232 (N : Node_Id) return Node_Id; -- Node3 9233 9234 function Access_Types_To_Process 9235 (N : Node_Id) return Elist_Id; -- Elist2 9236 9237 function Actions 9238 (N : Node_Id) return List_Id; -- List1 9239 9240 function Activation_Chain_Entity 9241 (N : Node_Id) return Node_Id; -- Node3 9242 9243 function Acts_As_Spec 9244 (N : Node_Id) return Boolean; -- Flag4 9245 9246 function Actual_Designated_Subtype 9247 (N : Node_Id) return Node_Id; -- Node4 9248 9249 function Address_Warning_Posted 9250 (N : Node_Id) return Boolean; -- Flag18 9251 9252 function Aggregate_Bounds 9253 (N : Node_Id) return Node_Id; -- Node3 9254 9255 function Aliased_Present 9256 (N : Node_Id) return Boolean; -- Flag4 9257 9258 function Alloc_For_BIP_Return 9259 (N : Node_Id) return Boolean; -- Flag1 9260 9261 function All_Others 9262 (N : Node_Id) return Boolean; -- Flag11 9263 9264 function All_Present 9265 (N : Node_Id) return Boolean; -- Flag15 9266 9267 function Alternatives 9268 (N : Node_Id) return List_Id; -- List4 9269 9270 function Ancestor_Part 9271 (N : Node_Id) return Node_Id; -- Node3 9272 9273 function Atomic_Sync_Required 9274 (N : Node_Id) return Boolean; -- Flag14 9275 9276 function Array_Aggregate 9277 (N : Node_Id) return Node_Id; -- Node3 9278 9279 function Aspect_Rep_Item 9280 (N : Node_Id) return Node_Id; -- Node2 9281 9282 function Assignment_OK 9283 (N : Node_Id) return Boolean; -- Flag15 9284 9285 function Associated_Node 9286 (N : Node_Id) return Node_Id; -- Node4 9287 9288 function At_End_Proc 9289 (N : Node_Id) return Node_Id; -- Node1 9290 9291 function Attribute_Name 9292 (N : Node_Id) return Name_Id; -- Name2 9293 9294 function Aux_Decls_Node 9295 (N : Node_Id) return Node_Id; -- Node5 9296 9297 function Backwards_OK 9298 (N : Node_Id) return Boolean; -- Flag6 9299 9300 function Bad_Is_Detected 9301 (N : Node_Id) return Boolean; -- Flag15 9302 9303 function By_Ref 9304 (N : Node_Id) return Boolean; -- Flag5 9305 9306 function Body_Required 9307 (N : Node_Id) return Boolean; -- Flag13 9308 9309 function Body_To_Inline 9310 (N : Node_Id) return Node_Id; -- Node3 9311 9312 function Box_Present 9313 (N : Node_Id) return Boolean; -- Flag15 9314 9315 function Char_Literal_Value 9316 (N : Node_Id) return Uint; -- Uint2 9317 9318 function Chars 9319 (N : Node_Id) return Name_Id; -- Name1 9320 9321 function Check_Address_Alignment 9322 (N : Node_Id) return Boolean; -- Flag11 9323 9324 function Choice_Parameter 9325 (N : Node_Id) return Node_Id; -- Node2 9326 9327 function Choices 9328 (N : Node_Id) return List_Id; -- List1 9329 9330 function Class_Present 9331 (N : Node_Id) return Boolean; -- Flag6 9332 9333 function Classifications 9334 (N : Node_Id) return Node_Id; -- Node3 9335 9336 function Cleanup_Actions 9337 (N : Node_Id) return List_Id; -- List5 9338 9339 function Comes_From_Extended_Return_Statement 9340 (N : Node_Id) return Boolean; -- Flag18 9341 9342 function Compile_Time_Known_Aggregate 9343 (N : Node_Id) return Boolean; -- Flag18 9344 9345 function Component_Associations 9346 (N : Node_Id) return List_Id; -- List2 9347 9348 function Component_Clauses 9349 (N : Node_Id) return List_Id; -- List3 9350 9351 function Component_Definition 9352 (N : Node_Id) return Node_Id; -- Node4 9353 9354 function Component_Items 9355 (N : Node_Id) return List_Id; -- List3 9356 9357 function Component_List 9358 (N : Node_Id) return Node_Id; -- Node1 9359 9360 function Component_Name 9361 (N : Node_Id) return Node_Id; -- Node1 9362 9363 function Componentwise_Assignment 9364 (N : Node_Id) return Boolean; -- Flag14 9365 9366 function Condition 9367 (N : Node_Id) return Node_Id; -- Node1 9368 9369 function Condition_Actions 9370 (N : Node_Id) return List_Id; -- List3 9371 9372 function Config_Pragmas 9373 (N : Node_Id) return List_Id; -- List4 9374 9375 function Constant_Present 9376 (N : Node_Id) return Boolean; -- Flag17 9377 9378 function Constraint 9379 (N : Node_Id) return Node_Id; -- Node3 9380 9381 function Constraints 9382 (N : Node_Id) return List_Id; -- List1 9383 9384 function Context_Installed 9385 (N : Node_Id) return Boolean; -- Flag13 9386 9387 function Context_Pending 9388 (N : Node_Id) return Boolean; -- Flag16 9389 9390 function Context_Items 9391 (N : Node_Id) return List_Id; -- List1 9392 9393 function Contract_Test_Cases 9394 (N : Node_Id) return Node_Id; -- Node2 9395 9396 function Controlling_Argument 9397 (N : Node_Id) return Node_Id; -- Node1 9398 9399 function Conversion_OK 9400 (N : Node_Id) return Boolean; -- Flag14 9401 9402 function Convert_To_Return_False 9403 (N : Node_Id) return Boolean; -- Flag13 9404 9405 function Corresponding_Aspect 9406 (N : Node_Id) return Node_Id; -- Node3 9407 9408 function Corresponding_Body 9409 (N : Node_Id) return Node_Id; -- Node5 9410 9411 function Corresponding_Formal_Spec 9412 (N : Node_Id) return Node_Id; -- Node3 9413 9414 function Corresponding_Generic_Association 9415 (N : Node_Id) return Node_Id; -- Node5 9416 9417 function Corresponding_Integer_Value 9418 (N : Node_Id) return Uint; -- Uint4 9419 9420 function Corresponding_Spec 9421 (N : Node_Id) return Entity_Id; -- Node5 9422 9423 function Corresponding_Spec_Of_Stub 9424 (N : Node_Id) return Node_Id; -- Node2 9425 9426 function Corresponding_Stub 9427 (N : Node_Id) return Node_Id; -- Node3 9428 9429 function Dcheck_Function 9430 (N : Node_Id) return Entity_Id; -- Node5 9431 9432 function Declarations 9433 (N : Node_Id) return List_Id; -- List2 9434 9435 function Default_Expression 9436 (N : Node_Id) return Node_Id; -- Node5 9437 9438 function Default_Storage_Pool 9439 (N : Node_Id) return Node_Id; -- Node3 9440 9441 function Default_Name 9442 (N : Node_Id) return Node_Id; -- Node2 9443 9444 function Defining_Identifier 9445 (N : Node_Id) return Entity_Id; -- Node1 9446 9447 function Defining_Unit_Name 9448 (N : Node_Id) return Node_Id; -- Node1 9449 9450 function Delay_Alternative 9451 (N : Node_Id) return Node_Id; -- Node4 9452 9453 function Delay_Statement 9454 (N : Node_Id) return Node_Id; -- Node2 9455 9456 function Delta_Expression 9457 (N : Node_Id) return Node_Id; -- Node3 9458 9459 function Digits_Expression 9460 (N : Node_Id) return Node_Id; -- Node2 9461 9462 function Discr_Check_Funcs_Built 9463 (N : Node_Id) return Boolean; -- Flag11 9464 9465 function Discrete_Choices 9466 (N : Node_Id) return List_Id; -- List4 9467 9468 function Discrete_Range 9469 (N : Node_Id) return Node_Id; -- Node4 9470 9471 function Discrete_Subtype_Definition 9472 (N : Node_Id) return Node_Id; -- Node4 9473 9474 function Discrete_Subtype_Definitions 9475 (N : Node_Id) return List_Id; -- List2 9476 9477 function Discriminant_Specifications 9478 (N : Node_Id) return List_Id; -- List4 9479 9480 function Discriminant_Type 9481 (N : Node_Id) return Node_Id; -- Node5 9482 9483 function Do_Accessibility_Check 9484 (N : Node_Id) return Boolean; -- Flag13 9485 9486 function Do_Discriminant_Check 9487 (N : Node_Id) return Boolean; -- Flag3 9488 9489 function Do_Division_Check 9490 (N : Node_Id) return Boolean; -- Flag13 9491 9492 function Do_Length_Check 9493 (N : Node_Id) return Boolean; -- Flag4 9494 9495 function Do_Overflow_Check 9496 (N : Node_Id) return Boolean; -- Flag17 9497 9498 function Do_Range_Check 9499 (N : Node_Id) return Boolean; -- Flag9 9500 9501 function Do_Storage_Check 9502 (N : Node_Id) return Boolean; -- Flag17 9503 9504 function Do_Tag_Check 9505 (N : Node_Id) return Boolean; -- Flag13 9506 9507 function Elaborate_All_Desirable 9508 (N : Node_Id) return Boolean; -- Flag9 9509 9510 function Elaborate_All_Present 9511 (N : Node_Id) return Boolean; -- Flag14 9512 9513 function Elaborate_Desirable 9514 (N : Node_Id) return Boolean; -- Flag11 9515 9516 function Elaborate_Present 9517 (N : Node_Id) return Boolean; -- Flag4 9518 9519 function Else_Actions 9520 (N : Node_Id) return List_Id; -- List3 9521 9522 function Else_Statements 9523 (N : Node_Id) return List_Id; -- List4 9524 9525 function Elsif_Parts 9526 (N : Node_Id) return List_Id; -- List3 9527 9528 function Enclosing_Variant 9529 (N : Node_Id) return Node_Id; -- Node2 9530 9531 function End_Label 9532 (N : Node_Id) return Node_Id; -- Node4 9533 9534 function End_Span 9535 (N : Node_Id) return Uint; -- Uint5 9536 9537 function Entity 9538 (N : Node_Id) return Node_Id; -- Node4 9539 9540 function Entity_Or_Associated_Node 9541 (N : Node_Id) return Node_Id; -- Node4 9542 9543 function Entry_Body_Formal_Part 9544 (N : Node_Id) return Node_Id; -- Node5 9545 9546 function Entry_Call_Alternative 9547 (N : Node_Id) return Node_Id; -- Node1 9548 9549 function Entry_Call_Statement 9550 (N : Node_Id) return Node_Id; -- Node1 9551 9552 function Entry_Direct_Name 9553 (N : Node_Id) return Node_Id; -- Node1 9554 9555 function Entry_Index 9556 (N : Node_Id) return Node_Id; -- Node5 9557 9558 function Entry_Index_Specification 9559 (N : Node_Id) return Node_Id; -- Node4 9560 9561 function Etype 9562 (N : Node_Id) return Node_Id; -- Node5 9563 9564 function Exception_Choices 9565 (N : Node_Id) return List_Id; -- List4 9566 9567 function Exception_Handlers 9568 (N : Node_Id) return List_Id; -- List5 9569 9570 function Exception_Junk 9571 (N : Node_Id) return Boolean; -- Flag8 9572 9573 function Exception_Label 9574 (N : Node_Id) return Node_Id; -- Node5 9575 9576 function Explicit_Actual_Parameter 9577 (N : Node_Id) return Node_Id; -- Node3 9578 9579 function Expansion_Delayed 9580 (N : Node_Id) return Boolean; -- Flag11 9581 9582 function Explicit_Generic_Actual_Parameter 9583 (N : Node_Id) return Node_Id; -- Node1 9584 9585 function Expression 9586 (N : Node_Id) return Node_Id; -- Node3 9587 9588 function Expression_Copy 9589 (N : Node_Id) return Node_Id; -- Node2 9590 9591 function Expressions 9592 (N : Node_Id) return List_Id; -- List1 9593 9594 function First_Bit 9595 (N : Node_Id) return Node_Id; -- Node3 9596 9597 function First_Inlined_Subprogram 9598 (N : Node_Id) return Entity_Id; -- Node3 9599 9600 function First_Name 9601 (N : Node_Id) return Boolean; -- Flag5 9602 9603 function First_Named_Actual 9604 (N : Node_Id) return Node_Id; -- Node4 9605 9606 function First_Real_Statement 9607 (N : Node_Id) return Node_Id; -- Node2 9608 9609 function First_Subtype_Link 9610 (N : Node_Id) return Entity_Id; -- Node5 9611 9612 function Float_Truncate 9613 (N : Node_Id) return Boolean; -- Flag11 9614 9615 function Formal_Type_Definition 9616 (N : Node_Id) return Node_Id; -- Node3 9617 9618 function Forwards_OK 9619 (N : Node_Id) return Boolean; -- Flag5 9620 9621 function From_Aspect_Specification 9622 (N : Node_Id) return Boolean; -- Flag13 9623 9624 function From_At_End 9625 (N : Node_Id) return Boolean; -- Flag4 9626 9627 function From_At_Mod 9628 (N : Node_Id) return Boolean; -- Flag4 9629 9630 function From_Conditional_Expression 9631 (N : Node_Id) return Boolean; -- Flag1 9632 9633 function From_Default 9634 (N : Node_Id) return Boolean; -- Flag6 9635 9636 function Generalized_Indexing 9637 (N : Node_Id) return Node_Id; -- Node4 9638 9639 function Generic_Associations 9640 (N : Node_Id) return List_Id; -- List3 9641 9642 function Generic_Formal_Declarations 9643 (N : Node_Id) return List_Id; -- List2 9644 9645 function Generic_Parent 9646 (N : Node_Id) return Node_Id; -- Node5 9647 9648 function Generic_Parent_Type 9649 (N : Node_Id) return Node_Id; -- Node4 9650 9651 function Handled_Statement_Sequence 9652 (N : Node_Id) return Node_Id; -- Node4 9653 9654 function Handler_List_Entry 9655 (N : Node_Id) return Node_Id; -- Node2 9656 9657 function Has_Created_Identifier 9658 (N : Node_Id) return Boolean; -- Flag15 9659 9660 function Has_Dereference_Action 9661 (N : Node_Id) return Boolean; -- Flag13 9662 9663 function Has_Dynamic_Length_Check 9664 (N : Node_Id) return Boolean; -- Flag10 9665 9666 function Has_Dynamic_Range_Check 9667 (N : Node_Id) return Boolean; -- Flag12 9668 9669 function Has_Init_Expression 9670 (N : Node_Id) return Boolean; -- Flag14 9671 9672 function Has_Local_Raise 9673 (N : Node_Id) return Boolean; -- Flag8 9674 9675 function Has_No_Elaboration_Code 9676 (N : Node_Id) return Boolean; -- Flag17 9677 9678 function Has_Pragma_Suppress_All 9679 (N : Node_Id) return Boolean; -- Flag14 9680 9681 function Has_Private_View 9682 (N : Node_Id) return Boolean; -- Flag11 9683 9684 function Has_Relative_Deadline_Pragma 9685 (N : Node_Id) return Boolean; -- Flag9 9686 9687 function Has_Self_Reference 9688 (N : Node_Id) return Boolean; -- Flag13 9689 9690 function Has_SP_Choice 9691 (N : Node_Id) return Boolean; -- Flag15 9692 9693 function Has_Storage_Size_Pragma 9694 (N : Node_Id) return Boolean; -- Flag5 9695 9696 function Has_Target_Names 9697 (N : Node_Id) return Boolean; -- Flag8 9698 9699 function Has_Wide_Character 9700 (N : Node_Id) return Boolean; -- Flag11 9701 9702 function Has_Wide_Wide_Character 9703 (N : Node_Id) return Boolean; -- Flag13 9704 9705 function Header_Size_Added 9706 (N : Node_Id) return Boolean; -- Flag11 9707 9708 function Hidden_By_Use_Clause 9709 (N : Node_Id) return Elist_Id; -- Elist5 9710 9711 function High_Bound 9712 (N : Node_Id) return Node_Id; -- Node2 9713 9714 function Identifier 9715 (N : Node_Id) return Node_Id; -- Node1 9716 9717 function Interface_List 9718 (N : Node_Id) return List_Id; -- List2 9719 9720 function Interface_Present 9721 (N : Node_Id) return Boolean; -- Flag16 9722 9723 function Implicit_With 9724 (N : Node_Id) return Boolean; -- Flag16 9725 9726 function Import_Interface_Present 9727 (N : Node_Id) return Boolean; -- Flag16 9728 9729 function In_Present 9730 (N : Node_Id) return Boolean; -- Flag15 9731 9732 function Includes_Infinities 9733 (N : Node_Id) return Boolean; -- Flag11 9734 9735 function Incomplete_View 9736 (N : Node_Id) return Node_Id; -- Node2 9737 9738 function Inherited_Discriminant 9739 (N : Node_Id) return Boolean; -- Flag13 9740 9741 function Instance_Spec 9742 (N : Node_Id) return Node_Id; -- Node5 9743 9744 function Intval 9745 (N : Node_Id) return Uint; -- Uint3 9746 9747 function Is_Abort_Block 9748 (N : Node_Id) return Boolean; -- Flag4 9749 9750 function Is_Accessibility_Actual 9751 (N : Node_Id) return Boolean; -- Flag13 9752 9753 function Is_Analyzed_Pragma 9754 (N : Node_Id) return Boolean; -- Flag5 9755 9756 function Is_Asynchronous_Call_Block 9757 (N : Node_Id) return Boolean; -- Flag7 9758 9759 function Is_Boolean_Aspect 9760 (N : Node_Id) return Boolean; -- Flag16 9761 9762 function Is_Checked 9763 (N : Node_Id) return Boolean; -- Flag11 9764 9765 function Is_Checked_Ghost_Pragma 9766 (N : Node_Id) return Boolean; -- Flag3 9767 9768 function Is_Component_Left_Opnd 9769 (N : Node_Id) return Boolean; -- Flag13 9770 9771 function Is_Component_Right_Opnd 9772 (N : Node_Id) return Boolean; -- Flag14 9773 9774 function Is_Controlling_Actual 9775 (N : Node_Id) return Boolean; -- Flag16 9776 9777 function Is_Declaration_Level_Node 9778 (N : Node_Id) return Boolean; -- Flag5 9779 9780 function Is_Delayed_Aspect 9781 (N : Node_Id) return Boolean; -- Flag14 9782 9783 function Is_Disabled 9784 (N : Node_Id) return Boolean; -- Flag15 9785 9786 function Is_Dispatching_Call 9787 (N : Node_Id) return Boolean; -- Flag6 9788 9789 function Is_Dynamic_Coextension 9790 (N : Node_Id) return Boolean; -- Flag18 9791 9792 function Is_Effective_Use_Clause 9793 (N : Node_Id) return Boolean; -- Flag1 9794 9795 function Is_Elaboration_Checks_OK_Node 9796 (N : Node_Id) return Boolean; -- Flag1 9797 9798 function Is_Elaboration_Code 9799 (N : Node_Id) return Boolean; -- Flag9 9800 9801 function Is_Elaboration_Warnings_OK_Node 9802 (N : Node_Id) return Boolean; -- Flag3 9803 9804 function Is_Elsif 9805 (N : Node_Id) return Boolean; -- Flag13 9806 9807 function Is_Entry_Barrier_Function 9808 (N : Node_Id) return Boolean; -- Flag8 9809 9810 function Is_Expanded_Build_In_Place_Call 9811 (N : Node_Id) return Boolean; -- Flag11 9812 9813 function Is_Expanded_Contract 9814 (N : Node_Id) return Boolean; -- Flag1 9815 9816 function Is_Finalization_Wrapper 9817 (N : Node_Id) return Boolean; -- Flag9 9818 9819 function Is_Folded_In_Parser 9820 (N : Node_Id) return Boolean; -- Flag4 9821 9822 function Is_Generic_Contract_Pragma 9823 (N : Node_Id) return Boolean; -- Flag2 9824 9825 function Is_Ignored 9826 (N : Node_Id) return Boolean; -- Flag9 9827 9828 function Is_Ignored_Ghost_Pragma 9829 (N : Node_Id) return Boolean; -- Flag8 9830 9831 function Is_In_Discriminant_Check 9832 (N : Node_Id) return Boolean; -- Flag11 9833 9834 function Is_Inherited_Pragma 9835 (N : Node_Id) return Boolean; -- Flag4 9836 9837 function Is_Initialization_Block 9838 (N : Node_Id) return Boolean; -- Flag1 9839 9840 function Is_Known_Guaranteed_ABE 9841 (N : Node_Id) return Boolean; -- Flag18 9842 9843 function Is_Machine_Number 9844 (N : Node_Id) return Boolean; -- Flag11 9845 9846 function Is_Null_Loop 9847 (N : Node_Id) return Boolean; -- Flag16 9848 9849 function Is_OpenAcc_Environment 9850 (N : Node_Id) return Boolean; -- Flag13 9851 9852 function Is_OpenAcc_Loop 9853 (N : Node_Id) return Boolean; -- Flag14 9854 9855 function Is_Overloaded 9856 (N : Node_Id) return Boolean; -- Flag5 9857 9858 function Is_Power_Of_2_For_Shift 9859 (N : Node_Id) return Boolean; -- Flag13 9860 9861 function Is_Prefixed_Call 9862 (N : Node_Id) return Boolean; -- Flag17 9863 9864 function Is_Protected_Subprogram_Body 9865 (N : Node_Id) return Boolean; -- Flag7 9866 9867 function Is_Qualified_Universal_Literal 9868 (N : Node_Id) return Boolean; -- Flag4 9869 9870 function Is_Read 9871 (N : Node_Id) return Boolean; -- Flag1 9872 9873 function Is_Source_Call 9874 (N : Node_Id) return Boolean; -- Flag4 9875 9876 function Is_SPARK_Mode_On_Node 9877 (N : Node_Id) return Boolean; -- Flag2 9878 9879 function Is_Static_Coextension 9880 (N : Node_Id) return Boolean; -- Flag14 9881 9882 function Is_Static_Expression 9883 (N : Node_Id) return Boolean; -- Flag6 9884 9885 function Is_Subprogram_Descriptor 9886 (N : Node_Id) return Boolean; -- Flag16 9887 9888 function Is_Task_Allocation_Block 9889 (N : Node_Id) return Boolean; -- Flag6 9890 9891 function Is_Task_Body_Procedure 9892 (N : Node_Id) return Boolean; -- Flag1 9893 9894 function Is_Task_Master 9895 (N : Node_Id) return Boolean; -- Flag5 9896 9897 function Is_Write 9898 (N : Node_Id) return Boolean; -- Flag2 9899 9900 function Iteration_Scheme 9901 (N : Node_Id) return Node_Id; -- Node2 9902 9903 function Iterator_Specification 9904 (N : Node_Id) return Node_Id; -- Node2 9905 9906 function Itype 9907 (N : Node_Id) return Entity_Id; -- Node1 9908 9909 function Kill_Range_Check 9910 (N : Node_Id) return Boolean; -- Flag11 9911 9912 function Label_Construct 9913 (N : Node_Id) return Node_Id; -- Node2 9914 9915 function Left_Opnd 9916 (N : Node_Id) return Node_Id; -- Node2 9917 9918 function Last_Bit 9919 (N : Node_Id) return Node_Id; -- Node4 9920 9921 function Last_Name 9922 (N : Node_Id) return Boolean; -- Flag6 9923 9924 function Library_Unit 9925 (N : Node_Id) return Node_Id; -- Node4 9926 9927 function Limited_View_Installed 9928 (N : Node_Id) return Boolean; -- Flag18 9929 9930 function Limited_Present 9931 (N : Node_Id) return Boolean; -- Flag17 9932 9933 function Literals 9934 (N : Node_Id) return List_Id; -- List1 9935 9936 function Local_Raise_Not_OK 9937 (N : Node_Id) return Boolean; -- Flag7 9938 9939 function Local_Raise_Statements 9940 (N : Node_Id) return Elist_Id; -- Elist1 9941 9942 function Loop_Actions 9943 (N : Node_Id) return List_Id; -- List2 9944 9945 function Loop_Parameter_Specification 9946 (N : Node_Id) return Node_Id; -- Node4 9947 9948 function Low_Bound 9949 (N : Node_Id) return Node_Id; -- Node1 9950 9951 function Mod_Clause 9952 (N : Node_Id) return Node_Id; -- Node2 9953 9954 function More_Ids 9955 (N : Node_Id) return Boolean; -- Flag5 9956 9957 function Must_Be_Byte_Aligned 9958 (N : Node_Id) return Boolean; -- Flag14 9959 9960 function Must_Not_Freeze 9961 (N : Node_Id) return Boolean; -- Flag8 9962 9963 function Must_Not_Override 9964 (N : Node_Id) return Boolean; -- Flag15 9965 9966 function Must_Override 9967 (N : Node_Id) return Boolean; -- Flag14 9968 9969 function Name 9970 (N : Node_Id) return Node_Id; -- Node2 9971 9972 function Names 9973 (N : Node_Id) return List_Id; -- List2 9974 9975 function Next_Entity 9976 (N : Node_Id) return Node_Id; -- Node2 9977 9978 function Next_Exit_Statement 9979 (N : Node_Id) return Node_Id; -- Node3 9980 9981 function Next_Implicit_With 9982 (N : Node_Id) return Node_Id; -- Node3 9983 9984 function Next_Named_Actual 9985 (N : Node_Id) return Node_Id; -- Node4 9986 9987 function Next_Pragma 9988 (N : Node_Id) return Node_Id; -- Node1 9989 9990 function Next_Rep_Item 9991 (N : Node_Id) return Node_Id; -- Node5 9992 9993 function Next_Use_Clause 9994 (N : Node_Id) return Node_Id; -- Node3 9995 9996 function No_Ctrl_Actions 9997 (N : Node_Id) return Boolean; -- Flag7 9998 9999 function No_Elaboration_Check 10000 (N : Node_Id) return Boolean; -- Flag4 10001 10002 function No_Entities_Ref_In_Spec 10003 (N : Node_Id) return Boolean; -- Flag8 10004 10005 function No_Initialization 10006 (N : Node_Id) return Boolean; -- Flag13 10007 10008 function No_Minimize_Eliminate 10009 (N : Node_Id) return Boolean; -- Flag17 10010 10011 function No_Side_Effect_Removal 10012 (N : Node_Id) return Boolean; -- Flag17 10013 10014 function No_Truncation 10015 (N : Node_Id) return Boolean; -- Flag17 10016 10017 function Null_Excluding_Subtype 10018 (N : Node_Id) return Boolean; -- Flag16 10019 10020 function Null_Exclusion_Present 10021 (N : Node_Id) return Boolean; -- Flag11 10022 10023 function Null_Exclusion_In_Return_Present 10024 (N : Node_Id) return Boolean; -- Flag14 10025 10026 function Null_Present 10027 (N : Node_Id) return Boolean; -- Flag13 10028 10029 function Null_Record_Present 10030 (N : Node_Id) return Boolean; -- Flag17 10031 10032 function Null_Statement 10033 (N : Node_Id) return Node_Id; -- Node2 10034 10035 function Object_Definition 10036 (N : Node_Id) return Node_Id; -- Node4 10037 10038 function Of_Present 10039 (N : Node_Id) return Boolean; -- Flag16 10040 10041 function Original_Discriminant 10042 (N : Node_Id) return Node_Id; -- Node2 10043 10044 function Original_Entity 10045 (N : Node_Id) return Entity_Id; -- Node2 10046 10047 function Others_Discrete_Choices 10048 (N : Node_Id) return List_Id; -- List1 10049 10050 function Out_Present 10051 (N : Node_Id) return Boolean; -- Flag17 10052 10053 function Parameter_Associations 10054 (N : Node_Id) return List_Id; -- List3 10055 10056 function Parameter_Specifications 10057 (N : Node_Id) return List_Id; -- List3 10058 10059 function Parameter_Type 10060 (N : Node_Id) return Node_Id; -- Node2 10061 10062 function Parent_Spec 10063 (N : Node_Id) return Node_Id; -- Node4 10064 10065 function Parent_With 10066 (N : Node_Id) return Boolean; -- Flag1 10067 10068 function Position 10069 (N : Node_Id) return Node_Id; -- Node2 10070 10071 function Pragma_Argument_Associations 10072 (N : Node_Id) return List_Id; -- List2 10073 10074 function Pragma_Identifier 10075 (N : Node_Id) return Node_Id; -- Node4 10076 10077 function Pragmas_After 10078 (N : Node_Id) return List_Id; -- List5 10079 10080 function Pragmas_Before 10081 (N : Node_Id) return List_Id; -- List4 10082 10083 function Pre_Post_Conditions 10084 (N : Node_Id) return Node_Id; -- Node1 10085 10086 function Prefix 10087 (N : Node_Id) return Node_Id; -- Node3 10088 10089 function Premature_Use 10090 (N : Node_Id) return Node_Id; -- Node5 10091 10092 function Present_Expr 10093 (N : Node_Id) return Uint; -- Uint3 10094 10095 function Prev_Ids 10096 (N : Node_Id) return Boolean; -- Flag6 10097 10098 function Prev_Use_Clause 10099 (N : Node_Id) return Node_Id; -- Node1 10100 10101 function Print_In_Hex 10102 (N : Node_Id) return Boolean; -- Flag13 10103 10104 function Private_Declarations 10105 (N : Node_Id) return List_Id; -- List3 10106 10107 function Private_Present 10108 (N : Node_Id) return Boolean; -- Flag15 10109 10110 function Procedure_To_Call 10111 (N : Node_Id) return Node_Id; -- Node2 10112 10113 function Proper_Body 10114 (N : Node_Id) return Node_Id; -- Node1 10115 10116 function Protected_Definition 10117 (N : Node_Id) return Node_Id; -- Node3 10118 10119 function Protected_Present 10120 (N : Node_Id) return Boolean; -- Flag6 10121 10122 function Raises_Constraint_Error 10123 (N : Node_Id) return Boolean; -- Flag7 10124 10125 function Range_Constraint 10126 (N : Node_Id) return Node_Id; -- Node4 10127 10128 function Range_Expression 10129 (N : Node_Id) return Node_Id; -- Node4 10130 10131 function Real_Range_Specification 10132 (N : Node_Id) return Node_Id; -- Node4 10133 10134 function Realval 10135 (N : Node_Id) return Ureal; -- Ureal3 10136 10137 function Reason 10138 (N : Node_Id) return Uint; -- Uint3 10139 10140 function Record_Extension_Part 10141 (N : Node_Id) return Node_Id; -- Node3 10142 10143 function Redundant_Use 10144 (N : Node_Id) return Boolean; -- Flag13 10145 10146 function Renaming_Exception 10147 (N : Node_Id) return Node_Id; -- Node2 10148 10149 function Result_Definition 10150 (N : Node_Id) return Node_Id; -- Node4 10151 10152 function Return_Object_Declarations 10153 (N : Node_Id) return List_Id; -- List3 10154 10155 function Return_Statement_Entity 10156 (N : Node_Id) return Node_Id; -- Node5 10157 10158 function Reverse_Present 10159 (N : Node_Id) return Boolean; -- Flag15 10160 10161 function Right_Opnd 10162 (N : Node_Id) return Node_Id; -- Node3 10163 10164 function Rounded_Result 10165 (N : Node_Id) return Boolean; -- Flag18 10166 10167 function SCIL_Controlling_Tag 10168 (N : Node_Id) return Node_Id; -- Node5 10169 10170 function SCIL_Entity 10171 (N : Node_Id) return Node_Id; -- Node4 10172 10173 function SCIL_Tag_Value 10174 (N : Node_Id) return Node_Id; -- Node5 10175 10176 function SCIL_Target_Prim 10177 (N : Node_Id) return Node_Id; -- Node2 10178 10179 function Scope 10180 (N : Node_Id) return Node_Id; -- Node3 10181 10182 function Select_Alternatives 10183 (N : Node_Id) return List_Id; -- List1 10184 10185 function Selector_Name 10186 (N : Node_Id) return Node_Id; -- Node2 10187 10188 function Selector_Names 10189 (N : Node_Id) return List_Id; -- List1 10190 10191 function Shift_Count_OK 10192 (N : Node_Id) return Boolean; -- Flag4 10193 10194 function Source_Type 10195 (N : Node_Id) return Entity_Id; -- Node1 10196 10197 function Specification 10198 (N : Node_Id) return Node_Id; -- Node1 10199 10200 function Split_PPC 10201 (N : Node_Id) return Boolean; -- Flag17 10202 10203 function Statements 10204 (N : Node_Id) return List_Id; -- List3 10205 10206 function Storage_Pool 10207 (N : Node_Id) return Node_Id; -- Node1 10208 10209 function Subpool_Handle_Name 10210 (N : Node_Id) return Node_Id; -- Node4 10211 10212 function Strval 10213 (N : Node_Id) return String_Id; -- Str3 10214 10215 function Subtype_Indication 10216 (N : Node_Id) return Node_Id; -- Node5 10217 10218 function Subtype_Mark 10219 (N : Node_Id) return Node_Id; -- Node4 10220 10221 function Subtype_Marks 10222 (N : Node_Id) return List_Id; -- List2 10223 10224 function Suppress_Assignment_Checks 10225 (N : Node_Id) return Boolean; -- Flag18 10226 10227 function Suppress_Loop_Warnings 10228 (N : Node_Id) return Boolean; -- Flag17 10229 10230 function Synchronized_Present 10231 (N : Node_Id) return Boolean; -- Flag7 10232 10233 function Tagged_Present 10234 (N : Node_Id) return Boolean; -- Flag15 10235 10236 function Target 10237 (N : Node_Id) return Entity_Id; -- Node1 10238 10239 function Target_Type 10240 (N : Node_Id) return Entity_Id; -- Node2 10241 10242 function Task_Definition 10243 (N : Node_Id) return Node_Id; -- Node3 10244 10245 function Task_Present 10246 (N : Node_Id) return Boolean; -- Flag5 10247 10248 function Then_Actions 10249 (N : Node_Id) return List_Id; -- List2 10250 10251 function Then_Statements 10252 (N : Node_Id) return List_Id; -- List2 10253 10254 function Treat_Fixed_As_Integer 10255 (N : Node_Id) return Boolean; -- Flag14 10256 10257 function Triggering_Alternative 10258 (N : Node_Id) return Node_Id; -- Node1 10259 10260 function Triggering_Statement 10261 (N : Node_Id) return Node_Id; -- Node1 10262 10263 function TSS_Elist 10264 (N : Node_Id) return Elist_Id; -- Elist3 10265 10266 function Type_Definition 10267 (N : Node_Id) return Node_Id; -- Node3 10268 10269 function Uneval_Old_Accept 10270 (N : Node_Id) return Boolean; -- Flag7 10271 10272 function Uneval_Old_Warn 10273 (N : Node_Id) return Boolean; -- Flag18 10274 10275 function Unit 10276 (N : Node_Id) return Node_Id; -- Node2 10277 10278 function Unknown_Discriminants_Present 10279 (N : Node_Id) return Boolean; -- Flag13 10280 10281 function Unreferenced_In_Spec 10282 (N : Node_Id) return Boolean; -- Flag7 10283 10284 function Variant_Part 10285 (N : Node_Id) return Node_Id; -- Node4 10286 10287 function Variants 10288 (N : Node_Id) return List_Id; -- List1 10289 10290 function Visible_Declarations 10291 (N : Node_Id) return List_Id; -- List2 10292 10293 function Uninitialized_Variable 10294 (N : Node_Id) return Node_Id; -- Node3 10295 10296 function Used_Operations 10297 (N : Node_Id) return Elist_Id; -- Elist2 10298 10299 function Was_Attribute_Reference 10300 (N : Node_Id) return Boolean; -- Flag2 10301 10302 function Was_Expression_Function 10303 (N : Node_Id) return Boolean; -- Flag18 10304 10305 function Was_Originally_Stub 10306 (N : Node_Id) return Boolean; -- Flag13 10307 10308 -- End functions (note used by xsinfo utility program to end processing) 10309 10310 ---------------------------- 10311 -- Node Update Procedures -- 10312 ---------------------------- 10313 10314 -- These are the corresponding node update routines, which again provide 10315 -- a high level logical access with type checking. In addition to setting 10316 -- the indicated field of the node N to the given Val, in the case of 10317 -- tree pointers (List1-4), the parent pointer of the Val node is set to 10318 -- point back to node N. This automates the setting of the parent pointer. 10319 10320 procedure Set_Abort_Present 10321 (N : Node_Id; Val : Boolean := True); -- Flag15 10322 10323 procedure Set_Abortable_Part 10324 (N : Node_Id; Val : Node_Id); -- Node2 10325 10326 procedure Set_Abstract_Present 10327 (N : Node_Id; Val : Boolean := True); -- Flag4 10328 10329 procedure Set_Accept_Handler_Records 10330 (N : Node_Id; Val : List_Id); -- List5 10331 10332 procedure Set_Accept_Statement 10333 (N : Node_Id; Val : Node_Id); -- Node2 10334 10335 procedure Set_Access_Definition 10336 (N : Node_Id; Val : Node_Id); -- Node3 10337 10338 procedure Set_Access_To_Subprogram_Definition 10339 (N : Node_Id; Val : Node_Id); -- Node3 10340 10341 procedure Set_Access_Types_To_Process 10342 (N : Node_Id; Val : Elist_Id); -- Elist2 10343 10344 procedure Set_Actions 10345 (N : Node_Id; Val : List_Id); -- List1 10346 10347 procedure Set_Activation_Chain_Entity 10348 (N : Node_Id; Val : Node_Id); -- Node3 10349 10350 procedure Set_Acts_As_Spec 10351 (N : Node_Id; Val : Boolean := True); -- Flag4 10352 10353 procedure Set_Actual_Designated_Subtype 10354 (N : Node_Id; Val : Node_Id); -- Node4 10355 10356 procedure Set_Address_Warning_Posted 10357 (N : Node_Id; Val : Boolean := True); -- Flag18 10358 10359 procedure Set_Aggregate_Bounds 10360 (N : Node_Id; Val : Node_Id); -- Node3 10361 10362 procedure Set_Aliased_Present 10363 (N : Node_Id; Val : Boolean := True); -- Flag4 10364 10365 procedure Set_Alloc_For_BIP_Return 10366 (N : Node_Id; Val : Boolean := True); -- Flag1 10367 10368 procedure Set_All_Others 10369 (N : Node_Id; Val : Boolean := True); -- Flag11 10370 10371 procedure Set_All_Present 10372 (N : Node_Id; Val : Boolean := True); -- Flag15 10373 10374 procedure Set_Alternatives 10375 (N : Node_Id; Val : List_Id); -- List4 10376 10377 procedure Set_Ancestor_Part 10378 (N : Node_Id; Val : Node_Id); -- Node3 10379 10380 procedure Set_Atomic_Sync_Required 10381 (N : Node_Id; Val : Boolean := True); -- Flag14 10382 10383 procedure Set_Array_Aggregate 10384 (N : Node_Id; Val : Node_Id); -- Node3 10385 10386 procedure Set_Aspect_Rep_Item 10387 (N : Node_Id; Val : Node_Id); -- Node2 10388 10389 procedure Set_Assignment_OK 10390 (N : Node_Id; Val : Boolean := True); -- Flag15 10391 10392 procedure Set_Associated_Node 10393 (N : Node_Id; Val : Node_Id); -- Node4 10394 10395 procedure Set_Attribute_Name 10396 (N : Node_Id; Val : Name_Id); -- Name2 10397 10398 procedure Set_At_End_Proc 10399 (N : Node_Id; Val : Node_Id); -- Node1 10400 10401 procedure Set_Aux_Decls_Node 10402 (N : Node_Id; Val : Node_Id); -- Node5 10403 10404 procedure Set_Backwards_OK 10405 (N : Node_Id; Val : Boolean := True); -- Flag6 10406 10407 procedure Set_Bad_Is_Detected 10408 (N : Node_Id; Val : Boolean := True); -- Flag15 10409 10410 procedure Set_Body_Required 10411 (N : Node_Id; Val : Boolean := True); -- Flag13 10412 10413 procedure Set_Body_To_Inline 10414 (N : Node_Id; Val : Node_Id); -- Node3 10415 10416 procedure Set_Box_Present 10417 (N : Node_Id; Val : Boolean := True); -- Flag15 10418 10419 procedure Set_By_Ref 10420 (N : Node_Id; Val : Boolean := True); -- Flag5 10421 10422 procedure Set_Char_Literal_Value 10423 (N : Node_Id; Val : Uint); -- Uint2 10424 10425 procedure Set_Chars 10426 (N : Node_Id; Val : Name_Id); -- Name1 10427 10428 procedure Set_Check_Address_Alignment 10429 (N : Node_Id; Val : Boolean := True); -- Flag11 10430 10431 procedure Set_Choice_Parameter 10432 (N : Node_Id; Val : Node_Id); -- Node2 10433 10434 procedure Set_Choices 10435 (N : Node_Id; Val : List_Id); -- List1 10436 10437 procedure Set_Class_Present 10438 (N : Node_Id; Val : Boolean := True); -- Flag6 10439 10440 procedure Set_Classifications 10441 (N : Node_Id; Val : Node_Id); -- Node3 10442 10443 procedure Set_Cleanup_Actions 10444 (N : Node_Id; Val : List_Id); -- List5 10445 10446 procedure Set_Comes_From_Extended_Return_Statement 10447 (N : Node_Id; Val : Boolean := True); -- Flag18 10448 10449 procedure Set_Compile_Time_Known_Aggregate 10450 (N : Node_Id; Val : Boolean := True); -- Flag18 10451 10452 procedure Set_Component_Associations 10453 (N : Node_Id; Val : List_Id); -- List2 10454 10455 procedure Set_Component_Clauses 10456 (N : Node_Id; Val : List_Id); -- List3 10457 10458 procedure Set_Component_Definition 10459 (N : Node_Id; Val : Node_Id); -- Node4 10460 10461 procedure Set_Component_Items 10462 (N : Node_Id; Val : List_Id); -- List3 10463 10464 procedure Set_Component_List 10465 (N : Node_Id; Val : Node_Id); -- Node1 10466 10467 procedure Set_Component_Name 10468 (N : Node_Id; Val : Node_Id); -- Node1 10469 10470 procedure Set_Componentwise_Assignment 10471 (N : Node_Id; Val : Boolean := True); -- Flag14 10472 10473 procedure Set_Condition 10474 (N : Node_Id; Val : Node_Id); -- Node1 10475 10476 procedure Set_Condition_Actions 10477 (N : Node_Id; Val : List_Id); -- List3 10478 10479 procedure Set_Config_Pragmas 10480 (N : Node_Id; Val : List_Id); -- List4 10481 10482 procedure Set_Constant_Present 10483 (N : Node_Id; Val : Boolean := True); -- Flag17 10484 10485 procedure Set_Constraint 10486 (N : Node_Id; Val : Node_Id); -- Node3 10487 10488 procedure Set_Constraints 10489 (N : Node_Id; Val : List_Id); -- List1 10490 10491 procedure Set_Context_Installed 10492 (N : Node_Id; Val : Boolean := True); -- Flag13 10493 10494 procedure Set_Context_Items 10495 (N : Node_Id; Val : List_Id); -- List1 10496 10497 procedure Set_Context_Pending 10498 (N : Node_Id; Val : Boolean := True); -- Flag16 10499 10500 procedure Set_Contract_Test_Cases 10501 (N : Node_Id; Val : Node_Id); -- Node2 10502 10503 procedure Set_Controlling_Argument 10504 (N : Node_Id; Val : Node_Id); -- Node1 10505 10506 procedure Set_Conversion_OK 10507 (N : Node_Id; Val : Boolean := True); -- Flag14 10508 10509 procedure Set_Convert_To_Return_False 10510 (N : Node_Id; Val : Boolean := True); -- Flag13 10511 10512 procedure Set_Corresponding_Aspect 10513 (N : Node_Id; Val : Node_Id); -- Node3 10514 10515 procedure Set_Corresponding_Body 10516 (N : Node_Id; Val : Node_Id); -- Node5 10517 10518 procedure Set_Corresponding_Formal_Spec 10519 (N : Node_Id; Val : Node_Id); -- Node3 10520 10521 procedure Set_Corresponding_Generic_Association 10522 (N : Node_Id; Val : Node_Id); -- Node5 10523 10524 procedure Set_Corresponding_Integer_Value 10525 (N : Node_Id; Val : Uint); -- Uint4 10526 10527 procedure Set_Corresponding_Spec 10528 (N : Node_Id; Val : Entity_Id); -- Node5 10529 10530 procedure Set_Corresponding_Spec_Of_Stub 10531 (N : Node_Id; Val : Node_Id); -- Node2 10532 10533 procedure Set_Corresponding_Stub 10534 (N : Node_Id; Val : Node_Id); -- Node3 10535 10536 procedure Set_Dcheck_Function 10537 (N : Node_Id; Val : Entity_Id); -- Node5 10538 10539 procedure Set_Declarations 10540 (N : Node_Id; Val : List_Id); -- List2 10541 10542 procedure Set_Default_Expression 10543 (N : Node_Id; Val : Node_Id); -- Node5 10544 10545 procedure Set_Default_Storage_Pool 10546 (N : Node_Id; Val : Node_Id); -- Node3 10547 10548 procedure Set_Default_Name 10549 (N : Node_Id; Val : Node_Id); -- Node2 10550 10551 procedure Set_Defining_Identifier 10552 (N : Node_Id; Val : Entity_Id); -- Node1 10553 10554 procedure Set_Defining_Unit_Name 10555 (N : Node_Id; Val : Node_Id); -- Node1 10556 10557 procedure Set_Delay_Alternative 10558 (N : Node_Id; Val : Node_Id); -- Node4 10559 10560 procedure Set_Delay_Statement 10561 (N : Node_Id; Val : Node_Id); -- Node2 10562 10563 procedure Set_Delta_Expression 10564 (N : Node_Id; Val : Node_Id); -- Node3 10565 10566 procedure Set_Digits_Expression 10567 (N : Node_Id; Val : Node_Id); -- Node2 10568 10569 procedure Set_Discr_Check_Funcs_Built 10570 (N : Node_Id; Val : Boolean := True); -- Flag11 10571 10572 procedure Set_Discrete_Choices 10573 (N : Node_Id; Val : List_Id); -- List4 10574 10575 procedure Set_Discrete_Range 10576 (N : Node_Id; Val : Node_Id); -- Node4 10577 10578 procedure Set_Discrete_Subtype_Definition 10579 (N : Node_Id; Val : Node_Id); -- Node4 10580 10581 procedure Set_Discrete_Subtype_Definitions 10582 (N : Node_Id; Val : List_Id); -- List2 10583 10584 procedure Set_Discriminant_Specifications 10585 (N : Node_Id; Val : List_Id); -- List4 10586 10587 procedure Set_Discriminant_Type 10588 (N : Node_Id; Val : Node_Id); -- Node5 10589 10590 procedure Set_Do_Accessibility_Check 10591 (N : Node_Id; Val : Boolean := True); -- Flag13 10592 10593 procedure Set_Do_Discriminant_Check 10594 (N : Node_Id; Val : Boolean := True); -- Flag3 10595 10596 procedure Set_Do_Division_Check 10597 (N : Node_Id; Val : Boolean := True); -- Flag13 10598 10599 procedure Set_Do_Length_Check 10600 (N : Node_Id; Val : Boolean := True); -- Flag4 10601 10602 procedure Set_Do_Overflow_Check 10603 (N : Node_Id; Val : Boolean := True); -- Flag17 10604 10605 procedure Set_Do_Range_Check 10606 (N : Node_Id; Val : Boolean := True); -- Flag9 10607 10608 procedure Set_Do_Storage_Check 10609 (N : Node_Id; Val : Boolean := True); -- Flag17 10610 10611 procedure Set_Do_Tag_Check 10612 (N : Node_Id; Val : Boolean := True); -- Flag13 10613 10614 procedure Set_Elaborate_All_Desirable 10615 (N : Node_Id; Val : Boolean := True); -- Flag9 10616 10617 procedure Set_Elaborate_All_Present 10618 (N : Node_Id; Val : Boolean := True); -- Flag14 10619 10620 procedure Set_Elaborate_Desirable 10621 (N : Node_Id; Val : Boolean := True); -- Flag11 10622 10623 procedure Set_Elaborate_Present 10624 (N : Node_Id; Val : Boolean := True); -- Flag4 10625 10626 procedure Set_Else_Actions 10627 (N : Node_Id; Val : List_Id); -- List3 10628 10629 procedure Set_Else_Statements 10630 (N : Node_Id; Val : List_Id); -- List4 10631 10632 procedure Set_Elsif_Parts 10633 (N : Node_Id; Val : List_Id); -- List3 10634 10635 procedure Set_Enclosing_Variant 10636 (N : Node_Id; Val : Node_Id); -- Node2 10637 10638 procedure Set_End_Label 10639 (N : Node_Id; Val : Node_Id); -- Node4 10640 10641 procedure Set_End_Span 10642 (N : Node_Id; Val : Uint); -- Uint5 10643 10644 procedure Set_Entity 10645 (N : Node_Id; Val : Node_Id); -- Node4 10646 10647 procedure Set_Entry_Body_Formal_Part 10648 (N : Node_Id; Val : Node_Id); -- Node5 10649 10650 procedure Set_Entry_Call_Alternative 10651 (N : Node_Id; Val : Node_Id); -- Node1 10652 10653 procedure Set_Entry_Call_Statement 10654 (N : Node_Id; Val : Node_Id); -- Node1 10655 10656 procedure Set_Entry_Direct_Name 10657 (N : Node_Id; Val : Node_Id); -- Node1 10658 10659 procedure Set_Entry_Index 10660 (N : Node_Id; Val : Node_Id); -- Node5 10661 10662 procedure Set_Entry_Index_Specification 10663 (N : Node_Id; Val : Node_Id); -- Node4 10664 10665 procedure Set_Etype 10666 (N : Node_Id; Val : Node_Id); -- Node5 10667 10668 procedure Set_Exception_Choices 10669 (N : Node_Id; Val : List_Id); -- List4 10670 10671 procedure Set_Exception_Handlers 10672 (N : Node_Id; Val : List_Id); -- List5 10673 10674 procedure Set_Exception_Junk 10675 (N : Node_Id; Val : Boolean := True); -- Flag8 10676 10677 procedure Set_Exception_Label 10678 (N : Node_Id; Val : Node_Id); -- Node5 10679 10680 procedure Set_Expansion_Delayed 10681 (N : Node_Id; Val : Boolean := True); -- Flag11 10682 10683 procedure Set_Explicit_Actual_Parameter 10684 (N : Node_Id; Val : Node_Id); -- Node3 10685 10686 procedure Set_Explicit_Generic_Actual_Parameter 10687 (N : Node_Id; Val : Node_Id); -- Node1 10688 10689 procedure Set_Expression 10690 (N : Node_Id; Val : Node_Id); -- Node3 10691 10692 procedure Set_Expression_Copy 10693 (N : Node_Id; Val : Node_Id); -- Node2 10694 10695 procedure Set_Expressions 10696 (N : Node_Id; Val : List_Id); -- List1 10697 10698 procedure Set_First_Bit 10699 (N : Node_Id; Val : Node_Id); -- Node3 10700 10701 procedure Set_First_Inlined_Subprogram 10702 (N : Node_Id; Val : Entity_Id); -- Node3 10703 10704 procedure Set_First_Name 10705 (N : Node_Id; Val : Boolean := True); -- Flag5 10706 10707 procedure Set_First_Named_Actual 10708 (N : Node_Id; Val : Node_Id); -- Node4 10709 10710 procedure Set_First_Real_Statement 10711 (N : Node_Id; Val : Node_Id); -- Node2 10712 10713 procedure Set_First_Subtype_Link 10714 (N : Node_Id; Val : Entity_Id); -- Node5 10715 10716 procedure Set_Float_Truncate 10717 (N : Node_Id; Val : Boolean := True); -- Flag11 10718 10719 procedure Set_Formal_Type_Definition 10720 (N : Node_Id; Val : Node_Id); -- Node3 10721 10722 procedure Set_Forwards_OK 10723 (N : Node_Id; Val : Boolean := True); -- Flag5 10724 10725 procedure Set_From_Aspect_Specification 10726 (N : Node_Id; Val : Boolean := True); -- Flag13 10727 10728 procedure Set_From_At_End 10729 (N : Node_Id; Val : Boolean := True); -- Flag4 10730 10731 procedure Set_From_At_Mod 10732 (N : Node_Id; Val : Boolean := True); -- Flag4 10733 10734 procedure Set_From_Conditional_Expression 10735 (N : Node_Id; Val : Boolean := True); -- Flag1 10736 10737 procedure Set_From_Default 10738 (N : Node_Id; Val : Boolean := True); -- Flag6 10739 10740 procedure Set_Generalized_Indexing 10741 (N : Node_Id; Val : Node_Id); -- Node4 10742 10743 procedure Set_Generic_Associations 10744 (N : Node_Id; Val : List_Id); -- List3 10745 10746 procedure Set_Generic_Formal_Declarations 10747 (N : Node_Id; Val : List_Id); -- List2 10748 10749 procedure Set_Generic_Parent 10750 (N : Node_Id; Val : Node_Id); -- Node5 10751 10752 procedure Set_Generic_Parent_Type 10753 (N : Node_Id; Val : Node_Id); -- Node4 10754 10755 procedure Set_Handled_Statement_Sequence 10756 (N : Node_Id; Val : Node_Id); -- Node4 10757 10758 procedure Set_Handler_List_Entry 10759 (N : Node_Id; Val : Node_Id); -- Node2 10760 10761 procedure Set_Has_Created_Identifier 10762 (N : Node_Id; Val : Boolean := True); -- Flag15 10763 10764 procedure Set_Has_Dereference_Action 10765 (N : Node_Id; Val : Boolean := True); -- Flag13 10766 10767 procedure Set_Has_Dynamic_Length_Check 10768 (N : Node_Id; Val : Boolean := True); -- Flag10 10769 10770 procedure Set_Has_Dynamic_Range_Check 10771 (N : Node_Id; Val : Boolean := True); -- Flag12 10772 10773 procedure Set_Has_Init_Expression 10774 (N : Node_Id; Val : Boolean := True); -- Flag14 10775 10776 procedure Set_Has_Local_Raise 10777 (N : Node_Id; Val : Boolean := True); -- Flag8 10778 10779 procedure Set_Has_No_Elaboration_Code 10780 (N : Node_Id; Val : Boolean := True); -- Flag17 10781 10782 procedure Set_Has_Pragma_Suppress_All 10783 (N : Node_Id; Val : Boolean := True); -- Flag14 10784 10785 procedure Set_Has_Private_View 10786 (N : Node_Id; Val : Boolean := True); -- Flag11 10787 10788 procedure Set_Has_Relative_Deadline_Pragma 10789 (N : Node_Id; Val : Boolean := True); -- Flag9 10790 10791 procedure Set_Has_Self_Reference 10792 (N : Node_Id; Val : Boolean := True); -- Flag13 10793 10794 procedure Set_Has_SP_Choice 10795 (N : Node_Id; Val : Boolean := True); -- Flag15 10796 10797 procedure Set_Has_Storage_Size_Pragma 10798 (N : Node_Id; Val : Boolean := True); -- Flag5 10799 10800 procedure Set_Has_Target_Names 10801 (N : Node_Id; Val : Boolean := True); -- Flag8 10802 10803 procedure Set_Has_Wide_Character 10804 (N : Node_Id; Val : Boolean := True); -- Flag11 10805 10806 procedure Set_Has_Wide_Wide_Character 10807 (N : Node_Id; Val : Boolean := True); -- Flag13 10808 10809 procedure Set_Header_Size_Added 10810 (N : Node_Id; Val : Boolean := True); -- Flag11 10811 10812 procedure Set_Hidden_By_Use_Clause 10813 (N : Node_Id; Val : Elist_Id); -- Elist5 10814 10815 procedure Set_High_Bound 10816 (N : Node_Id; Val : Node_Id); -- Node2 10817 10818 procedure Set_Identifier 10819 (N : Node_Id; Val : Node_Id); -- Node1 10820 10821 procedure Set_Interface_List 10822 (N : Node_Id; Val : List_Id); -- List2 10823 10824 procedure Set_Interface_Present 10825 (N : Node_Id; Val : Boolean := True); -- Flag16 10826 10827 procedure Set_Implicit_With 10828 (N : Node_Id; Val : Boolean := True); -- Flag16 10829 10830 procedure Set_Import_Interface_Present 10831 (N : Node_Id; Val : Boolean := True); -- Flag16 10832 10833 procedure Set_In_Present 10834 (N : Node_Id; Val : Boolean := True); -- Flag15 10835 10836 procedure Set_Includes_Infinities 10837 (N : Node_Id; Val : Boolean := True); -- Flag11 10838 10839 procedure Set_Incomplete_View 10840 (N : Node_Id; Val : Node_Id); -- Node2 10841 10842 procedure Set_Inherited_Discriminant 10843 (N : Node_Id; Val : Boolean := True); -- Flag13 10844 10845 procedure Set_Instance_Spec 10846 (N : Node_Id; Val : Node_Id); -- Node5 10847 10848 procedure Set_Intval 10849 (N : Node_Id; Val : Uint); -- Uint3 10850 10851 procedure Set_Is_Abort_Block 10852 (N : Node_Id; Val : Boolean := True); -- Flag4 10853 10854 procedure Set_Is_Accessibility_Actual 10855 (N : Node_Id; Val : Boolean := True); -- Flag13 10856 10857 procedure Set_Is_Analyzed_Pragma 10858 (N : Node_Id; Val : Boolean := True); -- Flag5 10859 10860 procedure Set_Is_Asynchronous_Call_Block 10861 (N : Node_Id; Val : Boolean := True); -- Flag7 10862 10863 procedure Set_Is_Boolean_Aspect 10864 (N : Node_Id; Val : Boolean := True); -- Flag16 10865 10866 procedure Set_Is_Checked 10867 (N : Node_Id; Val : Boolean := True); -- Flag11 10868 10869 procedure Set_Is_Checked_Ghost_Pragma 10870 (N : Node_Id; Val : Boolean := True); -- Flag3 10871 10872 procedure Set_Is_Component_Left_Opnd 10873 (N : Node_Id; Val : Boolean := True); -- Flag13 10874 10875 procedure Set_Is_Component_Right_Opnd 10876 (N : Node_Id; Val : Boolean := True); -- Flag14 10877 10878 procedure Set_Is_Controlling_Actual 10879 (N : Node_Id; Val : Boolean := True); -- Flag16 10880 10881 procedure Set_Is_Declaration_Level_Node 10882 (N : Node_Id; Val : Boolean := True); -- Flag5 10883 10884 procedure Set_Is_Delayed_Aspect 10885 (N : Node_Id; Val : Boolean := True); -- Flag14 10886 10887 procedure Set_Is_Disabled 10888 (N : Node_Id; Val : Boolean := True); -- Flag15 10889 10890 procedure Set_Is_Dispatching_Call 10891 (N : Node_Id; Val : Boolean := True); -- Flag6 10892 10893 procedure Set_Is_Dynamic_Coextension 10894 (N : Node_Id; Val : Boolean := True); -- Flag18 10895 10896 procedure Set_Is_Effective_Use_Clause 10897 (N : Node_Id; Val : Boolean := True); -- Flag1 10898 10899 procedure Set_Is_Elaboration_Checks_OK_Node 10900 (N : Node_Id; Val : Boolean := True); -- Flag1 10901 10902 procedure Set_Is_Elaboration_Code 10903 (N : Node_Id; Val : Boolean := True); -- Flag9 10904 10905 procedure Set_Is_Elaboration_Warnings_OK_Node 10906 (N : Node_Id; Val : Boolean := True); -- Flag3 10907 10908 procedure Set_Is_Elsif 10909 (N : Node_Id; Val : Boolean := True); -- Flag13 10910 10911 procedure Set_Is_Entry_Barrier_Function 10912 (N : Node_Id; Val : Boolean := True); -- Flag8 10913 10914 procedure Set_Is_Expanded_Build_In_Place_Call 10915 (N : Node_Id; Val : Boolean := True); -- Flag11 10916 10917 procedure Set_Is_Expanded_Contract 10918 (N : Node_Id; Val : Boolean := True); -- Flag1 10919 10920 procedure Set_Is_Finalization_Wrapper 10921 (N : Node_Id; Val : Boolean := True); -- Flag9 10922 10923 procedure Set_Is_Folded_In_Parser 10924 (N : Node_Id; Val : Boolean := True); -- Flag4 10925 10926 procedure Set_Is_Generic_Contract_Pragma 10927 (N : Node_Id; Val : Boolean := True); -- Flag2 10928 10929 procedure Set_Is_Ignored 10930 (N : Node_Id; Val : Boolean := True); -- Flag9 10931 10932 procedure Set_Is_Ignored_Ghost_Pragma 10933 (N : Node_Id; Val : Boolean := True); -- Flag8 10934 10935 procedure Set_Is_In_Discriminant_Check 10936 (N : Node_Id; Val : Boolean := True); -- Flag11 10937 10938 procedure Set_Is_Inherited_Pragma 10939 (N : Node_Id; Val : Boolean := True); -- Flag4 10940 10941 procedure Set_Is_Initialization_Block 10942 (N : Node_Id; Val : Boolean := True); -- Flag1 10943 10944 procedure Set_Is_Known_Guaranteed_ABE 10945 (N : Node_Id; Val : Boolean := True); -- Flag18 10946 10947 procedure Set_Is_Machine_Number 10948 (N : Node_Id; Val : Boolean := True); -- Flag11 10949 10950 procedure Set_Is_Null_Loop 10951 (N : Node_Id; Val : Boolean := True); -- Flag16 10952 10953 procedure Set_Is_OpenAcc_Environment 10954 (N : Node_Id; Val : Boolean := True); -- Flag13 10955 10956 procedure Set_Is_OpenAcc_Loop 10957 (N : Node_Id; Val : Boolean := True); -- Flag14 10958 10959 procedure Set_Is_Overloaded 10960 (N : Node_Id; Val : Boolean := True); -- Flag5 10961 10962 procedure Set_Is_Power_Of_2_For_Shift 10963 (N : Node_Id; Val : Boolean := True); -- Flag13 10964 10965 procedure Set_Is_Prefixed_Call 10966 (N : Node_Id; Val : Boolean := True); -- Flag17 10967 10968 procedure Set_Is_Protected_Subprogram_Body 10969 (N : Node_Id; Val : Boolean := True); -- Flag7 10970 10971 procedure Set_Is_Qualified_Universal_Literal 10972 (N : Node_Id; Val : Boolean := True); -- Flag4 10973 10974 procedure Set_Is_Read 10975 (N : Node_Id; Val : Boolean := True); -- Flag1 10976 10977 procedure Set_Is_Source_Call 10978 (N : Node_Id; Val : Boolean := True); -- Flag4 10979 10980 procedure Set_Is_SPARK_Mode_On_Node 10981 (N : Node_Id; Val : Boolean := True); -- Flag2 10982 10983 procedure Set_Is_Static_Coextension 10984 (N : Node_Id; Val : Boolean := True); -- Flag14 10985 10986 procedure Set_Is_Static_Expression 10987 (N : Node_Id; Val : Boolean := True); -- Flag6 10988 10989 procedure Set_Is_Subprogram_Descriptor 10990 (N : Node_Id; Val : Boolean := True); -- Flag16 10991 10992 procedure Set_Is_Task_Allocation_Block 10993 (N : Node_Id; Val : Boolean := True); -- Flag6 10994 10995 procedure Set_Is_Task_Body_Procedure 10996 (N : Node_Id; Val : Boolean := True); -- Flag1 10997 10998 procedure Set_Is_Task_Master 10999 (N : Node_Id; Val : Boolean := True); -- Flag5 11000 11001 procedure Set_Is_Write 11002 (N : Node_Id; Val : Boolean := True); -- Flag2 11003 11004 procedure Set_Iteration_Scheme 11005 (N : Node_Id; Val : Node_Id); -- Node2 11006 11007 procedure Set_Iterator_Specification 11008 (N : Node_Id; Val : Node_Id); -- Node2 11009 11010 procedure Set_Itype 11011 (N : Node_Id; Val : Entity_Id); -- Node1 11012 11013 procedure Set_Kill_Range_Check 11014 (N : Node_Id; Val : Boolean := True); -- Flag11 11015 11016 procedure Set_Last_Bit 11017 (N : Node_Id; Val : Node_Id); -- Node4 11018 11019 procedure Set_Last_Name 11020 (N : Node_Id; Val : Boolean := True); -- Flag6 11021 11022 procedure Set_Library_Unit 11023 (N : Node_Id; Val : Node_Id); -- Node4 11024 11025 procedure Set_Label_Construct 11026 (N : Node_Id; Val : Node_Id); -- Node2 11027 11028 procedure Set_Left_Opnd 11029 (N : Node_Id; Val : Node_Id); -- Node2 11030 11031 procedure Set_Limited_View_Installed 11032 (N : Node_Id; Val : Boolean := True); -- Flag18 11033 11034 procedure Set_Limited_Present 11035 (N : Node_Id; Val : Boolean := True); -- Flag17 11036 11037 procedure Set_Literals 11038 (N : Node_Id; Val : List_Id); -- List1 11039 11040 procedure Set_Local_Raise_Not_OK 11041 (N : Node_Id; Val : Boolean := True); -- Flag7 11042 11043 procedure Set_Local_Raise_Statements 11044 (N : Node_Id; Val : Elist_Id); -- Elist1 11045 11046 procedure Set_Loop_Actions 11047 (N : Node_Id; Val : List_Id); -- List2 11048 11049 procedure Set_Loop_Parameter_Specification 11050 (N : Node_Id; Val : Node_Id); -- Node4 11051 11052 procedure Set_Low_Bound 11053 (N : Node_Id; Val : Node_Id); -- Node1 11054 11055 procedure Set_Mod_Clause 11056 (N : Node_Id; Val : Node_Id); -- Node2 11057 11058 procedure Set_More_Ids 11059 (N : Node_Id; Val : Boolean := True); -- Flag5 11060 11061 procedure Set_Must_Be_Byte_Aligned 11062 (N : Node_Id; Val : Boolean := True); -- Flag14 11063 11064 procedure Set_Must_Not_Freeze 11065 (N : Node_Id; Val : Boolean := True); -- Flag8 11066 11067 procedure Set_Must_Not_Override 11068 (N : Node_Id; Val : Boolean := True); -- Flag15 11069 11070 procedure Set_Must_Override 11071 (N : Node_Id; Val : Boolean := True); -- Flag14 11072 11073 procedure Set_Name 11074 (N : Node_Id; Val : Node_Id); -- Node2 11075 11076 procedure Set_Names 11077 (N : Node_Id; Val : List_Id); -- List2 11078 11079 procedure Set_Next_Entity 11080 (N : Node_Id; Val : Node_Id); -- Node2 11081 11082 procedure Set_Next_Exit_Statement 11083 (N : Node_Id; Val : Node_Id); -- Node3 11084 11085 procedure Set_Next_Implicit_With 11086 (N : Node_Id; Val : Node_Id); -- Node3 11087 11088 procedure Set_Next_Named_Actual 11089 (N : Node_Id; Val : Node_Id); -- Node4 11090 11091 procedure Set_Next_Pragma 11092 (N : Node_Id; Val : Node_Id); -- Node1 11093 11094 procedure Set_Next_Rep_Item 11095 (N : Node_Id; Val : Node_Id); -- Node5 11096 11097 procedure Set_Next_Use_Clause 11098 (N : Node_Id; Val : Node_Id); -- Node3 11099 11100 procedure Set_No_Ctrl_Actions 11101 (N : Node_Id; Val : Boolean := True); -- Flag7 11102 11103 procedure Set_No_Elaboration_Check 11104 (N : Node_Id; Val : Boolean := True); -- Flag4 11105 11106 procedure Set_No_Entities_Ref_In_Spec 11107 (N : Node_Id; Val : Boolean := True); -- Flag8 11108 11109 procedure Set_No_Initialization 11110 (N : Node_Id; Val : Boolean := True); -- Flag13 11111 11112 procedure Set_No_Minimize_Eliminate 11113 (N : Node_Id; Val : Boolean := True); -- Flag17 11114 11115 procedure Set_No_Side_Effect_Removal 11116 (N : Node_Id; Val : Boolean := True); -- Flag17 11117 11118 procedure Set_No_Truncation 11119 (N : Node_Id; Val : Boolean := True); -- Flag17 11120 11121 procedure Set_Null_Excluding_Subtype 11122 (N : Node_Id; Val : Boolean := True); -- Flag16 11123 11124 procedure Set_Null_Exclusion_Present 11125 (N : Node_Id; Val : Boolean := True); -- Flag11 11126 11127 procedure Set_Null_Exclusion_In_Return_Present 11128 (N : Node_Id; Val : Boolean := True); -- Flag14 11129 11130 procedure Set_Null_Present 11131 (N : Node_Id; Val : Boolean := True); -- Flag13 11132 11133 procedure Set_Null_Record_Present 11134 (N : Node_Id; Val : Boolean := True); -- Flag17 11135 11136 procedure Set_Null_Statement 11137 (N : Node_Id; Val : Node_Id); -- Node2 11138 11139 procedure Set_Object_Definition 11140 (N : Node_Id; Val : Node_Id); -- Node4 11141 11142 procedure Set_Of_Present 11143 (N : Node_Id; Val : Boolean := True); -- Flag16 11144 11145 procedure Set_Original_Discriminant 11146 (N : Node_Id; Val : Node_Id); -- Node2 11147 11148 procedure Set_Original_Entity 11149 (N : Node_Id; Val : Entity_Id); -- Node2 11150 11151 procedure Set_Others_Discrete_Choices 11152 (N : Node_Id; Val : List_Id); -- List1 11153 11154 procedure Set_Out_Present 11155 (N : Node_Id; Val : Boolean := True); -- Flag17 11156 11157 procedure Set_Parameter_Associations 11158 (N : Node_Id; Val : List_Id); -- List3 11159 11160 procedure Set_Parameter_Specifications 11161 (N : Node_Id; Val : List_Id); -- List3 11162 11163 procedure Set_Parameter_Type 11164 (N : Node_Id; Val : Node_Id); -- Node2 11165 11166 procedure Set_Parent_Spec 11167 (N : Node_Id; Val : Node_Id); -- Node4 11168 11169 procedure Set_Parent_With 11170 (N : Node_Id; Val : Boolean := True); -- Flag1 11171 11172 procedure Set_Position 11173 (N : Node_Id; Val : Node_Id); -- Node2 11174 11175 procedure Set_Pragma_Argument_Associations 11176 (N : Node_Id; Val : List_Id); -- List2 11177 11178 procedure Set_Pragma_Identifier 11179 (N : Node_Id; Val : Node_Id); -- Node4 11180 11181 procedure Set_Pragmas_After 11182 (N : Node_Id; Val : List_Id); -- List5 11183 11184 procedure Set_Pragmas_Before 11185 (N : Node_Id; Val : List_Id); -- List4 11186 11187 procedure Set_Pre_Post_Conditions 11188 (N : Node_Id; Val : Node_Id); -- Node1 11189 11190 procedure Set_Prefix 11191 (N : Node_Id; Val : Node_Id); -- Node3 11192 11193 procedure Set_Premature_Use 11194 (N : Node_Id; Val : Node_Id); -- Node5 11195 11196 procedure Set_Present_Expr 11197 (N : Node_Id; Val : Uint); -- Uint3 11198 11199 procedure Set_Prev_Ids 11200 (N : Node_Id; Val : Boolean := True); -- Flag6 11201 11202 procedure Set_Prev_Use_Clause 11203 (N : Node_Id; Val : Node_Id); -- Node1 11204 11205 procedure Set_Print_In_Hex 11206 (N : Node_Id; Val : Boolean := True); -- Flag13 11207 11208 procedure Set_Private_Declarations 11209 (N : Node_Id; Val : List_Id); -- List3 11210 11211 procedure Set_Private_Present 11212 (N : Node_Id; Val : Boolean := True); -- Flag15 11213 11214 procedure Set_Procedure_To_Call 11215 (N : Node_Id; Val : Node_Id); -- Node2 11216 11217 procedure Set_Proper_Body 11218 (N : Node_Id; Val : Node_Id); -- Node1 11219 11220 procedure Set_Protected_Definition 11221 (N : Node_Id; Val : Node_Id); -- Node3 11222 11223 procedure Set_Protected_Present 11224 (N : Node_Id; Val : Boolean := True); -- Flag6 11225 11226 procedure Set_Raises_Constraint_Error 11227 (N : Node_Id; Val : Boolean := True); -- Flag7 11228 11229 procedure Set_Range_Constraint 11230 (N : Node_Id; Val : Node_Id); -- Node4 11231 11232 procedure Set_Range_Expression 11233 (N : Node_Id; Val : Node_Id); -- Node4 11234 11235 procedure Set_Real_Range_Specification 11236 (N : Node_Id; Val : Node_Id); -- Node4 11237 11238 procedure Set_Realval 11239 (N : Node_Id; Val : Ureal); -- Ureal3 11240 11241 procedure Set_Reason 11242 (N : Node_Id; Val : Uint); -- Uint3 11243 11244 procedure Set_Record_Extension_Part 11245 (N : Node_Id; Val : Node_Id); -- Node3 11246 11247 procedure Set_Redundant_Use 11248 (N : Node_Id; Val : Boolean := True); -- Flag13 11249 11250 procedure Set_Renaming_Exception 11251 (N : Node_Id; Val : Node_Id); -- Node2 11252 11253 procedure Set_Result_Definition 11254 (N : Node_Id; Val : Node_Id); -- Node4 11255 11256 procedure Set_Return_Object_Declarations 11257 (N : Node_Id; Val : List_Id); -- List3 11258 11259 procedure Set_Return_Statement_Entity 11260 (N : Node_Id; Val : Node_Id); -- Node5 11261 11262 procedure Set_Reverse_Present 11263 (N : Node_Id; Val : Boolean := True); -- Flag15 11264 11265 procedure Set_Right_Opnd 11266 (N : Node_Id; Val : Node_Id); -- Node3 11267 11268 procedure Set_Rounded_Result 11269 (N : Node_Id; Val : Boolean := True); -- Flag18 11270 11271 procedure Set_SCIL_Controlling_Tag 11272 (N : Node_Id; Val : Node_Id); -- Node5 11273 11274 procedure Set_SCIL_Entity 11275 (N : Node_Id; Val : Node_Id); -- Node4 11276 11277 procedure Set_SCIL_Tag_Value 11278 (N : Node_Id; Val : Node_Id); -- Node5 11279 11280 procedure Set_SCIL_Target_Prim 11281 (N : Node_Id; Val : Node_Id); -- Node2 11282 11283 procedure Set_Scope 11284 (N : Node_Id; Val : Node_Id); -- Node3 11285 11286 procedure Set_Select_Alternatives 11287 (N : Node_Id; Val : List_Id); -- List1 11288 11289 procedure Set_Selector_Name 11290 (N : Node_Id; Val : Node_Id); -- Node2 11291 11292 procedure Set_Selector_Names 11293 (N : Node_Id; Val : List_Id); -- List1 11294 11295 procedure Set_Shift_Count_OK 11296 (N : Node_Id; Val : Boolean := True); -- Flag4 11297 11298 procedure Set_Source_Type 11299 (N : Node_Id; Val : Entity_Id); -- Node1 11300 11301 procedure Set_Specification 11302 (N : Node_Id; Val : Node_Id); -- Node1 11303 11304 procedure Set_Split_PPC 11305 (N : Node_Id; Val : Boolean); -- Flag17 11306 11307 procedure Set_Statements 11308 (N : Node_Id; Val : List_Id); -- List3 11309 11310 procedure Set_Storage_Pool 11311 (N : Node_Id; Val : Node_Id); -- Node1 11312 11313 procedure Set_Subpool_Handle_Name 11314 (N : Node_Id; Val : Node_Id); -- Node4 11315 11316 procedure Set_Strval 11317 (N : Node_Id; Val : String_Id); -- Str3 11318 11319 procedure Set_Subtype_Indication 11320 (N : Node_Id; Val : Node_Id); -- Node5 11321 11322 procedure Set_Subtype_Mark 11323 (N : Node_Id; Val : Node_Id); -- Node4 11324 11325 procedure Set_Subtype_Marks 11326 (N : Node_Id; Val : List_Id); -- List2 11327 11328 procedure Set_Suppress_Assignment_Checks 11329 (N : Node_Id; Val : Boolean := True); -- Flag18 11330 11331 procedure Set_Suppress_Loop_Warnings 11332 (N : Node_Id; Val : Boolean := True); -- Flag17 11333 11334 procedure Set_Synchronized_Present 11335 (N : Node_Id; Val : Boolean := True); -- Flag7 11336 11337 procedure Set_Tagged_Present 11338 (N : Node_Id; Val : Boolean := True); -- Flag15 11339 11340 procedure Set_Target 11341 (N : Node_Id; Val : Entity_Id); -- Node1 11342 11343 procedure Set_Target_Type 11344 (N : Node_Id; Val : Entity_Id); -- Node2 11345 11346 procedure Set_Task_Definition 11347 (N : Node_Id; Val : Node_Id); -- Node3 11348 11349 procedure Set_Task_Present 11350 (N : Node_Id; Val : Boolean := True); -- Flag5 11351 11352 procedure Set_Then_Actions 11353 (N : Node_Id; Val : List_Id); -- List2 11354 11355 procedure Set_Then_Statements 11356 (N : Node_Id; Val : List_Id); -- List2 11357 11358 procedure Set_Treat_Fixed_As_Integer 11359 (N : Node_Id; Val : Boolean := True); -- Flag14 11360 11361 procedure Set_Triggering_Alternative 11362 (N : Node_Id; Val : Node_Id); -- Node1 11363 11364 procedure Set_Triggering_Statement 11365 (N : Node_Id; Val : Node_Id); -- Node1 11366 11367 procedure Set_TSS_Elist 11368 (N : Node_Id; Val : Elist_Id); -- Elist3 11369 11370 procedure Set_Type_Definition 11371 (N : Node_Id; Val : Node_Id); -- Node3 11372 11373 procedure Set_Uneval_Old_Accept 11374 (N : Node_Id; Val : Boolean := True); -- Flag7 11375 11376 procedure Set_Uneval_Old_Warn 11377 (N : Node_Id; Val : Boolean := True); -- Flag18 11378 11379 procedure Set_Unit 11380 (N : Node_Id; Val : Node_Id); -- Node2 11381 11382 procedure Set_Unknown_Discriminants_Present 11383 (N : Node_Id; Val : Boolean := True); -- Flag13 11384 11385 procedure Set_Unreferenced_In_Spec 11386 (N : Node_Id; Val : Boolean := True); -- Flag7 11387 11388 procedure Set_Variant_Part 11389 (N : Node_Id; Val : Node_Id); -- Node4 11390 11391 procedure Set_Variants 11392 (N : Node_Id; Val : List_Id); -- List1 11393 11394 procedure Set_Visible_Declarations 11395 (N : Node_Id; Val : List_Id); -- List2 11396 11397 procedure Set_Uninitialized_Variable 11398 (N : Node_Id; Val : Node_Id); -- Node3 11399 11400 procedure Set_Used_Operations 11401 (N : Node_Id; Val : Elist_Id); -- Elist2 11402 11403 procedure Set_Was_Attribute_Reference 11404 (N : Node_Id; Val : Boolean := True); -- Flag2 11405 11406 procedure Set_Was_Expression_Function 11407 (N : Node_Id; Val : Boolean := True); -- Flag18 11408 11409 procedure Set_Was_Originally_Stub 11410 (N : Node_Id; Val : Boolean := True); -- Flag13 11411 11412 ------------------------- 11413 -- Iterator Procedures -- 11414 ------------------------- 11415 11416 -- The call to Next_xxx (N) is equivalent to N := Next_xxx (N) 11417 11418 procedure Next_Entity (N : in out Node_Id); 11419 procedure Next_Named_Actual (N : in out Node_Id); 11420 procedure Next_Rep_Item (N : in out Node_Id); 11421 procedure Next_Use_Clause (N : in out Node_Id); 11422 11423 ------------------------------------------- 11424 -- Miscellaneous Tree Access Subprograms -- 11425 ------------------------------------------- 11426 11427 function End_Location (N : Node_Id) return Source_Ptr; 11428 -- N is an N_If_Statement or N_Case_Statement node, and this function 11429 -- returns the location of the IF token in the END IF sequence by 11430 -- translating the value of the End_Span field. 11431 11432 procedure Set_End_Location (N : Node_Id; S : Source_Ptr); 11433 -- N is an N_If_Statement or N_Case_Statement node. This procedure sets 11434 -- the End_Span field to correspond to the given value S. In other words, 11435 -- End_Span is set to the difference between S and Sloc (N), the starting 11436 -- location. 11437 11438 function Get_Pragma_Arg (Arg : Node_Id) return Node_Id; 11439 -- Given an argument to a pragma Arg, this function returns the expression 11440 -- for the argument. This is Arg itself, or, in the case where Arg is a 11441 -- pragma argument association node, the expression from this node. 11442 11443 -------------------------------- 11444 -- Node_Kind Membership Tests -- 11445 -------------------------------- 11446 11447 -- The following functions allow a convenient notation for testing whether 11448 -- a Node_Kind value matches any one of a list of possible values. In each 11449 -- case True is returned if the given T argument is equal to any of the V 11450 -- arguments. Note that there is a similar set of functions defined in 11451 -- Atree where the first argument is a Node_Id whose Nkind field is tested. 11452 11453 function Nkind_In 11454 (T : Node_Kind; 11455 V1 : Node_Kind; 11456 V2 : Node_Kind) return Boolean; 11457 11458 function Nkind_In 11459 (T : Node_Kind; 11460 V1 : Node_Kind; 11461 V2 : Node_Kind; 11462 V3 : Node_Kind) return Boolean; 11463 11464 function Nkind_In 11465 (T : Node_Kind; 11466 V1 : Node_Kind; 11467 V2 : Node_Kind; 11468 V3 : Node_Kind; 11469 V4 : Node_Kind) return Boolean; 11470 11471 function Nkind_In 11472 (T : Node_Kind; 11473 V1 : Node_Kind; 11474 V2 : Node_Kind; 11475 V3 : Node_Kind; 11476 V4 : Node_Kind; 11477 V5 : Node_Kind) return Boolean; 11478 11479 function Nkind_In 11480 (T : Node_Kind; 11481 V1 : Node_Kind; 11482 V2 : Node_Kind; 11483 V3 : Node_Kind; 11484 V4 : Node_Kind; 11485 V5 : Node_Kind; 11486 V6 : Node_Kind) return Boolean; 11487 11488 function Nkind_In 11489 (T : Node_Kind; 11490 V1 : Node_Kind; 11491 V2 : Node_Kind; 11492 V3 : Node_Kind; 11493 V4 : Node_Kind; 11494 V5 : Node_Kind; 11495 V6 : Node_Kind; 11496 V7 : Node_Kind) return Boolean; 11497 11498 function Nkind_In 11499 (T : Node_Kind; 11500 V1 : Node_Kind; 11501 V2 : Node_Kind; 11502 V3 : Node_Kind; 11503 V4 : Node_Kind; 11504 V5 : Node_Kind; 11505 V6 : Node_Kind; 11506 V7 : Node_Kind; 11507 V8 : Node_Kind) return Boolean; 11508 11509 function Nkind_In 11510 (T : Node_Kind; 11511 V1 : Node_Kind; 11512 V2 : Node_Kind; 11513 V3 : Node_Kind; 11514 V4 : Node_Kind; 11515 V5 : Node_Kind; 11516 V6 : Node_Kind; 11517 V7 : Node_Kind; 11518 V8 : Node_Kind; 11519 V9 : Node_Kind) return Boolean; 11520 11521 function Nkind_In 11522 (T : Node_Kind; 11523 V1 : Node_Kind; 11524 V2 : Node_Kind; 11525 V3 : Node_Kind; 11526 V4 : Node_Kind; 11527 V5 : Node_Kind; 11528 V6 : Node_Kind; 11529 V7 : Node_Kind; 11530 V8 : Node_Kind; 11531 V9 : Node_Kind; 11532 V10 : Node_Kind) return Boolean; 11533 11534 function Nkind_In 11535 (T : Node_Kind; 11536 V1 : Node_Kind; 11537 V2 : Node_Kind; 11538 V3 : Node_Kind; 11539 V4 : Node_Kind; 11540 V5 : Node_Kind; 11541 V6 : Node_Kind; 11542 V7 : Node_Kind; 11543 V8 : Node_Kind; 11544 V9 : Node_Kind; 11545 V10 : Node_Kind; 11546 V11 : Node_Kind) return Boolean; 11547 11548 pragma Inline (Nkind_In); 11549 -- Inline all above functions 11550 11551 ----------------------- 11552 -- Utility Functions -- 11553 ----------------------- 11554 11555 procedure Map_Pragma_Name (From, To : Name_Id); 11556 -- Used in the implementation of pragma Rename_Pragma. Maps pragma name 11557 -- From to pragma name To, so From can be used as a synonym for To. 11558 11559 Too_Many_Pragma_Mappings : exception; 11560 -- Raised if Map_Pragma_Name is called too many times. We expect that few 11561 -- programs will use it at all, and those that do will use it approximately 11562 -- once or twice. 11563 11564 function Pragma_Name (N : Node_Id) return Name_Id; 11565 -- Obtain the name of pragma N from the Chars field of its identifier. If 11566 -- the pragma has been renamed using Rename_Pragma, this routine returns 11567 -- the name of the renaming. 11568 11569 function Pragma_Name_Unmapped (N : Node_Id) return Name_Id; 11570 -- Obtain the name of pragma N from the Chars field of its identifier. This 11571 -- form of name extraction does not take into account renamings performed 11572 -- by Rename_Pragma. 11573 11574 ----------------------------- 11575 -- Syntactic Parent Tables -- 11576 ----------------------------- 11577 11578 -- These tables show for each node, and for each of the five fields, 11579 -- whether the corresponding field is syntactic (True) or semantic (False). 11580 -- Unused entries are also set to False. 11581 11582 subtype Field_Num is Natural range 1 .. 5; 11583 11584 Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := ( 11585 11586 -- Following entries can be built automatically from the sinfo sources 11587 -- using the makeisf utility (currently this program is in spitbol). 11588 11589 N_Identifier => 11590 (1 => True, -- Chars (Name1) 11591 2 => False, -- Original_Discriminant (Node2-Sem) 11592 3 => False, -- unused 11593 4 => False, -- Entity (Node4-Sem) 11594 5 => False), -- Etype (Node5-Sem) 11595 11596 N_Integer_Literal => 11597 (1 => False, -- unused 11598 2 => False, -- Original_Entity (Node2-Sem) 11599 3 => True, -- Intval (Uint3) 11600 4 => False, -- unused 11601 5 => False), -- Etype (Node5-Sem) 11602 11603 N_Real_Literal => 11604 (1 => False, -- unused 11605 2 => False, -- Original_Entity (Node2-Sem) 11606 3 => True, -- Realval (Ureal3) 11607 4 => False, -- Corresponding_Integer_Value (Uint4-Sem) 11608 5 => False), -- Etype (Node5-Sem) 11609 11610 N_Character_Literal => 11611 (1 => True, -- Chars (Name1) 11612 2 => True, -- Char_Literal_Value (Uint2) 11613 3 => False, -- unused 11614 4 => False, -- Entity (Node4-Sem) 11615 5 => False), -- Etype (Node5-Sem) 11616 11617 N_String_Literal => 11618 (1 => False, -- unused 11619 2 => False, -- unused 11620 3 => True, -- Strval (Str3) 11621 4 => False, -- unused 11622 5 => False), -- Etype (Node5-Sem) 11623 11624 N_Pragma => 11625 (1 => False, -- Next_Pragma (Node1-Sem) 11626 2 => True, -- Pragma_Argument_Associations (List2) 11627 3 => False, -- Corresponding_Aspect (Node3-Sem) 11628 4 => True, -- Pragma_Identifier (Node4) 11629 5 => False), -- Next_Rep_Item (Node5-Sem) 11630 11631 N_Pragma_Argument_Association => 11632 (1 => True, -- Chars (Name1) 11633 2 => False, -- Expression_Copy (Node2-Sem) 11634 3 => True, -- Expression (Node3) 11635 4 => False, -- unused 11636 5 => False), -- unused 11637 11638 N_Defining_Identifier => 11639 (1 => True, -- Chars (Name1) 11640 2 => False, -- Next_Entity (Node2-Sem) 11641 3 => False, -- Scope (Node3-Sem) 11642 4 => False, -- unused 11643 5 => False), -- Etype (Node5-Sem) 11644 11645 N_Full_Type_Declaration => 11646 (1 => True, -- Defining_Identifier (Node1) 11647 2 => False, -- Incomplete_View (Node2-Sem) 11648 3 => True, -- Type_Definition (Node3) 11649 4 => True, -- Discriminant_Specifications (List4) 11650 5 => False), -- unused 11651 11652 N_Subtype_Declaration => 11653 (1 => True, -- Defining_Identifier (Node1) 11654 2 => False, -- unused 11655 3 => False, -- unused 11656 4 => False, -- Generic_Parent_Type (Node4-Sem) 11657 5 => True), -- Subtype_Indication (Node5) 11658 11659 N_Subtype_Indication => 11660 (1 => False, -- unused 11661 2 => False, -- unused 11662 3 => True, -- Constraint (Node3) 11663 4 => True, -- Subtype_Mark (Node4) 11664 5 => False), -- Etype (Node5-Sem) 11665 11666 N_Object_Declaration => 11667 (1 => True, -- Defining_Identifier (Node1) 11668 2 => False, -- Handler_List_Entry (Node2-Sem) 11669 3 => True, -- Expression (Node3) 11670 4 => True, -- Object_Definition (Node4) 11671 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 11672 11673 N_Number_Declaration => 11674 (1 => True, -- Defining_Identifier (Node1) 11675 2 => False, -- unused 11676 3 => True, -- Expression (Node3) 11677 4 => False, -- unused 11678 5 => False), -- unused 11679 11680 N_Derived_Type_Definition => 11681 (1 => False, -- unused 11682 2 => True, -- Interface_List (List2) 11683 3 => True, -- Record_Extension_Part (Node3) 11684 4 => False, -- unused 11685 5 => True), -- Subtype_Indication (Node5) 11686 11687 N_Range_Constraint => 11688 (1 => False, -- unused 11689 2 => False, -- unused 11690 3 => False, -- unused 11691 4 => True, -- Range_Expression (Node4) 11692 5 => False), -- unused 11693 11694 N_Range => 11695 (1 => True, -- Low_Bound (Node1) 11696 2 => True, -- High_Bound (Node2) 11697 3 => False, -- unused 11698 4 => False, -- unused 11699 5 => False), -- Etype (Node5-Sem) 11700 11701 N_Enumeration_Type_Definition => 11702 (1 => True, -- Literals (List1) 11703 2 => False, -- unused 11704 3 => False, -- unused 11705 4 => True, -- End_Label (Node4) 11706 5 => False), -- unused 11707 11708 N_Defining_Character_Literal => 11709 (1 => True, -- Chars (Name1) 11710 2 => False, -- Next_Entity (Node2-Sem) 11711 3 => False, -- Scope (Node3-Sem) 11712 4 => False, -- unused 11713 5 => False), -- Etype (Node5-Sem) 11714 11715 N_Signed_Integer_Type_Definition => 11716 (1 => True, -- Low_Bound (Node1) 11717 2 => True, -- High_Bound (Node2) 11718 3 => False, -- unused 11719 4 => False, -- unused 11720 5 => False), -- unused 11721 11722 N_Modular_Type_Definition => 11723 (1 => False, -- unused 11724 2 => False, -- unused 11725 3 => True, -- Expression (Node3) 11726 4 => False, -- unused 11727 5 => False), -- unused 11728 11729 N_Floating_Point_Definition => 11730 (1 => False, -- unused 11731 2 => True, -- Digits_Expression (Node2) 11732 3 => False, -- unused 11733 4 => True, -- Real_Range_Specification (Node4) 11734 5 => False), -- unused 11735 11736 N_Real_Range_Specification => 11737 (1 => True, -- Low_Bound (Node1) 11738 2 => True, -- High_Bound (Node2) 11739 3 => False, -- unused 11740 4 => False, -- unused 11741 5 => False), -- unused 11742 11743 N_Ordinary_Fixed_Point_Definition => 11744 (1 => False, -- unused 11745 2 => False, -- unused 11746 3 => True, -- Delta_Expression (Node3) 11747 4 => True, -- Real_Range_Specification (Node4) 11748 5 => False), -- unused 11749 11750 N_Decimal_Fixed_Point_Definition => 11751 (1 => False, -- unused 11752 2 => True, -- Digits_Expression (Node2) 11753 3 => True, -- Delta_Expression (Node3) 11754 4 => True, -- Real_Range_Specification (Node4) 11755 5 => False), -- unused 11756 11757 N_Digits_Constraint => 11758 (1 => False, -- unused 11759 2 => True, -- Digits_Expression (Node2) 11760 3 => False, -- unused 11761 4 => True, -- Range_Constraint (Node4) 11762 5 => False), -- unused 11763 11764 N_Unconstrained_Array_Definition => 11765 (1 => False, -- unused 11766 2 => True, -- Subtype_Marks (List2) 11767 3 => False, -- unused 11768 4 => True, -- Component_Definition (Node4) 11769 5 => False), -- unused 11770 11771 N_Constrained_Array_Definition => 11772 (1 => False, -- unused 11773 2 => True, -- Discrete_Subtype_Definitions (List2) 11774 3 => False, -- unused 11775 4 => True, -- Component_Definition (Node4) 11776 5 => False), -- unused 11777 11778 N_Component_Definition => 11779 (1 => False, -- unused 11780 2 => False, -- unused 11781 3 => True, -- Access_Definition (Node3) 11782 4 => False, -- unused 11783 5 => True), -- Subtype_Indication (Node5) 11784 11785 N_Discriminant_Specification => 11786 (1 => True, -- Defining_Identifier (Node1) 11787 2 => False, -- unused 11788 3 => True, -- Expression (Node3) 11789 4 => False, -- unused 11790 5 => True), -- Discriminant_Type (Node5) 11791 11792 N_Index_Or_Discriminant_Constraint => 11793 (1 => True, -- Constraints (List1) 11794 2 => False, -- unused 11795 3 => False, -- unused 11796 4 => False, -- unused 11797 5 => False), -- unused 11798 11799 N_Discriminant_Association => 11800 (1 => True, -- Selector_Names (List1) 11801 2 => False, -- unused 11802 3 => True, -- Expression (Node3) 11803 4 => False, -- unused 11804 5 => False), -- unused 11805 11806 N_Record_Definition => 11807 (1 => True, -- Component_List (Node1) 11808 2 => True, -- Interface_List (List2) 11809 3 => False, -- unused 11810 4 => True, -- End_Label (Node4) 11811 5 => False), -- unused 11812 11813 N_Component_List => 11814 (1 => False, -- unused 11815 2 => False, -- unused 11816 3 => True, -- Component_Items (List3) 11817 4 => True, -- Variant_Part (Node4) 11818 5 => False), -- unused 11819 11820 N_Component_Declaration => 11821 (1 => True, -- Defining_Identifier (Node1) 11822 2 => False, -- unused 11823 3 => True, -- Expression (Node3) 11824 4 => True, -- Component_Definition (Node4) 11825 5 => False), -- unused 11826 11827 N_Variant_Part => 11828 (1 => True, -- Variants (List1) 11829 2 => True, -- Name (Node2) 11830 3 => False, -- unused 11831 4 => False, -- unused 11832 5 => False), -- unused 11833 11834 N_Variant => 11835 (1 => True, -- Component_List (Node1) 11836 2 => False, -- Enclosing_Variant (Node2-Sem) 11837 3 => False, -- Present_Expr (Uint3-Sem) 11838 4 => True, -- Discrete_Choices (List4) 11839 5 => False), -- Dcheck_Function (Node5-Sem) 11840 11841 N_Others_Choice => 11842 (1 => False, -- Others_Discrete_Choices (List1-Sem) 11843 2 => False, -- unused 11844 3 => False, -- unused 11845 4 => False, -- unused 11846 5 => False), -- unused 11847 11848 N_Access_To_Object_Definition => 11849 (1 => False, -- unused 11850 2 => False, -- unused 11851 3 => False, -- unused 11852 4 => False, -- unused 11853 5 => True), -- Subtype_Indication (Node5) 11854 11855 N_Access_Function_Definition => 11856 (1 => False, -- unused 11857 2 => False, -- unused 11858 3 => True, -- Parameter_Specifications (List3) 11859 4 => True, -- Result_Definition (Node4) 11860 5 => False), -- unused 11861 11862 N_Access_Procedure_Definition => 11863 (1 => False, -- unused 11864 2 => False, -- unused 11865 3 => True, -- Parameter_Specifications (List3) 11866 4 => False, -- unused 11867 5 => False), -- unused 11868 11869 N_Access_Definition => 11870 (1 => False, -- unused 11871 2 => False, -- unused 11872 3 => True, -- Access_To_Subprogram_Definition (Node3) 11873 4 => True, -- Subtype_Mark (Node4) 11874 5 => False), -- unused 11875 11876 N_Incomplete_Type_Declaration => 11877 (1 => True, -- Defining_Identifier (Node1) 11878 2 => False, -- unused 11879 3 => False, -- unused 11880 4 => True, -- Discriminant_Specifications (List4) 11881 5 => False), -- Premature_Use 11882 11883 N_Explicit_Dereference => 11884 (1 => False, -- unused 11885 2 => False, -- unused 11886 3 => True, -- Prefix (Node3) 11887 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 11888 5 => False), -- Etype (Node5-Sem) 11889 11890 N_Indexed_Component => 11891 (1 => True, -- Expressions (List1) 11892 2 => False, -- unused 11893 3 => True, -- Prefix (Node3) 11894 4 => False, -- Generalized_Indexing (Node4-Sem) 11895 5 => False), -- Etype (Node5-Sem) 11896 11897 N_Slice => 11898 (1 => False, -- unused 11899 2 => False, -- unused 11900 3 => True, -- Prefix (Node3) 11901 4 => True, -- Discrete_Range (Node4) 11902 5 => False), -- Etype (Node5-Sem) 11903 11904 N_Selected_Component => 11905 (1 => False, -- unused 11906 2 => True, -- Selector_Name (Node2) 11907 3 => True, -- Prefix (Node3) 11908 4 => False, -- unused 11909 5 => False), -- Etype (Node5-Sem) 11910 11911 N_Attribute_Reference => 11912 (1 => True, -- Expressions (List1) 11913 2 => True, -- Attribute_Name (Name2) 11914 3 => True, -- Prefix (Node3) 11915 4 => False, -- Entity (Node4-Sem) 11916 5 => False), -- Etype (Node5-Sem) 11917 11918 N_Aggregate => 11919 (1 => True, -- Expressions (List1) 11920 2 => True, -- Component_Associations (List2) 11921 3 => False, -- Aggregate_Bounds (Node3-Sem) 11922 4 => False, -- unused 11923 5 => False), -- Etype (Node5-Sem) 11924 11925 N_Component_Association => 11926 (1 => True, -- Choices (List1) 11927 2 => False, -- Loop_Actions (List2-Sem) 11928 3 => True, -- Expression (Node3) 11929 4 => False, -- unused 11930 5 => False), -- unused 11931 11932 N_Iterated_Component_Association => 11933 (1 => True, -- Defining_Identifier (Node1) 11934 2 => False, -- unused 11935 3 => True, -- Expression (Node3) 11936 4 => True, -- Discrete_Choices (List4) 11937 5 => False), -- unused 11938 11939 N_Delta_Aggregate => 11940 (1 => False, -- Expressions (List1-Sem) 11941 2 => True, -- Component_Associations (List2) 11942 3 => True, -- Expression (Node3) 11943 4 => False, -- Unused 11944 5 => False), -- Etype (Node5-Sem) 11945 11946 N_Extension_Aggregate => 11947 (1 => True, -- Expressions (List1) 11948 2 => True, -- Component_Associations (List2) 11949 3 => True, -- Ancestor_Part (Node3) 11950 4 => False, -- unused 11951 5 => False), -- Etype (Node5-Sem) 11952 11953 N_Null => 11954 (1 => False, -- unused 11955 2 => False, -- unused 11956 3 => False, -- unused 11957 4 => False, -- unused 11958 5 => False), -- Etype (Node5-Sem) 11959 11960 N_And_Then => 11961 (1 => False, -- Actions (List1-Sem) 11962 2 => True, -- Left_Opnd (Node2) 11963 3 => True, -- Right_Opnd (Node3) 11964 4 => False, -- unused 11965 5 => False), -- Etype (Node5-Sem) 11966 11967 N_Or_Else => 11968 (1 => False, -- Actions (List1-Sem) 11969 2 => True, -- Left_Opnd (Node2) 11970 3 => True, -- Right_Opnd (Node3) 11971 4 => False, -- unused 11972 5 => False), -- Etype (Node5-Sem) 11973 11974 N_In => 11975 (1 => False, -- unused 11976 2 => True, -- Left_Opnd (Node2) 11977 3 => True, -- Right_Opnd (Node3) 11978 4 => True, -- Alternatives (List4) 11979 5 => False), -- Etype (Node5-Sem) 11980 11981 N_Not_In => 11982 (1 => False, -- unused 11983 2 => True, -- Left_Opnd (Node2) 11984 3 => True, -- Right_Opnd (Node3) 11985 4 => True, -- Alternatives (List4) 11986 5 => False), -- Etype (Node5-Sem) 11987 11988 N_Op_And => 11989 (1 => True, -- Chars (Name1) 11990 2 => True, -- Left_Opnd (Node2) 11991 3 => True, -- Right_Opnd (Node3) 11992 4 => False, -- Entity (Node4-Sem) 11993 5 => False), -- Etype (Node5-Sem) 11994 11995 N_Op_Or => 11996 (1 => True, -- Chars (Name1) 11997 2 => True, -- Left_Opnd (Node2) 11998 3 => True, -- Right_Opnd (Node3) 11999 4 => False, -- Entity (Node4-Sem) 12000 5 => False), -- Etype (Node5-Sem) 12001 12002 N_Op_Xor => 12003 (1 => True, -- Chars (Name1) 12004 2 => True, -- Left_Opnd (Node2) 12005 3 => True, -- Right_Opnd (Node3) 12006 4 => False, -- Entity (Node4-Sem) 12007 5 => False), -- Etype (Node5-Sem) 12008 12009 N_Op_Eq => 12010 (1 => True, -- Chars (Name1) 12011 2 => True, -- Left_Opnd (Node2) 12012 3 => True, -- Right_Opnd (Node3) 12013 4 => False, -- Entity (Node4-Sem) 12014 5 => False), -- Etype (Node5-Sem) 12015 12016 N_Op_Ne => 12017 (1 => True, -- Chars (Name1) 12018 2 => True, -- Left_Opnd (Node2) 12019 3 => True, -- Right_Opnd (Node3) 12020 4 => False, -- Entity (Node4-Sem) 12021 5 => False), -- Etype (Node5-Sem) 12022 12023 N_Op_Lt => 12024 (1 => True, -- Chars (Name1) 12025 2 => True, -- Left_Opnd (Node2) 12026 3 => True, -- Right_Opnd (Node3) 12027 4 => False, -- Entity (Node4-Sem) 12028 5 => False), -- Etype (Node5-Sem) 12029 12030 N_Op_Le => 12031 (1 => True, -- Chars (Name1) 12032 2 => True, -- Left_Opnd (Node2) 12033 3 => True, -- Right_Opnd (Node3) 12034 4 => False, -- Entity (Node4-Sem) 12035 5 => False), -- Etype (Node5-Sem) 12036 12037 N_Op_Gt => 12038 (1 => True, -- Chars (Name1) 12039 2 => True, -- Left_Opnd (Node2) 12040 3 => True, -- Right_Opnd (Node3) 12041 4 => False, -- Entity (Node4-Sem) 12042 5 => False), -- Etype (Node5-Sem) 12043 12044 N_Op_Ge => 12045 (1 => True, -- Chars (Name1) 12046 2 => True, -- Left_Opnd (Node2) 12047 3 => True, -- Right_Opnd (Node3) 12048 4 => False, -- Entity (Node4-Sem) 12049 5 => False), -- Etype (Node5-Sem) 12050 12051 N_Op_Add => 12052 (1 => True, -- Chars (Name1) 12053 2 => True, -- Left_Opnd (Node2) 12054 3 => True, -- Right_Opnd (Node3) 12055 4 => False, -- Entity (Node4-Sem) 12056 5 => False), -- Etype (Node5-Sem) 12057 12058 N_Op_Subtract => 12059 (1 => True, -- Chars (Name1) 12060 2 => True, -- Left_Opnd (Node2) 12061 3 => True, -- Right_Opnd (Node3) 12062 4 => False, -- Entity (Node4-Sem) 12063 5 => False), -- Etype (Node5-Sem) 12064 12065 N_Op_Concat => 12066 (1 => True, -- Chars (Name1) 12067 2 => True, -- Left_Opnd (Node2) 12068 3 => True, -- Right_Opnd (Node3) 12069 4 => False, -- Entity (Node4-Sem) 12070 5 => False), -- Etype (Node5-Sem) 12071 12072 N_Op_Multiply => 12073 (1 => True, -- Chars (Name1) 12074 2 => True, -- Left_Opnd (Node2) 12075 3 => True, -- Right_Opnd (Node3) 12076 4 => False, -- Entity (Node4-Sem) 12077 5 => False), -- Etype (Node5-Sem) 12078 12079 N_Op_Divide => 12080 (1 => True, -- Chars (Name1) 12081 2 => True, -- Left_Opnd (Node2) 12082 3 => True, -- Right_Opnd (Node3) 12083 4 => False, -- Entity (Node4-Sem) 12084 5 => False), -- Etype (Node5-Sem) 12085 12086 N_Op_Mod => 12087 (1 => True, -- Chars (Name1) 12088 2 => True, -- Left_Opnd (Node2) 12089 3 => True, -- Right_Opnd (Node3) 12090 4 => False, -- Entity (Node4-Sem) 12091 5 => False), -- Etype (Node5-Sem) 12092 12093 N_Op_Rem => 12094 (1 => True, -- Chars (Name1) 12095 2 => True, -- Left_Opnd (Node2) 12096 3 => True, -- Right_Opnd (Node3) 12097 4 => False, -- Entity (Node4-Sem) 12098 5 => False), -- Etype (Node5-Sem) 12099 12100 N_Op_Expon => 12101 (1 => True, -- Chars (Name1) 12102 2 => True, -- Left_Opnd (Node2) 12103 3 => True, -- Right_Opnd (Node3) 12104 4 => False, -- Entity (Node4-Sem) 12105 5 => False), -- Etype (Node5-Sem) 12106 12107 N_Op_Plus => 12108 (1 => True, -- Chars (Name1) 12109 2 => False, -- unused 12110 3 => True, -- Right_Opnd (Node3) 12111 4 => False, -- Entity (Node4-Sem) 12112 5 => False), -- Etype (Node5-Sem) 12113 12114 N_Op_Minus => 12115 (1 => True, -- Chars (Name1) 12116 2 => False, -- unused 12117 3 => True, -- Right_Opnd (Node3) 12118 4 => False, -- Entity (Node4-Sem) 12119 5 => False), -- Etype (Node5-Sem) 12120 12121 N_Op_Abs => 12122 (1 => True, -- Chars (Name1) 12123 2 => False, -- unused 12124 3 => True, -- Right_Opnd (Node3) 12125 4 => False, -- Entity (Node4-Sem) 12126 5 => False), -- Etype (Node5-Sem) 12127 12128 N_Op_Not => 12129 (1 => True, -- Chars (Name1) 12130 2 => False, -- unused 12131 3 => True, -- Right_Opnd (Node3) 12132 4 => False, -- Entity (Node4-Sem) 12133 5 => False), -- Etype (Node5-Sem) 12134 12135 N_Type_Conversion => 12136 (1 => False, -- unused 12137 2 => False, -- unused 12138 3 => True, -- Expression (Node3) 12139 4 => True, -- Subtype_Mark (Node4) 12140 5 => False), -- Etype (Node5-Sem) 12141 12142 N_Qualified_Expression => 12143 (1 => False, -- unused 12144 2 => False, -- unused 12145 3 => True, -- Expression (Node3) 12146 4 => True, -- Subtype_Mark (Node4) 12147 5 => False), -- Etype (Node5-Sem) 12148 12149 N_Quantified_Expression => 12150 (1 => True, -- Condition (Node1) 12151 2 => True, -- Iterator_Specification (Node2) 12152 3 => False, -- unused 12153 4 => True, -- Loop_Parameter_Specification (Node4) 12154 5 => False), -- Etype (Node5-Sem) 12155 12156 N_Allocator => 12157 (1 => False, -- Storage_Pool (Node1-Sem) 12158 2 => False, -- Procedure_To_Call (Node2-Sem) 12159 3 => True, -- Expression (Node3) 12160 4 => True, -- Subpool_Handle_Name (Node4) 12161 5 => False), -- Etype (Node5-Sem) 12162 12163 N_Null_Statement => 12164 (1 => False, -- unused 12165 2 => False, -- unused 12166 3 => False, -- unused 12167 4 => False, -- unused 12168 5 => False), -- unused 12169 12170 N_Label => 12171 (1 => True, -- Identifier (Node1) 12172 2 => False, -- unused 12173 3 => False, -- unused 12174 4 => False, -- unused 12175 5 => False), -- unused 12176 12177 N_Assignment_Statement => 12178 (1 => False, -- unused 12179 2 => True, -- Name (Node2) 12180 3 => True, -- Expression (Node3) 12181 4 => False, -- unused 12182 5 => False), -- unused 12183 12184 N_Target_Name => 12185 (1 => False, -- unused 12186 2 => False, -- unused 12187 3 => False, -- unused 12188 4 => False, -- unused 12189 5 => False), -- Etype (Node5-Sem) 12190 12191 N_If_Statement => 12192 (1 => True, -- Condition (Node1) 12193 2 => True, -- Then_Statements (List2) 12194 3 => True, -- Elsif_Parts (List3) 12195 4 => True, -- Else_Statements (List4) 12196 5 => True), -- End_Span (Uint5) 12197 12198 N_Elsif_Part => 12199 (1 => True, -- Condition (Node1) 12200 2 => True, -- Then_Statements (List2) 12201 3 => False, -- Condition_Actions (List3-Sem) 12202 4 => False, -- unused 12203 5 => False), -- unused 12204 12205 N_Case_Expression => 12206 (1 => False, -- unused 12207 2 => False, -- unused 12208 3 => True, -- Expression (Node3) 12209 4 => True, -- Alternatives (List4) 12210 5 => False), -- unused 12211 12212 N_Case_Expression_Alternative => 12213 (1 => False, -- Actions (List1-Sem) 12214 2 => False, -- unused 12215 3 => True, -- Expression (Node3) 12216 4 => True, -- Discrete_Choices (List4) 12217 5 => False), -- unused 12218 12219 N_Case_Statement => 12220 (1 => False, -- unused 12221 2 => False, -- unused 12222 3 => True, -- Expression (Node3) 12223 4 => True, -- Alternatives (List4) 12224 5 => True), -- End_Span (Uint5) 12225 12226 N_Case_Statement_Alternative => 12227 (1 => False, -- unused 12228 2 => False, -- unused 12229 3 => True, -- Statements (List3) 12230 4 => True, -- Discrete_Choices (List4) 12231 5 => False), -- unused 12232 12233 N_Loop_Statement => 12234 (1 => True, -- Identifier (Node1) 12235 2 => True, -- Iteration_Scheme (Node2) 12236 3 => True, -- Statements (List3) 12237 4 => True, -- End_Label (Node4) 12238 5 => False), -- unused 12239 12240 N_Iteration_Scheme => 12241 (1 => True, -- Condition (Node1) 12242 2 => True, -- Iterator_Specification (Node2) 12243 3 => False, -- Condition_Actions (List3-Sem) 12244 4 => True, -- Loop_Parameter_Specification (Node4) 12245 5 => False), -- unused 12246 12247 N_Loop_Parameter_Specification => 12248 (1 => True, -- Defining_Identifier (Node1) 12249 2 => False, -- unused 12250 3 => False, -- unused 12251 4 => True, -- Discrete_Subtype_Definition (Node4) 12252 5 => False), -- unused 12253 12254 N_Iterator_Specification => 12255 (1 => True, -- Defining_Identifier (Node1) 12256 2 => True, -- Name (Node2) 12257 3 => False, -- Unused 12258 4 => False, -- Unused 12259 5 => True), -- Subtype_Indication (Node5) 12260 12261 N_Block_Statement => 12262 (1 => True, -- Identifier (Node1) 12263 2 => True, -- Declarations (List2) 12264 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12265 4 => True, -- Handled_Statement_Sequence (Node4) 12266 5 => False), -- unused 12267 12268 N_Exit_Statement => 12269 (1 => True, -- Condition (Node1) 12270 2 => True, -- Name (Node2) 12271 3 => False, -- unused 12272 4 => False, -- unused 12273 5 => False), -- unused 12274 12275 N_Goto_Statement => 12276 (1 => False, -- unused 12277 2 => True, -- Name (Node2) 12278 3 => False, -- unused 12279 4 => False, -- unused 12280 5 => False), -- unused 12281 12282 N_Subprogram_Declaration => 12283 (1 => True, -- Specification (Node1) 12284 2 => False, -- unused 12285 3 => False, -- Body_To_Inline (Node3-Sem) 12286 4 => False, -- Parent_Spec (Node4-Sem) 12287 5 => False), -- Corresponding_Body (Node5-Sem) 12288 12289 N_Abstract_Subprogram_Declaration => 12290 (1 => True, -- Specification (Node1) 12291 2 => False, -- unused 12292 3 => False, -- unused 12293 4 => False, -- unused 12294 5 => False), -- unused 12295 12296 N_Function_Specification => 12297 (1 => True, -- Defining_Unit_Name (Node1) 12298 2 => False, -- unused 12299 3 => True, -- Parameter_Specifications (List3) 12300 4 => True, -- Result_Definition (Node4) 12301 5 => False), -- Generic_Parent (Node5-Sem) 12302 12303 N_Procedure_Specification => 12304 (1 => True, -- Defining_Unit_Name (Node1) 12305 2 => False, -- Null_Statement (Node2-Sem) 12306 3 => True, -- Parameter_Specifications (List3) 12307 4 => False, -- unused 12308 5 => False), -- Generic_Parent (Node5-Sem) 12309 12310 N_Designator => 12311 (1 => True, -- Identifier (Node1) 12312 2 => True, -- Name (Node2) 12313 3 => False, -- unused 12314 4 => False, -- unused 12315 5 => False), -- unused 12316 12317 N_Defining_Program_Unit_Name => 12318 (1 => True, -- Defining_Identifier (Node1) 12319 2 => True, -- Name (Node2) 12320 3 => False, -- unused 12321 4 => False, -- unused 12322 5 => False), -- unused 12323 12324 N_Operator_Symbol => 12325 (1 => True, -- Chars (Name1) 12326 2 => False, -- unused 12327 3 => True, -- Strval (Str3) 12328 4 => False, -- Entity (Node4-Sem) 12329 5 => False), -- Etype (Node5-Sem) 12330 12331 N_Defining_Operator_Symbol => 12332 (1 => True, -- Chars (Name1) 12333 2 => False, -- Next_Entity (Node2-Sem) 12334 3 => False, -- Scope (Node3-Sem) 12335 4 => False, -- unused 12336 5 => False), -- Etype (Node5-Sem) 12337 12338 N_Parameter_Specification => 12339 (1 => True, -- Defining_Identifier (Node1) 12340 2 => True, -- Parameter_Type (Node2) 12341 3 => True, -- Expression (Node3) 12342 4 => False, -- unused 12343 5 => False), -- Default_Expression (Node5-Sem) 12344 12345 N_Subprogram_Body => 12346 (1 => True, -- Specification (Node1) 12347 2 => True, -- Declarations (List2) 12348 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12349 4 => True, -- Handled_Statement_Sequence (Node4) 12350 5 => False), -- Corresponding_Spec (Node5-Sem) 12351 12352 N_Expression_Function => 12353 (1 => True, -- Specification (Node1) 12354 2 => False, -- unused 12355 3 => True, -- Expression (Node3) 12356 4 => False, -- unused 12357 5 => False), -- unused 12358 12359 N_Procedure_Call_Statement => 12360 (1 => False, -- Controlling_Argument (Node1-Sem) 12361 2 => True, -- Name (Node2) 12362 3 => True, -- Parameter_Associations (List3) 12363 4 => False, -- First_Named_Actual (Node4-Sem) 12364 5 => False), -- Etype (Node5-Sem) 12365 12366 N_Function_Call => 12367 (1 => False, -- Controlling_Argument (Node1-Sem) 12368 2 => True, -- Name (Node2) 12369 3 => True, -- Parameter_Associations (List3) 12370 4 => False, -- First_Named_Actual (Node4-Sem) 12371 5 => False), -- Etype (Node5-Sem) 12372 12373 N_Parameter_Association => 12374 (1 => False, -- unused 12375 2 => True, -- Selector_Name (Node2) 12376 3 => True, -- Explicit_Actual_Parameter (Node3) 12377 4 => False, -- Next_Named_Actual (Node4-Sem) 12378 5 => False), -- unused 12379 12380 N_Simple_Return_Statement => 12381 (1 => False, -- Storage_Pool (Node1-Sem) 12382 2 => False, -- Procedure_To_Call (Node2-Sem) 12383 3 => True, -- Expression (Node3) 12384 4 => False, -- unused 12385 5 => False), -- Return_Statement_Entity (Node5-Sem) 12386 12387 N_Extended_Return_Statement => 12388 (1 => False, -- Storage_Pool (Node1-Sem) 12389 2 => False, -- Procedure_To_Call (Node2-Sem) 12390 3 => True, -- Return_Object_Declarations (List3) 12391 4 => True, -- Handled_Statement_Sequence (Node4) 12392 5 => False), -- Return_Statement_Entity (Node5-Sem) 12393 12394 N_Package_Declaration => 12395 (1 => True, -- Specification (Node1) 12396 2 => False, -- unused 12397 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12398 4 => False, -- Parent_Spec (Node4-Sem) 12399 5 => False), -- Corresponding_Body (Node5-Sem) 12400 12401 N_Package_Specification => 12402 (1 => True, -- Defining_Unit_Name (Node1) 12403 2 => True, -- Visible_Declarations (List2) 12404 3 => True, -- Private_Declarations (List3) 12405 4 => True, -- End_Label (Node4) 12406 5 => False), -- Generic_Parent (Node5-Sem) 12407 12408 N_Package_Body => 12409 (1 => True, -- Defining_Unit_Name (Node1) 12410 2 => True, -- Declarations (List2) 12411 3 => False, -- unused 12412 4 => True, -- Handled_Statement_Sequence (Node4) 12413 5 => False), -- Corresponding_Spec (Node5-Sem) 12414 12415 N_Private_Type_Declaration => 12416 (1 => True, -- Defining_Identifier (Node1) 12417 2 => False, -- unused 12418 3 => False, -- unused 12419 4 => True, -- Discriminant_Specifications (List4) 12420 5 => False), -- unused 12421 12422 N_Private_Extension_Declaration => 12423 (1 => True, -- Defining_Identifier (Node1) 12424 2 => True, -- Interface_List (List2) 12425 3 => False, -- unused 12426 4 => True, -- Discriminant_Specifications (List4) 12427 5 => True), -- Subtype_Indication (Node5) 12428 12429 N_Use_Package_Clause => 12430 (1 => False, -- Prev_Use_Clause (Node1-Sem) 12431 2 => True, -- Name (Node2) 12432 3 => False, -- Next_Use_Clause (Node3-Sem) 12433 4 => False, -- Associated_Node (Node4-Sem) 12434 5 => False), -- Hidden_By_Use_Clause (Elist5-Sem) 12435 12436 N_Use_Type_Clause => 12437 (1 => False, -- Prev_Use_Clause (Node1-Sem) 12438 2 => False, -- Used_Operations (Elist2-Sem) 12439 3 => False, -- Next_Use_Clause (Node3-Sem) 12440 4 => True, -- Subtype_Mark (Node4) 12441 5 => False), -- Hidden_By_Use_Clause (Elist5-Sem) 12442 12443 N_Object_Renaming_Declaration => 12444 (1 => True, -- Defining_Identifier (Node1) 12445 2 => True, -- Name (Node2) 12446 3 => True, -- Access_Definition (Node3) 12447 4 => True, -- Subtype_Mark (Node4) 12448 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 12449 12450 N_Exception_Renaming_Declaration => 12451 (1 => True, -- Defining_Identifier (Node1) 12452 2 => True, -- Name (Node2) 12453 3 => False, -- unused 12454 4 => False, -- unused 12455 5 => False), -- unused 12456 12457 N_Package_Renaming_Declaration => 12458 (1 => True, -- Defining_Unit_Name (Node1) 12459 2 => True, -- Name (Node2) 12460 3 => False, -- unused 12461 4 => False, -- Parent_Spec (Node4-Sem) 12462 5 => False), -- unused 12463 12464 N_Subprogram_Renaming_Declaration => 12465 (1 => True, -- Specification (Node1) 12466 2 => True, -- Name (Node2) 12467 3 => False, -- Corresponding_Formal_Spec (Node3-Sem) 12468 4 => False, -- Parent_Spec (Node4-Sem) 12469 5 => False), -- Corresponding_Spec (Node5-Sem) 12470 12471 N_Generic_Package_Renaming_Declaration => 12472 (1 => True, -- Defining_Unit_Name (Node1) 12473 2 => True, -- Name (Node2) 12474 3 => False, -- unused 12475 4 => False, -- Parent_Spec (Node4-Sem) 12476 5 => False), -- unused 12477 12478 N_Generic_Procedure_Renaming_Declaration => 12479 (1 => True, -- Defining_Unit_Name (Node1) 12480 2 => True, -- Name (Node2) 12481 3 => False, -- unused 12482 4 => False, -- Parent_Spec (Node4-Sem) 12483 5 => False), -- unused 12484 12485 N_Generic_Function_Renaming_Declaration => 12486 (1 => True, -- Defining_Unit_Name (Node1) 12487 2 => True, -- Name (Node2) 12488 3 => False, -- unused 12489 4 => False, -- Parent_Spec (Node4-Sem) 12490 5 => False), -- unused 12491 12492 N_Task_Type_Declaration => 12493 (1 => True, -- Defining_Identifier (Node1) 12494 2 => True, -- Interface_List (List2) 12495 3 => True, -- Task_Definition (Node3) 12496 4 => True, -- Discriminant_Specifications (List4) 12497 5 => False), -- Corresponding_Body (Node5-Sem) 12498 12499 N_Single_Task_Declaration => 12500 (1 => True, -- Defining_Identifier (Node1) 12501 2 => True, -- Interface_List (List2) 12502 3 => True, -- Task_Definition (Node3) 12503 4 => False, -- unused 12504 5 => False), -- unused 12505 12506 N_Task_Definition => 12507 (1 => False, -- unused 12508 2 => True, -- Visible_Declarations (List2) 12509 3 => True, -- Private_Declarations (List3) 12510 4 => True, -- End_Label (Node4) 12511 5 => False), -- unused 12512 12513 N_Task_Body => 12514 (1 => True, -- Defining_Identifier (Node1) 12515 2 => True, -- Declarations (List2) 12516 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12517 4 => True, -- Handled_Statement_Sequence (Node4) 12518 5 => False), -- Corresponding_Spec (Node5-Sem) 12519 12520 N_Protected_Type_Declaration => 12521 (1 => True, -- Defining_Identifier (Node1) 12522 2 => True, -- Interface_List (List2) 12523 3 => True, -- Protected_Definition (Node3) 12524 4 => True, -- Discriminant_Specifications (List4) 12525 5 => False), -- Corresponding_Body (Node5-Sem) 12526 12527 N_Single_Protected_Declaration => 12528 (1 => True, -- Defining_Identifier (Node1) 12529 2 => True, -- Interface_List (List2) 12530 3 => True, -- Protected_Definition (Node3) 12531 4 => False, -- unused 12532 5 => False), -- unused 12533 12534 N_Protected_Definition => 12535 (1 => False, -- unused 12536 2 => True, -- Visible_Declarations (List2) 12537 3 => True, -- Private_Declarations (List3) 12538 4 => True, -- End_Label (Node4) 12539 5 => False), -- unused 12540 12541 N_Protected_Body => 12542 (1 => True, -- Defining_Identifier (Node1) 12543 2 => True, -- Declarations (List2) 12544 3 => False, -- unused 12545 4 => True, -- End_Label (Node4) 12546 5 => False), -- Corresponding_Spec (Node5-Sem) 12547 12548 N_Entry_Declaration => 12549 (1 => True, -- Defining_Identifier (Node1) 12550 2 => False, -- unused 12551 3 => True, -- Parameter_Specifications (List3) 12552 4 => True, -- Discrete_Subtype_Definition (Node4) 12553 5 => False), -- Corresponding_Body (Node5-Sem) 12554 12555 N_Accept_Statement => 12556 (1 => True, -- Entry_Direct_Name (Node1) 12557 2 => True, -- Declarations (List2) 12558 3 => True, -- Parameter_Specifications (List3) 12559 4 => True, -- Handled_Statement_Sequence (Node4) 12560 5 => True), -- Entry_Index (Node5) 12561 12562 N_Entry_Body => 12563 (1 => True, -- Defining_Identifier (Node1) 12564 2 => True, -- Declarations (List2) 12565 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12566 4 => True, -- Handled_Statement_Sequence (Node4) 12567 5 => True), -- Entry_Body_Formal_Part (Node5) 12568 12569 N_Entry_Body_Formal_Part => 12570 (1 => True, -- Condition (Node1) 12571 2 => False, -- unused 12572 3 => True, -- Parameter_Specifications (List3) 12573 4 => True, -- Entry_Index_Specification (Node4) 12574 5 => False), -- unused 12575 12576 N_Entry_Index_Specification => 12577 (1 => True, -- Defining_Identifier (Node1) 12578 2 => False, -- unused 12579 3 => False, -- unused 12580 4 => True, -- Discrete_Subtype_Definition (Node4) 12581 5 => False), -- unused 12582 12583 N_Entry_Call_Statement => 12584 (1 => False, -- unused 12585 2 => True, -- Name (Node2) 12586 3 => True, -- Parameter_Associations (List3) 12587 4 => False, -- First_Named_Actual (Node4-Sem) 12588 5 => False), -- unused 12589 12590 N_Requeue_Statement => 12591 (1 => False, -- unused 12592 2 => True, -- Name (Node2) 12593 3 => False, -- unused 12594 4 => False, -- unused 12595 5 => False), -- unused 12596 12597 N_Delay_Until_Statement => 12598 (1 => False, -- unused 12599 2 => False, -- unused 12600 3 => True, -- Expression (Node3) 12601 4 => False, -- unused 12602 5 => False), -- unused 12603 12604 N_Delay_Relative_Statement => 12605 (1 => False, -- unused 12606 2 => False, -- unused 12607 3 => True, -- Expression (Node3) 12608 4 => False, -- unused 12609 5 => False), -- unused 12610 12611 N_Selective_Accept => 12612 (1 => True, -- Select_Alternatives (List1) 12613 2 => False, -- unused 12614 3 => False, -- unused 12615 4 => True, -- Else_Statements (List4) 12616 5 => False), -- unused 12617 12618 N_Accept_Alternative => 12619 (1 => True, -- Condition (Node1) 12620 2 => True, -- Accept_Statement (Node2) 12621 3 => True, -- Statements (List3) 12622 4 => True, -- Pragmas_Before (List4) 12623 5 => False), -- Accept_Handler_Records (List5-Sem) 12624 12625 N_Delay_Alternative => 12626 (1 => True, -- Condition (Node1) 12627 2 => True, -- Delay_Statement (Node2) 12628 3 => True, -- Statements (List3) 12629 4 => True, -- Pragmas_Before (List4) 12630 5 => False), -- unused 12631 12632 N_Terminate_Alternative => 12633 (1 => True, -- Condition (Node1) 12634 2 => False, -- unused 12635 3 => False, -- unused 12636 4 => True, -- Pragmas_Before (List4) 12637 5 => True), -- Pragmas_After (List5) 12638 12639 N_Timed_Entry_Call => 12640 (1 => True, -- Entry_Call_Alternative (Node1) 12641 2 => False, -- unused 12642 3 => False, -- unused 12643 4 => True, -- Delay_Alternative (Node4) 12644 5 => False), -- unused 12645 12646 N_Entry_Call_Alternative => 12647 (1 => True, -- Entry_Call_Statement (Node1) 12648 2 => False, -- unused 12649 3 => True, -- Statements (List3) 12650 4 => True, -- Pragmas_Before (List4) 12651 5 => False), -- unused 12652 12653 N_Conditional_Entry_Call => 12654 (1 => True, -- Entry_Call_Alternative (Node1) 12655 2 => False, -- unused 12656 3 => False, -- unused 12657 4 => True, -- Else_Statements (List4) 12658 5 => False), -- unused 12659 12660 N_Asynchronous_Select => 12661 (1 => True, -- Triggering_Alternative (Node1) 12662 2 => True, -- Abortable_Part (Node2) 12663 3 => False, -- unused 12664 4 => False, -- unused 12665 5 => False), -- unused 12666 12667 N_Triggering_Alternative => 12668 (1 => True, -- Triggering_Statement (Node1) 12669 2 => False, -- unused 12670 3 => True, -- Statements (List3) 12671 4 => True, -- Pragmas_Before (List4) 12672 5 => False), -- unused 12673 12674 N_Abortable_Part => 12675 (1 => False, -- unused 12676 2 => False, -- unused 12677 3 => True, -- Statements (List3) 12678 4 => False, -- unused 12679 5 => False), -- unused 12680 12681 N_Abort_Statement => 12682 (1 => False, -- unused 12683 2 => True, -- Names (List2) 12684 3 => False, -- unused 12685 4 => False, -- unused 12686 5 => False), -- unused 12687 12688 N_Compilation_Unit => 12689 (1 => True, -- Context_Items (List1) 12690 2 => True, -- Unit (Node2) 12691 3 => False, -- First_Inlined_Subprogram (Node3-Sem) 12692 4 => False, -- Library_Unit (Node4-Sem) 12693 5 => True), -- Aux_Decls_Node (Node5) 12694 12695 N_Compilation_Unit_Aux => 12696 (1 => True, -- Actions (List1) 12697 2 => True, -- Declarations (List2) 12698 3 => False, -- Default_Storage_Pool (Node3) 12699 4 => True, -- Config_Pragmas (List4) 12700 5 => True), -- Pragmas_After (List5) 12701 12702 N_With_Clause => 12703 (1 => False, -- unused 12704 2 => True, -- Name (Node2) 12705 3 => False, -- unused 12706 4 => False, -- Library_Unit (Node4-Sem) 12707 5 => False), -- Corresponding_Spec (Node5-Sem) 12708 12709 N_Subprogram_Body_Stub => 12710 (1 => True, -- Specification (Node1) 12711 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12712 3 => False, -- unused 12713 4 => False, -- Library_Unit (Node4-Sem) 12714 5 => False), -- Corresponding_Body (Node5-Sem) 12715 12716 N_Package_Body_Stub => 12717 (1 => True, -- Defining_Identifier (Node1) 12718 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12719 3 => False, -- unused 12720 4 => False, -- Library_Unit (Node4-Sem) 12721 5 => False), -- Corresponding_Body (Node5-Sem) 12722 12723 N_Task_Body_Stub => 12724 (1 => True, -- Defining_Identifier (Node1) 12725 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12726 3 => False, -- unused 12727 4 => False, -- Library_Unit (Node4-Sem) 12728 5 => False), -- Corresponding_Body (Node5-Sem) 12729 12730 N_Protected_Body_Stub => 12731 (1 => True, -- Defining_Identifier (Node1) 12732 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12733 3 => False, -- unused 12734 4 => False, -- Library_Unit (Node4-Sem) 12735 5 => False), -- Corresponding_Body (Node5-Sem) 12736 12737 N_Subunit => 12738 (1 => True, -- Proper_Body (Node1) 12739 2 => True, -- Name (Node2) 12740 3 => False, -- Corresponding_Stub (Node3-Sem) 12741 4 => False, -- unused 12742 5 => False), -- unused 12743 12744 N_Exception_Declaration => 12745 (1 => True, -- Defining_Identifier (Node1) 12746 2 => False, -- unused 12747 3 => False, -- Expression (Node3-Sem) 12748 4 => False, -- unused 12749 5 => False), -- unused 12750 12751 N_Handled_Sequence_Of_Statements => 12752 (1 => True, -- At_End_Proc (Node1) 12753 2 => False, -- First_Real_Statement (Node2-Sem) 12754 3 => True, -- Statements (List3) 12755 4 => True, -- End_Label (Node4) 12756 5 => True), -- Exception_Handlers (List5) 12757 12758 N_Exception_Handler => 12759 (1 => False, -- Local_Raise_Statements (Elist1) 12760 2 => True, -- Choice_Parameter (Node2) 12761 3 => True, -- Statements (List3) 12762 4 => True, -- Exception_Choices (List4) 12763 5 => False), -- Exception_Label (Node5) 12764 12765 N_Raise_Statement => 12766 (1 => False, -- unused 12767 2 => True, -- Name (Node2) 12768 3 => True, -- Expression (Node3) 12769 4 => False, -- unused 12770 5 => False), -- unused 12771 12772 N_Raise_Expression => 12773 (1 => False, -- unused 12774 2 => True, -- Name (Node2) 12775 3 => True, -- Expression (Node3) 12776 4 => False, -- unused 12777 5 => False), -- Etype (Node5-Sem) 12778 12779 N_Generic_Subprogram_Declaration => 12780 (1 => True, -- Specification (Node1) 12781 2 => True, -- Generic_Formal_Declarations (List2) 12782 3 => False, -- unused 12783 4 => False, -- Parent_Spec (Node4-Sem) 12784 5 => False), -- Corresponding_Body (Node5-Sem) 12785 12786 N_Generic_Package_Declaration => 12787 (1 => True, -- Specification (Node1) 12788 2 => True, -- Generic_Formal_Declarations (List2) 12789 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12790 4 => False, -- Parent_Spec (Node4-Sem) 12791 5 => False), -- Corresponding_Body (Node5-Sem) 12792 12793 N_Package_Instantiation => 12794 (1 => True, -- Defining_Unit_Name (Node1) 12795 2 => True, -- Name (Node2) 12796 3 => True, -- Generic_Associations (List3) 12797 4 => False, -- Parent_Spec (Node4-Sem) 12798 5 => False), -- Instance_Spec (Node5-Sem) 12799 12800 N_Procedure_Instantiation => 12801 (1 => True, -- Defining_Unit_Name (Node1) 12802 2 => True, -- Name (Node2) 12803 3 => True, -- Generic_Associations (List3) 12804 4 => False, -- Parent_Spec (Node4-Sem) 12805 5 => False), -- Instance_Spec (Node5-Sem) 12806 12807 N_Function_Instantiation => 12808 (1 => True, -- Defining_Unit_Name (Node1) 12809 2 => True, -- Name (Node2) 12810 3 => True, -- Generic_Associations (List3) 12811 4 => False, -- Parent_Spec (Node4-Sem) 12812 5 => False), -- Instance_Spec (Node5-Sem) 12813 12814 N_Generic_Association => 12815 (1 => True, -- Explicit_Generic_Actual_Parameter (Node1) 12816 2 => True, -- Selector_Name (Node2) 12817 3 => False, -- unused 12818 4 => False, -- unused 12819 5 => False), -- unused 12820 12821 N_Formal_Object_Declaration => 12822 (1 => True, -- Defining_Identifier (Node1) 12823 2 => False, -- unused 12824 3 => True, -- Access_Definition (Node3) 12825 4 => True, -- Subtype_Mark (Node4) 12826 5 => True), -- Default_Expression (Node5) 12827 12828 N_Formal_Type_Declaration => 12829 (1 => True, -- Defining_Identifier (Node1) 12830 2 => False, -- unused 12831 3 => True, -- Formal_Type_Definition (Node3) 12832 4 => True, -- Discriminant_Specifications (List4) 12833 5 => False), -- unused 12834 12835 N_Formal_Private_Type_Definition => 12836 (1 => False, -- unused 12837 2 => False, -- unused 12838 3 => False, -- unused 12839 4 => False, -- unused 12840 5 => False), -- unused 12841 12842 N_Formal_Incomplete_Type_Definition => 12843 (1 => False, -- unused 12844 2 => False, -- unused 12845 3 => False, -- unused 12846 4 => False, -- unused 12847 5 => False), -- unused 12848 12849 N_Formal_Derived_Type_Definition => 12850 (1 => False, -- unused 12851 2 => True, -- Interface_List (List2) 12852 3 => False, -- unused 12853 4 => True, -- Subtype_Mark (Node4) 12854 5 => False), -- unused 12855 12856 N_Formal_Discrete_Type_Definition => 12857 (1 => False, -- unused 12858 2 => False, -- unused 12859 3 => False, -- unused 12860 4 => False, -- unused 12861 5 => False), -- unused 12862 12863 N_Formal_Signed_Integer_Type_Definition => 12864 (1 => False, -- unused 12865 2 => False, -- unused 12866 3 => False, -- unused 12867 4 => False, -- unused 12868 5 => False), -- unused 12869 12870 N_Formal_Modular_Type_Definition => 12871 (1 => False, -- unused 12872 2 => False, -- unused 12873 3 => False, -- unused 12874 4 => False, -- unused 12875 5 => False), -- unused 12876 12877 N_Formal_Floating_Point_Definition => 12878 (1 => False, -- unused 12879 2 => False, -- unused 12880 3 => False, -- unused 12881 4 => False, -- unused 12882 5 => False), -- unused 12883 12884 N_Formal_Ordinary_Fixed_Point_Definition => 12885 (1 => False, -- unused 12886 2 => False, -- unused 12887 3 => False, -- unused 12888 4 => False, -- unused 12889 5 => False), -- unused 12890 12891 N_Formal_Decimal_Fixed_Point_Definition => 12892 (1 => False, -- unused 12893 2 => False, -- unused 12894 3 => False, -- unused 12895 4 => False, -- unused 12896 5 => False), -- unused 12897 12898 N_Formal_Concrete_Subprogram_Declaration => 12899 (1 => True, -- Specification (Node1) 12900 2 => True, -- Default_Name (Node2) 12901 3 => False, -- unused 12902 4 => False, -- unused 12903 5 => False), -- unused 12904 12905 N_Formal_Abstract_Subprogram_Declaration => 12906 (1 => True, -- Specification (Node1) 12907 2 => True, -- Default_Name (Node2) 12908 3 => False, -- unused 12909 4 => False, -- unused 12910 5 => False), -- unused 12911 12912 N_Formal_Package_Declaration => 12913 (1 => True, -- Defining_Identifier (Node1) 12914 2 => True, -- Name (Node2) 12915 3 => True, -- Generic_Associations (List3) 12916 4 => False, -- unused 12917 5 => False), -- Instance_Spec (Node5-Sem) 12918 12919 N_Attribute_Definition_Clause => 12920 (1 => True, -- Chars (Name1) 12921 2 => True, -- Name (Node2) 12922 3 => True, -- Expression (Node3) 12923 4 => False, -- unused 12924 5 => False), -- Next_Rep_Item (Node5-Sem) 12925 12926 N_Aspect_Specification => 12927 (1 => True, -- Identifier (Node1) 12928 2 => False, -- Aspect_Rep_Item (Node2-Sem) 12929 3 => True, -- Expression (Node3) 12930 4 => False, -- Entity (Node4-Sem) 12931 5 => False), -- Next_Rep_Item (Node5-Sem) 12932 12933 N_Enumeration_Representation_Clause => 12934 (1 => True, -- Identifier (Node1) 12935 2 => False, -- unused 12936 3 => True, -- Array_Aggregate (Node3) 12937 4 => False, -- unused 12938 5 => False), -- Next_Rep_Item (Node5-Sem) 12939 12940 N_Record_Representation_Clause => 12941 (1 => True, -- Identifier (Node1) 12942 2 => True, -- Mod_Clause (Node2) 12943 3 => True, -- Component_Clauses (List3) 12944 4 => False, -- unused 12945 5 => False), -- Next_Rep_Item (Node5-Sem) 12946 12947 N_Component_Clause => 12948 (1 => True, -- Component_Name (Node1) 12949 2 => True, -- Position (Node2) 12950 3 => True, -- First_Bit (Node3) 12951 4 => True, -- Last_Bit (Node4) 12952 5 => False), -- unused 12953 12954 N_Code_Statement => 12955 (1 => False, -- unused 12956 2 => False, -- unused 12957 3 => True, -- Expression (Node3) 12958 4 => False, -- unused 12959 5 => False), -- unused 12960 12961 N_Op_Rotate_Left => 12962 (1 => True, -- Chars (Name1) 12963 2 => True, -- Left_Opnd (Node2) 12964 3 => True, -- Right_Opnd (Node3) 12965 4 => False, -- Entity (Node4-Sem) 12966 5 => False), -- Etype (Node5-Sem) 12967 12968 N_Op_Rotate_Right => 12969 (1 => True, -- Chars (Name1) 12970 2 => True, -- Left_Opnd (Node2) 12971 3 => True, -- Right_Opnd (Node3) 12972 4 => False, -- Entity (Node4-Sem) 12973 5 => False), -- Etype (Node5-Sem) 12974 12975 N_Op_Shift_Left => 12976 (1 => True, -- Chars (Name1) 12977 2 => True, -- Left_Opnd (Node2) 12978 3 => True, -- Right_Opnd (Node3) 12979 4 => False, -- Entity (Node4-Sem) 12980 5 => False), -- Etype (Node5-Sem) 12981 12982 N_Op_Shift_Right_Arithmetic => 12983 (1 => True, -- Chars (Name1) 12984 2 => True, -- Left_Opnd (Node2) 12985 3 => True, -- Right_Opnd (Node3) 12986 4 => False, -- Entity (Node4-Sem) 12987 5 => False), -- Etype (Node5-Sem) 12988 12989 N_Op_Shift_Right => 12990 (1 => True, -- Chars (Name1) 12991 2 => True, -- Left_Opnd (Node2) 12992 3 => True, -- Right_Opnd (Node3) 12993 4 => False, -- Entity (Node4-Sem) 12994 5 => False), -- Etype (Node5-Sem) 12995 12996 N_Delta_Constraint => 12997 (1 => False, -- unused 12998 2 => False, -- unused 12999 3 => True, -- Delta_Expression (Node3) 13000 4 => True, -- Range_Constraint (Node4) 13001 5 => False), -- unused 13002 13003 N_At_Clause => 13004 (1 => True, -- Identifier (Node1) 13005 2 => False, -- unused 13006 3 => True, -- Expression (Node3) 13007 4 => False, -- unused 13008 5 => False), -- unused 13009 13010 N_Mod_Clause => 13011 (1 => False, -- unused 13012 2 => False, -- unused 13013 3 => True, -- Expression (Node3) 13014 4 => True, -- Pragmas_Before (List4) 13015 5 => False), -- unused 13016 13017 N_If_Expression => 13018 (1 => True, -- Expressions (List1) 13019 2 => False, -- Then_Actions (List2-Sem) 13020 3 => False, -- Else_Actions (List3-Sem) 13021 4 => False, -- unused 13022 5 => False), -- Etype (Node5-Sem) 13023 13024 N_Compound_Statement => 13025 (1 => True, -- Actions (List1) 13026 2 => False, -- unused 13027 3 => False, -- unused 13028 4 => False, -- unused 13029 5 => False), -- unused 13030 13031 N_Contract => 13032 (1 => False, -- Pre_Post_Conditions (Node1-Sem) 13033 2 => False, -- Contract_Test_Cases (Node2-Sem) 13034 3 => False, -- Classifications (Node3-Sem) 13035 4 => False, -- unused 13036 5 => False), -- unused 13037 13038 N_Expanded_Name => 13039 (1 => True, -- Chars (Name1) 13040 2 => True, -- Selector_Name (Node2) 13041 3 => True, -- Prefix (Node3) 13042 4 => False, -- Entity (Node4-Sem) 13043 5 => False), -- Etype (Node5-Sem) 13044 13045 N_Expression_With_Actions => 13046 (1 => True, -- Actions (List1) 13047 2 => False, -- unused 13048 3 => True, -- Expression (Node3) 13049 4 => False, -- unused 13050 5 => False), -- unused 13051 13052 N_Free_Statement => 13053 (1 => False, -- Storage_Pool (Node1-Sem) 13054 2 => False, -- Procedure_To_Call (Node2-Sem) 13055 3 => True, -- Expression (Node3) 13056 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 13057 5 => False), -- unused 13058 13059 N_Freeze_Entity => 13060 (1 => True, -- Actions (List1) 13061 2 => False, -- Access_Types_To_Process (Elist2-Sem) 13062 3 => False, -- TSS_Elist (Elist3-Sem) 13063 4 => False, -- Entity (Node4-Sem) 13064 5 => False), -- First_Subtype_Link (Node5-Sem) 13065 13066 N_Freeze_Generic_Entity => 13067 (1 => False, -- unused 13068 2 => False, -- unused 13069 3 => False, -- unused 13070 4 => False, -- Entity (Node4-Sem) 13071 5 => False), -- unused 13072 13073 N_Implicit_Label_Declaration => 13074 (1 => True, -- Defining_Identifier (Node1) 13075 2 => False, -- Label_Construct (Node2-Sem) 13076 3 => False, -- unused 13077 4 => False, -- unused 13078 5 => False), -- unused 13079 13080 N_Itype_Reference => 13081 (1 => False, -- Itype (Node1-Sem) 13082 2 => False, -- unused 13083 3 => False, -- unused 13084 4 => False, -- unused 13085 5 => False), -- unused 13086 13087 N_Raise_Constraint_Error => 13088 (1 => True, -- Condition (Node1) 13089 2 => False, -- unused 13090 3 => True, -- Reason (Uint3) 13091 4 => False, -- unused 13092 5 => False), -- Etype (Node5-Sem) 13093 13094 N_Raise_Program_Error => 13095 (1 => True, -- Condition (Node1) 13096 2 => False, -- unused 13097 3 => True, -- Reason (Uint3) 13098 4 => False, -- unused 13099 5 => False), -- Etype (Node5-Sem) 13100 13101 N_Raise_Storage_Error => 13102 (1 => True, -- Condition (Node1) 13103 2 => False, -- unused 13104 3 => True, -- Reason (Uint3) 13105 4 => False, -- unused 13106 5 => False), -- Etype (Node5-Sem) 13107 13108 N_Push_Constraint_Error_Label => 13109 (1 => False, -- unused 13110 2 => False, -- unused 13111 3 => False, -- unused 13112 4 => False, -- unused 13113 5 => False), -- unused 13114 13115 N_Push_Program_Error_Label => 13116 (1 => False, -- unused 13117 2 => False, -- unused 13118 3 => False, -- unused 13119 4 => False, -- unused 13120 5 => False), -- Exception_Label 13121 13122 N_Push_Storage_Error_Label => 13123 (1 => False, -- unused 13124 2 => False, -- unused 13125 3 => False, -- unused 13126 4 => False, -- unused 13127 5 => False), -- Exception_Label 13128 13129 N_Pop_Constraint_Error_Label => 13130 (1 => False, -- unused 13131 2 => False, -- unused 13132 3 => False, -- unused 13133 4 => False, -- unused 13134 5 => False), -- unused 13135 13136 N_Pop_Program_Error_Label => 13137 (1 => False, -- unused 13138 2 => False, -- unused 13139 3 => False, -- unused 13140 4 => False, -- unused 13141 5 => False), -- unused 13142 13143 N_Pop_Storage_Error_Label => 13144 (1 => False, -- unused 13145 2 => False, -- unused 13146 3 => False, -- unused 13147 4 => False, -- unused 13148 5 => False), -- unused 13149 13150 N_Reference => 13151 (1 => False, -- unused 13152 2 => False, -- unused 13153 3 => True, -- Prefix (Node3) 13154 4 => False, -- unused 13155 5 => False), -- Etype (Node5-Sem) 13156 13157 N_Unchecked_Expression => 13158 (1 => False, -- unused 13159 2 => False, -- unused 13160 3 => True, -- Expression (Node3) 13161 4 => False, -- unused 13162 5 => False), -- Etype (Node5-Sem) 13163 13164 N_Unchecked_Type_Conversion => 13165 (1 => False, -- unused 13166 2 => False, -- unused 13167 3 => True, -- Expression (Node3) 13168 4 => True, -- Subtype_Mark (Node4) 13169 5 => False), -- Etype (Node5-Sem) 13170 13171 N_Validate_Unchecked_Conversion => 13172 (1 => False, -- Source_Type (Node1-Sem) 13173 2 => False, -- Target_Type (Node2-Sem) 13174 3 => False, -- unused 13175 4 => False, -- unused 13176 5 => False), -- unused 13177 13178 -- Entries for SCIL nodes 13179 13180 N_SCIL_Dispatch_Table_Tag_Init => 13181 (1 => False, -- unused 13182 2 => False, -- unused 13183 3 => False, -- unused 13184 4 => False, -- SCIL_Entity (Node4-Sem) 13185 5 => False), -- unused 13186 13187 N_SCIL_Dispatching_Call => 13188 (1 => False, -- unused 13189 2 => False, -- SCIL_Target_Prim (Node2-Sem) 13190 3 => False, -- unused 13191 4 => False, -- SCIL_Entity (Node4-Sem) 13192 5 => False), -- SCIL_Controlling_Tag (Node5-Sem) 13193 13194 N_SCIL_Membership_Test => 13195 (1 => False, -- unused 13196 2 => False, -- unused 13197 3 => False, -- unused 13198 4 => False, -- SCIL_Entity (Node4-Sem) 13199 5 => False), -- SCIL_Tag_Value (Node5-Sem) 13200 13201 N_Call_Marker => 13202 (1 => False, -- Target (Node1-Sem) 13203 2 => False, -- unused 13204 3 => False, -- unused 13205 4 => False, -- unused 13206 5 => False), -- unused 13207 13208 N_Variable_Reference_Marker => 13209 (1 => False, -- Target (Node1-Sem) 13210 2 => False, -- unused 13211 3 => False, -- unused 13212 4 => False, -- unused 13213 5 => False), -- unused 13214 13215 -- Entries for Empty, Error, and Unused. Even though these have a Chars 13216 -- field for debugging purposes, they are not really syntactic fields, so 13217 -- we mark all fields as unused. 13218 13219 N_Empty => 13220 (1 => False, -- unused 13221 2 => False, -- unused 13222 3 => False, -- unused 13223 4 => False, -- unused 13224 5 => False), -- unused 13225 13226 N_Error => 13227 (1 => False, -- unused 13228 2 => False, -- unused 13229 3 => False, -- unused 13230 4 => False, -- unused 13231 5 => False), -- unused 13232 13233 N_Unused_At_Start => 13234 (1 => False, -- unused 13235 2 => False, -- unused 13236 3 => False, -- unused 13237 4 => False, -- unused 13238 5 => False), -- unused 13239 13240 N_Unused_At_End => 13241 (1 => False, -- unused 13242 2 => False, -- unused 13243 3 => False, -- unused 13244 4 => False, -- unused 13245 5 => False)); -- unused 13246 13247 -------------------- 13248 -- Inline Pragmas -- 13249 -------------------- 13250 13251 pragma Inline (Abort_Present); 13252 pragma Inline (Abortable_Part); 13253 pragma Inline (Abstract_Present); 13254 pragma Inline (Accept_Handler_Records); 13255 pragma Inline (Accept_Statement); 13256 pragma Inline (Access_Definition); 13257 pragma Inline (Access_To_Subprogram_Definition); 13258 pragma Inline (Access_Types_To_Process); 13259 pragma Inline (Actions); 13260 pragma Inline (Activation_Chain_Entity); 13261 pragma Inline (Acts_As_Spec); 13262 pragma Inline (Actual_Designated_Subtype); 13263 pragma Inline (Address_Warning_Posted); 13264 pragma Inline (Aggregate_Bounds); 13265 pragma Inline (Aliased_Present); 13266 pragma Inline (Alloc_For_BIP_Return); 13267 pragma Inline (All_Others); 13268 pragma Inline (All_Present); 13269 pragma Inline (Alternatives); 13270 pragma Inline (Ancestor_Part); 13271 pragma Inline (Atomic_Sync_Required); 13272 pragma Inline (Array_Aggregate); 13273 pragma Inline (Aspect_Rep_Item); 13274 pragma Inline (Assignment_OK); 13275 pragma Inline (Associated_Node); 13276 pragma Inline (At_End_Proc); 13277 pragma Inline (Attribute_Name); 13278 pragma Inline (Aux_Decls_Node); 13279 pragma Inline (Backwards_OK); 13280 pragma Inline (Bad_Is_Detected); 13281 pragma Inline (Body_To_Inline); 13282 pragma Inline (Body_Required); 13283 pragma Inline (By_Ref); 13284 pragma Inline (Box_Present); 13285 pragma Inline (Char_Literal_Value); 13286 pragma Inline (Chars); 13287 pragma Inline (Check_Address_Alignment); 13288 pragma Inline (Choice_Parameter); 13289 pragma Inline (Choices); 13290 pragma Inline (Class_Present); 13291 pragma Inline (Classifications); 13292 pragma Inline (Cleanup_Actions); 13293 pragma Inline (Comes_From_Extended_Return_Statement); 13294 pragma Inline (Compile_Time_Known_Aggregate); 13295 pragma Inline (Component_Associations); 13296 pragma Inline (Component_Clauses); 13297 pragma Inline (Component_Definition); 13298 pragma Inline (Component_Items); 13299 pragma Inline (Component_List); 13300 pragma Inline (Component_Name); 13301 pragma Inline (Componentwise_Assignment); 13302 pragma Inline (Condition); 13303 pragma Inline (Condition_Actions); 13304 pragma Inline (Config_Pragmas); 13305 pragma Inline (Constant_Present); 13306 pragma Inline (Constraint); 13307 pragma Inline (Constraints); 13308 pragma Inline (Context_Installed); 13309 pragma Inline (Context_Items); 13310 pragma Inline (Context_Pending); 13311 pragma Inline (Contract_Test_Cases); 13312 pragma Inline (Controlling_Argument); 13313 pragma Inline (Convert_To_Return_False); 13314 pragma Inline (Conversion_OK); 13315 pragma Inline (Corresponding_Aspect); 13316 pragma Inline (Corresponding_Body); 13317 pragma Inline (Corresponding_Formal_Spec); 13318 pragma Inline (Corresponding_Generic_Association); 13319 pragma Inline (Corresponding_Integer_Value); 13320 pragma Inline (Corresponding_Spec); 13321 pragma Inline (Corresponding_Spec_Of_Stub); 13322 pragma Inline (Corresponding_Stub); 13323 pragma Inline (Dcheck_Function); 13324 pragma Inline (Declarations); 13325 pragma Inline (Default_Expression); 13326 pragma Inline (Default_Storage_Pool); 13327 pragma Inline (Default_Name); 13328 pragma Inline (Defining_Identifier); 13329 pragma Inline (Defining_Unit_Name); 13330 pragma Inline (Delay_Alternative); 13331 pragma Inline (Delay_Statement); 13332 pragma Inline (Delta_Expression); 13333 pragma Inline (Digits_Expression); 13334 pragma Inline (Discr_Check_Funcs_Built); 13335 pragma Inline (Discrete_Choices); 13336 pragma Inline (Discrete_Range); 13337 pragma Inline (Discrete_Subtype_Definition); 13338 pragma Inline (Discrete_Subtype_Definitions); 13339 pragma Inline (Discriminant_Specifications); 13340 pragma Inline (Discriminant_Type); 13341 pragma Inline (Do_Accessibility_Check); 13342 pragma Inline (Do_Discriminant_Check); 13343 pragma Inline (Do_Length_Check); 13344 pragma Inline (Do_Division_Check); 13345 pragma Inline (Do_Overflow_Check); 13346 pragma Inline (Do_Range_Check); 13347 pragma Inline (Do_Storage_Check); 13348 pragma Inline (Do_Tag_Check); 13349 pragma Inline (Elaborate_All_Desirable); 13350 pragma Inline (Elaborate_All_Present); 13351 pragma Inline (Elaborate_Desirable); 13352 pragma Inline (Elaborate_Present); 13353 pragma Inline (Else_Actions); 13354 pragma Inline (Else_Statements); 13355 pragma Inline (Elsif_Parts); 13356 pragma Inline (Enclosing_Variant); 13357 pragma Inline (End_Label); 13358 pragma Inline (End_Span); 13359 pragma Inline (Entity); 13360 pragma Inline (Entity_Or_Associated_Node); 13361 pragma Inline (Entry_Body_Formal_Part); 13362 pragma Inline (Entry_Call_Alternative); 13363 pragma Inline (Entry_Call_Statement); 13364 pragma Inline (Entry_Direct_Name); 13365 pragma Inline (Entry_Index); 13366 pragma Inline (Entry_Index_Specification); 13367 pragma Inline (Etype); 13368 pragma Inline (Exception_Choices); 13369 pragma Inline (Exception_Handlers); 13370 pragma Inline (Exception_Junk); 13371 pragma Inline (Exception_Label); 13372 pragma Inline (Expansion_Delayed); 13373 pragma Inline (Explicit_Actual_Parameter); 13374 pragma Inline (Explicit_Generic_Actual_Parameter); 13375 pragma Inline (Expression); 13376 pragma Inline (Expression_Copy); 13377 pragma Inline (Expressions); 13378 pragma Inline (First_Bit); 13379 pragma Inline (First_Inlined_Subprogram); 13380 pragma Inline (First_Name); 13381 pragma Inline (First_Named_Actual); 13382 pragma Inline (First_Real_Statement); 13383 pragma Inline (First_Subtype_Link); 13384 pragma Inline (Float_Truncate); 13385 pragma Inline (Formal_Type_Definition); 13386 pragma Inline (Forwards_OK); 13387 pragma Inline (From_Aspect_Specification); 13388 pragma Inline (From_At_End); 13389 pragma Inline (From_At_Mod); 13390 pragma Inline (From_Conditional_Expression); 13391 pragma Inline (From_Default); 13392 pragma Inline (Generalized_Indexing); 13393 pragma Inline (Generic_Associations); 13394 pragma Inline (Generic_Formal_Declarations); 13395 pragma Inline (Generic_Parent); 13396 pragma Inline (Generic_Parent_Type); 13397 pragma Inline (Handled_Statement_Sequence); 13398 pragma Inline (Handler_List_Entry); 13399 pragma Inline (Has_Created_Identifier); 13400 pragma Inline (Has_Dereference_Action); 13401 pragma Inline (Has_Dynamic_Length_Check); 13402 pragma Inline (Has_Dynamic_Range_Check); 13403 pragma Inline (Has_Init_Expression); 13404 pragma Inline (Has_Local_Raise); 13405 pragma Inline (Has_Self_Reference); 13406 pragma Inline (Has_SP_Choice); 13407 pragma Inline (Has_No_Elaboration_Code); 13408 pragma Inline (Has_Pragma_Suppress_All); 13409 pragma Inline (Has_Private_View); 13410 pragma Inline (Has_Relative_Deadline_Pragma); 13411 pragma Inline (Has_Storage_Size_Pragma); 13412 pragma Inline (Has_Target_Names); 13413 pragma Inline (Has_Wide_Character); 13414 pragma Inline (Has_Wide_Wide_Character); 13415 pragma Inline (Header_Size_Added); 13416 pragma Inline (Hidden_By_Use_Clause); 13417 pragma Inline (High_Bound); 13418 pragma Inline (Identifier); 13419 pragma Inline (Implicit_With); 13420 pragma Inline (Interface_List); 13421 pragma Inline (Interface_Present); 13422 pragma Inline (Includes_Infinities); 13423 pragma Inline (Import_Interface_Present); 13424 pragma Inline (In_Present); 13425 pragma Inline (Incomplete_View); 13426 pragma Inline (Inherited_Discriminant); 13427 pragma Inline (Instance_Spec); 13428 pragma Inline (Intval); 13429 pragma Inline (Iterator_Specification); 13430 pragma Inline (Is_Abort_Block); 13431 pragma Inline (Is_Accessibility_Actual); 13432 pragma Inline (Is_Analyzed_Pragma); 13433 pragma Inline (Is_Asynchronous_Call_Block); 13434 pragma Inline (Is_Boolean_Aspect); 13435 pragma Inline (Is_Checked); 13436 pragma Inline (Is_Checked_Ghost_Pragma); 13437 pragma Inline (Is_Component_Left_Opnd); 13438 pragma Inline (Is_Component_Right_Opnd); 13439 pragma Inline (Is_Controlling_Actual); 13440 pragma Inline (Is_Declaration_Level_Node); 13441 pragma Inline (Is_Delayed_Aspect); 13442 pragma Inline (Is_Disabled); 13443 pragma Inline (Is_Dispatching_Call); 13444 pragma Inline (Is_Dynamic_Coextension); 13445 pragma Inline (Is_Effective_Use_Clause); 13446 pragma Inline (Is_Elaboration_Checks_OK_Node); 13447 pragma Inline (Is_Elaboration_Code); 13448 pragma Inline (Is_Elaboration_Warnings_OK_Node); 13449 pragma Inline (Is_Elsif); 13450 pragma Inline (Is_Entry_Barrier_Function); 13451 pragma Inline (Is_Expanded_Build_In_Place_Call); 13452 pragma Inline (Is_Expanded_Contract); 13453 pragma Inline (Is_Finalization_Wrapper); 13454 pragma Inline (Is_Folded_In_Parser); 13455 pragma Inline (Is_Generic_Contract_Pragma); 13456 pragma Inline (Is_Ignored); 13457 pragma Inline (Is_Ignored_Ghost_Pragma); 13458 pragma Inline (Is_In_Discriminant_Check); 13459 pragma Inline (Is_Inherited_Pragma); 13460 pragma Inline (Is_Initialization_Block); 13461 pragma Inline (Is_Known_Guaranteed_ABE); 13462 pragma Inline (Is_Machine_Number); 13463 pragma Inline (Is_Null_Loop); 13464 pragma Inline (Is_OpenAcc_Environment); 13465 pragma Inline (Is_OpenAcc_Loop); 13466 pragma Inline (Is_Overloaded); 13467 pragma Inline (Is_Power_Of_2_For_Shift); 13468 pragma Inline (Is_Prefixed_Call); 13469 pragma Inline (Is_Protected_Subprogram_Body); 13470 pragma Inline (Is_Qualified_Universal_Literal); 13471 pragma Inline (Is_Read); 13472 pragma Inline (Is_Source_Call); 13473 pragma Inline (Is_SPARK_Mode_On_Node); 13474 pragma Inline (Is_Static_Coextension); 13475 pragma Inline (Is_Static_Expression); 13476 pragma Inline (Is_Subprogram_Descriptor); 13477 pragma Inline (Is_Task_Allocation_Block); 13478 pragma Inline (Is_Task_Body_Procedure); 13479 pragma Inline (Is_Task_Master); 13480 pragma Inline (Is_Write); 13481 pragma Inline (Iteration_Scheme); 13482 pragma Inline (Itype); 13483 pragma Inline (Kill_Range_Check); 13484 pragma Inline (Last_Bit); 13485 pragma Inline (Last_Name); 13486 pragma Inline (Library_Unit); 13487 pragma Inline (Label_Construct); 13488 pragma Inline (Left_Opnd); 13489 pragma Inline (Limited_View_Installed); 13490 pragma Inline (Limited_Present); 13491 pragma Inline (Literals); 13492 pragma Inline (Local_Raise_Not_OK); 13493 pragma Inline (Local_Raise_Statements); 13494 pragma Inline (Loop_Actions); 13495 pragma Inline (Loop_Parameter_Specification); 13496 pragma Inline (Low_Bound); 13497 pragma Inline (Mod_Clause); 13498 pragma Inline (More_Ids); 13499 pragma Inline (Must_Be_Byte_Aligned); 13500 pragma Inline (Must_Not_Freeze); 13501 pragma Inline (Must_Not_Override); 13502 pragma Inline (Must_Override); 13503 pragma Inline (Name); 13504 pragma Inline (Names); 13505 pragma Inline (Next_Entity); 13506 pragma Inline (Next_Exit_Statement); 13507 pragma Inline (Next_Implicit_With); 13508 pragma Inline (Next_Named_Actual); 13509 pragma Inline (Next_Pragma); 13510 pragma Inline (Next_Rep_Item); 13511 pragma Inline (Next_Use_Clause); 13512 pragma Inline (No_Ctrl_Actions); 13513 pragma Inline (No_Elaboration_Check); 13514 pragma Inline (No_Entities_Ref_In_Spec); 13515 pragma Inline (No_Initialization); 13516 pragma Inline (No_Minimize_Eliminate); 13517 pragma Inline (No_Side_Effect_Removal); 13518 pragma Inline (No_Truncation); 13519 pragma Inline (Null_Excluding_Subtype); 13520 pragma Inline (Null_Exclusion_Present); 13521 pragma Inline (Null_Exclusion_In_Return_Present); 13522 pragma Inline (Null_Present); 13523 pragma Inline (Null_Record_Present); 13524 pragma Inline (Null_Statement); 13525 pragma Inline (Object_Definition); 13526 pragma Inline (Of_Present); 13527 pragma Inline (Original_Discriminant); 13528 pragma Inline (Original_Entity); 13529 pragma Inline (Others_Discrete_Choices); 13530 pragma Inline (Out_Present); 13531 pragma Inline (Parameter_Associations); 13532 pragma Inline (Parameter_Specifications); 13533 pragma Inline (Parameter_Type); 13534 pragma Inline (Parent_Spec); 13535 pragma Inline (Parent_With); 13536 pragma Inline (Position); 13537 pragma Inline (Pragma_Argument_Associations); 13538 pragma Inline (Pragma_Identifier); 13539 pragma Inline (Pragmas_After); 13540 pragma Inline (Pragmas_Before); 13541 pragma Inline (Pre_Post_Conditions); 13542 pragma Inline (Prefix); 13543 pragma Inline (Premature_Use); 13544 pragma Inline (Present_Expr); 13545 pragma Inline (Prev_Ids); 13546 pragma Inline (Prev_Use_Clause); 13547 pragma Inline (Print_In_Hex); 13548 pragma Inline (Private_Declarations); 13549 pragma Inline (Private_Present); 13550 pragma Inline (Procedure_To_Call); 13551 pragma Inline (Proper_Body); 13552 pragma Inline (Protected_Definition); 13553 pragma Inline (Protected_Present); 13554 pragma Inline (Raises_Constraint_Error); 13555 pragma Inline (Range_Constraint); 13556 pragma Inline (Range_Expression); 13557 pragma Inline (Real_Range_Specification); 13558 pragma Inline (Realval); 13559 pragma Inline (Reason); 13560 pragma Inline (Record_Extension_Part); 13561 pragma Inline (Redundant_Use); 13562 pragma Inline (Renaming_Exception); 13563 pragma Inline (Result_Definition); 13564 pragma Inline (Return_Object_Declarations); 13565 pragma Inline (Return_Statement_Entity); 13566 pragma Inline (Reverse_Present); 13567 pragma Inline (Right_Opnd); 13568 pragma Inline (Rounded_Result); 13569 pragma Inline (SCIL_Controlling_Tag); 13570 pragma Inline (SCIL_Entity); 13571 pragma Inline (SCIL_Tag_Value); 13572 pragma Inline (SCIL_Target_Prim); 13573 pragma Inline (Scope); 13574 pragma Inline (Select_Alternatives); 13575 pragma Inline (Selector_Name); 13576 pragma Inline (Selector_Names); 13577 pragma Inline (Shift_Count_OK); 13578 pragma Inline (Source_Type); 13579 pragma Inline (Specification); 13580 pragma Inline (Split_PPC); 13581 pragma Inline (Statements); 13582 pragma Inline (Storage_Pool); 13583 pragma Inline (Subpool_Handle_Name); 13584 pragma Inline (Strval); 13585 pragma Inline (Subtype_Indication); 13586 pragma Inline (Subtype_Mark); 13587 pragma Inline (Subtype_Marks); 13588 pragma Inline (Suppress_Assignment_Checks); 13589 pragma Inline (Suppress_Loop_Warnings); 13590 pragma Inline (Synchronized_Present); 13591 pragma Inline (Tagged_Present); 13592 pragma Inline (Target); 13593 pragma Inline (Target_Type); 13594 pragma Inline (Task_Definition); 13595 pragma Inline (Task_Present); 13596 pragma Inline (Then_Actions); 13597 pragma Inline (Then_Statements); 13598 pragma Inline (Triggering_Alternative); 13599 pragma Inline (Triggering_Statement); 13600 pragma Inline (Treat_Fixed_As_Integer); 13601 pragma Inline (TSS_Elist); 13602 pragma Inline (Type_Definition); 13603 pragma Inline (Uneval_Old_Accept); 13604 pragma Inline (Uneval_Old_Warn); 13605 pragma Inline (Unit); 13606 pragma Inline (Uninitialized_Variable); 13607 pragma Inline (Unknown_Discriminants_Present); 13608 pragma Inline (Unreferenced_In_Spec); 13609 pragma Inline (Variant_Part); 13610 pragma Inline (Variants); 13611 pragma Inline (Visible_Declarations); 13612 pragma Inline (Used_Operations); 13613 pragma Inline (Was_Attribute_Reference); 13614 pragma Inline (Was_Expression_Function); 13615 pragma Inline (Was_Originally_Stub); 13616 13617 pragma Inline (Set_Abort_Present); 13618 pragma Inline (Set_Abortable_Part); 13619 pragma Inline (Set_Abstract_Present); 13620 pragma Inline (Set_Accept_Handler_Records); 13621 pragma Inline (Set_Accept_Statement); 13622 pragma Inline (Set_Access_Definition); 13623 pragma Inline (Set_Access_To_Subprogram_Definition); 13624 pragma Inline (Set_Access_Types_To_Process); 13625 pragma Inline (Set_Actions); 13626 pragma Inline (Set_Activation_Chain_Entity); 13627 pragma Inline (Set_Acts_As_Spec); 13628 pragma Inline (Set_Actual_Designated_Subtype); 13629 pragma Inline (Set_Address_Warning_Posted); 13630 pragma Inline (Set_Aggregate_Bounds); 13631 pragma Inline (Set_Aliased_Present); 13632 pragma Inline (Set_Alloc_For_BIP_Return); 13633 pragma Inline (Set_All_Others); 13634 pragma Inline (Set_All_Present); 13635 pragma Inline (Set_Alternatives); 13636 pragma Inline (Set_Ancestor_Part); 13637 pragma Inline (Set_Array_Aggregate); 13638 pragma Inline (Set_Aspect_Rep_Item); 13639 pragma Inline (Set_Assignment_OK); 13640 pragma Inline (Set_Associated_Node); 13641 pragma Inline (Set_At_End_Proc); 13642 pragma Inline (Set_Atomic_Sync_Required); 13643 pragma Inline (Set_Attribute_Name); 13644 pragma Inline (Set_Aux_Decls_Node); 13645 pragma Inline (Set_Backwards_OK); 13646 pragma Inline (Set_Bad_Is_Detected); 13647 pragma Inline (Set_Body_Required); 13648 pragma Inline (Set_Body_To_Inline); 13649 pragma Inline (Set_Box_Present); 13650 pragma Inline (Set_By_Ref); 13651 pragma Inline (Set_Char_Literal_Value); 13652 pragma Inline (Set_Chars); 13653 pragma Inline (Set_Check_Address_Alignment); 13654 pragma Inline (Set_Choice_Parameter); 13655 pragma Inline (Set_Choices); 13656 pragma Inline (Set_Class_Present); 13657 pragma Inline (Set_Classifications); 13658 pragma Inline (Set_Cleanup_Actions); 13659 pragma Inline (Set_Comes_From_Extended_Return_Statement); 13660 pragma Inline (Set_Compile_Time_Known_Aggregate); 13661 pragma Inline (Set_Component_Associations); 13662 pragma Inline (Set_Component_Clauses); 13663 pragma Inline (Set_Component_Definition); 13664 pragma Inline (Set_Component_Items); 13665 pragma Inline (Set_Component_List); 13666 pragma Inline (Set_Component_Name); 13667 pragma Inline (Set_Componentwise_Assignment); 13668 pragma Inline (Set_Condition); 13669 pragma Inline (Set_Condition_Actions); 13670 pragma Inline (Set_Config_Pragmas); 13671 pragma Inline (Set_Constant_Present); 13672 pragma Inline (Set_Constraint); 13673 pragma Inline (Set_Constraints); 13674 pragma Inline (Set_Context_Installed); 13675 pragma Inline (Set_Context_Items); 13676 pragma Inline (Set_Context_Pending); 13677 pragma Inline (Set_Contract_Test_Cases); 13678 pragma Inline (Set_Controlling_Argument); 13679 pragma Inline (Set_Conversion_OK); 13680 pragma Inline (Set_Convert_To_Return_False); 13681 pragma Inline (Set_Corresponding_Aspect); 13682 pragma Inline (Set_Corresponding_Body); 13683 pragma Inline (Set_Corresponding_Formal_Spec); 13684 pragma Inline (Set_Corresponding_Generic_Association); 13685 pragma Inline (Set_Corresponding_Integer_Value); 13686 pragma Inline (Set_Corresponding_Spec); 13687 pragma Inline (Set_Corresponding_Spec_Of_Stub); 13688 pragma Inline (Set_Corresponding_Stub); 13689 pragma Inline (Set_Dcheck_Function); 13690 pragma Inline (Set_Declarations); 13691 pragma Inline (Set_Default_Expression); 13692 pragma Inline (Set_Default_Name); 13693 pragma Inline (Set_Default_Storage_Pool); 13694 pragma Inline (Set_Defining_Identifier); 13695 pragma Inline (Set_Defining_Unit_Name); 13696 pragma Inline (Set_Delay_Alternative); 13697 pragma Inline (Set_Delay_Statement); 13698 pragma Inline (Set_Delta_Expression); 13699 pragma Inline (Set_Digits_Expression); 13700 pragma Inline (Set_Discr_Check_Funcs_Built); 13701 pragma Inline (Set_Discrete_Choices); 13702 pragma Inline (Set_Discrete_Range); 13703 pragma Inline (Set_Discrete_Subtype_Definition); 13704 pragma Inline (Set_Discrete_Subtype_Definitions); 13705 pragma Inline (Set_Discriminant_Specifications); 13706 pragma Inline (Set_Discriminant_Type); 13707 pragma Inline (Set_Do_Accessibility_Check); 13708 pragma Inline (Set_Do_Discriminant_Check); 13709 pragma Inline (Set_Do_Division_Check); 13710 pragma Inline (Set_Do_Length_Check); 13711 pragma Inline (Set_Do_Overflow_Check); 13712 pragma Inline (Set_Do_Range_Check); 13713 pragma Inline (Set_Do_Storage_Check); 13714 pragma Inline (Set_Do_Tag_Check); 13715 pragma Inline (Set_Elaborate_All_Desirable); 13716 pragma Inline (Set_Elaborate_All_Present); 13717 pragma Inline (Set_Elaborate_Desirable); 13718 pragma Inline (Set_Elaborate_Present); 13719 pragma Inline (Set_Else_Actions); 13720 pragma Inline (Set_Else_Statements); 13721 pragma Inline (Set_Elsif_Parts); 13722 pragma Inline (Set_Enclosing_Variant); 13723 pragma Inline (Set_End_Label); 13724 pragma Inline (Set_End_Span); 13725 pragma Inline (Set_Entity); 13726 pragma Inline (Set_Entry_Body_Formal_Part); 13727 pragma Inline (Set_Entry_Call_Alternative); 13728 pragma Inline (Set_Entry_Call_Statement); 13729 pragma Inline (Set_Entry_Direct_Name); 13730 pragma Inline (Set_Entry_Index); 13731 pragma Inline (Set_Entry_Index_Specification); 13732 pragma Inline (Set_Etype); 13733 pragma Inline (Set_Exception_Choices); 13734 pragma Inline (Set_Exception_Handlers); 13735 pragma Inline (Set_Exception_Junk); 13736 pragma Inline (Set_Exception_Label); 13737 pragma Inline (Set_Expansion_Delayed); 13738 pragma Inline (Set_Explicit_Actual_Parameter); 13739 pragma Inline (Set_Explicit_Generic_Actual_Parameter); 13740 pragma Inline (Set_Expression); 13741 pragma Inline (Set_Expression_Copy); 13742 pragma Inline (Set_Expressions); 13743 pragma Inline (Set_First_Bit); 13744 pragma Inline (Set_First_Inlined_Subprogram); 13745 pragma Inline (Set_First_Name); 13746 pragma Inline (Set_First_Named_Actual); 13747 pragma Inline (Set_First_Real_Statement); 13748 pragma Inline (Set_First_Subtype_Link); 13749 pragma Inline (Set_Float_Truncate); 13750 pragma Inline (Set_Formal_Type_Definition); 13751 pragma Inline (Set_Forwards_OK); 13752 pragma Inline (Set_From_Aspect_Specification); 13753 pragma Inline (Set_From_At_End); 13754 pragma Inline (Set_From_At_Mod); 13755 pragma Inline (Set_From_Conditional_Expression); 13756 pragma Inline (Set_From_Default); 13757 pragma Inline (Set_Generalized_Indexing); 13758 pragma Inline (Set_Generic_Associations); 13759 pragma Inline (Set_Generic_Formal_Declarations); 13760 pragma Inline (Set_Generic_Parent); 13761 pragma Inline (Set_Generic_Parent_Type); 13762 pragma Inline (Set_Handled_Statement_Sequence); 13763 pragma Inline (Set_Handler_List_Entry); 13764 pragma Inline (Set_Has_Created_Identifier); 13765 pragma Inline (Set_Has_Dereference_Action); 13766 pragma Inline (Set_Has_Dynamic_Length_Check); 13767 pragma Inline (Set_Has_Dynamic_Range_Check); 13768 pragma Inline (Set_Has_Init_Expression); 13769 pragma Inline (Set_Has_Local_Raise); 13770 pragma Inline (Set_Has_No_Elaboration_Code); 13771 pragma Inline (Set_Has_Pragma_Suppress_All); 13772 pragma Inline (Set_Has_Private_View); 13773 pragma Inline (Set_Has_Relative_Deadline_Pragma); 13774 pragma Inline (Set_Has_Self_Reference); 13775 pragma Inline (Set_Has_SP_Choice); 13776 pragma Inline (Set_Has_Storage_Size_Pragma); 13777 pragma Inline (Set_Has_Target_Names); 13778 pragma Inline (Set_Has_Wide_Character); 13779 pragma Inline (Set_Has_Wide_Wide_Character); 13780 pragma Inline (Set_Header_Size_Added); 13781 pragma Inline (Set_Hidden_By_Use_Clause); 13782 pragma Inline (Set_High_Bound); 13783 pragma Inline (Set_Identifier); 13784 pragma Inline (Set_Implicit_With); 13785 pragma Inline (Set_Import_Interface_Present); 13786 pragma Inline (Set_In_Present); 13787 pragma Inline (Set_Includes_Infinities); 13788 pragma Inline (Set_Incomplete_View); 13789 pragma Inline (Set_Inherited_Discriminant); 13790 pragma Inline (Set_Instance_Spec); 13791 pragma Inline (Set_Interface_List); 13792 pragma Inline (Set_Interface_Present); 13793 pragma Inline (Set_Intval); 13794 pragma Inline (Set_Is_Abort_Block); 13795 pragma Inline (Set_Is_Accessibility_Actual); 13796 pragma Inline (Set_Is_Analyzed_Pragma); 13797 pragma Inline (Set_Is_Asynchronous_Call_Block); 13798 pragma Inline (Set_Is_Boolean_Aspect); 13799 pragma Inline (Set_Is_Checked); 13800 pragma Inline (Set_Is_Checked_Ghost_Pragma); 13801 pragma Inline (Set_Is_Component_Left_Opnd); 13802 pragma Inline (Set_Is_Component_Right_Opnd); 13803 pragma Inline (Set_Is_Controlling_Actual); 13804 pragma Inline (Set_Is_Declaration_Level_Node); 13805 pragma Inline (Set_Is_Delayed_Aspect); 13806 pragma Inline (Set_Is_Disabled); 13807 pragma Inline (Set_Is_Dispatching_Call); 13808 pragma Inline (Set_Is_Dynamic_Coextension); 13809 pragma Inline (Set_Is_Effective_Use_Clause); 13810 pragma Inline (Set_Is_Elaboration_Checks_OK_Node); 13811 pragma Inline (Set_Is_Elaboration_Code); 13812 pragma Inline (Set_Is_Elaboration_Warnings_OK_Node); 13813 pragma Inline (Set_Is_Elsif); 13814 pragma Inline (Set_Is_Entry_Barrier_Function); 13815 pragma Inline (Set_Is_Expanded_Build_In_Place_Call); 13816 pragma Inline (Set_Is_Expanded_Contract); 13817 pragma Inline (Set_Is_Finalization_Wrapper); 13818 pragma Inline (Set_Is_Folded_In_Parser); 13819 pragma Inline (Set_Is_Generic_Contract_Pragma); 13820 pragma Inline (Set_Is_Ignored); 13821 pragma Inline (Set_Is_Ignored_Ghost_Pragma); 13822 pragma Inline (Set_Is_In_Discriminant_Check); 13823 pragma Inline (Set_Is_Inherited_Pragma); 13824 pragma Inline (Set_Is_Initialization_Block); 13825 pragma Inline (Set_Is_Known_Guaranteed_ABE); 13826 pragma Inline (Set_Is_Machine_Number); 13827 pragma Inline (Set_Is_Null_Loop); 13828 pragma Inline (Set_Is_OpenAcc_Environment); 13829 pragma Inline (Set_Is_OpenAcc_Loop); 13830 pragma Inline (Set_Is_Overloaded); 13831 pragma Inline (Set_Is_Power_Of_2_For_Shift); 13832 pragma Inline (Set_Is_Prefixed_Call); 13833 pragma Inline (Set_Is_Protected_Subprogram_Body); 13834 pragma Inline (Set_Is_Qualified_Universal_Literal); 13835 pragma Inline (Set_Is_Read); 13836 pragma Inline (Set_Is_Source_Call); 13837 pragma Inline (Set_Is_SPARK_Mode_On_Node); 13838 pragma Inline (Set_Is_Static_Coextension); 13839 pragma Inline (Set_Is_Static_Expression); 13840 pragma Inline (Set_Is_Subprogram_Descriptor); 13841 pragma Inline (Set_Is_Task_Allocation_Block); 13842 pragma Inline (Set_Is_Task_Body_Procedure); 13843 pragma Inline (Set_Is_Task_Master); 13844 pragma Inline (Set_Is_Write); 13845 pragma Inline (Set_Iteration_Scheme); 13846 pragma Inline (Set_Iterator_Specification); 13847 pragma Inline (Set_Itype); 13848 pragma Inline (Set_Kill_Range_Check); 13849 pragma Inline (Set_Label_Construct); 13850 pragma Inline (Set_Last_Bit); 13851 pragma Inline (Set_Last_Name); 13852 pragma Inline (Set_Left_Opnd); 13853 pragma Inline (Set_Library_Unit); 13854 pragma Inline (Set_Limited_Present); 13855 pragma Inline (Set_Limited_View_Installed); 13856 pragma Inline (Set_Literals); 13857 pragma Inline (Set_Local_Raise_Not_OK); 13858 pragma Inline (Set_Local_Raise_Statements); 13859 pragma Inline (Set_Loop_Actions); 13860 pragma Inline (Set_Loop_Parameter_Specification); 13861 pragma Inline (Set_Low_Bound); 13862 pragma Inline (Set_Mod_Clause); 13863 pragma Inline (Set_More_Ids); 13864 pragma Inline (Set_Must_Be_Byte_Aligned); 13865 pragma Inline (Set_Must_Not_Freeze); 13866 pragma Inline (Set_Must_Not_Override); 13867 pragma Inline (Set_Must_Override); 13868 pragma Inline (Set_Name); 13869 pragma Inline (Set_Names); 13870 pragma Inline (Set_Next_Entity); 13871 pragma Inline (Set_Next_Exit_Statement); 13872 pragma Inline (Set_Next_Implicit_With); 13873 pragma Inline (Set_Next_Named_Actual); 13874 pragma Inline (Set_Next_Pragma); 13875 pragma Inline (Set_Next_Rep_Item); 13876 pragma Inline (Set_Next_Use_Clause); 13877 pragma Inline (Set_No_Ctrl_Actions); 13878 pragma Inline (Set_No_Elaboration_Check); 13879 pragma Inline (Set_No_Entities_Ref_In_Spec); 13880 pragma Inline (Set_No_Initialization); 13881 pragma Inline (Set_No_Minimize_Eliminate); 13882 pragma Inline (Set_No_Side_Effect_Removal); 13883 pragma Inline (Set_No_Truncation); 13884 pragma Inline (Set_Null_Excluding_Subtype); 13885 pragma Inline (Set_Null_Exclusion_Present); 13886 pragma Inline (Set_Null_Exclusion_In_Return_Present); 13887 pragma Inline (Set_Null_Present); 13888 pragma Inline (Set_Null_Record_Present); 13889 pragma Inline (Set_Null_Statement); 13890 pragma Inline (Set_Object_Definition); 13891 pragma Inline (Set_Of_Present); 13892 pragma Inline (Set_Original_Discriminant); 13893 pragma Inline (Set_Original_Entity); 13894 pragma Inline (Set_Others_Discrete_Choices); 13895 pragma Inline (Set_Out_Present); 13896 pragma Inline (Set_Parameter_Associations); 13897 pragma Inline (Set_Parameter_Specifications); 13898 pragma Inline (Set_Parameter_Type); 13899 pragma Inline (Set_Parent_Spec); 13900 pragma Inline (Set_Parent_With); 13901 pragma Inline (Set_Position); 13902 pragma Inline (Set_Pragma_Argument_Associations); 13903 pragma Inline (Set_Pragma_Identifier); 13904 pragma Inline (Set_Pragmas_After); 13905 pragma Inline (Set_Pragmas_Before); 13906 pragma Inline (Set_Pre_Post_Conditions); 13907 pragma Inline (Set_Prefix); 13908 pragma Inline (Set_Premature_Use); 13909 pragma Inline (Set_Present_Expr); 13910 pragma Inline (Set_Prev_Ids); 13911 pragma Inline (Set_Prev_Use_Clause); 13912 pragma Inline (Set_Print_In_Hex); 13913 pragma Inline (Set_Private_Declarations); 13914 pragma Inline (Set_Private_Present); 13915 pragma Inline (Set_Procedure_To_Call); 13916 pragma Inline (Set_Proper_Body); 13917 pragma Inline (Set_Protected_Definition); 13918 pragma Inline (Set_Protected_Present); 13919 pragma Inline (Set_Raises_Constraint_Error); 13920 pragma Inline (Set_Range_Constraint); 13921 pragma Inline (Set_Range_Expression); 13922 pragma Inline (Set_Real_Range_Specification); 13923 pragma Inline (Set_Realval); 13924 pragma Inline (Set_Reason); 13925 pragma Inline (Set_Record_Extension_Part); 13926 pragma Inline (Set_Redundant_Use); 13927 pragma Inline (Set_Renaming_Exception); 13928 pragma Inline (Set_Result_Definition); 13929 pragma Inline (Set_Return_Object_Declarations); 13930 pragma Inline (Set_Reverse_Present); 13931 pragma Inline (Set_Right_Opnd); 13932 pragma Inline (Set_Rounded_Result); 13933 pragma Inline (Set_SCIL_Controlling_Tag); 13934 pragma Inline (Set_SCIL_Entity); 13935 pragma Inline (Set_SCIL_Tag_Value); 13936 pragma Inline (Set_SCIL_Target_Prim); 13937 pragma Inline (Set_Scope); 13938 pragma Inline (Set_Select_Alternatives); 13939 pragma Inline (Set_Selector_Name); 13940 pragma Inline (Set_Selector_Names); 13941 pragma Inline (Set_Shift_Count_OK); 13942 pragma Inline (Set_Source_Type); 13943 pragma Inline (Set_Split_PPC); 13944 pragma Inline (Set_Statements); 13945 pragma Inline (Set_Storage_Pool); 13946 pragma Inline (Set_Strval); 13947 pragma Inline (Set_Subpool_Handle_Name); 13948 pragma Inline (Set_Subtype_Indication); 13949 pragma Inline (Set_Subtype_Mark); 13950 pragma Inline (Set_Subtype_Marks); 13951 pragma Inline (Set_Suppress_Assignment_Checks); 13952 pragma Inline (Set_Suppress_Loop_Warnings); 13953 pragma Inline (Set_Synchronized_Present); 13954 pragma Inline (Set_TSS_Elist); 13955 pragma Inline (Set_Tagged_Present); 13956 pragma Inline (Set_Target); 13957 pragma Inline (Set_Target_Type); 13958 pragma Inline (Set_Task_Definition); 13959 pragma Inline (Set_Task_Present); 13960 pragma Inline (Set_Then_Actions); 13961 pragma Inline (Set_Then_Statements); 13962 pragma Inline (Set_Treat_Fixed_As_Integer); 13963 pragma Inline (Set_Triggering_Alternative); 13964 pragma Inline (Set_Triggering_Statement); 13965 pragma Inline (Set_Type_Definition); 13966 pragma Inline (Set_Uneval_Old_Accept); 13967 pragma Inline (Set_Uneval_Old_Warn); 13968 pragma Inline (Set_Unit); 13969 pragma Inline (Set_Uninitialized_Variable); 13970 pragma Inline (Set_Unknown_Discriminants_Present); 13971 pragma Inline (Set_Unreferenced_In_Spec); 13972 pragma Inline (Set_Used_Operations); 13973 pragma Inline (Set_Variant_Part); 13974 pragma Inline (Set_Variants); 13975 pragma Inline (Set_Visible_Declarations); 13976 pragma Inline (Set_Was_Attribute_Reference); 13977 pragma Inline (Set_Was_Expression_Function); 13978 pragma Inline (Set_Was_Originally_Stub); 13979 13980end Sinfo; 13981