1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S I N F O -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2015, 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 -- When a declaration is subject to pragma Ghost, it establishes a Ghost 532 -- region depending on the Ghost assertion policy in effect at the point 533 -- of declaration. This region is temporal and starts right before the 534 -- analysis of the Ghost declaration and ends after its expansion. The 535 -- values of global variable Opt.Ghost_Mode are as follows: 536 537 -- 1. Check - All static semantics as defined in SPARK RM 6.9 are in 538 -- effect. 539 540 -- 2. Ignore - Same as Check, ignored Ghost code is not present in ALI 541 -- files, object files as well as the final executable. 542 543 -- To achieve the runtime semantics of "Ignore", the compiler marks each 544 -- node created during an ignored Ghost region and signals all enclosing 545 -- scopes that such a node resides within. The compilation unit where the 546 -- node resides is also added to an auxiliary table for post processing. 547 548 -- After the analysis and expansion of all compilation units takes place 549 -- as well as the instantiation of all inlined [generic] bodies, the GNAT 550 -- driver initiates a separate pass which removes all ignored Ghost code 551 -- from all units stored in the auxiliary table. 552 553 -------------------- 554 -- GNATprove Mode -- 555 -------------------- 556 557 -- When a file is compiled in GNATprove mode (-gnatd.F), a very light 558 -- expansion is performed and the analysis must generate a tree in a 559 -- form that meets additional requirements. 560 561 -- This light expansion does two transformations of the tree that cannot 562 -- be postponed till after semantic analysis: 563 564 -- 1. Replace object renamings by renamed object. This requires the 565 -- introduction of temporaries at the point of the renaming, which 566 -- must be properly analyzed. 567 568 -- 2. Fully qualify entity names. This is needed to generate suitable 569 -- local effects and call-graphs in ALI files, with the completely 570 -- qualified names (in particular the suffix to distinguish homonyms). 571 572 -- The tree after this light expansion should be fully analyzed 573 -- semantically, which sometimes requires the insertion of semantic 574 -- pre-analysis, for example for subprogram contracts and pragma 575 -- check/assert. In particular, all expression must have their proper type, 576 -- and semantic links should be set between tree nodes (partial to full 577 -- view, etc.) Some kinds of nodes should be either absent, or can be 578 -- ignored by the formal verification backend: 579 580 -- N_Object_Renaming_Declaration: can be ignored safely 581 -- N_Expression_Function: absent (rewritten) 582 -- N_Expression_With_Actions: absent (not generated) 583 584 -- SPARK cross-references are generated from the regular cross-references 585 -- (used for browsing and code understanding) and additional references 586 -- collected during semantic analysis, in particular on all dereferences. 587 -- These SPARK cross-references are output in a separate section of ALI 588 -- files, as described in spark_xrefs.adb. They are the basis for the 589 -- computation of data dependences in GNATprove. This implies that all 590 -- cross-references should be generated in this mode, even those that would 591 -- not make sense from a user point-of-view, and that cross-references that 592 -- do not lead to data dependences for subprograms can be safely ignored. 593 594 -- GNATprove relies on the following front end behaviors: 595 596 -- 1. The first declarations in the list of visible declarations of 597 -- a package declaration for a generic instance, up to the first 598 -- declaration which comes from source, should correspond to 599 -- the "mappings nodes" between formal and actual generic parameters. 600 601 -- 2. In addition pragma Debug statements are removed from the tree 602 -- (rewritten to NULL stmt), since they should be ignored in formal 603 -- verification. 604 605 -- 3. An error is also issued for missing subunits, similar to the 606 -- warning issued when generating code, to avoid formal verification 607 -- of a partial unit. 608 609 -- 4. Unconstrained types are not replaced by constrained types whose 610 -- bounds are generated from an expression: Expand_Subtype_From_Expr 611 -- should be a no-op. 612 613 -- 5. Errors (instead of warnings) are issued on compile-time-known 614 -- constraint errors even though such cases do not correspond to 615 -- illegalities in the Ada RM (this is simply another case where 616 -- GNATprove implements a subset of the full language). 617 -- 618 -- However, there are a few exceptions to this rule for cases where 619 -- we want to allow the GNATprove analysis to proceed (e.g. range 620 -- checks on empty ranges, which typically appear in deactivated 621 -- code in a particular configuration). 622 623 -- 6. Subtypes should match in the AST, even after a generic is 624 -- instantiated. In particular, GNATprove relies on the fact that, 625 -- on a selected component, the type of the selected component is 626 -- the type of the corresponding component in the prefix of the 627 -- selected component. 628 -- 629 -- Note that, in some cases, we know that this rule is broken by the 630 -- frontend. In particular, if the selected component is a packed 631 -- array depending on a discriminant of a unconstrained formal object 632 -- parameter of a generic. 633 634 ----------------------- 635 -- Check Flag Fields -- 636 ----------------------- 637 638 -- The following flag fields appear in expression nodes: 639 640 -- Do_Division_Check 641 -- Do_Overflow_Check 642 -- Do_Range_Check 643 644 -- These three flags are always set by the front end during semantic 645 -- analysis, on expression nodes that may trigger the corresponding 646 -- check. The front end then inserts or not the check during expansion. In 647 -- particular, these flags should also be correctly set in ASIS mode and 648 -- GNATprove mode. 649 650 -- Note: the expander always takes care of the Do_Range check case, 651 -- so this flag will never be set in the expanded tree passed to the 652 -- back end code generator. 653 654 -- Note that this accounts for all nodes that trigger the corresponding 655 -- checks, except for range checks on subtype_indications, which may be 656 -- required to check that a range_constraint is compatible with the given 657 -- subtype (RM 3.2.2(11)). 658 659 -- The following flag fields appear in various nodes: 660 661 -- Do_Accessibility_Check 662 -- Do_Discriminant_Check 663 -- Do_Length_Check 664 -- Do_Storage_Check 665 -- Do_Tag_Check 666 667 -- These flags are used in some specific cases by the front end, either 668 -- during semantic analysis or during expansion, and cannot be expected 669 -- to be set on all nodes that trigger the corresponding check. 670 671 ------------------------ 672 -- Common Flag Fields -- 673 ------------------------ 674 675 -- The following flag fields appear in all nodes: 676 677 -- Analyzed 678 -- This flag is used to indicate that a node (and all its children have 679 -- been analyzed. It is used to avoid reanalysis of a node that has 680 -- already been analyzed, both for efficiency and functional correctness 681 -- reasons. 682 683 -- Comes_From_Source 684 -- This flag is set if the node comes directly from an explicit construct 685 -- in the source. It is normally on for any nodes built by the scanner or 686 -- parser from the source program, with the exception that in a few cases 687 -- the parser adds nodes to normalize the representation (in particular 688 -- a null statement is added to a package body if there is no begin/end 689 -- initialization section. 690 -- 691 -- Most nodes inserted by the analyzer or expander are not considered 692 -- as coming from source, so the flag is off for such nodes. In a few 693 -- cases, the expander constructs nodes closely equivalent to nodes 694 -- from the source program (e.g. the allocator built for build-in-place 695 -- case), and the Comes_From_Source flag is deliberately set. 696 697 -- Error_Posted 698 -- This flag is used to avoid multiple error messages being posted on or 699 -- referring to the same node. This flag is set if an error message 700 -- refers to a node or is posted on its source location, and has the 701 -- effect of inhibiting further messages involving this same node. 702 703 ----------------------- 704 -- Modify_Tree_For_C -- 705 ----------------------- 706 707 -- If the flag Opt.Modify_Tree_For_C is set True, then the tree is modified 708 -- in ways that help match the semantics better with C, easing the task of 709 -- interfacing to C code generators (other than GCC, where the work is done 710 -- in gigi, and there is no point in changing that), and also making life 711 -- easier for Cprint in generating C source code. 712 713 -- The current modifications implemented are as follows: 714 715 -- N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic nodes 716 -- are eliminated from the tree (since these operations do not exist in 717 -- C), and the operations are rewritten in terms of logical shifts and 718 -- other logical operations that do exist in C. See Exp_Ch4 expansion 719 -- routines for these operators for details of the transformations made. 720 721 -- The right operand of N_Op_Shift_Right and N_Op_Shift_Left is always 722 -- less than the word size (since other values are not well-defined in 723 -- C). This is done using an explicit test if necessary. 724 725 -- Min and Max attributes are expanded into equivalent if expressions, 726 -- dealing properly with side effect issues. 727 728 -- Mod for signed integer types is expanded into equivalent expressions 729 -- using Rem (which is % in C) and other C-available operators. 730 731 -- Functions returning bounded arrays are transformed into procedures 732 -- with an extra out parameter, and the calls updated accordingly. 733 734 -- Aggregates are only kept unexpanded for object declarations, otherwise 735 -- they are systematically expanded into loops (for arrays) and 736 -- individual assignments (for records). 737 738 ------------------------------------ 739 -- Description of Semantic Fields -- 740 ------------------------------------ 741 742 -- The meaning of the syntactic fields is generally clear from their names 743 -- without any further description, since the names are chosen to 744 -- correspond very closely to the syntax in the reference manual. This 745 -- section describes the usage of the semantic fields, which are used to 746 -- contain additional information determined during semantic analysis. 747 748 -- ABE_Is_Certain (Flag18-Sem) 749 -- This flag is set in an instantiation node or a call node is determined 750 -- to be sure to raise an ABE. This is used to trigger special handling 751 -- of such cases, particularly in the instantiation case where we avoid 752 -- instantiating the body if this flag is set. This flag is also present 753 -- in an N_Formal_Package_Declaration node since formal package 754 -- declarations are treated like instantiations, but it is always set to 755 -- False in this context. 756 757 -- Accept_Handler_Records (List5-Sem) 758 -- This field is present only in an N_Accept_Alternative node. It is used 759 -- to temporarily hold the exception handler records from an accept 760 -- statement in a selective accept. These exception handlers will 761 -- eventually be placed in the Handler_Records list of the procedure 762 -- built for this accept (see Expand_N_Selective_Accept procedure in 763 -- Exp_Ch9 for further details). 764 765 -- Access_Types_To_Process (Elist2-Sem) 766 -- Present in N_Freeze_Entity nodes for Incomplete or private types. 767 -- Contains the list of access types which may require specific treatment 768 -- when the nature of the type completion is completely known. An example 769 -- of such treatment is the generation of the associated_final_chain. 770 771 -- Actions (List1-Sem) 772 -- This field contains a sequence of actions that are associated with the 773 -- node holding the field. See the individual node types for details of 774 -- how this field is used, as well as the description of the specific use 775 -- for a particular node type. 776 777 -- Activation_Chain_Entity (Node3-Sem) 778 -- This is used in tree nodes representing task activators (blocks, 779 -- subprogram bodies, package declarations, and task bodies). It is 780 -- initially Empty, and then gets set to point to the entity for the 781 -- declared Activation_Chain variable when the first task is declared. 782 -- When tasks are declared in the corresponding declarative region this 783 -- entity is located by name (its name is always _Chain) and the declared 784 -- tasks are added to the chain. Note that N_Extended_Return_Statement 785 -- does not have this attribute, although it does have an activation 786 -- chain. This chain is used to store the tasks temporarily, and is not 787 -- used for activating them. On successful completion of the return 788 -- statement, the tasks are moved to the caller's chain, and the caller 789 -- activates them. 790 791 -- Acts_As_Spec (Flag4-Sem) 792 -- A flag set in the N_Subprogram_Body node for a subprogram body which 793 -- is acting as its own spec. In the case of a library-level subprogram 794 -- the flag is set as well on the parent compilation unit node. 795 796 -- Actual_Designated_Subtype (Node4-Sem) 797 -- Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi 798 -- needs to known the dynamic constrained subtype of the designated 799 -- object, this attribute is set to that type. This is done for 800 -- N_Free_Statements for access-to-classwide types and access to 801 -- unconstrained packed array types, and for N_Explicit_Dereference when 802 -- the designated type is an unconstrained packed array and the 803 -- dereference is the prefix of a 'Size attribute reference. 804 805 -- Address_Warning_Posted (Flag18-Sem) 806 -- Present in N_Attribute_Definition nodes. Set to indicate that we have 807 -- posted a warning for the address clause regarding size or alignment 808 -- issues. Used to inhibit multiple redundant messages. 809 810 -- Aggregate_Bounds (Node3-Sem) 811 -- Present in array N_Aggregate nodes. If the bounds of the aggregate are 812 -- known at compile time, this field points to an N_Range node with those 813 -- bounds. Otherwise Empty. 814 815 -- All_Others (Flag11-Sem) 816 -- Present in an N_Others_Choice node. This flag is set for an others 817 -- exception where all exceptions are to be caught, even those that are 818 -- not normally handled (in particular the tasking abort signal). This 819 -- is used for translation of the at end handler into a normal exception 820 -- handler. 821 822 -- Aspect_Rep_Item (Node2-Sem) 823 -- Present in N_Aspect_Specification nodes. Points to the corresponding 824 -- pragma/attribute definition node used to process the aspect. 825 826 -- Assignment_OK (Flag15-Sem) 827 -- This flag is set in a subexpression node for an object, indicating 828 -- that the associated object can be modified, even if this would not 829 -- normally be permissible (either by direct assignment, or by being 830 -- passed as an out or in-out parameter). This is used by the expander 831 -- for a number of purposes, including initialization of constants and 832 -- limited type objects (such as tasks), setting discriminant fields, 833 -- setting tag values, etc. N_Object_Declaration nodes also have this 834 -- flag defined. Here it is used to indicate that an initialization 835 -- expression is valid, even where it would normally not be allowed 836 -- (e.g. where the type involved is limited). It is also used to stop 837 -- a Force_Evaluation call for an unchecked conversion, but this usage 838 -- is unclear and not documented ??? 839 840 -- Associated_Node (Node4-Sem) 841 -- Present in nodes that can denote an entity: identifiers, character 842 -- literals, operator symbols, expanded names, operator nodes, and 843 -- attribute reference nodes (all these nodes have an Entity field). 844 -- This field is also present in N_Aggregate, N_Selected_Component, and 845 -- N_Extension_Aggregate nodes. This field is used in generic processing 846 -- to create links between the generic template and the generic copy. 847 -- See Sem_Ch12.Get_Associated_Node for full details. Note that this 848 -- field overlaps Entity, which is fine, since, as explained in Sem_Ch12, 849 -- the normal function of Entity is not required at the point where the 850 -- Associated_Node is set. Note also, that in generic templates, this 851 -- means that the Entity field does not necessarily point to an Entity. 852 -- Since the back end is expected to ignore generic templates, this is 853 -- harmless. 854 855 -- Atomic_Sync_Required (Flag14-Sem) 856 -- This flag is set on a node for which atomic synchronization is 857 -- required for the corresponding reference or modification. 858 859 -- At_End_Proc (Node1) 860 -- This field is present in an N_Handled_Sequence_Of_Statements node. 861 -- It contains an identifier reference for the cleanup procedure to be 862 -- called. See description of this node for further details. 863 864 -- Backwards_OK (Flag6-Sem) 865 -- A flag present in the N_Assignment_Statement node. It is used only 866 -- if the type being assigned is an array type, and is set if analysis 867 -- determines that it is definitely safe to do the copy backwards, i.e. 868 -- starting at the highest addressed element. This is the case if either 869 -- the operands do not overlap, or they may overlap, but if they do, 870 -- then the left operand is at a higher address than the right operand. 871 -- 872 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 873 -- means that the front end could not determine that either direction is 874 -- definitely safe, and a runtime check may be required if the backend 875 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 876 -- set, it means that the front end can assure no overlap of operands. 877 878 -- Body_To_Inline (Node3-Sem) 879 -- Present in subprogram declarations. Denotes analyzed but unexpanded 880 -- body of subprogram, to be used when inlining calls. Present when the 881 -- subprogram has an Inline pragma and inlining is enabled. If the 882 -- declaration is completed by a renaming_as_body, and the renamed en- 883 -- tity is a subprogram, the Body_To_Inline is the name of that entity, 884 -- which is used directly in later calls to the original subprogram. 885 886 -- Body_Required (Flag13-Sem) 887 -- A flag that appears in the N_Compilation_Unit node indicating that 888 -- the corresponding unit requires a body. For the package case, this 889 -- indicates that a completion is required. In Ada 95, if the flag is not 890 -- set for the package case, then a body may not be present. In Ada 83, 891 -- if the flag is not set for the package case, then body is optional. 892 -- For a subprogram declaration, the flag is set except in the case where 893 -- a pragma Import or Interface applies, in which case no body is 894 -- permitted (in Ada 83 or Ada 95). 895 896 -- By_Ref (Flag5-Sem) 897 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement, 898 -- this flag is set when the returned expression is already allocated on 899 -- the secondary stack and thus the result is passed by reference rather 900 -- than copied another time. 901 902 -- Cleanup_Actions (List5-Sem) 903 -- Present in block statements created for transient blocks, contains 904 -- additional cleanup actions carried over from the transient scope. 905 906 -- Check_Address_Alignment (Flag11-Sem) 907 -- A flag present in N_Attribute_Definition clause for a 'Address 908 -- attribute definition. This flag is set if a dynamic check should be 909 -- generated at the freeze point for the entity to which this address 910 -- clause applies. The reason that we need this flag is that we want to 911 -- check for range checks being suppressed at the point where the 912 -- attribute definition clause is given, rather than testing this at the 913 -- freeze point. 914 915 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 916 -- Present in N_Simple_Return_Statement nodes. True if this node was 917 -- constructed as part of the N_Extended_Return_Statement expansion. 918 919 -- Compile_Time_Known_Aggregate (Flag18-Sem) 920 -- Present in N_Aggregate nodes. Set for aggregates which can be fully 921 -- evaluated at compile time without raising constraint error. Such 922 -- aggregates can be passed as is the back end without any expansion. 923 -- See Exp_Aggr for specific conditions under which this flag gets set. 924 925 -- Componentwise_Assignment (Flag14-Sem) 926 -- Present in N_Assignment_Statement nodes. Set for a record assignment 927 -- where all that needs doing is to expand it into component-by-component 928 -- assignments. This is used internally for the case of tagged types with 929 -- rep clauses, where we need to avoid recursion (we don't want to try to 930 -- generate a call to the primitive operation, because this is the case 931 -- where we are compiling the primitive operation). Note that when we are 932 -- expanding component assignments in this case, we never assign the _tag 933 -- field, but we recursively assign components of the parent type. 934 935 -- Condition_Actions (List3-Sem) 936 -- This field appears in else-if nodes and in the iteration scheme node 937 -- for while loops. This field is only used during semantic processing to 938 -- temporarily hold actions inserted into the tree. In the tree passed 939 -- to gigi, the condition actions field is always set to No_List. For 940 -- details on how this field is used, see the routine Insert_Actions in 941 -- package Exp_Util, and also the expansion routines for the relevant 942 -- nodes. 943 944 -- Context_Pending (Flag16-Sem) 945 -- This field appears in Compilation_Unit nodes, to indicate that the 946 -- context of the unit is being compiled. Used to detect circularities 947 -- that are not otherwise detected by the loading mechanism. Such 948 -- circularities can occur in the presence of limited and non-limited 949 -- with_clauses that mention the same units. 950 951 -- Controlling_Argument (Node1-Sem) 952 -- This field is set in procedure and function call nodes if the call 953 -- is a dispatching call (it is Empty for a non-dispatching call). It 954 -- indicates the source of the call's controlling tag. For procedure 955 -- calls, the Controlling_Argument is one of the actuals. For function 956 -- that has a dispatching result, it is an entity in the context of the 957 -- call that can provide a tag, or else it is the tag of the root type 958 -- of the class. It can also specify a tag directly rather than being a 959 -- tagged object. The latter is needed by the implementations of AI-239 960 -- and AI-260. 961 962 -- Conversion_OK (Flag14-Sem) 963 -- A flag set on type conversion nodes to indicate that the conversion 964 -- is to be considered as being valid, even though it is the case that 965 -- the conversion is not valid Ada. This is used for attributes Enum_Rep, 966 -- Fixed_Value and Integer_Value, for internal conversions done for 967 -- fixed-point operations, and for certain conversions for calls to 968 -- initialization procedures. If Conversion_OK is set, then Etype must be 969 -- set (the analyzer assumes that Etype has been set). For the case of 970 -- fixed-point operands, it also indicates that the conversion is to be 971 -- direct conversion of the underlying integer result, with no regard to 972 -- the small operand. 973 974 -- Convert_To_Return_False (Flag13-Sem) 975 -- Present in N_Raise_Expression nodes that appear in the body of the 976 -- special predicateM function used to test a predicate in the context 977 -- of a membership test, where raise expression results in returning a 978 -- value of False rather than raising an exception. 979 980 -- Corresponding_Aspect (Node3-Sem) 981 -- Present in N_Pragma node. Used to point back to the source aspect from 982 -- the corresponding pragma. This field is Empty for source pragmas. 983 984 -- Corresponding_Body (Node5-Sem) 985 -- This field is set in subprogram declarations, package declarations, 986 -- entry declarations of protected types, and in generic units. It points 987 -- to the defining entity for the corresponding body (NOT the node for 988 -- the body itself). 989 990 -- Corresponding_Formal_Spec (Node3-Sem) 991 -- This field is set in subprogram renaming declarations, where it points 992 -- to the defining entity for a formal subprogram in the case where the 993 -- renaming corresponds to a generic formal subprogram association in an 994 -- instantiation. The field is Empty if the renaming does not correspond 995 -- to such a formal association. 996 997 -- Corresponding_Generic_Association (Node5-Sem) 998 -- This field is defined for object declarations and object renaming 999 -- declarations. It is set for the declarations within an instance that 1000 -- map generic formals to their actuals. If set, the field points to 1001 -- a generic_association which is the original parent of the expression 1002 -- or name appearing in the declaration. This simplifies ASIS queries. 1003 1004 -- Corresponding_Integer_Value (Uint4-Sem) 1005 -- This field is set in real literals of fixed-point types (it is not 1006 -- used for floating-point types). It contains the integer value used 1007 -- to represent the fixed-point value. It is also set on the universal 1008 -- real literals used to represent bounds of fixed-point base types 1009 -- and their first named subtypes. 1010 1011 -- Corresponding_Spec (Node5-Sem) 1012 -- This field is set in subprogram, package, task, and protected body 1013 -- nodes, where it points to the defining entity in the corresponding 1014 -- spec. The attribute is also set in N_With_Clause nodes where it points 1015 -- to the defining entity for the with'ed spec, and in a subprogram 1016 -- renaming declaration when it is a Renaming_As_Body. The field is Empty 1017 -- if there is no corresponding spec, as in the case of a subprogram body 1018 -- that serves as its own spec. 1019 -- 1020 -- In Ada 2012, Corresponding_Spec is set on expression functions that 1021 -- complete a subprogram declaration. 1022 1023 -- Corresponding_Spec_Of_Stub (Node2-Sem) 1024 -- This field is present in subprogram, package, task and protected body 1025 -- stubs where it points to the corresponding spec of the stub. Due to 1026 -- clashes in the structure of nodes, we cannot use Corresponding_Spec. 1027 1028 -- Corresponding_Stub (Node3-Sem) 1029 -- This field is present in an N_Subunit node. It holds the node in 1030 -- the parent unit that is the stub declaration for the subunit. It is 1031 -- set when analysis of the stub forces loading of the proper body. If 1032 -- expansion of the proper body creates new declarative nodes, they are 1033 -- inserted at the point of the corresponding_stub. 1034 1035 -- Dcheck_Function (Node5-Sem) 1036 -- This field is present in an N_Variant node, It references the entity 1037 -- for the discriminant checking function for the variant. 1038 1039 -- Default_Expression (Node5-Sem) 1040 -- This field is Empty if there is no default expression. If there is a 1041 -- simple default expression (one with no side effects), then this field 1042 -- simply contains a copy of the Expression field (both point to the tree 1043 -- for the default expression). Default_Expression is used for 1044 -- conformance checking. 1045 1046 -- Default_Storage_Pool (Node3-Sem) 1047 -- This field is present in N_Compilation_Unit_Aux nodes. It is set to a 1048 -- copy of Opt.Default_Pool at the end of the compilation unit. See 1049 -- package Opt for details. This is used for inheriting the 1050 -- Default_Storage_Pool in child units. 1051 1052 -- Discr_Check_Funcs_Built (Flag11-Sem) 1053 -- This flag is present in N_Full_Type_Declaration nodes. It is set when 1054 -- discriminant checking functions are constructed. The purpose is to 1055 -- avoid attempting to set these functions more than once. 1056 1057 -- Do_Accessibility_Check (Flag13-Sem) 1058 -- This flag is set on N_Parameter_Specification nodes to indicate 1059 -- that an accessibility check is required for the parameter. It is 1060 -- not yet decided who takes care of this check (TBD ???). 1061 1062 -- Do_Discriminant_Check (Flag1-Sem) 1063 -- This flag is set on N_Selected_Component nodes to indicate that a 1064 -- discriminant check is required using the discriminant check routine 1065 -- associated with the selector. The actual check is generated by the 1066 -- expander when processing selected components. In the case of 1067 -- Unchecked_Union, the flag is also set, but no discriminant check 1068 -- routine is associated with the selector, and the expander does not 1069 -- generate a check. This flag is also present in assignment statements 1070 -- (and set if the assignment requires a discriminant check), and in type 1071 -- conversion nodes (and set if the conversion requires a check). 1072 1073 -- Do_Division_Check (Flag13-Sem) 1074 -- This flag is set on a division operator (/ mod rem) to indicate 1075 -- that a zero divide check is required. The actual check is dealt 1076 -- with by the backend (all the front end does is to set the flag). 1077 1078 -- Do_Length_Check (Flag4-Sem) 1079 -- This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or, 1080 -- N_Op_Xor, or N_Type_Conversion node to indicate that a length check 1081 -- is required. It is not determined who deals with this flag (???). 1082 1083 -- Do_Overflow_Check (Flag17-Sem) 1084 -- This flag is set on an operator where an overflow check is required on 1085 -- the operation. The actual check is dealt with by the backend (all the 1086 -- front end does is to set the flag). The other cases where this flag is 1087 -- used is on a Type_Conversion node and for attribute reference nodes. 1088 -- For a type conversion, it means that the conversion is from one base 1089 -- type to another, and the value may not fit in the target base type. 1090 -- See also the description of Do_Range_Check for this case. The only 1091 -- attribute references which use this flag are Pred and Succ, where it 1092 -- means that the result should be checked for going outside the base 1093 -- range. Note that this flag is not set for modular types. This flag is 1094 -- also set on if and case expression nodes if we are operating in either 1095 -- MINIMIZED or ELIMINATED overflow checking mode (to make sure that we 1096 -- properly process overflow checking for dependent expressions). 1097 1098 -- Do_Range_Check (Flag9-Sem) 1099 -- This flag is set on an expression which appears in a context where a 1100 -- range check is required. The target type is clear from the context. 1101 -- The contexts in which this flag can appear are the following: 1102 1103 -- Right side of an assignment. In this case the target type is 1104 -- taken from the left side of the assignment, which is referenced 1105 -- by the Name of the N_Assignment_Statement node. 1106 1107 -- Subscript expressions in an indexed component. In this case the 1108 -- target type is determined from the type of the array, which is 1109 -- referenced by the Prefix of the N_Indexed_Component node. 1110 1111 -- Argument expression for a parameter, appearing either directly in 1112 -- the Parameter_Associations list of a call or as the Expression of an 1113 -- N_Parameter_Association node that appears in this list. In either 1114 -- case, the check is against the type of the formal. Note that the 1115 -- flag is relevant only in IN and IN OUT parameters, and will be 1116 -- ignored for OUT parameters, where no check is required in the call, 1117 -- and if a check is required on the return, it is generated explicitly 1118 -- with a type conversion. 1119 1120 -- Initialization expression for the initial value in an object 1121 -- declaration. In this case the Do_Range_Check flag is set on 1122 -- the initialization expression, and the check is against the 1123 -- range of the type of the object being declared. This includes the 1124 -- cases of expressions providing default discriminant values, and 1125 -- expressions used to initialize record components. 1126 1127 -- The expression of a type conversion. In this case the range check is 1128 -- against the target type of the conversion. See also the use of 1129 -- Do_Overflow_Check on a type conversion. The distinction is that the 1130 -- overflow check protects against a value that is outside the range of 1131 -- the target base type, whereas a range check checks that the 1132 -- resulting value (which is a value of the base type of the target 1133 -- type), satisfies the range constraint of the target type. 1134 1135 -- Note: when a range check is required in contexts other than those 1136 -- listed above (e.g. in a return statement), an additional type 1137 -- conversion node is introduced to represent the required check. 1138 1139 -- A special case arises for the arguments of the Pred/Succ attributes. 1140 -- Here the range check needed is against First + 1 .. Last (Pred) or 1141 -- First .. Last - 1 (Succ) of the corresponding base type. Essentially 1142 -- these checks are what would be performed within the implicit body of 1143 -- the functions that correspond to these attributes. In these cases, 1144 -- the Do_Range check flag is set on the argument to the attribute 1145 -- function, and the back end must special case the appropriate range 1146 -- to check against. 1147 1148 -- Do_Storage_Check (Flag17-Sem) 1149 -- This flag is set in an N_Allocator node to indicate that a storage 1150 -- check is required for the allocation, or in an N_Subprogram_Body node 1151 -- to indicate that a stack check is required in the subprogram prologue. 1152 -- The N_Allocator case is handled by the routine that expands the call 1153 -- to the runtime routine. The N_Subprogram_Body case is handled by the 1154 -- backend, and all the semantics does is set the flag. 1155 1156 -- Do_Tag_Check (Flag13-Sem) 1157 -- This flag is set on an N_Assignment_Statement, N_Function_Call, 1158 -- N_Procedure_Call_Statement, N_Type_Conversion, 1159 -- N_Simple_Return_Statement, or N_Extended_Return_Statement 1160 -- node to indicate that the tag check can be suppressed. It is not 1161 -- yet decided how this flag is used (TBD ???). 1162 1163 -- Elaborate_Present (Flag4-Sem) 1164 -- This flag is set in the N_With_Clause node to indicate that pragma 1165 -- Elaborate pragma appears for the with'ed units. 1166 1167 -- Elaborate_All_Desirable (Flag9-Sem) 1168 -- This flag is set in the N_With_Clause mode to indicate that the static 1169 -- elaboration processing has determined that an Elaborate_All pragma is 1170 -- desirable for correct elaboration for this unit. 1171 1172 -- Elaborate_All_Present (Flag14-Sem) 1173 -- This flag is set in the N_With_Clause node to indicate that a 1174 -- pragma Elaborate_All pragma appears for the with'ed units. 1175 1176 -- Elaborate_Desirable (Flag11-Sem) 1177 -- This flag is set in the N_With_Clause mode to indicate that the static 1178 -- elaboration processing has determined that an Elaborate pragma is 1179 -- desirable for correct elaboration for this unit. 1180 1181 -- Else_Actions (List3-Sem) 1182 -- This field is present in if expression nodes. During code 1183 -- expansion we use the Insert_Actions procedure (in Exp_Util) to insert 1184 -- actions at an appropriate place in the tree to get elaborated at the 1185 -- right time. For if expressions, we have to be sure that the actions 1186 -- for the Else branch are only elaborated if the condition is False. 1187 -- The Else_Actions field is used as a temporary parking place for 1188 -- these actions. The final tree is always rewritten to eliminate the 1189 -- need for this field, so in the tree passed to Gigi, this field is 1190 -- always set to No_List. 1191 1192 -- Enclosing_Variant (Node2-Sem) 1193 -- This field is present in the N_Variant node and identifies the Node_Id 1194 -- corresponding to the immediately enclosing variant when the variant is 1195 -- nested, and N_Empty otherwise. Set during semantic processing of the 1196 -- variant part of a record type. 1197 1198 -- Entity (Node4-Sem) 1199 -- Appears in all direct names (identifiers, character literals, and 1200 -- operator symbols), as well as expanded names, and attributes that 1201 -- denote entities, such as 'Class. Points to entity for corresponding 1202 -- defining occurrence. Set after name resolution. For identifiers in a 1203 -- WITH list, the corresponding defining occurrence is in a separately 1204 -- compiled file, and Entity must be set by the library Load procedure. 1205 -- 1206 -- Note: During name resolution, the value in Entity may be temporarily 1207 -- incorrect (e.g. during overload resolution, Entity is initially set to 1208 -- the first possible correct interpretation, and then later modified if 1209 -- necessary to contain the correct value after resolution). 1210 -- 1211 -- Note: This field overlaps Associated_Node, which is used during 1212 -- generic processing (see Sem_Ch12 for details). Note also that in 1213 -- generic templates, this means that the Entity field does not always 1214 -- point to an Entity. Since the back end is expected to ignore generic 1215 -- templates, this is harmless. 1216 -- 1217 -- Note: This field also appears in N_Attribute_Definition_Clause nodes. 1218 -- It is used only for stream attributes definition clauses. In this 1219 -- case, it denotes a (possibly dummy) subprogram entity that is declared 1220 -- conceptually at the point of the clause. Thus the visibility of the 1221 -- attribute definition clause (in the sense of 8.3(23) as amended by 1222 -- AI-195) can be checked by testing the visibility of that subprogram. 1223 -- 1224 -- Note: Normally the Entity field of an identifier points to the entity 1225 -- for the corresponding defining identifier, and hence the Chars field 1226 -- of an identifier will match the Chars field of the entity. However, 1227 -- there is no requirement that these match, and there are obscure cases 1228 -- of generated code where they do not match. 1229 1230 -- Note: Ada 2012 aspect specifications require additional links between 1231 -- identifiers and various attributes. These attributes can be of 1232 -- arbitrary types, and the entity field of identifiers that denote 1233 -- aspects must be used to store arbitrary expressions for later semantic 1234 -- checks. See section on aspect specifications for details. 1235 1236 -- Entity_Or_Associated_Node (Node4-Sem) 1237 -- A synonym for both Entity and Associated_Node. Used by convention in 1238 -- the code when referencing this field in cases where it is not known 1239 -- whether the field contains an Entity or an Associated_Node. 1240 1241 -- Etype (Node5-Sem) 1242 -- Appears in all expression nodes, all direct names, and all entities. 1243 -- Points to the entity for the related type. Set after type resolution. 1244 -- Normally this is the actual subtype of the expression. However, in 1245 -- certain contexts such as the right side of an assignment, subscripts, 1246 -- arguments to calls, returned value in a function, initial value etc. 1247 -- it is the desired target type. In the event that this is different 1248 -- from the actual type, the Do_Range_Check flag will be set if a range 1249 -- check is required. Note: if the Is_Overloaded flag is set, then Etype 1250 -- points to an essentially arbitrary choice from the possible set of 1251 -- types. 1252 1253 -- Exception_Junk (Flag8-Sem) 1254 -- This flag is set in a various nodes appearing in a statement sequence 1255 -- to indicate that the corresponding node is an artifact of the 1256 -- generated code for exception handling, and should be ignored when 1257 -- analyzing the control flow of the relevant sequence of statements 1258 -- (e.g. to check that it does not end with a bad return statement). 1259 1260 -- Exception_Label (Node5-Sem) 1261 -- Appears in N_Push_xxx_Label nodes. Points to the entity of the label 1262 -- to be used for transforming the corresponding exception into a goto, 1263 -- or contains Empty, if this exception is not to be transformed. Also 1264 -- appears in N_Exception_Handler nodes, where, if set, it indicates 1265 -- that there may be a local raise for the handler, so that expansion 1266 -- to allow a goto is required (and this field contains the label for 1267 -- this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details. 1268 1269 -- Expansion_Delayed (Flag11-Sem) 1270 -- Set on aggregates and extension aggregates that need a top-down rather 1271 -- than bottom-up expansion. Typically aggregate expansion happens bottom 1272 -- up. For nested aggregates the expansion is delayed until the enclosing 1273 -- aggregate itself is expanded, e.g. in the context of a declaration. To 1274 -- delay it we set this flag. This is done to avoid creating a temporary 1275 -- for each level of a nested aggregates, and also to prevent the 1276 -- premature generation of constraint checks. This is also a requirement 1277 -- if we want to generate the proper attachment to the internal 1278 -- finalization lists (for record with controlled components). Top down 1279 -- expansion of aggregates is also used for in-place array aggregate 1280 -- assignment or initialization. When the full context is known, the 1281 -- target of the assignment or initialization is used to generate the 1282 -- left-hand side of individual assignment to each sub-component. 1283 1284 -- First_Inlined_Subprogram (Node3-Sem) 1285 -- Present in the N_Compilation_Unit node for the main program. Points 1286 -- to a chain of entities for subprograms that are to be inlined. The 1287 -- Next_Inlined_Subprogram field of these entities is used as a link 1288 -- pointer with Empty marking the end of the list. This field is Empty 1289 -- if there are no inlined subprograms or inlining is not active. 1290 1291 -- First_Named_Actual (Node4-Sem) 1292 -- Present in procedure call statement and function call nodes, and also 1293 -- in Intrinsic nodes. Set during semantic analysis to point to the first 1294 -- named parameter where parameters are ordered by declaration order (as 1295 -- opposed to the actual order in the call which may be different due to 1296 -- named associations). Note: this field points to the explicit actual 1297 -- parameter itself, not the N_Parameter_Association node (its parent). 1298 1299 -- First_Real_Statement (Node2-Sem) 1300 -- Present in N_Handled_Sequence_Of_Statements node. Normally set to 1301 -- Empty. Used only when declarations are moved into the statement part 1302 -- of a construct as a result of wrapping an AT END handler that is 1303 -- required to cover the declarations. In this case, this field is used 1304 -- to remember the location in the statements list of the first real 1305 -- statement, i.e. the statement that used to be first in the statement 1306 -- list before the declarations were prepended. 1307 1308 -- First_Subtype_Link (Node5-Sem) 1309 -- Present in N_Freeze_Entity node for an anonymous base type that is 1310 -- implicitly created by the declaration of a first subtype. It points 1311 -- to the entity for the first subtype. 1312 1313 -- Float_Truncate (Flag11-Sem) 1314 -- A flag present in type conversion nodes. This is used for float to 1315 -- integer conversions where truncation is required rather than rounding. 1316 1317 -- Forwards_OK (Flag5-Sem) 1318 -- A flag present in the N_Assignment_Statement node. It is used only 1319 -- if the type being assigned is an array type, and is set if analysis 1320 -- determines that it is definitely safe to do the copy forwards, i.e. 1321 -- starting at the lowest addressed element. This is the case if either 1322 -- the operands do not overlap, or they may overlap, but if they do, 1323 -- then the left operand is at a lower address than the right operand. 1324 -- 1325 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 1326 -- means that the front end could not determine that either direction is 1327 -- definitely safe, and a runtime check may be required if the backend 1328 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 1329 -- set, it means that the front end can assure no overlap of operands. 1330 1331 -- From_Aspect_Specification (Flag13-Sem) 1332 -- Processing of aspect specifications typically results in insertion in 1333 -- the tree of corresponding pragma or attribute definition clause nodes. 1334 -- These generated nodes have the From_Aspect_Specification flag set to 1335 -- indicate that they came from aspect specifications originally. 1336 1337 -- From_At_End (Flag4-Sem) 1338 -- This flag is set on an N_Raise_Statement node if it corresponds to 1339 -- the reraise statement generated as the last statement of an AT END 1340 -- handler when SJLJ exception handling is active. It is used to stop 1341 -- a bogus violation of restriction (No_Exception_Propagation), bogus 1342 -- because if the restriction is set, the reraise is not generated. 1343 1344 -- From_At_Mod (Flag4-Sem) 1345 -- This flag is set on the attribute definition clause node that is 1346 -- generated by a transformation of an at mod phrase in a record 1347 -- representation clause. This is used to give slightly different (Ada 83 1348 -- compatible) semantics to such a clause, namely it is used to specify a 1349 -- minimum acceptable alignment for the base type and all subtypes. In 1350 -- Ada 95 terms, the actual alignment of the base type and all subtypes 1351 -- must be a multiple of the given value, and the representation clause 1352 -- is considered to be type specific instead of subtype specific. 1353 1354 -- From_Conditional_Expression (Flag1-Sem) 1355 -- This flag is set on if and case statements generated by the expansion 1356 -- of if and case expressions respectively. The flag is used to suppress 1357 -- any finalization of controlled objects found within these statements. 1358 1359 -- From_Default (Flag6-Sem) 1360 -- This flag is set on the subprogram renaming declaration created in an 1361 -- instance for a formal subprogram, when the formal is declared with a 1362 -- box, and there is no explicit actual. If the flag is present, the 1363 -- declaration is treated as an implicit reference to the formal in the 1364 -- ali file. 1365 1366 -- Generalized_Indexing (Node4-Sem) 1367 -- Present in N_Indexed_Component nodes. Set for Indexed_Component nodes 1368 -- that are Ada 2012 container indexing operations. The value of the 1369 -- attribute is a function call (possibly dereferenced) that corresponds 1370 -- to the proper expansion of the source indexing operation. Before 1371 -- expansion, the source node is rewritten as the resolved generalized 1372 -- indexing. In ASIS mode, the expansion does not take place, so that 1373 -- the source is preserved and properly annotated with types. 1374 1375 -- Generic_Parent (Node5-Sem) 1376 -- Generic_Parent is defined on declaration nodes that are instances. The 1377 -- value of Generic_Parent is the generic entity from which the instance 1378 -- is obtained. Generic_Parent is also defined for the renaming 1379 -- declarations and object declarations created for the actuals in an 1380 -- instantiation. The generic parent of such a declaration is the 1381 -- corresponding generic association in the Instantiation node. 1382 1383 -- Generic_Parent_Type (Node4-Sem) 1384 -- Generic_Parent_Type is defined on Subtype_Declaration nodes for the 1385 -- actuals of formal private and derived types. Within the instance, the 1386 -- operations on the actual are those inherited from the parent. For a 1387 -- formal private type, the parent type is the generic type itself. The 1388 -- Generic_Parent_Type is also used in an instance to determine whether a 1389 -- private operation overrides an inherited one. 1390 1391 -- Handler_List_Entry (Node2-Sem) 1392 -- This field is present in N_Object_Declaration nodes. It is set only 1393 -- for the Handler_Record entry generated for an exception in zero cost 1394 -- exception handling mode. It references the corresponding item in the 1395 -- handler list, and is used to delete this entry if the corresponding 1396 -- handler is deleted during optimization. For further details on why 1397 -- this is required, see Exp_Ch11.Remove_Handler_Entries. 1398 1399 -- Has_Dereference_Action (Flag13-Sem) 1400 -- This flag is present in N_Explicit_Dereference nodes. It is set to 1401 -- indicate that the expansion has aready produced a call to primitive 1402 -- Dereference of a System.Checked_Pools.Checked_Pool implementation. 1403 -- Such dereference actions are produced for debugging purposes. 1404 1405 -- Has_Dynamic_Length_Check (Flag10-Sem) 1406 -- This flag is present in all expression nodes. It is set to indicate 1407 -- that one of the routines in unit Checks has generated a length check 1408 -- action which has been inserted at the flagged node. This is used to 1409 -- avoid the generation of duplicate checks. 1410 1411 -- Has_Dynamic_Range_Check (Flag12-Sem) 1412 -- This flag is present in N_Subtype_Declaration nodes and on all 1413 -- expression nodes. It is set to indicate that one of the routines in 1414 -- unit Checks has generated a range check action which has been inserted 1415 -- at the flagged node. This is used to avoid the generation of duplicate 1416 -- checks. Why does this occur on N_Subtype_Declaration nodes, what does 1417 -- it mean in that context??? 1418 1419 -- Has_Local_Raise (Flag8-Sem) 1420 -- Present in exception handler nodes. Set if the handler can be entered 1421 -- via a local raise that gets transformed to a goto statement. This will 1422 -- always be set if Local_Raise_Statements is non-empty, but can also be 1423 -- set as a result of generation of N_Raise_xxx nodes, or flags set in 1424 -- nodes requiring generation of back end checks. 1425 1426 -- Has_No_Elaboration_Code (Flag17-Sem) 1427 -- A flag that appears in the N_Compilation_Unit node to indicate whether 1428 -- or not elaboration code is present for this unit. It is initially set 1429 -- true for subprogram specs and bodies and for all generic units and 1430 -- false for non-generic package specs and bodies. Gigi may set the flag 1431 -- in the non-generic package case if it determines that no elaboration 1432 -- code is generated. Note that this flag is not related to the 1433 -- Is_Preelaborated status, there can be preelaborated packages that 1434 -- generate elaboration code, and non-preelaborated packages which do 1435 -- not generate elaboration code. 1436 1437 -- Has_Pragma_Suppress_All (Flag14-Sem) 1438 -- This flag is set in an N_Compilation_Unit node if the Suppress_All 1439 -- pragma appears anywhere in the unit. This accommodates the rather 1440 -- strange placement rules of other compilers (DEC permits it at the 1441 -- end of a unit, and Rational allows it as a program unit pragma). We 1442 -- allow it anywhere at all, and consider it equivalent to a pragma 1443 -- Suppress (All_Checks) appearing at the start of the configuration 1444 -- pragmas for the unit. 1445 1446 -- Has_Private_View (Flag11-Sem) 1447 -- A flag present in generic nodes that have an entity, to indicate that 1448 -- the node has a private type. Used to exchange private and full 1449 -- declarations if the visibility at instantiation is different from the 1450 -- visibility at generic definition. 1451 1452 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 1453 -- A flag present in N_Subprogram_Body and N_Task_Definition nodes to 1454 -- flag the presence of a pragma Relative_Deadline. 1455 1456 -- Has_Self_Reference (Flag13-Sem) 1457 -- Present in N_Aggregate and N_Extension_Aggregate. Indicates that one 1458 -- of the expressions contains an access attribute reference to the 1459 -- enclosing type. Such a self-reference can only appear in default- 1460 -- initialized aggregate for a record type. 1461 1462 -- Has_SP_Choice (Flag15-Sem) 1463 -- Present in all nodes containing a Discrete_Choices field (N_Variant, 1464 -- N_Case_Expression_Alternative, N_Case_Statement_Alternative). Set to 1465 -- True if the Discrete_Choices list has at least one occurrence of a 1466 -- statically predicated subtype. 1467 1468 -- Has_Storage_Size_Pragma (Flag5-Sem) 1469 -- A flag present in an N_Task_Definition node to flag the presence of a 1470 -- Storage_Size pragma. 1471 1472 -- Has_Wide_Character (Flag11-Sem) 1473 -- Present in string literals, set if any wide character (i.e. character 1474 -- code outside the Character range but within Wide_Character range) 1475 -- appears in the string. Used to implement pragma preference rules. 1476 1477 -- Has_Wide_Wide_Character (Flag13-Sem) 1478 -- Present in string literals, set if any wide character (i.e. character 1479 -- code outside the Wide_Character range) appears in the string. Used to 1480 -- implement pragma preference rules. 1481 1482 -- Header_Size_Added (Flag11-Sem) 1483 -- Present in N_Attribute_Reference nodes, set only for attribute 1484 -- Max_Size_In_Storage_Elements. The flag indicates that the size of the 1485 -- hidden list header used by the runtime finalization support has been 1486 -- added to the size of the prefix. The flag also prevents the infinite 1487 -- expansion of the same attribute in the said context. 1488 1489 -- Hidden_By_Use_Clause (Elist4-Sem) 1490 -- An entity list present in use clauses that appear within 1491 -- instantiations. For the resolution of local entities, entities 1492 -- introduced by these use clauses have priority over global ones, and 1493 -- outer entities must be explicitly hidden/restored on exit. 1494 1495 -- Implicit_With (Flag16-Sem) 1496 -- This flag is set in the N_With_Clause node that is implicitly 1497 -- generated for runtime units that are loaded by the expander, and also 1498 -- for package System, if it is loaded implicitly by a use of the 1499 -- 'Address or 'Tag attribute. ???There are other implicit with clauses 1500 -- as well. 1501 1502 -- Implicit_With_From_Instantiation (Flag12-Sem) 1503 -- Set in N_With_Clause nodes from generic instantiations. 1504 1505 -- Import_Interface_Present (Flag16-Sem) 1506 -- This flag is set in an Interface or Import pragma if a matching 1507 -- pragma of the other kind is also present. This is used to avoid 1508 -- generating some unwanted error messages. 1509 1510 -- Includes_Infinities (Flag11-Sem) 1511 -- This flag is present in N_Range nodes. It is set for the range of 1512 -- unconstrained float types defined in Standard, which include not only 1513 -- the given range of values, but also legitimately can include infinite 1514 -- values. This flag is false for any float type for which an explicit 1515 -- range is given by the programmer, even if that range is identical to 1516 -- the range for Float. 1517 1518 -- Incomplete_View (Node2-Sem) 1519 -- Present in full type declarations that are completions of incomplete 1520 -- type declarations. Denotes the corresponding incomplete type 1521 -- declaration. Used to simplify the retrieval of primitive operations 1522 -- that may be declared between the partial and the full view of an 1523 -- untagged type. 1524 1525 -- Inherited_Discriminant (Flag13-Sem) 1526 -- This flag is present in N_Component_Association nodes. It indicates 1527 -- that a given component association in an extension aggregate is the 1528 -- value obtained from a constraint on an ancestor. Used to prevent 1529 -- double expansion when the aggregate has expansion delayed. 1530 1531 -- Instance_Spec (Node5-Sem) 1532 -- This field is present in generic instantiation nodes, and also in 1533 -- formal package declaration nodes (formal package declarations are 1534 -- treated in a manner very similar to package instantiations). It points 1535 -- to the node for the spec of the instance, inserted as part of the 1536 -- semantic processing for instantiations in Sem_Ch12. 1537 1538 -- Is_Accessibility_Actual (Flag13-Sem) 1539 -- Present in N_Parameter_Association nodes. True if the parameter is 1540 -- an extra actual that carries the accessibility level of the actual 1541 -- for an access parameter, in a function that dispatches on result and 1542 -- is called in a dispatching context. Used to prevent a formal/actual 1543 -- mismatch when the call is rewritten as a dispatching call. 1544 1545 -- Is_Analyzed_Pragma (Flag5-Sem) 1546 -- Present in N_Pragma nodes. Set for delayed pragmas that require a two 1547 -- step analysis. The initial step is peformed by routine Analyze_Pragma 1548 -- and verifies the overall legality of the pragma. The second step takes 1549 -- place in the various Analyze_xxx_In_Decl_Part routines which perform 1550 -- full analysis. The flag prevents the reanalysis of a delayed pragma. 1551 1552 -- Is_Expanded_Contract (Flag1-Sem) 1553 -- Present in N_Contract nodes. Set if the contract has already undergone 1554 -- expansion activities. 1555 1556 -- Is_Asynchronous_Call_Block (Flag7-Sem) 1557 -- A flag set in a Block_Statement node to indicate that it is the 1558 -- expansion of an asynchronous entry call. Such a block needs cleanup 1559 -- handler to assure that the call is cancelled. 1560 1561 -- Is_Boolean_Aspect (Flag16-Sem) 1562 -- Present in N_Aspect_Specification node. Set if the aspect is for a 1563 -- boolean aspect (i.e. Aspect_Id is in Boolean_Aspect subtype). 1564 1565 -- Is_Checked (Flag11-Sem) 1566 -- Present in N_Aspect_Specification and N_Pragma nodes. Set for an 1567 -- assertion aspect or pragma, or check pragma for an assertion, that 1568 -- is to be checked at run time. If either Is_Checked or Is_Ignored 1569 -- is set (they cannot both be set), then this means that the status of 1570 -- the pragma has been checked at the appropriate point and should not 1571 -- be further modified (in some cases these flags are copied when a 1572 -- pragma is rewritten). 1573 1574 -- Is_Component_Left_Opnd (Flag13-Sem) 1575 -- Is_Component_Right_Opnd (Flag14-Sem) 1576 -- Present in concatenation nodes, to indicate that the corresponding 1577 -- operand is of the component type of the result. Used in resolving 1578 -- concatenation nodes in instances. 1579 1580 -- Is_Controlling_Actual (Flag16-Sem) 1581 -- This flag is set on an expression that is a controlling argument in 1582 -- a dispatching call. It is off in all other cases. See Sem_Disp for 1583 -- details of its use. 1584 1585 -- Is_Delayed_Aspect (Flag14-Sem) 1586 -- Present in N_Pragma and N_Attribute_Definition_Clause nodes which 1587 -- come from aspect specifications, where the evaluation of the aspect 1588 -- must be delayed to the freeze point. This flag is also set True in 1589 -- the corresponding N_Aspect_Specification node. 1590 1591 -- Is_Disabled (Flag15-Sem) 1592 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1593 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1594 -- a Debug_Policy pragma that resulted in totally disabling the flagged 1595 -- aspect or policy as a result of using the GNAT-defined policy DISABLE. 1596 -- If this flag is set, the aspect or policy is not analyzed for semantic 1597 -- correctness, so any expressions etc will not be marked as analyzed. 1598 1599 -- Is_Dynamic_Coextension (Flag18-Sem) 1600 -- Present in allocator nodes, to indicate that this is an allocator 1601 -- for an access discriminant of a dynamically allocated object. The 1602 -- coextension must be deallocated and finalized at the same time as 1603 -- the enclosing object. 1604 1605 -- Is_Entry_Barrier_Function (Flag8-Sem) 1606 -- This flag is set on N_Subprogram_Declaration and N_Subprogram_Body 1607 -- nodes which emulate the barrier function of a protected entry body. 1608 -- The flag is used when checking for incorrect use of Current_Task. 1609 1610 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 1611 -- This flag is set in an N_Function_Call node to indicate that the extra 1612 -- actuals to support a build-in-place style of call have been added to 1613 -- the call. 1614 1615 -- Is_Finalization_Wrapper (Flag9-Sem); 1616 -- This flag is present in N_Block_Statement nodes. It is set when the 1617 -- block acts as a wrapper of a handled construct which has controlled 1618 -- objects. The wrapper prevents interference between exception handlers 1619 -- and At_End handlers. 1620 1621 -- Is_Generic_Contract_Pragma (Flag2-Sem) 1622 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1623 -- a source construct, applies to a generic unit or its body and denotes 1624 -- one of the following contract-related annotations: 1625 -- Abstract_State 1626 -- Contract_Cases 1627 -- Depends 1628 -- Extensions_Visible 1629 -- Global 1630 -- Initial_Condition 1631 -- Initializes 1632 -- Post 1633 -- Post_Class 1634 -- Postcondition 1635 -- Pre 1636 -- Pre_Class 1637 -- Precondition 1638 -- Refined_Depends 1639 -- Refined_Global 1640 -- Refined_Post 1641 -- Refined_State 1642 -- Test_Case 1643 1644 -- Is_Ghost_Pragma (Flag3-Sem) 1645 -- This flag is present in N_Pragma nodes. It is set when the pragma is 1646 -- either declared within a Ghost construct or it applies to a Ghost 1647 -- construct. 1648 1649 -- Is_Ignored (Flag9-Sem) 1650 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1651 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1652 -- a Debug_Policy pragma that specified a policy of IGNORE, DISABLE, or 1653 -- OFF, for the pragma/aspect. If there was a Policy pragma specifying 1654 -- a Policy of ON or CHECK, then this flag is reset. If no Policy pragma 1655 -- gives a policy for the aspect or pragma, then there are two cases. For 1656 -- an assertion aspect or pragma (one of the assertion kinds allowed in 1657 -- an Assertion_Policy pragma), then Is_Ignored is set if assertions are 1658 -- ignored because of the absence of a -gnata switch. For any other 1659 -- aspects or pragmas, the flag is off. If this flag is set, the 1660 -- aspect/pragma is fully analyzed and checked for other syntactic 1661 -- and semantic errors, but it does not have any semantic effect. 1662 1663 -- Is_In_Discriminant_Check (Flag11-Sem) 1664 -- This flag is present in a selected component, and is used to indicate 1665 -- that the reference occurs within a discriminant check. The 1666 -- significance is that optimizations based on assuming that the 1667 -- discriminant check has a correct value cannot be performed in this 1668 -- case (or the discriminant check may be optimized away). 1669 1670 -- Is_Inherited_Pragma (Flag4-Sem) 1671 -- This flag is set in an N_Pragma node that appears in a N_Contract node 1672 -- to indicate that the pragma has been inherited from a parent context. 1673 1674 -- Is_Machine_Number (Flag11-Sem) 1675 -- This flag is set in an N_Real_Literal node to indicate that the value 1676 -- is a machine number. This avoids some unnecessary cases of converting 1677 -- real literals to machine numbers. 1678 1679 -- Is_Null_Loop (Flag16-Sem) 1680 -- This flag is set in an N_Loop_Statement node if the corresponding loop 1681 -- can be determined to be null at compile time. This is used to remove 1682 -- the loop entirely at expansion time. 1683 1684 -- Is_Overloaded (Flag5-Sem) 1685 -- A flag present in all expression nodes. Used temporarily during 1686 -- overloading determination. The setting of this flag is not relevant 1687 -- once overloading analysis is complete. 1688 1689 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 1690 -- A flag present only in N_Op_Expon nodes. It is set when the 1691 -- exponentiation is of the form 2 ** N, where the type of N is an 1692 -- unsigned integral subtype whose size does not exceed the size of 1693 -- Standard_Integer (i.e. a type that can be safely converted to 1694 -- Natural), and the exponentiation appears as the right operand of an 1695 -- integer multiplication or an integer division where the dividend is 1696 -- unsigned. It is also required that overflow checking is off for both 1697 -- the exponentiation and the multiply/divide node. If this set of 1698 -- conditions holds, and the flag is set, then the division or 1699 -- multiplication can be (and is) converted to a shift. 1700 1701 -- Is_Prefixed_Call (Flag17-Sem) 1702 -- This flag is set in a selected component within a generic unit, if 1703 -- it resolves to a prefixed call to a primitive operation. The flag 1704 -- is used to prevent accidental overloadings in an instance, when a 1705 -- primitive operation and a private record component may be homographs. 1706 1707 -- Is_Protected_Subprogram_Body (Flag7-Sem) 1708 -- A flag set in a Subprogram_Body block to indicate that it is the 1709 -- implementation of a protected subprogram. Such a body needs cleanup 1710 -- handler to make sure that the associated protected object is unlocked 1711 -- when the subprogram completes. 1712 1713 -- Is_Static_Coextension (Flag14-Sem) 1714 -- Present in N_Allocator nodes. Set if the allocator is a coextension 1715 -- of an object allocated on the stack rather than the heap. 1716 1717 -- Is_Static_Expression (Flag6-Sem) 1718 -- Indicates that an expression is a static expression according to the 1719 -- rules in (RM 4.9). Note that it is possible for this flag to be set 1720 -- when Raises_Constraint_Error is also set. In practice almost all cases 1721 -- where a static expression is required do not allow an expression which 1722 -- raises Constraint_Error, so almost always, callers should call the 1723 -- Is_Ok_Static_Expression routine instead of testing this flag. See 1724 -- spec of package Sem_Eval for full details on the use of this flag. 1725 1726 -- Is_Subprogram_Descriptor (Flag16-Sem) 1727 -- Present in N_Object_Declaration, and set only for the object 1728 -- declaration generated for a subprogram descriptor in fast exception 1729 -- mode. See Exp_Ch11 for details of use. 1730 1731 -- Is_Task_Allocation_Block (Flag6-Sem) 1732 -- A flag set in a Block_Statement node to indicate that it is the 1733 -- expansion of a task allocator, or the allocator of an object 1734 -- containing tasks. Such a block requires a cleanup handler to call 1735 -- Expunge_Unactivated_Tasks to complete any tasks that have been 1736 -- allocated but not activated when the allocator completes abnormally. 1737 1738 -- Is_Task_Body_Procedure (Flag1-Sem) 1739 -- This flag is set on N_Subprogram_Declaration and N_Subprogram_Body 1740 -- nodes which emulate the body of a task unit. 1741 1742 -- Is_Task_Master (Flag5-Sem) 1743 -- A flag set in a Subprogram_Body, Block_Statement or Task_Body node to 1744 -- indicate that the construct is a task master (i.e. has declared tasks 1745 -- or declares an access to a task type). 1746 1747 -- Itype (Node1-Sem) 1748 -- Used in N_Itype_Reference node to reference an itype for which it is 1749 -- important to ensure that it is defined. See description of this node 1750 -- for further details. 1751 1752 -- Kill_Range_Check (Flag11-Sem) 1753 -- Used in an N_Unchecked_Type_Conversion node to indicate that the 1754 -- result should not be subjected to range checks. This is used for the 1755 -- implementation of Normalize_Scalars. 1756 1757 -- Label_Construct (Node2-Sem) 1758 -- Used in an N_Implicit_Label_Declaration node. Refers to an N_Label, 1759 -- N_Block_Statement or N_Loop_Statement node to which the label 1760 -- declaration applies. This attribute is used both in the compiler and 1761 -- in the implementation of ASIS queries. The field is left empty for the 1762 -- special labels generated as part of expanding raise statements with a 1763 -- local exception handler. 1764 1765 -- Library_Unit (Node4-Sem) 1766 -- In a stub node, Library_Unit points to the compilation unit node of 1767 -- the corresponding subunit. 1768 -- 1769 -- In a with clause node, Library_Unit points to the spec of the with'ed 1770 -- unit. 1771 -- 1772 -- In a compilation unit node, the usage depends on the unit type: 1773 -- 1774 -- For a library unit body, Library_Unit points to the compilation unit 1775 -- node of the corresponding spec, unless it's a subprogram body with 1776 -- Acts_As_Spec set, in which case it points to itself. 1777 -- 1778 -- For a spec, Library_Unit points to the compilation unit node of the 1779 -- corresponding body, if present. The body will be present if the spec 1780 -- is or contains generics that we needed to instantiate. Similarly, the 1781 -- body will be present if we needed it for inlining purposes. Thus, if 1782 -- we have a spec/body pair, both of which are present, they point to 1783 -- each other via Library_Unit. 1784 -- 1785 -- For a subunit, Library_Unit points to the compilation unit node of 1786 -- the parent body. 1787 -- ??? not (always) true, in (at least some, maybe all?) cases it points 1788 -- to the corresponding spec for the parent body. 1789 -- 1790 -- Note that this field is not used to hold the parent pointer for child 1791 -- unit (which might in any case need to use it for some other purpose as 1792 -- described above). Instead for a child unit, implicit with's are 1793 -- generated for all parents. 1794 1795 -- Local_Raise_Statements (Elist1) 1796 -- This field is present in exception handler nodes. It is set to 1797 -- No_Elist in the normal case. If there is at least one raise statement 1798 -- which can potentially be handled as a local raise, then this field 1799 -- points to a list of raise nodes, which are calls to a routine to raise 1800 -- an exception. These are raise nodes which can be optimized into gotos 1801 -- if the handler turns out to meet the conditions which permit this 1802 -- transformation. Note that this does NOT include instances of the 1803 -- N_Raise_xxx_Error nodes since the transformation of these nodes is 1804 -- handled by the back end (using the N_Push/N_Pop mechanism). 1805 1806 -- Loop_Actions (List2-Sem) 1807 -- A list present in Component_Association nodes in array aggregates. 1808 -- Used to collect actions that must be executed within the loop because 1809 -- they may need to be evaluated anew each time through. 1810 1811 -- Limited_View_Installed (Flag18-Sem) 1812 -- Present in With_Clauses and in package specifications. If set on 1813 -- with_clause, it indicates that this clause has created the current 1814 -- limited view of the designated package. On a package specification, it 1815 -- indicates that the limited view has already been created because the 1816 -- package is mentioned in a limited_with_clause in the closure of the 1817 -- unit being compiled. 1818 1819 -- Local_Raise_Not_OK (Flag7-Sem) 1820 -- Present in N_Exception_Handler nodes. Set if the handler contains 1821 -- a construct (reraise statement, or call to subprogram in package 1822 -- GNAT.Current_Exception) that makes the handler unsuitable as a target 1823 -- for a local raise (one that could otherwise be converted to a goto). 1824 1825 -- Must_Be_Byte_Aligned (Flag14-Sem) 1826 -- This flag is present in N_Attribute_Reference nodes. It can be set 1827 -- only for the Address and Unrestricted_Access attributes. If set it 1828 -- means that the object for which the address/access is given must be on 1829 -- a byte (more accurately a storage unit) boundary. If necessary, a copy 1830 -- of the object is to be made before taking the address (this copy is in 1831 -- the current scope on the stack frame). This is used for certain cases 1832 -- of code generated by the expander that passes parameters by address. 1833 -- 1834 -- The reason the copy is not made by the front end is that the back end 1835 -- has more information about type layout and may be able to (but is not 1836 -- guaranteed to) prevent making unnecessary copies. 1837 1838 -- Must_Not_Freeze (Flag8-Sem) 1839 -- A flag present in all expression nodes. Normally expressions cause 1840 -- freezing as described in the RM. If this flag is set, then this is 1841 -- inhibited. This is used by the analyzer and expander to label nodes 1842 -- that are created by semantic analysis or expansion and which must not 1843 -- cause freezing even though they normally would. This flag is also 1844 -- present in an N_Subtype_Indication node, since we also use these in 1845 -- calls to Freeze_Expression. 1846 1847 -- Next_Entity (Node2-Sem) 1848 -- Present in defining identifiers, defining character literals and 1849 -- defining operator symbols (i.e. in all entities). The entities of a 1850 -- scope are chained, and this field is used as the forward pointer for 1851 -- this list. See Einfo for further details. 1852 1853 -- Next_Exit_Statement (Node3-Sem) 1854 -- Present in N_Exit_Statement nodes. The exit statements for a loop are 1855 -- chained (in reverse order of appearance) from the First_Exit_Statement 1856 -- field of the E_Loop entity for the loop. Next_Exit_Statement points to 1857 -- the next entry on this chain (Empty = end of list). 1858 1859 -- Next_Implicit_With (Node3-Sem) 1860 -- Present in N_With_Clause. Part of a chain of with_clauses generated 1861 -- in rtsfind to indicate implicit dependencies on predefined units. Used 1862 -- to prevent multiple with_clauses for the same unit in a given context. 1863 -- A postorder traversal of the tree whose nodes are units and whose 1864 -- links are with_clauses defines the order in which CodePeer must 1865 -- examine a compiled unit and its full context. This ordering ensures 1866 -- that any subprogram call is examined after the subprogram declaration 1867 -- has been seen. 1868 1869 -- Next_Named_Actual (Node4-Sem) 1870 -- Present in parameter association nodes. Set during semantic analysis 1871 -- to point to the next named parameter, where parameters are ordered by 1872 -- declaration order (as opposed to the actual order in the call, which 1873 -- may be different due to named associations). Not that this field 1874 -- points to the explicit actual parameter itself, not to the 1875 -- N_Parameter_Association node (its parent). 1876 1877 -- Next_Pragma (Node1-Sem) 1878 -- Present in N_Pragma nodes. Used to create a linked list of pragma 1879 -- nodes. Currently used for two purposes: 1880 -- 1881 -- Create a list of linked Check_Policy pragmas. The head of this list 1882 -- is stored in Opt.Check_Policy_List (which has further details). 1883 -- 1884 -- Used by processing for Pre/Postcondition pragmas to store a list of 1885 -- pragmas associated with the spec of a subprogram (see Sem_Prag for 1886 -- details). 1887 -- 1888 -- Used by processing for pragma SPARK_Mode to store multiple pragmas 1889 -- the apply to the same construct. These are visible/private mode for 1890 -- a package spec and declarative/statement mode for package body. 1891 1892 -- Next_Rep_Item (Node5-Sem) 1893 -- Present in pragma nodes, attribute definition nodes, enumeration rep 1894 -- clauses, record rep clauses, aspect specification nodes. Used to link 1895 -- representation items that apply to an entity. See full description of 1896 -- First_Rep_Item field in Einfo for further details. 1897 1898 -- Next_Use_Clause (Node3-Sem) 1899 -- While use clauses are active during semantic processing, they are 1900 -- chained from the scope stack entry, using Next_Use_Clause as a link 1901 -- pointer, with Empty marking the end of the list. The head pointer is 1902 -- in the scope stack entry (First_Use_Clause). At the end of semantic 1903 -- processing (i.e. when Gigi sees the tree, the contents of this field 1904 -- is undefined and should not be read). 1905 1906 -- No_Ctrl_Actions (Flag7-Sem) 1907 -- Present in N_Assignment_Statement to indicate that no Finalize nor 1908 -- Adjust should take place on this assignment even though the RHS is 1909 -- controlled. Also indicates that the primitive _assign should not be 1910 -- used for a tagged assignment. This is used in init procs and aggregate 1911 -- expansions where the generated assignments are initializations, not 1912 -- real assignments. 1913 1914 -- No_Elaboration_Check (Flag14-Sem) 1915 -- Present in N_Function_Call and N_Procedure_Call_Statement. Indicates 1916 -- that no elaboration check is needed on the call, because it appears in 1917 -- the context of a local Suppress pragma. This is used on calls within 1918 -- task bodies, where the actual elaboration checks are applied after 1919 -- analysis, when the local scope stack is not present. 1920 1921 -- No_Entities_Ref_In_Spec (Flag8-Sem) 1922 -- Present in N_With_Clause nodes. Set if the with clause is on the 1923 -- package or subprogram spec where the main unit is the corresponding 1924 -- body, and no entities of the with'ed unit are referenced by the spec 1925 -- (an entity may still be referenced in the body, so this flag is used 1926 -- to generate the proper message (see Sem_Util.Check_Unused_Withs for 1927 -- full details). 1928 1929 -- No_Initialization (Flag13-Sem) 1930 -- Present in N_Object_Declaration and N_Allocator to indicate that the 1931 -- object must not be initialized (by Initialize or call to an init 1932 -- proc). This is needed for controlled aggregates. When the Object 1933 -- declaration has an expression, this flag means that this expression 1934 -- should not be taken into account (needed for in place initialization 1935 -- with aggregates, and for object with an address clause, which are 1936 -- initialized with an assignment at freeze time). 1937 1938 -- No_Minimize_Eliminate (Flag17-Sem) 1939 -- This flag is present in membership operator nodes (N_In/N_Not_In). 1940 -- It is used to indicate that processing for extended overflow checking 1941 -- modes is not required (this is used to prevent infinite recursion). 1942 1943 -- No_Truncation (Flag17-Sem) 1944 -- Present in N_Unchecked_Type_Conversion node. This flag has an effect 1945 -- only if the RM_Size of the source is greater than the RM_Size of the 1946 -- target for scalar operands. Normally in such a case we truncate some 1947 -- higher order bits of the source, and then sign/zero extend the result 1948 -- to form the output value. But if this flag is set, then we do not do 1949 -- any truncation, so for example, if an 8 bit input is converted to 5 1950 -- bit result which is in fact stored in 8 bits, then the high order 1951 -- three bits of the target result will be copied from the source. This 1952 -- is used for properly setting out of range values for use by pragmas 1953 -- Initialize_Scalars and Normalize_Scalars. 1954 1955 -- Non_Aliased_Prefix (Flag18-Sem) 1956 -- Present in N_Attribute_Reference nodes. Set only for the case of an 1957 -- Unrestricted_Access reference whose prefix is non-aliased, which is 1958 -- the case that is permitted for Unrestricted_Access except when the 1959 -- expected type is a thin pointer to unconstrained array. This flag is 1960 -- to assist in detecting this illegal use of Unrestricted_Access. 1961 1962 -- Null_Excluding_Subtype (Flag16) 1963 -- Present in N_Access_To_Object_Definition. Indicates that the subtype 1964 -- indication carries a null-exclusion indicator, which is distinct from 1965 -- the null-exclusion indicator that may precede the access keyword. 1966 1967 -- Original_Discriminant (Node2-Sem) 1968 -- Present in identifiers. Used in references to discriminants that 1969 -- appear in generic units. Because the names of the discriminants may be 1970 -- different in an instance, we use this field to recover the position of 1971 -- the discriminant in the original type, and replace it with the 1972 -- discriminant at the same position in the instantiated type. 1973 1974 -- Original_Entity (Node2-Sem) 1975 -- Present in numeric literals. Used to denote the named number that has 1976 -- been constant-folded into the given literal. If literal is from 1977 -- source, or the result of some other constant-folding operation, then 1978 -- Original_Entity is empty. This field is needed to handle properly 1979 -- named numbers in generic units, where the Associated_Node field 1980 -- interferes with the Entity field, making it impossible to preserve the 1981 -- original entity at the point of instantiation (ASIS problem). 1982 1983 -- Others_Discrete_Choices (List1-Sem) 1984 -- When a case statement or variant is analyzed, the semantic checks 1985 -- determine the actual list of choices that correspond to an others 1986 -- choice. This list is materialized for later use by the expander and 1987 -- the Others_Discrete_Choices field of an N_Others_Choice node points to 1988 -- this materialized list of choices, which is in standard format for a 1989 -- list of discrete choices, except that of course it cannot contain an 1990 -- N_Others_Choice entry. 1991 1992 -- Parent_Spec (Node4-Sem) 1993 -- For a library unit that is a child unit spec (package or subprogram 1994 -- declaration, generic declaration or instantiation, or library level 1995 -- rename, this field points to the compilation unit node for the parent 1996 -- package specification. This field is Empty for library bodies (the 1997 -- parent spec in this case can be found from the corresponding spec). 1998 1999 -- Premature_Use (Node5-Sem) 2000 -- Present in N_Incomplete_Type_Declaration node. Used for improved 2001 -- error diagnostics: if there is a premature usage of an incomplete 2002 -- type, a subsequently generated error message indicates the position 2003 -- of its full declaration. 2004 2005 -- Present_Expr (Uint3-Sem) 2006 -- Present in an N_Variant node. This has a meaningful value only after 2007 -- Gigi has back annotated the tree with representation information. At 2008 -- this point, it contains a reference to a gcc expression that depends 2009 -- on the values of one or more discriminants. Give a set of discriminant 2010 -- values, this expression evaluates to False (zero) if variant is not 2011 -- present, and True (non-zero) if it is present. See unit Repinfo for 2012 -- further details on gigi back annotation. This field is used during 2013 -- ASIS processing (data decomposition annex) to determine if a field is 2014 -- present or not. 2015 2016 -- Print_In_Hex (Flag13-Sem) 2017 -- Set on an N_Integer_Literal node to indicate that the value should be 2018 -- printed in hexadecimal in the sprint listing. Has no effect on 2019 -- legality or semantics of program, only on the displayed output. This 2020 -- is used to clarify output from the packed array cases. 2021 2022 -- Procedure_To_Call (Node2-Sem) 2023 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 2024 -- and N_Extended_Return_Statement nodes. References the entity for the 2025 -- declaration of the procedure to be called to accomplish the required 2026 -- operation (i.e. for the Allocate procedure in the case of N_Allocator 2027 -- and N_Simple_Return_Statement and N_Extended_Return_Statement (for 2028 -- allocating the return value), and for the Deallocate procedure in the 2029 -- case of N_Free_Statement. 2030 2031 -- Raises_Constraint_Error (Flag7-Sem) 2032 -- Set on an expression whose evaluation will definitely fail constraint 2033 -- error check. In the case of static expressions, this flag must be set 2034 -- accurately (and if it is set, the expression is typically illegal 2035 -- unless it appears as a non-elaborated branch of a short-circuit form). 2036 -- For a non-static expression, this flag may be set whenever an 2037 -- expression (e.g. an aggregate) is known to raise constraint error. If 2038 -- set, the expression definitely will raise CE if elaborated at runtime. 2039 -- If not set, the expression may or may not raise CE. In other words, on 2040 -- static expressions, the flag is set accurately, on non-static 2041 -- expressions it is set conservatively. 2042 2043 -- Redundant_Use (Flag13-Sem) 2044 -- Present in nodes that can appear as an operand in a use clause or use 2045 -- type clause (identifiers, expanded names, attribute references). Set 2046 -- to indicate that a use is redundant (and therefore need not be undone 2047 -- on scope exit). 2048 2049 -- Renaming_Exception (Node2-Sem) 2050 -- Present in N_Exception_Declaration node. Used to point back to the 2051 -- exception renaming for an exception declared within a subprogram. 2052 -- What happens is that an exception declared in a subprogram is moved 2053 -- to the library level with a unique name, and the original exception 2054 -- becomes a renaming. This link from the library level exception to the 2055 -- renaming declaration allows registering of the proper exception name. 2056 2057 -- Return_Statement_Entity (Node5-Sem) 2058 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement. 2059 -- Points to an E_Return_Statement representing the return statement. 2060 2061 -- Return_Object_Declarations (List3) 2062 -- Present in N_Extended_Return_Statement. Points to a list initially 2063 -- containing a single N_Object_Declaration representing the return 2064 -- object. We use a list (instead of just a pointer to the object decl) 2065 -- because Analyze wants to insert extra actions on this list. 2066 2067 -- Rounded_Result (Flag18-Sem) 2068 -- Present in N_Type_Conversion, N_Op_Divide and N_Op_Multiply nodes. 2069 -- Used in the fixed-point cases to indicate that the result must be 2070 -- rounded as a result of the use of the 'Round attribute. Also used for 2071 -- integer N_Op_Divide nodes to indicate that the result should be 2072 -- rounded to the nearest integer (breaking ties away from zero), rather 2073 -- than truncated towards zero as usual. These rounded integer operations 2074 -- are the result of expansion of rounded fixed-point divide, conversion 2075 -- and multiplication operations. 2076 2077 -- SCIL_Entity (Node4-Sem) 2078 -- Present in SCIL nodes. References the specific tagged type associated 2079 -- with the SCIL node (for an N_SCIL_Dispatching_Call node, this is 2080 -- the controlling type of the call; for an N_SCIL_Membership_Test node 2081 -- generated as part of testing membership in T'Class, this is T; for an 2082 -- N_SCIL_Dispatch_Table_Tag_Init node, this is the type being declared). 2083 2084 -- SCIL_Controlling_Tag (Node5-Sem) 2085 -- Present in N_SCIL_Dispatching_Call nodes. References the controlling 2086 -- tag of a dispatching call. This is usually an N_Selected_Component 2087 -- node (for a _tag component), but may be an N_Object_Declaration or 2088 -- N_Parameter_Specification node in some cases (e.g., for a call to 2089 -- a classwide streaming operation or a call to an instance of 2090 -- Ada.Tags.Generic_Dispatching_Constructor). 2091 2092 -- SCIL_Tag_Value (Node5-Sem) 2093 -- Present in N_SCIL_Membership_Test nodes. Used to reference the tag 2094 -- of the value that is being tested. 2095 2096 -- SCIL_Target_Prim (Node2-Sem) 2097 -- Present in N_SCIL_Dispatching_Call nodes. References the primitive 2098 -- operation named (statically) in a dispatching call. 2099 2100 -- Scope (Node3-Sem) 2101 -- Present in defining identifiers, defining character literals and 2102 -- defining operator symbols (i.e. in all entities). The entities of a 2103 -- scope all use this field to reference the corresponding scope entity. 2104 -- See Einfo for further details. 2105 2106 -- Shift_Count_OK (Flag4-Sem) 2107 -- A flag present in shift nodes to indicate that the shift count is 2108 -- known to be in range, i.e. is in the range from zero to word length 2109 -- minus one. If this flag is not set, then the shift count may be 2110 -- outside this range, i.e. larger than the word length, and the code 2111 -- must ensure that such shift counts give the appropriate result. 2112 2113 -- Source_Type (Node1-Sem) 2114 -- Used in an N_Validate_Unchecked_Conversion node to point to the 2115 -- source type entity for the unchecked conversion instantiation 2116 -- which gigi must do size validation for. 2117 2118 -- Split_PPC (Flag17) 2119 -- When a Pre or Post aspect specification is processed, it is broken 2120 -- into AND THEN sections. The left most section has Split_PPC set to 2121 -- False, indicating that it is the original specification (e.g. for 2122 -- posting errors). For other sections, Split_PPC is set to True. 2123 -- This flag is set in both the N_Aspect_Specification node itself, 2124 -- and in the pragma which is generated from this node. 2125 2126 -- Storage_Pool (Node1-Sem) 2127 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 2128 -- and N_Extended_Return_Statement nodes. References the entity for the 2129 -- storage pool to be used for the allocate or free call or for the 2130 -- allocation of the returned value from function. Empty indicates that 2131 -- the global default pool is to be used. Note that in the case 2132 -- of a return statement, this field is set only if the function returns 2133 -- value of a type whose size is not known at compile time on the 2134 -- secondary stack. 2135 2136 -- Suppress_Assignment_Checks (Flag18-Sem) 2137 -- Used in generated N_Assignment_Statement nodes to suppress predicate 2138 -- and range checks in cases where the generated code knows that the 2139 -- value being assigned is in range and satisfies any predicate. Also 2140 -- can be set in N_Object_Declaration nodes, to similarly suppress any 2141 -- checks on the initializing value. In assignment statements it also 2142 -- suppresses access checks in the generated code for out- and in-out 2143 -- parameters in entry calls. 2144 2145 -- Suppress_Loop_Warnings (Flag17-Sem) 2146 -- Used in N_Loop_Statement node to indicate that warnings within the 2147 -- body of the loop should be suppressed. This is set when the range 2148 -- of a FOR loop is known to be null, or is probably null (loop would 2149 -- only execute if invalid values are present). 2150 2151 -- Target_Type (Node2-Sem) 2152 -- Used in an N_Validate_Unchecked_Conversion node to point to the target 2153 -- type entity for the unchecked conversion instantiation which gigi must 2154 -- do size validation for. 2155 2156 -- Then_Actions (List3-Sem) 2157 -- This field is present in if expression nodes. During code expansion 2158 -- we use the Insert_Actions procedure (in Exp_Util) to insert actions 2159 -- at an appropriate place in the tree to get elaborated at the right 2160 -- time. For if expressions, we have to be sure that the actions for 2161 -- for the Then branch are only elaborated if the condition is True. 2162 -- The Then_Actions field is used as a temporary parking place for 2163 -- these actions. The final tree is always rewritten to eliminate the 2164 -- need for this field, so in the tree passed to Gigi, this field is 2165 -- always set to No_List. 2166 2167 -- Treat_Fixed_As_Integer (Flag14-Sem) 2168 -- This flag appears in operator nodes for divide, multiply, mod and rem 2169 -- on fixed-point operands. It indicates that the operands are to be 2170 -- treated as integer values, ignoring small values. This flag is only 2171 -- set as a result of expansion of fixed-point operations. Typically a 2172 -- fixed-point multiplication in the source generates subsidiary 2173 -- multiplication and division operations that work with the underlying 2174 -- integer values and have this flag set. Note that this flag is not 2175 -- needed on other arithmetic operations (add, neg, subtract etc.) since 2176 -- in these cases it is always the case that fixed is treated as integer. 2177 -- The Etype field MUST be set if this flag is set. The analyzer knows to 2178 -- leave such nodes alone, and whoever makes them must set the correct 2179 -- Etype value. 2180 2181 -- TSS_Elist (Elist3-Sem) 2182 -- Present in N_Freeze_Entity nodes. Holds an element list containing 2183 -- entries for each TSS (type support subprogram) associated with the 2184 -- frozen type. The elements of the list are the entities for the 2185 -- subprograms (see package Exp_TSS for further details). Set to No_Elist 2186 -- if there are no type support subprograms for the type or if the freeze 2187 -- node is not for a type. 2188 2189 -- Uneval_Old_Accept (Flag7-Sem) 2190 -- Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'A' 2191 -- (accept) at the point where the pragma is encountered (including the 2192 -- case of a pragma generated from an aspect specification). It is this 2193 -- setting that is relevant, rather than the setting at the point where 2194 -- a contract is finally analyzed after the delay till the freeze point. 2195 2196 -- Uneval_Old_Warn (Flag18-Sem) 2197 -- Present in N_Pragma nodes. Set True if Opt.Uneval_Old is set to 'W' 2198 -- (warn) at the point where the pragma is encountered (including the 2199 -- case of a pragma generated from an aspect specification). It is this 2200 -- setting that is relevant, rather than the setting at the point where 2201 -- a contract is finally analyzed after the delay till the freeze point. 2202 2203 -- Unreferenced_In_Spec (Flag7-Sem) 2204 -- Present in N_With_Clause nodes. Set if the with clause is on the 2205 -- package or subprogram spec where the main unit is the corresponding 2206 -- body, and is not referenced by the spec (it may still be referenced by 2207 -- the body, so this flag is used to generate the proper message (see 2208 -- Sem_Util.Check_Unused_Withs for details) 2209 2210 -- Uninitialized_Variable (Node3-Sem) 2211 -- Present in N_Formal_Private_Type_Definition and in N_Private_ 2212 -- Extension_Declarations. Indicates that a variable in a generic unit 2213 -- whose type is a formal private or derived type is read without being 2214 -- initialized. Used to warn if the corresponding actual type is not 2215 -- a fully initialized type. 2216 2217 -- Used_Operations (Elist5-Sem) 2218 -- Present in N_Use_Type_Clause nodes. Holds the list of operations that 2219 -- are made potentially use-visible by the clause. Simplifies processing 2220 -- on exit from the scope of the use_type_clause, in particular in the 2221 -- case of Use_All_Type, when those operations several scopes. 2222 2223 -- Was_Expression_Function (Flag18-Sem) 2224 -- Present in N_Subprogram_Body. True if the original source had an 2225 -- N_Expression_Function, which was converted to the N_Subprogram_Body 2226 -- by Analyze_Expression_Function. This is needed by ASIS to correctly 2227 -- recreate the expression function (for the instance body) when the 2228 -- completion of a generic function declaration is an expression 2229 -- function. 2230 2231 -- Was_Originally_Stub (Flag13-Sem) 2232 -- This flag is set in the node for a proper body that replaces stub. 2233 -- During the analysis procedure, stubs in some situations get rewritten 2234 -- by the corresponding bodies, and we set this flag to remember that 2235 -- this happened. Note that it is not good enough to rely on the use of 2236 -- Original_Node here because of the case of nested instantiations where 2237 -- the substituted node can be copied. 2238 2239 -- Withed_Body (Node1-Sem) 2240 -- Present in N_With_Clause nodes. Set if the unit in whose context 2241 -- the with_clause appears instantiates a generic contained in the 2242 -- library unit of the with_clause and as a result loads its body. 2243 -- Used for a more precise unit traversal for CodePeer. 2244 2245 -------------------------------------------------- 2246 -- Note on Use of End_Label and End_Span Fields -- 2247 -------------------------------------------------- 2248 2249 -- Several constructs have end lines: 2250 2251 -- Loop Statement end loop [loop_IDENTIFIER]; 2252 -- Package Specification end [[PARENT_UNIT_NAME .] IDENTIFIER] 2253 -- Task Definition end [task_IDENTIFIER] 2254 -- Protected Definition end [protected_IDENTIFIER] 2255 -- Protected Body end [protected_IDENTIFIER] 2256 2257 -- Block Statement end [block_IDENTIFIER]; 2258 -- Subprogram Body end [DESIGNATOR]; 2259 -- Package Body end [[PARENT_UNIT_NAME .] IDENTIFIER]; 2260 -- Task Body end [task_IDENTIFIER]; 2261 -- Accept Statement end [entry_IDENTIFIER]]; 2262 -- Entry Body end [entry_IDENTIFIER]; 2263 2264 -- If Statement end if; 2265 -- Case Statement end case; 2266 2267 -- Record Definition end record; 2268 -- Enumeration Definition ); 2269 2270 -- The End_Label and End_Span fields are used to mark the locations of 2271 -- these lines, and also keep track of the label in the case where a label 2272 -- is present. 2273 2274 -- For the first group above, the End_Label field of the corresponding node 2275 -- is used to point to the label identifier. In the case where there is no 2276 -- label in the source, the parser supplies a dummy identifier (with 2277 -- Comes_From_Source set to False), and the Sloc of this dummy identifier 2278 -- marks the location of the token following the END token. 2279 2280 -- For the second group, the use of End_Label is similar, but the End_Label 2281 -- is found in the N_Handled_Sequence_Of_Statements node. This is done 2282 -- simply because in some cases there is no room in the parent node. 2283 2284 -- For the third group, there is never any label, and instead of using 2285 -- End_Label, we use the End_Span field which gives the location of the 2286 -- token following END, relative to the starting Sloc of the construct, 2287 -- i.e. add Sloc (Node) + End_Span (Node) to get the Sloc of the IF or CASE 2288 -- following the End_Label. 2289 2290 -- The record definition case is handled specially, we treat it as though 2291 -- it required an optional label which is never present, and so the parser 2292 -- always builds a dummy identifier with Comes From Source set False. The 2293 -- reason we do this, rather than using End_Span in this case, is that we 2294 -- want to generate a cross-ref entry for the end of a record, since it 2295 -- represents a scope for name declaration purposes. 2296 2297 -- The enumeration definition case is handled in an exactly similar manner, 2298 -- building a dummy identifier to get a cross-reference. 2299 2300 -- Note: the reason we store the difference as a Uint, instead of storing 2301 -- the Source_Ptr value directly, is that Source_Ptr values cannot be 2302 -- distinguished from other types of values, and we count on all general 2303 -- use fields being self describing. To make things easier for clients, 2304 -- note that we provide function End_Location, and procedure 2305 -- Set_End_Location to allow access to the logical value (which is the 2306 -- Source_Ptr value for the end token). 2307 2308 --------------------- 2309 -- Syntactic Nodes -- 2310 --------------------- 2311 2312 --------------------- 2313 -- 2.3 Identifier -- 2314 --------------------- 2315 2316 -- IDENTIFIER ::= IDENTIFIER_LETTER {[UNDERLINE] LETTER_OR_DIGIT} 2317 -- LETTER_OR_DIGIT ::= IDENTIFIER_LETTER | DIGIT 2318 2319 -- An IDENTIFIER shall not be a reserved word 2320 2321 -- In the Ada grammar identifiers are the bottom level tokens which have 2322 -- very few semantics. Actual program identifiers are direct names. If 2323 -- we were being 100% honest with the grammar, then we would have a node 2324 -- called N_Direct_Name which would point to an identifier. However, 2325 -- that's too many extra nodes, so we just use the N_Identifier node 2326 -- directly as a direct name, and it contains the expression fields and 2327 -- Entity field that correspond to its use as a direct name. In those 2328 -- few cases where identifiers appear in contexts where they are not 2329 -- direct names (pragmas, pragma argument associations, attribute 2330 -- references and attribute definition clauses), the Chars field of the 2331 -- node contains the Name_Id for the identifier name. 2332 2333 -- Note: in GNAT, a reserved word can be treated as an identifier in two 2334 -- cases. First, an incorrect use of a reserved word as an identifier is 2335 -- diagnosed and then treated as a normal identifier. Second, an 2336 -- attribute designator of the form of a reserved word (access, delta, 2337 -- digits, range) is treated as an identifier. 2338 2339 -- Note: The set of letters that is permitted in an identifier depends 2340 -- on the character set in use. See package Csets for full details. 2341 2342 -- N_Identifier 2343 -- Sloc points to identifier 2344 -- Chars (Name1) contains the Name_Id for the identifier 2345 -- Entity (Node4-Sem) 2346 -- Associated_Node (Node4-Sem) 2347 -- Original_Discriminant (Node2-Sem) 2348 -- Redundant_Use (Flag13-Sem) 2349 -- Atomic_Sync_Required (Flag14-Sem) 2350 -- Has_Private_View (Flag11-Sem) (set in generic units) 2351 -- plus fields for expression 2352 2353 -------------------------- 2354 -- 2.4 Numeric Literal -- 2355 -------------------------- 2356 2357 -- NUMERIC_LITERAL ::= DECIMAL_LITERAL | BASED_LITERAL 2358 2359 ---------------------------- 2360 -- 2.4.1 Decimal Literal -- 2361 ---------------------------- 2362 2363 -- DECIMAL_LITERAL ::= NUMERAL [.NUMERAL] [EXPONENT] 2364 2365 -- NUMERAL ::= DIGIT {[UNDERLINE] DIGIT} 2366 2367 -- EXPONENT ::= E [+] NUMERAL | E - NUMERAL 2368 2369 -- Decimal literals appear in the tree as either integer literal nodes 2370 -- or real literal nodes, depending on whether a period is present. 2371 2372 -- Note: literal nodes appear as a result of direct use of literals 2373 -- in the source program, and also as the result of evaluating 2374 -- expressions at compile time. In the latter case, it is possible 2375 -- to construct real literals that have no syntactic representation 2376 -- using the standard literal format. Such literals are listed by 2377 -- Sprint using the notation [numerator / denominator]. 2378 2379 -- Note: the value of an integer literal node created by the front end 2380 -- is never outside the range of values of the base type. However, it 2381 -- can be the case that the created value is outside the range of the 2382 -- particular subtype. This happens in the case of integer overflows 2383 -- with checks suppressed. 2384 2385 -- N_Integer_Literal 2386 -- Sloc points to literal 2387 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2388 -- has been constant-folded into its literal value. 2389 -- Intval (Uint3) contains integer value of literal 2390 -- plus fields for expression 2391 -- Print_In_Hex (Flag13-Sem) 2392 2393 -- N_Real_Literal 2394 -- Sloc points to literal 2395 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2396 -- has been constant-folded into its literal value. 2397 -- Realval (Ureal3) contains real value of literal 2398 -- Corresponding_Integer_Value (Uint4-Sem) 2399 -- Is_Machine_Number (Flag11-Sem) 2400 -- plus fields for expression 2401 2402 -------------------------- 2403 -- 2.4.2 Based Literal -- 2404 -------------------------- 2405 2406 -- BASED_LITERAL ::= 2407 -- BASE # BASED_NUMERAL [.BASED_NUMERAL] # [EXPONENT] 2408 2409 -- BASE ::= NUMERAL 2410 2411 -- BASED_NUMERAL ::= 2412 -- EXTENDED_DIGIT {[UNDERLINE] EXTENDED_DIGIT} 2413 2414 -- EXTENDED_DIGIT ::= DIGIT | A | B | C | D | E | F 2415 2416 -- Based literals appear in the tree as either integer literal nodes 2417 -- or real literal nodes, depending on whether a period is present. 2418 2419 ---------------------------- 2420 -- 2.5 Character Literal -- 2421 ---------------------------- 2422 2423 -- CHARACTER_LITERAL ::= ' GRAPHIC_CHARACTER ' 2424 2425 -- N_Character_Literal 2426 -- Sloc points to literal 2427 -- Chars (Name1) contains the Name_Id for the identifier 2428 -- Char_Literal_Value (Uint2) contains the literal value 2429 -- Entity (Node4-Sem) 2430 -- Associated_Node (Node4-Sem) 2431 -- Has_Private_View (Flag11-Sem) set in generic units. 2432 -- plus fields for expression 2433 2434 -- Note: the Entity field will be missing (set to Empty) for character 2435 -- literals whose type is Standard.Wide_Character or Standard.Character 2436 -- or a type derived from one of these two. In this case the character 2437 -- literal stands for its own coding. The reason we take this irregular 2438 -- short cut is to avoid the need to build lots of junk defining 2439 -- character literal nodes. 2440 2441 ------------------------- 2442 -- 2.6 String Literal -- 2443 ------------------------- 2444 2445 -- STRING LITERAL ::= "{STRING_ELEMENT}" 2446 2447 -- A STRING_ELEMENT is either a pair of quotation marks ("), or a 2448 -- single GRAPHIC_CHARACTER other than a quotation mark. 2449 -- 2450 -- Is_Folded_In_Parser is True if the parser created this literal by 2451 -- folding a sequence of "&" operators. For example, if the source code 2452 -- says "aaa" & "bbb" & "ccc", and this produces "aaabbbccc", the flag 2453 -- is set. This flag is needed because the parser doesn't know about 2454 -- visibility, so the folded result might be wrong, and semantic 2455 -- analysis needs to check for that. 2456 2457 -- N_String_Literal 2458 -- Sloc points to literal 2459 -- Strval (Str3) contains Id of string value 2460 -- Has_Wide_Character (Flag11-Sem) 2461 -- Has_Wide_Wide_Character (Flag13-Sem) 2462 -- Is_Folded_In_Parser (Flag4) 2463 -- plus fields for expression 2464 2465 ------------------ 2466 -- 2.7 Comment -- 2467 ------------------ 2468 2469 -- A COMMENT starts with two adjacent hyphens and extends up to the 2470 -- end of the line. A COMMENT may appear on any line of a program. 2471 2472 -- Comments are skipped by the scanner and do not appear in the tree. 2473 -- It is possible to reconstruct the position of comments with respect 2474 -- to the elements of the tree by using the source position (Sloc) 2475 -- pointers that appear in every tree node. 2476 2477 ----------------- 2478 -- 2.8 Pragma -- 2479 ----------------- 2480 2481 -- PRAGMA ::= pragma IDENTIFIER 2482 -- [(PRAGMA_ARGUMENT_ASSOCIATION {, PRAGMA_ARGUMENT_ASSOCIATION})]; 2483 2484 -- Note that a pragma may appear in the tree anywhere a declaration 2485 -- or a statement may appear, as well as in some other situations 2486 -- which are explicitly documented. 2487 2488 -- N_Pragma 2489 -- Sloc points to PRAGMA 2490 -- Next_Pragma (Node1-Sem) 2491 -- Pragma_Argument_Associations (List2) (set to No_List if none) 2492 -- Corresponding_Aspect (Node3-Sem) (set to Empty if not present) 2493 -- Pragma_Identifier (Node4) 2494 -- Next_Rep_Item (Node5-Sem) 2495 -- Class_Present (Flag6) set if from Aspect with 'Class 2496 -- From_Aspect_Specification (Flag13-Sem) 2497 -- Import_Interface_Present (Flag16-Sem) 2498 -- Is_Analyzed_Pragma (Flag5-Sem) 2499 -- Is_Checked (Flag11-Sem) 2500 -- Is_Delayed_Aspect (Flag14-Sem) 2501 -- Is_Disabled (Flag15-Sem) 2502 -- Is_Generic_Contract_Pragma (Flag2-Sem) 2503 -- Is_Ghost_Pragma (Flag3-Sem) 2504 -- Is_Ignored (Flag9-Sem) 2505 -- Is_Inherited_Pragma (Flag4-Sem) 2506 -- Split_PPC (Flag17) set if corresponding aspect had Split_PPC set 2507 -- Uneval_Old_Accept (Flag7-Sem) 2508 -- Uneval_Old_Warn (Flag18-Sem) 2509 2510 -- Note: we should have a section on what pragmas are passed on to 2511 -- the back end to be processed. This section should note that pragma 2512 -- Psect_Object is always converted to Common_Object, but there are 2513 -- undoubtedly many other similar notes required ??? 2514 2515 -- Note: a utility function Pragma_Name may be applied to pragma nodes 2516 -- to conveniently obtain the Chars field of the Pragma_Identifier. 2517 2518 -- Note: if From_Aspect_Specification is set, then Sloc points to the 2519 -- aspect name, as does the Pragma_Identifier. In this case if the 2520 -- pragma has a local name argument (such as pragma Inline), it is 2521 -- resolved to point to the specific entity affected by the pragma. 2522 2523 -------------------------------------- 2524 -- 2.8 Pragma Argument Association -- 2525 -------------------------------------- 2526 2527 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2528 -- [pragma_argument_IDENTIFIER =>] NAME 2529 -- | [pragma_argument_IDENTIFIER =>] EXPRESSION 2530 2531 -- In Ada 2012, there are two more possibilities: 2532 2533 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2534 -- [pragma_argument_ASPECT_MARK =>] NAME 2535 -- | [pragma_argument_ASPECT_MARK =>] EXPRESSION 2536 2537 -- where the interesting allowed cases (which do not fit the syntax of 2538 -- the first alternative above) are 2539 2540 -- ASPECT_MARK => Pre'Class | 2541 -- Post'Class | 2542 -- Type_Invariant'Class | 2543 -- Invariant'Class 2544 2545 -- We allow this special usage in all Ada modes, but it would be a 2546 -- pain to allow these aspects to pervade the pragma syntax, and the 2547 -- representation of pragma nodes internally. So what we do is to 2548 -- replace these ASPECT_MARK forms with identifiers whose name is one 2549 -- of the special internal names _Pre, _Post or _Type_Invariant. 2550 2551 -- We do a similar replacement of these Aspect_Mark forms in the 2552 -- Expression of a pragma argument association for the cases of 2553 -- the first arguments of any Check pragmas and Check_Policy pragmas 2554 2555 -- N_Pragma_Argument_Association 2556 -- Sloc points to first token in association 2557 -- Chars (Name1) (set to No_Name if no pragma argument identifier) 2558 -- Expression (Node3) 2559 2560 ------------------------ 2561 -- 2.9 Reserved Word -- 2562 ------------------------ 2563 2564 -- Reserved words are parsed by the scanner, and returned as the 2565 -- corresponding token types (e.g. PACKAGE is returned as Tok_Package) 2566 2567 ---------------------------- 2568 -- 3.1 Basic Declaration -- 2569 ---------------------------- 2570 2571 -- BASIC_DECLARATION ::= 2572 -- TYPE_DECLARATION | SUBTYPE_DECLARATION 2573 -- | OBJECT_DECLARATION | NUMBER_DECLARATION 2574 -- | SUBPROGRAM_DECLARATION | ABSTRACT_SUBPROGRAM_DECLARATION 2575 -- | PACKAGE_DECLARATION | RENAMING_DECLARATION 2576 -- | EXCEPTION_DECLARATION | GENERIC_DECLARATION 2577 -- | GENERIC_INSTANTIATION 2578 2579 -- Basic declaration also includes IMPLICIT_LABEL_DECLARATION 2580 -- see further description in section on semantic nodes. 2581 2582 -- Also, in the tree that is constructed, a pragma may appear 2583 -- anywhere that a declaration may appear. 2584 2585 ------------------------------ 2586 -- 3.1 Defining Identifier -- 2587 ------------------------------ 2588 2589 -- DEFINING_IDENTIFIER ::= IDENTIFIER 2590 2591 -- A defining identifier is an entity, which has additional fields 2592 -- depending on the setting of the Ekind field. These additional 2593 -- fields are defined (and access subprograms declared) in package 2594 -- Einfo. 2595 2596 -- Note: N_Defining_Identifier is an extended node whose fields are 2597 -- deliberate layed out to match the layout of fields in an ordinary 2598 -- N_Identifier node allowing for easy alteration of an identifier 2599 -- node into a defining identifier node. For details, see procedure 2600 -- Sinfo.CN.Change_Identifier_To_Defining_Identifier. 2601 2602 -- N_Defining_Identifier 2603 -- Sloc points to identifier 2604 -- Chars (Name1) contains the Name_Id for the identifier 2605 -- Next_Entity (Node2-Sem) 2606 -- Scope (Node3-Sem) 2607 -- Etype (Node5-Sem) 2608 2609 ----------------------------- 2610 -- 3.2.1 Type Declaration -- 2611 ----------------------------- 2612 2613 -- TYPE_DECLARATION ::= 2614 -- FULL_TYPE_DECLARATION 2615 -- | INCOMPLETE_TYPE_DECLARATION 2616 -- | PRIVATE_TYPE_DECLARATION 2617 -- | PRIVATE_EXTENSION_DECLARATION 2618 2619 ---------------------------------- 2620 -- 3.2.1 Full Type Declaration -- 2621 ---------------------------------- 2622 2623 -- FULL_TYPE_DECLARATION ::= 2624 -- type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 2625 -- is TYPE_DEFINITION 2626 -- [ASPECT_SPECIFICATIONS]; 2627 -- | TASK_TYPE_DECLARATION 2628 -- | PROTECTED_TYPE_DECLARATION 2629 2630 -- The full type declaration node is used only for the first case. The 2631 -- second case (concurrent type declaration), is represented directly 2632 -- by a task type declaration or a protected type declaration. 2633 2634 -- N_Full_Type_Declaration 2635 -- Sloc points to TYPE 2636 -- Defining_Identifier (Node1) 2637 -- Incomplete_View (Node2-Sem) 2638 -- Discriminant_Specifications (List4) (set to No_List if none) 2639 -- Type_Definition (Node3) 2640 -- Discr_Check_Funcs_Built (Flag11-Sem) 2641 2642 ---------------------------- 2643 -- 3.2.1 Type Definition -- 2644 ---------------------------- 2645 2646 -- TYPE_DEFINITION ::= 2647 -- ENUMERATION_TYPE_DEFINITION | INTEGER_TYPE_DEFINITION 2648 -- | REAL_TYPE_DEFINITION | ARRAY_TYPE_DEFINITION 2649 -- | RECORD_TYPE_DEFINITION | ACCESS_TYPE_DEFINITION 2650 -- | DERIVED_TYPE_DEFINITION | INTERFACE_TYPE_DEFINITION 2651 2652 -------------------------------- 2653 -- 3.2.2 Subtype Declaration -- 2654 -------------------------------- 2655 2656 -- SUBTYPE_DECLARATION ::= 2657 -- subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION 2658 -- [ASPECT_SPECIFICATIONS]; 2659 2660 -- The subtype indication field is set to Empty for subtypes 2661 -- declared in package Standard (Positive, Natural). 2662 2663 -- N_Subtype_Declaration 2664 -- Sloc points to SUBTYPE 2665 -- Defining_Identifier (Node1) 2666 -- Null_Exclusion_Present (Flag11) 2667 -- Subtype_Indication (Node5) 2668 -- Generic_Parent_Type (Node4-Sem) (set for an actual derived type). 2669 -- Exception_Junk (Flag8-Sem) 2670 -- Has_Dynamic_Range_Check (Flag12-Sem) 2671 2672 ------------------------------- 2673 -- 3.2.2 Subtype Indication -- 2674 ------------------------------- 2675 2676 -- SUBTYPE_INDICATION ::= SUBTYPE_MARK [CONSTRAINT] 2677 2678 -- Note: if no constraint is present, the subtype indication appears 2679 -- directly in the tree as a subtype mark. The N_Subtype_Indication 2680 -- node is used only if a constraint is present. 2681 2682 -- Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule 2683 -- with the null-exclusion part (see AI-231), we had to introduce a new 2684 -- attribute in all the parents of subtype_indication nodes to indicate 2685 -- if the null-exclusion is present. 2686 2687 -- Note: the reason that this node has expression fields is that a 2688 -- subtype indication can appear as an operand of a membership test. 2689 2690 -- N_Subtype_Indication 2691 -- Sloc points to first token of subtype mark 2692 -- Subtype_Mark (Node4) 2693 -- Constraint (Node3) 2694 -- Etype (Node5-Sem) 2695 -- Must_Not_Freeze (Flag8-Sem) 2696 2697 -- Note: Depending on context, the Etype is either the entity of the 2698 -- Subtype_Mark field, or it is an itype constructed to reify the 2699 -- subtype indication. In particular, such itypes are created for a 2700 -- subtype indication that appears in an array type declaration. This 2701 -- simplifies constraint checking in indexed components. 2702 2703 -- For subtype indications that appear in scalar type and subtype 2704 -- declarations, the Etype is the entity of the subtype mark. 2705 2706 ------------------------- 2707 -- 3.2.2 Subtype Mark -- 2708 ------------------------- 2709 2710 -- SUBTYPE_MARK ::= subtype_NAME 2711 2712 ----------------------- 2713 -- 3.2.2 Constraint -- 2714 ----------------------- 2715 2716 -- CONSTRAINT ::= SCALAR_CONSTRAINT | COMPOSITE_CONSTRAINT 2717 2718 ------------------------------ 2719 -- 3.2.2 Scalar Constraint -- 2720 ------------------------------ 2721 2722 -- SCALAR_CONSTRAINT ::= 2723 -- RANGE_CONSTRAINT | DIGITS_CONSTRAINT | DELTA_CONSTRAINT 2724 2725 --------------------------------- 2726 -- 3.2.2 Composite Constraint -- 2727 --------------------------------- 2728 2729 -- COMPOSITE_CONSTRAINT ::= 2730 -- INDEX_CONSTRAINT | DISCRIMINANT_CONSTRAINT 2731 2732 ------------------------------- 2733 -- 3.3.1 Object Declaration -- 2734 ------------------------------- 2735 2736 -- OBJECT_DECLARATION ::= 2737 -- DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2738 -- [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION] 2739 -- [ASPECT_SPECIFICATIONS]; 2740 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2741 -- ACCESS_DEFINITION [:= EXPRESSION] 2742 -- [ASPECT_SPECIFICATIONS]; 2743 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2744 -- ARRAY_TYPE_DEFINITION [:= EXPRESSION] 2745 -- [ASPECT_SPECIFICATIONS]; 2746 -- | SINGLE_TASK_DECLARATION 2747 -- | SINGLE_PROTECTED_DECLARATION 2748 2749 -- Note: aliased is not permitted in Ada 83 mode 2750 2751 -- The N_Object_Declaration node is only for the first two cases. 2752 -- Single task declaration is handled by P_Task (9.1) 2753 -- Single protected declaration is handled by P_protected (9.5) 2754 2755 -- Although the syntax allows multiple identifiers in the list, the 2756 -- semantics is as though successive declarations were given with 2757 -- identical type definition and expression components. To simplify 2758 -- semantic processing, the parser represents a multiple declaration 2759 -- case as a sequence of single declarations, using the More_Ids and 2760 -- Prev_Ids flags to preserve the original source form as described 2761 -- in the section on "Handling of Defining Identifier Lists". 2762 2763 -- The flag Has_Init_Expression is set if an initializing expression 2764 -- is present. Normally it is set if and only if Expression contains 2765 -- a non-empty value, but there is an exception to this. When the 2766 -- initializing expression is an aggregate which requires explicit 2767 -- assignments, the Expression field gets set to Empty, but this flag 2768 -- is still set, so we don't forget we had an initializing expression. 2769 2770 -- Note: if a range check is required for the initialization 2771 -- expression then the Do_Range_Check flag is set in the Expression, 2772 -- with the check being done against the type given by the object 2773 -- definition, which is also the Etype of the defining identifier. 2774 2775 -- Note: the contents of the Expression field must be ignored (i.e. 2776 -- treated as though it were Empty) if No_Initialization is set True. 2777 2778 -- Note: the back end places some restrictions on the form of the 2779 -- Expression field. If the object being declared is Atomic, then 2780 -- the Expression may not have the form of an aggregate (since this 2781 -- might cause the back end to generate separate assignments). In this 2782 -- case the front end must generate an extra temporary and initialize 2783 -- this temporary as required (the temporary itself is not atomic). 2784 2785 -- Note: there is not node kind for object definition. Instead, the 2786 -- corresponding field holds a subtype indication, an array type 2787 -- definition, or (Ada 2005, AI-406) an access definition. 2788 2789 -- N_Object_Declaration 2790 -- Sloc points to first identifier 2791 -- Defining_Identifier (Node1) 2792 -- Aliased_Present (Flag4) 2793 -- Constant_Present (Flag17) set if CONSTANT appears 2794 -- Null_Exclusion_Present (Flag11) 2795 -- Object_Definition (Node4) subtype indic./array type def./access def. 2796 -- Expression (Node3) (set to Empty if not present) 2797 -- Handler_List_Entry (Node2-Sem) 2798 -- Corresponding_Generic_Association (Node5-Sem) 2799 -- More_Ids (Flag5) (set to False if no more identifiers in list) 2800 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 2801 -- No_Initialization (Flag13-Sem) 2802 -- Assignment_OK (Flag15-Sem) 2803 -- Exception_Junk (Flag8-Sem) 2804 -- Is_Subprogram_Descriptor (Flag16-Sem) 2805 -- Has_Init_Expression (Flag14) 2806 -- Suppress_Assignment_Checks (Flag18-Sem) 2807 2808 ------------------------------------- 2809 -- 3.3.1 Defining Identifier List -- 2810 ------------------------------------- 2811 2812 -- DEFINING_IDENTIFIER_LIST ::= 2813 -- DEFINING_IDENTIFIER {, DEFINING_IDENTIFIER} 2814 2815 ------------------------------- 2816 -- 3.3.2 Number Declaration -- 2817 ------------------------------- 2818 2819 -- NUMBER_DECLARATION ::= 2820 -- DEFINING_IDENTIFIER_LIST : constant := static_EXPRESSION; 2821 2822 -- Although the syntax allows multiple identifiers in the list, the 2823 -- semantics is as though successive declarations were given with 2824 -- identical expressions. To simplify semantic processing, the parser 2825 -- represents a multiple declaration case as a sequence of single 2826 -- declarations, using the More_Ids and Prev_Ids flags to preserve 2827 -- the original source form as described in the section on "Handling 2828 -- of Defining Identifier Lists". 2829 2830 -- N_Number_Declaration 2831 -- Sloc points to first identifier 2832 -- Defining_Identifier (Node1) 2833 -- Expression (Node3) 2834 -- More_Ids (Flag5) (set to False if no more identifiers in list) 2835 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 2836 2837 ---------------------------------- 2838 -- 3.4 Derived Type Definition -- 2839 ---------------------------------- 2840 2841 -- DERIVED_TYPE_DEFINITION ::= 2842 -- [abstract] [limited] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION 2843 -- [[and INTERFACE_LIST] RECORD_EXTENSION_PART] 2844 2845 -- Note: ABSTRACT, LIMITED and record extension part are not permitted 2846 -- in Ada 83 mode 2847 2848 -- Note: a record extension part is required if ABSTRACT is present 2849 2850 -- N_Derived_Type_Definition 2851 -- Sloc points to NEW 2852 -- Abstract_Present (Flag4) 2853 -- Null_Exclusion_Present (Flag11) (set to False if not present) 2854 -- Subtype_Indication (Node5) 2855 -- Record_Extension_Part (Node3) (set to Empty if not present) 2856 -- Limited_Present (Flag17) 2857 -- Task_Present (Flag5) set in task interfaces 2858 -- Protected_Present (Flag6) set in protected interfaces 2859 -- Synchronized_Present (Flag7) set in interfaces 2860 -- Interface_List (List2) (set to No_List if none) 2861 -- Interface_Present (Flag16) set in abstract interfaces 2862 2863 -- Note: Task_Present, Protected_Present, Synchronized_Present, 2864 -- Interface_List, and Interface_Present are used for abstract 2865 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 2866 2867 --------------------------- 2868 -- 3.5 Range Constraint -- 2869 --------------------------- 2870 2871 -- RANGE_CONSTRAINT ::= range RANGE 2872 2873 -- N_Range_Constraint 2874 -- Sloc points to RANGE 2875 -- Range_Expression (Node4) 2876 2877 ---------------- 2878 -- 3.5 Range -- 2879 ---------------- 2880 2881 -- RANGE ::= 2882 -- RANGE_ATTRIBUTE_REFERENCE 2883 -- | SIMPLE_EXPRESSION .. SIMPLE_EXPRESSION 2884 2885 -- Note: the case of a range given as a range attribute reference 2886 -- appears directly in the tree as an attribute reference. 2887 2888 -- Note: the field name for a reference to a range is Range_Expression 2889 -- rather than Range, because range is a reserved keyword in Ada. 2890 2891 -- Note: the reason that this node has expression fields is that a 2892 -- range can appear as an operand of a membership test. The Etype 2893 -- field is the type of the range (we do NOT construct an implicit 2894 -- subtype to represent the range exactly). 2895 2896 -- N_Range 2897 -- Sloc points to .. 2898 -- Low_Bound (Node1) 2899 -- High_Bound (Node2) 2900 -- Includes_Infinities (Flag11) 2901 -- plus fields for expression 2902 2903 -- Note: if the range appears in a context, such as a subtype 2904 -- declaration, where range checks are required on one or both of 2905 -- the expression fields, then type conversion nodes are inserted 2906 -- to represent the required checks. 2907 2908 ---------------------------------------- 2909 -- 3.5.1 Enumeration Type Definition -- 2910 ---------------------------------------- 2911 2912 -- ENUMERATION_TYPE_DEFINITION ::= 2913 -- (ENUMERATION_LITERAL_SPECIFICATION 2914 -- {, ENUMERATION_LITERAL_SPECIFICATION}) 2915 2916 -- Note: the Literals field in the node described below is null for 2917 -- the case of the standard types CHARACTER and WIDE_CHARACTER, for 2918 -- which special processing handles these types as special cases. 2919 2920 -- N_Enumeration_Type_Definition 2921 -- Sloc points to left parenthesis 2922 -- Literals (List1) (Empty for CHARACTER or WIDE_CHARACTER) 2923 -- End_Label (Node4) (set to Empty if internally generated record) 2924 2925 ---------------------------------------------- 2926 -- 3.5.1 Enumeration Literal Specification -- 2927 ---------------------------------------------- 2928 2929 -- ENUMERATION_LITERAL_SPECIFICATION ::= 2930 -- DEFINING_IDENTIFIER | DEFINING_CHARACTER_LITERAL 2931 2932 --------------------------------------- 2933 -- 3.5.1 Defining Character Literal -- 2934 --------------------------------------- 2935 2936 -- DEFINING_CHARACTER_LITERAL ::= CHARACTER_LITERAL 2937 2938 -- A defining character literal is an entity, which has additional 2939 -- fields depending on the setting of the Ekind field. These 2940 -- additional fields are defined (and access subprograms declared) 2941 -- in package Einfo. 2942 2943 -- Note: N_Defining_Character_Literal is an extended node whose fields 2944 -- are deliberate layed out to match the layout of fields in an ordinary 2945 -- N_Character_Literal node allowing for easy alteration of a character 2946 -- literal node into a defining character literal node. For details, see 2947 -- Sinfo.CN.Change_Character_Literal_To_Defining_Character_Literal. 2948 2949 -- N_Defining_Character_Literal 2950 -- Sloc points to literal 2951 -- Chars (Name1) contains the Name_Id for the identifier 2952 -- Next_Entity (Node2-Sem) 2953 -- Scope (Node3-Sem) 2954 -- Etype (Node5-Sem) 2955 2956 ------------------------------------ 2957 -- 3.5.4 Integer Type Definition -- 2958 ------------------------------------ 2959 2960 -- Note: there is an error in this rule in the latest version of the 2961 -- grammar, so we have retained the old rule pending clarification. 2962 2963 -- INTEGER_TYPE_DEFINITION ::= 2964 -- SIGNED_INTEGER_TYPE_DEFINITION 2965 -- | MODULAR_TYPE_DEFINITION 2966 2967 ------------------------------------------- 2968 -- 3.5.4 Signed Integer Type Definition -- 2969 ------------------------------------------- 2970 2971 -- SIGNED_INTEGER_TYPE_DEFINITION ::= 2972 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 2973 2974 -- Note: the Low_Bound and High_Bound fields are set to Empty 2975 -- for integer types defined in package Standard. 2976 2977 -- N_Signed_Integer_Type_Definition 2978 -- Sloc points to RANGE 2979 -- Low_Bound (Node1) 2980 -- High_Bound (Node2) 2981 2982 ------------------------------------ 2983 -- 3.5.4 Modular Type Definition -- 2984 ------------------------------------ 2985 2986 -- MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION 2987 2988 -- N_Modular_Type_Definition 2989 -- Sloc points to MOD 2990 -- Expression (Node3) 2991 2992 --------------------------------- 2993 -- 3.5.6 Real Type Definition -- 2994 --------------------------------- 2995 2996 -- REAL_TYPE_DEFINITION ::= 2997 -- FLOATING_POINT_DEFINITION | FIXED_POINT_DEFINITION 2998 2999 -------------------------------------- 3000 -- 3.5.7 Floating Point Definition -- 3001 -------------------------------------- 3002 3003 -- FLOATING_POINT_DEFINITION ::= 3004 -- digits static_SIMPLE_EXPRESSION [REAL_RANGE_SPECIFICATION] 3005 3006 -- Note: The Digits_Expression and Real_Range_Specifications fields 3007 -- are set to Empty for floating-point types declared in Standard. 3008 3009 -- N_Floating_Point_Definition 3010 -- Sloc points to DIGITS 3011 -- Digits_Expression (Node2) 3012 -- Real_Range_Specification (Node4) (set to Empty if not present) 3013 3014 ------------------------------------- 3015 -- 3.5.7 Real Range Specification -- 3016 ------------------------------------- 3017 3018 -- REAL_RANGE_SPECIFICATION ::= 3019 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 3020 3021 -- N_Real_Range_Specification 3022 -- Sloc points to RANGE 3023 -- Low_Bound (Node1) 3024 -- High_Bound (Node2) 3025 3026 ----------------------------------- 3027 -- 3.5.9 Fixed Point Definition -- 3028 ----------------------------------- 3029 3030 -- FIXED_POINT_DEFINITION ::= 3031 -- ORDINARY_FIXED_POINT_DEFINITION | DECIMAL_FIXED_POINT_DEFINITION 3032 3033 -------------------------------------------- 3034 -- 3.5.9 Ordinary Fixed Point Definition -- 3035 -------------------------------------------- 3036 3037 -- ORDINARY_FIXED_POINT_DEFINITION ::= 3038 -- delta static_EXPRESSION REAL_RANGE_SPECIFICATION 3039 3040 -- Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 3041 3042 -- N_Ordinary_Fixed_Point_Definition 3043 -- Sloc points to DELTA 3044 -- Delta_Expression (Node3) 3045 -- Real_Range_Specification (Node4) 3046 3047 ------------------------------------------- 3048 -- 3.5.9 Decimal Fixed Point Definition -- 3049 ------------------------------------------- 3050 3051 -- DECIMAL_FIXED_POINT_DEFINITION ::= 3052 -- delta static_EXPRESSION 3053 -- digits static_EXPRESSION [REAL_RANGE_SPECIFICATION] 3054 3055 -- Note: decimal types are not permitted in Ada 83 mode 3056 3057 -- N_Decimal_Fixed_Point_Definition 3058 -- Sloc points to DELTA 3059 -- Delta_Expression (Node3) 3060 -- Digits_Expression (Node2) 3061 -- Real_Range_Specification (Node4) (set to Empty if not present) 3062 3063 ------------------------------ 3064 -- 3.5.9 Digits Constraint -- 3065 ------------------------------ 3066 3067 -- DIGITS_CONSTRAINT ::= 3068 -- digits static_EXPRESSION [RANGE_CONSTRAINT] 3069 3070 -- Note: in Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 3071 -- Note: in Ada 95, reduced accuracy subtypes are obsolescent 3072 3073 -- N_Digits_Constraint 3074 -- Sloc points to DIGITS 3075 -- Digits_Expression (Node2) 3076 -- Range_Constraint (Node4) (set to Empty if not present) 3077 3078 -------------------------------- 3079 -- 3.6 Array Type Definition -- 3080 -------------------------------- 3081 3082 -- ARRAY_TYPE_DEFINITION ::= 3083 -- UNCONSTRAINED_ARRAY_DEFINITION | CONSTRAINED_ARRAY_DEFINITION 3084 3085 ----------------------------------------- 3086 -- 3.6 Unconstrained Array Definition -- 3087 ----------------------------------------- 3088 3089 -- UNCONSTRAINED_ARRAY_DEFINITION ::= 3090 -- array (INDEX_SUBTYPE_DEFINITION {, INDEX_SUBTYPE_DEFINITION}) of 3091 -- COMPONENT_DEFINITION 3092 3093 -- Note: dimensionality of array is indicated by number of entries in 3094 -- the Subtype_Marks list, which has one entry for each dimension. 3095 3096 -- N_Unconstrained_Array_Definition 3097 -- Sloc points to ARRAY 3098 -- Subtype_Marks (List2) 3099 -- Component_Definition (Node4) 3100 3101 ----------------------------------- 3102 -- 3.6 Index Subtype Definition -- 3103 ----------------------------------- 3104 3105 -- INDEX_SUBTYPE_DEFINITION ::= SUBTYPE_MARK range <> 3106 3107 -- There is no explicit node in the tree for an index subtype 3108 -- definition since the N_Unconstrained_Array_Definition node 3109 -- incorporates the type marks which appear in this context. 3110 3111 --------------------------------------- 3112 -- 3.6 Constrained Array Definition -- 3113 --------------------------------------- 3114 3115 -- CONSTRAINED_ARRAY_DEFINITION ::= 3116 -- array (DISCRETE_SUBTYPE_DEFINITION 3117 -- {, DISCRETE_SUBTYPE_DEFINITION}) 3118 -- of COMPONENT_DEFINITION 3119 3120 -- Note: dimensionality of array is indicated by number of entries 3121 -- in the Discrete_Subtype_Definitions list, which has one entry 3122 -- for each dimension. 3123 3124 -- N_Constrained_Array_Definition 3125 -- Sloc points to ARRAY 3126 -- Discrete_Subtype_Definitions (List2) 3127 -- Component_Definition (Node4) 3128 3129 -- Note: although the language allows the full syntax for discrete 3130 -- subtype definitions (i.e. a discrete subtype indication or a range), 3131 -- in the generated tree, we always rewrite these as N_Range nodes. 3132 3133 -------------------------------------- 3134 -- 3.6 Discrete Subtype Definition -- 3135 -------------------------------------- 3136 3137 -- DISCRETE_SUBTYPE_DEFINITION ::= 3138 -- discrete_SUBTYPE_INDICATION | RANGE 3139 3140 ------------------------------- 3141 -- 3.6 Component Definition -- 3142 ------------------------------- 3143 3144 -- COMPONENT_DEFINITION ::= 3145 -- [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION 3146 3147 -- Note: although the syntax does not permit a component definition to 3148 -- be an anonymous array (and the parser will diagnose such an attempt 3149 -- with an appropriate message), it is possible for anonymous arrays 3150 -- to appear as component definitions. The semantics and back end handle 3151 -- this case properly, and the expander in fact generates such cases. 3152 -- Access_Definition is an optional field that gives support to 3153 -- Ada 2005 (AI-230). The parser generates nodes that have either the 3154 -- Subtype_Indication field or else the Access_Definition field. 3155 3156 -- N_Component_Definition 3157 -- Sloc points to ALIASED, ACCESS or to first token of subtype mark 3158 -- Aliased_Present (Flag4) 3159 -- Null_Exclusion_Present (Flag11) 3160 -- Subtype_Indication (Node5) (set to Empty if not present) 3161 -- Access_Definition (Node3) (set to Empty if not present) 3162 3163 ----------------------------- 3164 -- 3.6.1 Index Constraint -- 3165 ----------------------------- 3166 3167 -- INDEX_CONSTRAINT ::= (DISCRETE_RANGE {, DISCRETE_RANGE}) 3168 3169 -- It is not in general possible to distinguish between discriminant 3170 -- constraints and index constraints at parse time, since a simple 3171 -- name could be either the subtype mark of a discrete range, or an 3172 -- expression in a discriminant association with no name. Either 3173 -- entry appears simply as the name, and the semantic parse must 3174 -- distinguish between the two cases. Thus we use a common tree 3175 -- node format for both of these constraint types. 3176 3177 -- See Discriminant_Constraint for format of node 3178 3179 --------------------------- 3180 -- 3.6.1 Discrete Range -- 3181 --------------------------- 3182 3183 -- DISCRETE_RANGE ::= discrete_SUBTYPE_INDICATION | RANGE 3184 3185 ---------------------------- 3186 -- 3.7 Discriminant Part -- 3187 ---------------------------- 3188 3189 -- DISCRIMINANT_PART ::= 3190 -- UNKNOWN_DISCRIMINANT_PART | KNOWN_DISCRIMINANT_PART 3191 3192 ------------------------------------ 3193 -- 3.7 Unknown Discriminant Part -- 3194 ------------------------------------ 3195 3196 -- UNKNOWN_DISCRIMINANT_PART ::= (<>) 3197 3198 -- Note: unknown discriminant parts are not permitted in Ada 83 mode 3199 3200 -- There is no explicit node in the tree for an unknown discriminant 3201 -- part. Instead the Unknown_Discriminants_Present flag is set in the 3202 -- parent node. 3203 3204 ---------------------------------- 3205 -- 3.7 Known Discriminant Part -- 3206 ---------------------------------- 3207 3208 -- KNOWN_DISCRIMINANT_PART ::= 3209 -- (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION}) 3210 3211 ------------------------------------- 3212 -- 3.7 Discriminant Specification -- 3213 ------------------------------------- 3214 3215 -- DISCRIMINANT_SPECIFICATION ::= 3216 -- DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK 3217 -- [:= DEFAULT_EXPRESSION] 3218 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 3219 -- [:= DEFAULT_EXPRESSION] 3220 3221 -- Although the syntax allows multiple identifiers in the list, the 3222 -- semantics is as though successive specifications were given with 3223 -- identical type definition and expression components. To simplify 3224 -- semantic processing, the parser represents a multiple declaration 3225 -- case as a sequence of single specifications, using the More_Ids and 3226 -- Prev_Ids flags to preserve the original source form as described 3227 -- in the section on "Handling of Defining Identifier Lists". 3228 3229 -- N_Discriminant_Specification 3230 -- Sloc points to first identifier 3231 -- Defining_Identifier (Node1) 3232 -- Null_Exclusion_Present (Flag11) 3233 -- Discriminant_Type (Node5) subtype mark or access parameter definition 3234 -- Expression (Node3) (set to Empty if no default expression) 3235 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3236 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3237 3238 ----------------------------- 3239 -- 3.7 Default Expression -- 3240 ----------------------------- 3241 3242 -- DEFAULT_EXPRESSION ::= EXPRESSION 3243 3244 ------------------------------------ 3245 -- 3.7.1 Discriminant Constraint -- 3246 ------------------------------------ 3247 3248 -- DISCRIMINANT_CONSTRAINT ::= 3249 -- (DISCRIMINANT_ASSOCIATION {, DISCRIMINANT_ASSOCIATION}) 3250 3251 -- It is not in general possible to distinguish between discriminant 3252 -- constraints and index constraints at parse time, since a simple 3253 -- name could be either the subtype mark of a discrete range, or an 3254 -- expression in a discriminant association with no name. Either 3255 -- entry appears simply as the name, and the semantic parse must 3256 -- distinguish between the two cases. Thus we use a common tree 3257 -- node format for both of these constraint types. 3258 3259 -- N_Index_Or_Discriminant_Constraint 3260 -- Sloc points to left paren 3261 -- Constraints (List1) points to list of discrete ranges or 3262 -- discriminant associations 3263 3264 ------------------------------------- 3265 -- 3.7.1 Discriminant Association -- 3266 ------------------------------------- 3267 3268 -- DISCRIMINANT_ASSOCIATION ::= 3269 -- [discriminant_SELECTOR_NAME 3270 -- {| discriminant_SELECTOR_NAME} =>] EXPRESSION 3271 3272 -- Note: a discriminant association that has no selector name list 3273 -- appears directly as an expression in the tree. 3274 3275 -- N_Discriminant_Association 3276 -- Sloc points to first token of discriminant association 3277 -- Selector_Names (List1) (always non-empty, since if no selector 3278 -- names are present, this node is not used, see comment above) 3279 -- Expression (Node3) 3280 3281 --------------------------------- 3282 -- 3.8 Record Type Definition -- 3283 --------------------------------- 3284 3285 -- RECORD_TYPE_DEFINITION ::= 3286 -- [[abstract] tagged] [limited] RECORD_DEFINITION 3287 3288 -- Note: ABSTRACT, TAGGED, LIMITED are not permitted in Ada 83 mode 3289 3290 -- There is no explicit node in the tree for a record type definition. 3291 -- Instead the flags for Tagged_Present and Limited_Present appear in 3292 -- the N_Record_Definition node for a record definition appearing in 3293 -- the context of a record type definition. 3294 3295 ---------------------------- 3296 -- 3.8 Record Definition -- 3297 ---------------------------- 3298 3299 -- RECORD_DEFINITION ::= 3300 -- record 3301 -- COMPONENT_LIST 3302 -- end record 3303 -- | null record 3304 3305 -- Note: the Abstract_Present, Tagged_Present and Limited_Present 3306 -- flags appear only for a record definition appearing in a record 3307 -- type definition. 3308 3309 -- Note: the NULL RECORD case is not permitted in Ada 83 3310 3311 -- N_Record_Definition 3312 -- Sloc points to RECORD or NULL 3313 -- End_Label (Node4) (set to Empty if internally generated record) 3314 -- Abstract_Present (Flag4) 3315 -- Tagged_Present (Flag15) 3316 -- Limited_Present (Flag17) 3317 -- Component_List (Node1) empty in null record case 3318 -- Null_Present (Flag13) set in null record case 3319 -- Task_Present (Flag5) set in task interfaces 3320 -- Protected_Present (Flag6) set in protected interfaces 3321 -- Synchronized_Present (Flag7) set in interfaces 3322 -- Interface_Present (Flag16) set in abstract interfaces 3323 -- Interface_List (List2) (set to No_List if none) 3324 3325 -- Note: Task_Present, Protected_Present, Synchronized _Present, 3326 -- Interface_List and Interface_Present are used for abstract 3327 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 3328 3329 ------------------------- 3330 -- 3.8 Component List -- 3331 ------------------------- 3332 3333 -- COMPONENT_LIST ::= 3334 -- COMPONENT_ITEM {COMPONENT_ITEM} 3335 -- | {COMPONENT_ITEM} VARIANT_PART 3336 -- | null; 3337 3338 -- N_Component_List 3339 -- Sloc points to first token of component list 3340 -- Component_Items (List3) 3341 -- Variant_Part (Node4) (set to Empty if no variant part) 3342 -- Null_Present (Flag13) 3343 3344 ------------------------- 3345 -- 3.8 Component Item -- 3346 ------------------------- 3347 3348 -- COMPONENT_ITEM ::= COMPONENT_DECLARATION | REPRESENTATION_CLAUSE 3349 3350 -- Note: A component item can also be a pragma, and in the tree 3351 -- that is obtained after semantic processing, a component item 3352 -- can be an N_Null node resulting from a non-recognized pragma. 3353 3354 -------------------------------- 3355 -- 3.8 Component Declaration -- 3356 -------------------------------- 3357 3358 -- COMPONENT_DECLARATION ::= 3359 -- DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION 3360 -- [:= DEFAULT_EXPRESSION] 3361 -- [ASPECT_SPECIFICATIONS]; 3362 3363 -- Note: although the syntax does not permit a component definition to 3364 -- be an anonymous array (and the parser will diagnose such an attempt 3365 -- with an appropriate message), it is possible for anonymous arrays 3366 -- to appear as component definitions. The semantics and back end handle 3367 -- this case properly, and the expander in fact generates such cases. 3368 3369 -- Although the syntax allows multiple identifiers in the list, the 3370 -- semantics is as though successive declarations were given with the 3371 -- same component definition and expression components. To simplify 3372 -- semantic processing, the parser represents a multiple declaration 3373 -- case as a sequence of single declarations, using the More_Ids and 3374 -- Prev_Ids flags to preserve the original source form as described 3375 -- in the section on "Handling of Defining Identifier Lists". 3376 3377 -- N_Component_Declaration 3378 -- Sloc points to first identifier 3379 -- Defining_Identifier (Node1) 3380 -- Component_Definition (Node4) 3381 -- Expression (Node3) (set to Empty if no default expression) 3382 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3383 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3384 3385 ------------------------- 3386 -- 3.8.1 Variant Part -- 3387 ------------------------- 3388 3389 -- VARIANT_PART ::= 3390 -- case discriminant_DIRECT_NAME is 3391 -- VARIANT {VARIANT} 3392 -- end case; 3393 3394 -- Note: the variants list can contain pragmas as well as variants. 3395 -- In a properly formed program there is at least one variant. 3396 3397 -- N_Variant_Part 3398 -- Sloc points to CASE 3399 -- Name (Node2) 3400 -- Variants (List1) 3401 3402 -------------------- 3403 -- 3.8.1 Variant -- 3404 -------------------- 3405 3406 -- VARIANT ::= 3407 -- when DISCRETE_CHOICE_LIST => 3408 -- COMPONENT_LIST 3409 3410 -- N_Variant 3411 -- Sloc points to WHEN 3412 -- Discrete_Choices (List4) 3413 -- Component_List (Node1) 3414 -- Enclosing_Variant (Node2-Sem) 3415 -- Present_Expr (Uint3-Sem) 3416 -- Dcheck_Function (Node5-Sem) 3417 -- Has_SP_Choice (Flag15-Sem) 3418 3419 -- Note: in the list of Discrete_Choices, the tree passed to the back 3420 -- end does not have choice entries corresponding to names of statically 3421 -- predicated subtypes. Such entries are always expanded out to the list 3422 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 3423 -- mode also has this expansion, but done with a proper Rewrite call on 3424 -- the N_Variant node so that ASIS can properly retrieve the original. 3425 3426 --------------------------------- 3427 -- 3.8.1 Discrete Choice List -- 3428 --------------------------------- 3429 3430 -- DISCRETE_CHOICE_LIST ::= DISCRETE_CHOICE {| DISCRETE_CHOICE} 3431 3432 ---------------------------- 3433 -- 3.8.1 Discrete Choice -- 3434 ---------------------------- 3435 3436 -- DISCRETE_CHOICE ::= EXPRESSION | DISCRETE_RANGE | others 3437 3438 -- Note: in Ada 83 mode, the expression must be a simple expression 3439 3440 -- The only choice that appears explicitly is the OTHERS choice, as 3441 -- defined here. Other cases of discrete choice (expression and 3442 -- discrete range) appear directly. This production is also used 3443 -- for the OTHERS possibility of an exception choice. 3444 3445 -- Note: in accordance with the syntax, the parser does not check that 3446 -- OTHERS appears at the end on its own in a choice list context. This 3447 -- is a semantic check. 3448 3449 -- N_Others_Choice 3450 -- Sloc points to OTHERS 3451 -- Others_Discrete_Choices (List1-Sem) 3452 -- All_Others (Flag11-Sem) 3453 3454 ---------------------------------- 3455 -- 3.9.1 Record Extension Part -- 3456 ---------------------------------- 3457 3458 -- RECORD_EXTENSION_PART ::= with RECORD_DEFINITION 3459 3460 -- Note: record extension parts are not permitted in Ada 83 mode 3461 3462 -------------------------------------- 3463 -- 3.9.4 Interface Type Definition -- 3464 -------------------------------------- 3465 3466 -- INTERFACE_TYPE_DEFINITION ::= 3467 -- [limited | task | protected | synchronized] 3468 -- interface [interface_list] 3469 3470 -- Note: Interfaces are implemented with N_Record_Definition and 3471 -- N_Derived_Type_Definition nodes because most of the support 3472 -- for the analysis of abstract types has been reused to 3473 -- analyze abstract interfaces. 3474 3475 ---------------------------------- 3476 -- 3.10 Access Type Definition -- 3477 ---------------------------------- 3478 3479 -- ACCESS_TYPE_DEFINITION ::= 3480 -- ACCESS_TO_OBJECT_DEFINITION 3481 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3482 3483 -------------------------- 3484 -- 3.10 Null Exclusion -- 3485 -------------------------- 3486 3487 -- NULL_EXCLUSION ::= not null 3488 3489 --------------------------------------- 3490 -- 3.10 Access To Object Definition -- 3491 --------------------------------------- 3492 3493 -- ACCESS_TO_OBJECT_DEFINITION ::= 3494 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] 3495 -- SUBTYPE_INDICATION 3496 3497 -- N_Access_To_Object_Definition 3498 -- Sloc points to ACCESS 3499 -- All_Present (Flag15) 3500 -- Null_Exclusion_Present (Flag11) 3501 -- Null_Excluding_Subtype (Flag16) 3502 -- Subtype_Indication (Node5) 3503 -- Constant_Present (Flag17) 3504 3505 ----------------------------------- 3506 -- 3.10 General Access Modifier -- 3507 ----------------------------------- 3508 3509 -- GENERAL_ACCESS_MODIFIER ::= all | constant 3510 3511 -- Note: general access modifiers are not permitted in Ada 83 mode 3512 3513 -- There is no explicit node in the tree for general access modifier. 3514 -- Instead the All_Present or Constant_Present flags are set in the 3515 -- parent node. 3516 3517 ------------------------------------------- 3518 -- 3.10 Access To Subprogram Definition -- 3519 ------------------------------------------- 3520 3521 -- ACCESS_TO_SUBPROGRAM_DEFINITION 3522 -- [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE 3523 -- | [NULL_EXCLUSION] access [protected] function 3524 -- PARAMETER_AND_RESULT_PROFILE 3525 3526 -- Note: access to subprograms are not permitted in Ada 83 mode 3527 3528 -- N_Access_Function_Definition 3529 -- Sloc points to ACCESS 3530 -- Null_Exclusion_Present (Flag11) 3531 -- Null_Exclusion_In_Return_Present (Flag14) 3532 -- Protected_Present (Flag6) 3533 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3534 -- Result_Definition (Node4) result subtype (subtype mark or access def) 3535 3536 -- N_Access_Procedure_Definition 3537 -- Sloc points to ACCESS 3538 -- Null_Exclusion_Present (Flag11) 3539 -- Protected_Present (Flag6) 3540 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3541 3542 ----------------------------- 3543 -- 3.10 Access Definition -- 3544 ----------------------------- 3545 3546 -- ACCESS_DEFINITION ::= 3547 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK 3548 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3549 3550 -- Note: access to subprograms are an Ada 2005 (AI-254) extension 3551 3552 -- N_Access_Definition 3553 -- Sloc points to ACCESS 3554 -- Null_Exclusion_Present (Flag11) 3555 -- All_Present (Flag15) 3556 -- Constant_Present (Flag17) 3557 -- Subtype_Mark (Node4) 3558 -- Access_To_Subprogram_Definition (Node3) (set to Empty if not present) 3559 3560 ----------------------------------------- 3561 -- 3.10.1 Incomplete Type Declaration -- 3562 ----------------------------------------- 3563 3564 -- INCOMPLETE_TYPE_DECLARATION ::= 3565 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED]; 3566 3567 -- N_Incomplete_Type_Declaration 3568 -- Sloc points to TYPE 3569 -- Defining_Identifier (Node1) 3570 -- Discriminant_Specifications (List4) (set to No_List if no 3571 -- discriminant part, or if the discriminant part is an 3572 -- unknown discriminant part) 3573 -- Premature_Use (Node5-Sem) used for improved diagnostics. 3574 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 3575 -- Tagged_Present (Flag15) 3576 3577 ---------------------------- 3578 -- 3.11 Declarative Part -- 3579 ---------------------------- 3580 3581 -- DECLARATIVE_PART ::= {DECLARATIVE_ITEM} 3582 3583 -- Note: although the parser enforces the syntactic requirement that 3584 -- a declarative part can contain only declarations, the semantic 3585 -- processing may add statements to the list of actions in a 3586 -- declarative part, so the code generator should be prepared 3587 -- to accept a statement in this position. 3588 3589 ---------------------------- 3590 -- 3.11 Declarative Item -- 3591 ---------------------------- 3592 3593 -- DECLARATIVE_ITEM ::= BASIC_DECLARATIVE_ITEM | BODY 3594 3595 ---------------------------------- 3596 -- 3.11 Basic Declarative Item -- 3597 ---------------------------------- 3598 3599 -- BASIC_DECLARATIVE_ITEM ::= 3600 -- BASIC_DECLARATION | REPRESENTATION_CLAUSE | USE_CLAUSE 3601 3602 ---------------- 3603 -- 3.11 Body -- 3604 ---------------- 3605 3606 -- BODY ::= PROPER_BODY | BODY_STUB 3607 3608 ----------------------- 3609 -- 3.11 Proper Body -- 3610 ----------------------- 3611 3612 -- PROPER_BODY ::= 3613 -- SUBPROGRAM_BODY | PACKAGE_BODY | TASK_BODY | PROTECTED_BODY 3614 3615 --------------- 3616 -- 4.1 Name -- 3617 --------------- 3618 3619 -- NAME ::= 3620 -- DIRECT_NAME | EXPLICIT_DEREFERENCE 3621 -- | INDEXED_COMPONENT | SLICE 3622 -- | SELECTED_COMPONENT | ATTRIBUTE_REFERENCE 3623 -- | TYPE_CONVERSION | FUNCTION_CALL 3624 -- | CHARACTER_LITERAL 3625 3626 ---------------------- 3627 -- 4.1 Direct Name -- 3628 ---------------------- 3629 3630 -- DIRECT_NAME ::= IDENTIFIER | OPERATOR_SYMBOL 3631 3632 ----------------- 3633 -- 4.1 Prefix -- 3634 ----------------- 3635 3636 -- PREFIX ::= NAME | IMPLICIT_DEREFERENCE 3637 3638 ------------------------------- 3639 -- 4.1 Explicit Dereference -- 3640 ------------------------------- 3641 3642 -- EXPLICIT_DEREFERENCE ::= NAME . all 3643 3644 -- N_Explicit_Dereference 3645 -- Sloc points to ALL 3646 -- Prefix (Node3) 3647 -- Actual_Designated_Subtype (Node4-Sem) 3648 -- Atomic_Sync_Required (Flag14-Sem) 3649 -- Has_Dereference_Action (Flag13-Sem) 3650 -- plus fields for expression 3651 3652 ------------------------------- 3653 -- 4.1 Implicit Dereference -- 3654 ------------------------------- 3655 3656 -- IMPLICIT_DEREFERENCE ::= NAME 3657 3658 ------------------------------ 3659 -- 4.1.1 Indexed Component -- 3660 ------------------------------ 3661 3662 -- INDEXED_COMPONENT ::= PREFIX (EXPRESSION {, EXPRESSION}) 3663 3664 -- Note: the parser may generate this node in some situations where it 3665 -- should be a function call. The semantic pass must correct this 3666 -- misidentification (which is inevitable at the parser level). 3667 3668 -- N_Indexed_Component 3669 -- Sloc contains a copy of the Sloc value of the Prefix 3670 -- Prefix (Node3) 3671 -- Expressions (List1) 3672 -- Generalized_Indexing (Node4-Sem) 3673 -- Atomic_Sync_Required (Flag14-Sem) 3674 -- plus fields for expression 3675 3676 -- Note: if any of the subscripts requires a range check, then the 3677 -- Do_Range_Check flag is set on the corresponding expression, with 3678 -- the index type being determined from the type of the Prefix, which 3679 -- references the array being indexed. 3680 3681 -- Note: in a fully analyzed and expanded indexed component node, and 3682 -- hence in any such node that gigi sees, if the prefix is an access 3683 -- type, then an explicit dereference operation has been inserted. 3684 3685 ------------------ 3686 -- 4.1.2 Slice -- 3687 ------------------ 3688 3689 -- SLICE ::= PREFIX (DISCRETE_RANGE) 3690 3691 -- Note: an implicit subtype is created to describe the resulting 3692 -- type, so that the bounds of this type are the bounds of the slice. 3693 3694 -- N_Slice 3695 -- Sloc points to first token of prefix 3696 -- Prefix (Node3) 3697 -- Discrete_Range (Node4) 3698 -- plus fields for expression 3699 3700 ------------------------------- 3701 -- 4.1.3 Selected Component -- 3702 ------------------------------- 3703 3704 -- SELECTED_COMPONENT ::= PREFIX . SELECTOR_NAME 3705 3706 -- Note: selected components that are semantically expanded names get 3707 -- changed during semantic processing into the separate N_Expanded_Name 3708 -- node. See description of this node in the section on semantic nodes. 3709 3710 -- N_Selected_Component 3711 -- Sloc points to the period 3712 -- Prefix (Node3) 3713 -- Selector_Name (Node2) 3714 -- Associated_Node (Node4-Sem) 3715 -- Do_Discriminant_Check (Flag1-Sem) 3716 -- Is_In_Discriminant_Check (Flag11-Sem) 3717 -- Is_Prefixed_Call (Flag17-Sem) 3718 -- Atomic_Sync_Required (Flag14-Sem) 3719 -- plus fields for expression 3720 3721 -------------------------- 3722 -- 4.1.3 Selector Name -- 3723 -------------------------- 3724 3725 -- SELECTOR_NAME ::= IDENTIFIER | CHARACTER_LITERAL | OPERATOR_SYMBOL 3726 3727 -------------------------------- 3728 -- 4.1.4 Attribute Reference -- 3729 -------------------------------- 3730 3731 -- ATTRIBUTE_REFERENCE ::= PREFIX ' ATTRIBUTE_DESIGNATOR 3732 3733 -- Note: the syntax is quite ambiguous at this point. Consider: 3734 3735 -- A'Length (X) X is part of the attribute designator 3736 -- A'Pos (X) X is an explicit actual parameter of function A'Pos 3737 -- A'Class (X) X is the expression of a type conversion 3738 3739 -- It would be possible for the parser to distinguish these cases 3740 -- by looking at the attribute identifier. However, that would mean 3741 -- more work in introducing new implementation defined attributes, 3742 -- and also it would mean that special processing for attributes 3743 -- would be scattered around, instead of being centralized in the 3744 -- semantic routine that handles an N_Attribute_Reference node. 3745 -- Consequently, the parser in all the above cases stores the 3746 -- expression (X in these examples) as a single element list in 3747 -- in the Expressions field of the N_Attribute_Reference node. 3748 3749 -- Similarly, for attributes like Max which take two arguments, 3750 -- we store the two arguments as a two element list in the 3751 -- Expressions field. Of course it is clear at parse time that 3752 -- this case is really a function call with an attribute as the 3753 -- prefix, but it turns out to be convenient to handle the two 3754 -- argument case in a similar manner to the one argument case, 3755 -- and indeed in general the parser will accept any number of 3756 -- expressions in this position and store them as a list in the 3757 -- attribute reference node. This allows for future addition of 3758 -- attributes that take more than two arguments. 3759 3760 -- Note: named associates are not permitted in function calls where 3761 -- the function is an attribute (see RM 6.4(3)) so it is legitimate 3762 -- to skip the normal subprogram argument processing. 3763 3764 -- Note: for the attributes whose designators are technically keywords, 3765 -- i.e. digits, access, delta, range, the Attribute_Name field contains 3766 -- the corresponding name, even though no identifier is involved. 3767 3768 -- Note: the generated code may contain stream attributes applied to 3769 -- limited types for which no stream routines exist officially. In such 3770 -- case, the result is to use the stream attribute for the underlying 3771 -- full type, or in the case of a protected type, the components 3772 -- (including any discriminants) are merely streamed in order. 3773 3774 -- See Exp_Attr for a complete description of which attributes are 3775 -- passed onto Gigi, and which are handled entirely by the front end. 3776 3777 -- Gigi restriction: For the Pos attribute, the prefix cannot be 3778 -- a non-standard enumeration type or a nonzero/zero semantics 3779 -- boolean type, so the value is simply the stored representation. 3780 3781 -- Gigi requirement: For the Mechanism_Code attribute, if the prefix 3782 -- references a subprogram that is a renaming, then the front end must 3783 -- rewrite the attribute to refer directly to the renamed entity. 3784 3785 -- Note: syntactically the prefix of an attribute reference must be a 3786 -- name, and this (somewhat artificial) requirement is enforced by the 3787 -- parser. However, for many attributes, such as 'Valid, it is quite 3788 -- reasonable to apply the attribute to any value, and hence to any 3789 -- expression. Internally in the tree, the prefix is an expression which 3790 -- does not have to be a name, and this is handled fine by the semantic 3791 -- analysis and expansion, and back ends. This arises for the case of 3792 -- attribute references built by the expander (e.g. 'Valid for the case 3793 -- of an implicit validity check). 3794 3795 -- Note: In generated code, the Address and Unrestricted_Access 3796 -- attributes can be applied to any expression, and the meaning is 3797 -- to create an object containing the value (the object is in the 3798 -- current stack frame), and pass the address of this value. If the 3799 -- Must_Be_Byte_Aligned flag is set, then the object whose address 3800 -- is taken must be on a byte (storage unit) boundary, and if it is 3801 -- not (or may not be), then the generated code must create a copy 3802 -- that is byte aligned, and pass the address of this copy. 3803 3804 -- N_Attribute_Reference 3805 -- Sloc points to apostrophe 3806 -- Prefix (Node3) (general expression, see note above) 3807 -- Attribute_Name (Name2) identifier name from attribute designator 3808 -- Expressions (List1) (set to No_List if no associated expressions) 3809 -- Entity (Node4-Sem) used if the attribute yields a type 3810 -- Associated_Node (Node4-Sem) 3811 -- Do_Overflow_Check (Flag17-Sem) 3812 -- Header_Size_Added (Flag11-Sem) 3813 -- Must_Be_Byte_Aligned (Flag14-Sem) 3814 -- Non_Aliased_Prefix (Flag18-Sem) 3815 -- Redundant_Use (Flag13-Sem) 3816 3817 -- plus fields for expression 3818 3819 -- Note: in Modify_Tree_For_C mode, Max and Min attributes are expanded 3820 -- into equivalent if expressions, properly taking care of side effects. 3821 3822 --------------------------------- 3823 -- 4.1.4 Attribute Designator -- 3824 --------------------------------- 3825 3826 -- ATTRIBUTE_DESIGNATOR ::= 3827 -- IDENTIFIER [(static_EXPRESSION)] 3828 -- | access | delta | digits 3829 3830 -- There is no explicit node in the tree for an attribute designator. 3831 -- Instead the Attribute_Name and Expressions fields of the parent 3832 -- node (N_Attribute_Reference node) hold the information. 3833 3834 -- Note: if ACCESS, DELTA or DIGITS appears in an attribute 3835 -- designator, then they are treated as identifiers internally 3836 -- rather than the keywords of the same name. 3837 3838 -------------------------------------- 3839 -- 4.1.4 Range Attribute Reference -- 3840 -------------------------------------- 3841 3842 -- RANGE_ATTRIBUTE_REFERENCE ::= PREFIX ' RANGE_ATTRIBUTE_DESIGNATOR 3843 3844 -- A range attribute reference is represented in the tree using the 3845 -- normal N_Attribute_Reference node. 3846 3847 --------------------------------------- 3848 -- 4.1.4 Range Attribute Designator -- 3849 --------------------------------------- 3850 3851 -- RANGE_ATTRIBUTE_DESIGNATOR ::= Range [(static_EXPRESSION)] 3852 3853 -- A range attribute designator is represented in the tree using the 3854 -- normal N_Attribute_Reference node. 3855 3856 -------------------- 3857 -- 4.3 Aggregate -- 3858 -------------------- 3859 3860 -- AGGREGATE ::= 3861 -- RECORD_AGGREGATE | EXTENSION_AGGREGATE | ARRAY_AGGREGATE 3862 3863 ----------------------------- 3864 -- 4.3.1 Record Aggregate -- 3865 ----------------------------- 3866 3867 -- RECORD_AGGREGATE ::= (RECORD_COMPONENT_ASSOCIATION_LIST) 3868 3869 -- N_Aggregate 3870 -- Sloc points to left parenthesis 3871 -- Expressions (List1) (set to No_List if none or null record case) 3872 -- Component_Associations (List2) (set to No_List if none) 3873 -- Null_Record_Present (Flag17) 3874 -- Aggregate_Bounds (Node3-Sem) 3875 -- Associated_Node (Node4-Sem) 3876 -- Compile_Time_Known_Aggregate (Flag18-Sem) 3877 -- Expansion_Delayed (Flag11-Sem) 3878 -- Has_Self_Reference (Flag13-Sem) 3879 -- plus fields for expression 3880 3881 -- Note: this structure is used for both record and array aggregates 3882 -- since the two cases are not separable by the parser. The parser 3883 -- makes no attempt to enforce consistency here, so it is up to the 3884 -- semantic phase to make sure that the aggregate is consistent (i.e. 3885 -- that it is not a "half-and-half" case that mixes record and array 3886 -- syntax. In particular, for a record aggregate, the expressions 3887 -- field will be set if there are positional associations. 3888 3889 -- Note: N_Aggregate is not used for all aggregates; in particular, 3890 -- there is a separate node kind for extension aggregates. 3891 3892 -- Note: gigi/gcc can handle array aggregates correctly providing that 3893 -- they are entirely positional, and the array subtype involved has a 3894 -- known at compile time length and is not bit packed, or a convention 3895 -- Fortran array with more than one dimension. If these conditions 3896 -- are not met, then the front end must translate the aggregate into 3897 -- an appropriate set of assignments into a temporary. 3898 3899 -- Note: for the record aggregate case, gigi/gcc can handle most cases 3900 -- of record aggregates, including those for packed, and rep-claused 3901 -- records, and also variant records, providing that there are no 3902 -- variable length fields whose size is not known at compile time, 3903 -- and providing that the aggregate is presented in fully named form. 3904 3905 -- The other situation in which array aggregates and record aggregates 3906 -- cannot be passed to the back end is if assignment to one or more 3907 -- components itself needs expansion, e.g. in the case of an assignment 3908 -- of an object of a controlled type. In such cases, the front end 3909 -- must expand the aggregate to a series of assignments, and apply 3910 -- the required expansion to the individual assignment statements. 3911 3912 ---------------------------------------------- 3913 -- 4.3.1 Record Component Association List -- 3914 ---------------------------------------------- 3915 3916 -- RECORD_COMPONENT_ASSOCIATION_LIST ::= 3917 -- RECORD_COMPONENT_ASSOCIATION {, RECORD_COMPONENT_ASSOCIATION} 3918 -- | null record 3919 3920 -- There is no explicit node in the tree for a record component 3921 -- association list. Instead the Null_Record_Present flag is set in 3922 -- the parent node for the NULL RECORD case. 3923 3924 ------------------------------------------------------ 3925 -- 4.3.1 Record Component Association (also 4.3.3) -- 3926 ------------------------------------------------------ 3927 3928 -- RECORD_COMPONENT_ASSOCIATION ::= 3929 -- [COMPONENT_CHOICE_LIST =>] EXPRESSION 3930 3931 -- N_Component_Association 3932 -- Sloc points to first selector name 3933 -- Choices (List1) 3934 -- Loop_Actions (List2-Sem) 3935 -- Expression (Node3) (empty if Box_Present) 3936 -- Box_Present (Flag15) 3937 -- Inherited_Discriminant (Flag13) 3938 3939 -- Note: this structure is used for both record component associations 3940 -- and array component associations, since the two cases aren't always 3941 -- separable by the parser. The choices list may represent either a 3942 -- list of selector names in the record aggregate case, or a list of 3943 -- discrete choices in the array aggregate case or an N_Others_Choice 3944 -- node (which appears as a singleton list). Box_Present gives support 3945 -- to Ada 2005 (AI-287). 3946 3947 ---------------------------------- 3948 -- 4.3.1 Component Choice List -- 3949 ---------------------------------- 3950 3951 -- COMPONENT_CHOICE_LIST ::= 3952 -- component_SELECTOR_NAME {| component_SELECTOR_NAME} 3953 -- | others 3954 3955 -- The entries of a component choice list appear in the Choices list of 3956 -- the associated N_Component_Association, as either selector names, or 3957 -- as an N_Others_Choice node. 3958 3959 -------------------------------- 3960 -- 4.3.2 Extension Aggregate -- 3961 -------------------------------- 3962 3963 -- EXTENSION_AGGREGATE ::= 3964 -- (ANCESTOR_PART with RECORD_COMPONENT_ASSOCIATION_LIST) 3965 3966 -- Note: extension aggregates are not permitted in Ada 83 mode 3967 3968 -- N_Extension_Aggregate 3969 -- Sloc points to left parenthesis 3970 -- Ancestor_Part (Node3) 3971 -- Associated_Node (Node4-Sem) 3972 -- Expressions (List1) (set to No_List if none or null record case) 3973 -- Component_Associations (List2) (set to No_List if none) 3974 -- Null_Record_Present (Flag17) 3975 -- Expansion_Delayed (Flag11-Sem) 3976 -- Has_Self_Reference (Flag13-Sem) 3977 -- plus fields for expression 3978 3979 -------------------------- 3980 -- 4.3.2 Ancestor Part -- 3981 -------------------------- 3982 3983 -- ANCESTOR_PART ::= EXPRESSION | SUBTYPE_MARK 3984 3985 ---------------------------- 3986 -- 4.3.3 Array Aggregate -- 3987 ---------------------------- 3988 3989 -- ARRAY_AGGREGATE ::= 3990 -- POSITIONAL_ARRAY_AGGREGATE | NAMED_ARRAY_AGGREGATE 3991 3992 --------------------------------------- 3993 -- 4.3.3 Positional Array Aggregate -- 3994 --------------------------------------- 3995 3996 -- POSITIONAL_ARRAY_AGGREGATE ::= 3997 -- (EXPRESSION, EXPRESSION {, EXPRESSION}) 3998 -- | (EXPRESSION {, EXPRESSION}, others => EXPRESSION) 3999 4000 -- See Record_Aggregate (4.3.1) for node structure 4001 4002 ---------------------------------- 4003 -- 4.3.3 Named Array Aggregate -- 4004 ---------------------------------- 4005 4006 -- NAMED_ARRAY_AGGREGATE ::= 4007 -- | (ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION}) 4008 4009 -- See Record_Aggregate (4.3.1) for node structure 4010 4011 ---------------------------------------- 4012 -- 4.3.3 Array Component Association -- 4013 ---------------------------------------- 4014 4015 -- ARRAY_COMPONENT_ASSOCIATION ::= 4016 -- DISCRETE_CHOICE_LIST => EXPRESSION 4017 4018 -- See Record_Component_Association (4.3.1) for node structure 4019 4020 -------------------------------------------------- 4021 -- 4.4 Expression/Relation/Term/Factor/Primary -- 4022 -------------------------------------------------- 4023 4024 -- EXPRESSION ::= 4025 -- RELATION {LOGICAL_OPERATOR RELATION} 4026 4027 -- CHOICE_EXPRESSION ::= 4028 -- CHOICE_RELATION {LOGICAL_OPERATOR CHOICE_RELATION} 4029 4030 -- CHOICE_RELATION ::= 4031 -- SIMPLE_EXPRESSION [RELATIONAL_OPERATOR SIMPLE_EXPRESSION] 4032 4033 -- RELATION ::= 4034 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 4035 -- | RAISE_EXPRESSION 4036 4037 -- MEMBERSHIP_CHOICE_LIST ::= 4038 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 4039 4040 -- MEMBERSHIP_CHOICE ::= 4041 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 4042 4043 -- LOGICAL_OPERATOR ::= and | and then | or | or else | xor 4044 4045 -- SIMPLE_EXPRESSION ::= 4046 -- [UNARY_ADDING_OPERATOR] TERM {BINARY_ADDING_OPERATOR TERM} 4047 4048 -- TERM ::= FACTOR {MULTIPLYING_OPERATOR FACTOR} 4049 4050 -- FACTOR ::= PRIMARY [** PRIMARY] | abs PRIMARY | not PRIMARY 4051 4052 -- No nodes are generated for any of these constructs. Instead, the 4053 -- node for the operator appears directly. When we refer to an 4054 -- expression in this description, we mean any of the possible 4055 -- constituent components of an expression (e.g. identifier is 4056 -- an example of an expression). 4057 4058 -- Note: the above syntax is that Ada 2012 syntax which restricts 4059 -- choice relations to simple expressions to avoid ambiguities in 4060 -- some contexts with set membership notation. It has been decided 4061 -- that in retrospect, the Ada 95 change allowing general expressions 4062 -- in this context was a mistake, so we have reverted to the above 4063 -- syntax in Ada 95 and Ada 2005 modes (the restriction to simple 4064 -- expressions was there in Ada 83 from the start). 4065 4066 ------------------ 4067 -- 4.4 Primary -- 4068 ------------------ 4069 4070 -- PRIMARY ::= 4071 -- NUMERIC_LITERAL | null 4072 -- | STRING_LITERAL | AGGREGATE 4073 -- | NAME | QUALIFIED_EXPRESSION 4074 -- | ALLOCATOR | (EXPRESSION) 4075 4076 -- Usually there is no explicit node in the tree for primary. Instead 4077 -- the constituent (e.g. AGGREGATE) appears directly. There are two 4078 -- exceptions. First, there is an explicit node for a null primary. 4079 4080 -- N_Null 4081 -- Sloc points to NULL 4082 -- plus fields for expression 4083 4084 -- Second, the case of (EXPRESSION) is handled specially. Ada requires 4085 -- that the parser keep track of which subexpressions are enclosed 4086 -- in parentheses, and how many levels of parentheses are used. This 4087 -- information is required for optimization purposes, and also for 4088 -- some semantic checks (e.g. (((1))) in a procedure spec does not 4089 -- conform with ((((1)))) in the body). 4090 4091 -- The parentheses are recorded by keeping a Paren_Count field in every 4092 -- subexpression node (it is actually present in all nodes, but only 4093 -- used in subexpression nodes). This count records the number of 4094 -- levels of parentheses. If the number of levels in the source exceeds 4095 -- the maximum accommodated by this count, then the count is simply left 4096 -- at the maximum value. This means that there are some pathological 4097 -- cases of failure to detect conformance failures (e.g. an expression 4098 -- with 500 levels of parens will conform with one with 501 levels), 4099 -- but we do not need to lose sleep over this. 4100 4101 -- Historical note: in versions of GNAT prior to 1.75, there was a node 4102 -- type N_Parenthesized_Expression used to accurately record unlimited 4103 -- numbers of levels of parentheses. However, it turned out to be a 4104 -- real nuisance to have to take into account the possible presence of 4105 -- this node during semantic analysis, since basically parentheses have 4106 -- zero relevance to semantic analysis. 4107 4108 -- Note: the level of parentheses always present in things like 4109 -- aggregates does not count, only the parentheses in the primary 4110 -- (EXPRESSION) affect the setting of the Paren_Count field. 4111 4112 -- 2nd Note: the contents of the Expression field must be ignored (i.e. 4113 -- treated as though it were Empty) if No_Initialization is set True. 4114 4115 -------------------------------------- 4116 -- 4.5 Short Circuit Control Forms -- 4117 -------------------------------------- 4118 4119 -- EXPRESSION ::= 4120 -- RELATION {and then RELATION} | RELATION {or else RELATION} 4121 4122 -- Gigi restriction: For both these control forms, the operand and 4123 -- result types are always Standard.Boolean. The expander inserts the 4124 -- required conversion operations where needed to ensure this is the 4125 -- case. 4126 4127 -- N_And_Then 4128 -- Sloc points to AND of AND THEN 4129 -- Left_Opnd (Node2) 4130 -- Right_Opnd (Node3) 4131 -- Actions (List1-Sem) 4132 -- plus fields for expression 4133 4134 -- N_Or_Else 4135 -- Sloc points to OR of OR ELSE 4136 -- Left_Opnd (Node2) 4137 -- Right_Opnd (Node3) 4138 -- Actions (List1-Sem) 4139 -- plus fields for expression 4140 4141 -- Note: The Actions field is used to hold actions associated with 4142 -- the right hand operand. These have to be treated specially since 4143 -- they are not unconditionally executed. See Insert_Actions for a 4144 -- more detailed description of how these actions are handled. 4145 4146 --------------------------- 4147 -- 4.5 Membership Tests -- 4148 --------------------------- 4149 4150 -- RELATION ::= 4151 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 4152 4153 -- MEMBERSHIP_CHOICE_LIST ::= 4154 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 4155 4156 -- MEMBERSHIP_CHOICE ::= 4157 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 4158 4159 -- Note: although the grammar above allows only a range or a subtype 4160 -- mark, the parser in fact will accept any simple expression in place 4161 -- of a subtype mark. This means that the semantic analyzer must be able 4162 -- to deal with, and diagnose a simple expression other than a name for 4163 -- the right operand. This simplifies error recovery in the parser. 4164 4165 -- The Alternatives field below is present only if there is more than 4166 -- one Membership_Choice present (which is legitimate only in Ada 2012 4167 -- mode) in which case Right_Opnd is Empty, and Alternatives contains 4168 -- the list of choices. In the tree passed to the back end, Alternatives 4169 -- is always No_List, and Right_Opnd is set (i.e. the expansion circuit 4170 -- expands out the complex set membership case using simple membership 4171 -- and equality operations). 4172 4173 -- Should we rename Alternatives here to Membership_Choices ??? 4174 4175 -- N_In 4176 -- Sloc points to IN 4177 -- Left_Opnd (Node2) 4178 -- Right_Opnd (Node3) 4179 -- Alternatives (List4) (set to No_List if only one set alternative) 4180 -- No_Minimize_Eliminate (Flag17) 4181 -- plus fields for expression 4182 4183 -- N_Not_In 4184 -- Sloc points to NOT of NOT IN 4185 -- Left_Opnd (Node2) 4186 -- Right_Opnd (Node3) 4187 -- Alternatives (List4) (set to No_List if only one set alternative) 4188 -- No_Minimize_Eliminate (Flag17) 4189 -- plus fields for expression 4190 4191 -------------------- 4192 -- 4.5 Operators -- 4193 -------------------- 4194 4195 -- LOGICAL_OPERATOR ::= and | or | xor 4196 4197 -- RELATIONAL_OPERATOR ::= = | /= | < | <= | > | >= 4198 4199 -- BINARY_ADDING_OPERATOR ::= + | - | & 4200 4201 -- UNARY_ADDING_OPERATOR ::= + | - 4202 4203 -- MULTIPLYING_OPERATOR ::= * | / | mod | rem 4204 4205 -- HIGHEST_PRECEDENCE_OPERATOR ::= ** | abs | not 4206 4207 -- Sprint syntax if Treat_Fixed_As_Integer is set: 4208 4209 -- x #* y 4210 -- x #/ y 4211 -- x #mod y 4212 -- x #rem y 4213 4214 -- Gigi restriction: For * / mod rem with fixed-point operands, Gigi 4215 -- will only be given nodes with the Treat_Fixed_As_Integer flag set. 4216 -- All handling of smalls for multiplication and division is handled 4217 -- by the front end (mod and rem result only from expansion). Gigi 4218 -- thus never needs to worry about small values (for other operators 4219 -- operating on fixed-point, e.g. addition, the small value does not 4220 -- have any semantic effect anyway, these are always integer operations. 4221 4222 -- Gigi restriction: For all operators taking Boolean operands, the 4223 -- type is always Standard.Boolean. The expander inserts the required 4224 -- conversion operations where needed to ensure this is the case. 4225 4226 -- N_Op_And 4227 -- Sloc points to AND 4228 -- Do_Length_Check (Flag4-Sem) 4229 -- plus fields for binary operator 4230 -- plus fields for expression 4231 4232 -- N_Op_Or 4233 -- Sloc points to OR 4234 -- Do_Length_Check (Flag4-Sem) 4235 -- plus fields for binary operator 4236 -- plus fields for expression 4237 4238 -- N_Op_Xor 4239 -- Sloc points to XOR 4240 -- Do_Length_Check (Flag4-Sem) 4241 -- plus fields for binary operator 4242 -- plus fields for expression 4243 4244 -- N_Op_Eq 4245 -- Sloc points to = 4246 -- plus fields for binary operator 4247 -- plus fields for expression 4248 4249 -- N_Op_Ne 4250 -- Sloc points to /= 4251 -- plus fields for binary operator 4252 -- plus fields for expression 4253 4254 -- N_Op_Lt 4255 -- Sloc points to < 4256 -- plus fields for binary operator 4257 -- plus fields for expression 4258 4259 -- N_Op_Le 4260 -- Sloc points to <= 4261 -- plus fields for binary operator 4262 -- plus fields for expression 4263 4264 -- N_Op_Gt 4265 -- Sloc points to > 4266 -- plus fields for binary operator 4267 -- plus fields for expression 4268 4269 -- N_Op_Ge 4270 -- Sloc points to >= 4271 -- plus fields for binary operator 4272 -- plus fields for expression 4273 4274 -- N_Op_Add 4275 -- Sloc points to + (binary) 4276 -- plus fields for binary operator 4277 -- plus fields for expression 4278 4279 -- N_Op_Subtract 4280 -- Sloc points to - (binary) 4281 -- plus fields for binary operator 4282 -- plus fields for expression 4283 4284 -- N_Op_Concat 4285 -- Sloc points to & 4286 -- Is_Component_Left_Opnd (Flag13-Sem) 4287 -- Is_Component_Right_Opnd (Flag14-Sem) 4288 -- plus fields for binary operator 4289 -- plus fields for expression 4290 4291 -- N_Op_Multiply 4292 -- Sloc points to * 4293 -- Treat_Fixed_As_Integer (Flag14-Sem) 4294 -- Rounded_Result (Flag18-Sem) 4295 -- plus fields for binary operator 4296 -- plus fields for expression 4297 4298 -- N_Op_Divide 4299 -- Sloc points to / 4300 -- Treat_Fixed_As_Integer (Flag14-Sem) 4301 -- Do_Division_Check (Flag13-Sem) 4302 -- Rounded_Result (Flag18-Sem) 4303 -- plus fields for binary operator 4304 -- plus fields for expression 4305 4306 -- N_Op_Mod 4307 -- Sloc points to MOD 4308 -- Treat_Fixed_As_Integer (Flag14-Sem) 4309 -- Do_Division_Check (Flag13-Sem) 4310 -- plus fields for binary operator 4311 -- plus fields for expression 4312 4313 -- N_Op_Rem 4314 -- Sloc points to REM 4315 -- Treat_Fixed_As_Integer (Flag14-Sem) 4316 -- Do_Division_Check (Flag13-Sem) 4317 -- plus fields for binary operator 4318 -- plus fields for expression 4319 4320 -- N_Op_Expon 4321 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 4322 -- Sloc points to ** 4323 -- plus fields for binary operator 4324 -- plus fields for expression 4325 4326 -- N_Op_Plus 4327 -- Sloc points to + (unary) 4328 -- plus fields for unary operator 4329 -- plus fields for expression 4330 4331 -- N_Op_Minus 4332 -- Sloc points to - (unary) 4333 -- plus fields for unary operator 4334 -- plus fields for expression 4335 4336 -- N_Op_Abs 4337 -- Sloc points to ABS 4338 -- plus fields for unary operator 4339 -- plus fields for expression 4340 4341 -- N_Op_Not 4342 -- Sloc points to NOT 4343 -- plus fields for unary operator 4344 -- plus fields for expression 4345 4346 -- See also shift operators in section B.2 4347 4348 -- Note on fixed-point operations passed to Gigi: For adding operators, 4349 -- the semantics is to treat these simply as integer operations, with 4350 -- the small values being ignored (the bounds are already stored in 4351 -- units of small, so that constraint checking works as usual). For the 4352 -- case of multiply/divide/rem/mod operations, Gigi will only see fixed 4353 -- point operands if the Treat_Fixed_As_Integer flag is set and will 4354 -- thus treat these nodes in identical manner, ignoring small values. 4355 4356 -- Note on equality/inequality tests for records. In the expanded tree, 4357 -- record comparisons are always expanded to be a series of component 4358 -- comparisons, so the back end will never see an equality or inequality 4359 -- operation with operands of a record type. 4360 4361 -- Note on overflow handling: When the overflow checking mode is set to 4362 -- MINIMIZED or ELIMINATED, nodes for signed arithmetic operations may 4363 -- be modified to use a larger type for the operands and result. In 4364 -- the case where the computed range exceeds that of Long_Long_Integer, 4365 -- and we are running in ELIMINATED mode, the operator node will be 4366 -- changed to be a call to the appropriate routine in System.Bignums. 4367 4368 -- Note: In Modify_Tree_For_C mode, we do not generate an N_Op_Mod node 4369 -- for signed integer types (since there is no equivalent operator in 4370 -- C). Instead we rewrite such an operation in terms of REM (which is 4371 -- % in C) and other C-available operators. 4372 4373 ------------------------------------ 4374 -- 4.5.7 Conditional Expressions -- 4375 ------------------------------------ 4376 4377 -- CONDITIONAL_EXPRESSION ::= IF_EXPRESSION | CASE_EXPRESSION 4378 4379 -------------------------- 4380 -- 4.5.7 If Expression -- 4381 ---------------------------- 4382 4383 -- IF_EXPRESSION ::= 4384 -- if CONDITION then DEPENDENT_EXPRESSION 4385 -- {elsif CONDITION then DEPENDENT_EXPRESSION} 4386 -- [else DEPENDENT_EXPRESSION] 4387 4388 -- DEPENDENT_EXPRESSION ::= EXPRESSION 4389 4390 -- Note: if we have (IF x1 THEN x2 ELSIF x3 THEN x4 ELSE x5) then it 4391 -- is represented as (IF x1 THEN x2 ELSE (IF x3 THEN x4 ELSE x5)) and 4392 -- the Is_Elsif flag is set on the inner if expression. 4393 4394 -- N_If_Expression 4395 -- Sloc points to IF or ELSIF keyword 4396 -- Expressions (List1) 4397 -- Then_Actions (List2-Sem) 4398 -- Else_Actions (List3-Sem) 4399 -- Is_Elsif (Flag13) (set if comes from ELSIF) 4400 -- Do_Overflow_Check (Flag17-Sem) 4401 -- plus fields for expression 4402 4403 -- Expressions here is a three-element list, whose first element is the 4404 -- condition, the second element is the dependent expression after THEN 4405 -- and the third element is the dependent expression after the ELSE 4406 -- (explicitly set to True if missing). 4407 4408 -- Note: the Then_Actions and Else_Actions fields are always set to 4409 -- No_List in the tree passed to the back end. These are used only 4410 -- for temporary processing purposes in the expander. Even though they 4411 -- are semantic fields, their parent pointers are set because analysis 4412 -- of actions nodes in those lists may generate additional actions that 4413 -- need to know their insertion point (for example for the creation of 4414 -- transient scopes). 4415 4416 -- Note: in the tree passed to the back end, if the result type is 4417 -- an unconstrained array, the if expression can only appears in the 4418 -- initializing expression of an object declaration (this avoids the 4419 -- back end having to create a variable length temporary on the fly). 4420 4421 ---------------------------- 4422 -- 4.5.7 Case Expression -- 4423 ---------------------------- 4424 4425 -- CASE_EXPRESSION ::= 4426 -- case SELECTING_EXPRESSION is 4427 -- CASE_EXPRESSION_ALTERNATIVE 4428 -- {,CASE_EXPRESSION_ALTERNATIVE} 4429 4430 -- Note that the Alternatives cannot include pragmas (this contrasts 4431 -- with the situation of case statements where pragmas are allowed). 4432 4433 -- N_Case_Expression 4434 -- Sloc points to CASE 4435 -- Expression (Node3) (the selecting expression) 4436 -- Alternatives (List4) (the case expression alternatives) 4437 -- Do_Overflow_Check (Flag17-Sem) 4438 4439 ---------------------------------------- 4440 -- 4.5.7 Case Expression Alternative -- 4441 ---------------------------------------- 4442 4443 -- CASE_EXPRESSION_ALTERNATIVE ::= 4444 -- when DISCRETE_CHOICE_LIST => 4445 -- DEPENDENT_EXPRESSION 4446 4447 -- N_Case_Expression_Alternative 4448 -- Sloc points to WHEN 4449 -- Actions (List1) 4450 -- Discrete_Choices (List4) 4451 -- Expression (Node3) 4452 -- Has_SP_Choice (Flag15-Sem) 4453 4454 -- Note: The Actions field temporarily holds any actions associated with 4455 -- evaluation of the Expression. During expansion of the case expression 4456 -- these actions are wrapped into an N_Expressions_With_Actions node 4457 -- replacing the original expression. 4458 4459 -- Note: this node never appears in the tree passed to the back end, 4460 -- since the expander converts case expressions into case statements. 4461 4462 --------------------------------- 4463 -- 4.5.9 Quantified Expression -- 4464 --------------------------------- 4465 4466 -- QUANTIFIED_EXPRESSION ::= 4467 -- for QUANTIFIER LOOP_PARAMETER_SPECIFICATION => PREDICATE 4468 -- | for QUANTIFIER ITERATOR_SPECIFICATION => PREDICATE 4469 -- 4470 -- QUANTIFIER ::= all | some 4471 4472 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4473 -- is present at a time, in which case the other one is empty. 4474 4475 -- N_Quantified_Expression 4476 -- Sloc points to FOR 4477 -- Iterator_Specification (Node2) 4478 -- Loop_Parameter_Specification (Node4) 4479 -- Condition (Node1) 4480 -- All_Present (Flag15) 4481 4482 -------------------------- 4483 -- 4.6 Type Conversion -- 4484 -------------------------- 4485 4486 -- TYPE_CONVERSION ::= 4487 -- SUBTYPE_MARK (EXPRESSION) | SUBTYPE_MARK (NAME) 4488 4489 -- In the (NAME) case, the name is stored as the expression 4490 4491 -- Note: the parser never generates a type conversion node, since it 4492 -- looks like an indexed component which is generated by preference. 4493 -- The semantic pass must correct this misidentification. 4494 4495 -- Gigi handles conversions that involve no change in the root type, 4496 -- and also all conversions from integer to floating-point types. 4497 -- Conversions from floating-point to integer are only handled in 4498 -- the case where Float_Truncate flag set. Other conversions from 4499 -- floating-point to integer (involving rounding) and all conversions 4500 -- involving fixed-point types are handled by the expander. 4501 4502 -- Sprint syntax if Float_Truncate set: X^(Y) 4503 -- Sprint syntax if Conversion_OK set X?(Y) 4504 -- Sprint syntax if both flags set X?^(Y) 4505 4506 -- Note: If either the operand or result type is fixed-point, Gigi will 4507 -- only see a type conversion node with Conversion_OK set. The front end 4508 -- takes care of all handling of small's for fixed-point conversions. 4509 4510 -- N_Type_Conversion 4511 -- Sloc points to first token of subtype mark 4512 -- Subtype_Mark (Node4) 4513 -- Expression (Node3) 4514 -- Do_Discriminant_Check (Flag1-Sem) 4515 -- Do_Length_Check (Flag4-Sem) 4516 -- Float_Truncate (Flag11-Sem) 4517 -- Do_Tag_Check (Flag13-Sem) 4518 -- Conversion_OK (Flag14-Sem) 4519 -- Do_Overflow_Check (Flag17-Sem) 4520 -- Rounded_Result (Flag18-Sem) 4521 -- plus fields for expression 4522 4523 -- Note: if a range check is required, then the Do_Range_Check flag 4524 -- is set in the Expression with the check being done against the 4525 -- target type range (after the base type conversion, if any). 4526 4527 ------------------------------- 4528 -- 4.7 Qualified Expression -- 4529 ------------------------------- 4530 4531 -- QUALIFIED_EXPRESSION ::= 4532 -- SUBTYPE_MARK ' (EXPRESSION) | SUBTYPE_MARK ' AGGREGATE 4533 4534 -- Note: the parentheses in the (EXPRESSION) case are deemed to enclose 4535 -- the expression, so the Expression field of this node always points 4536 -- to a parenthesized expression in this case (i.e. Paren_Count will 4537 -- always be non-zero for the referenced expression if it is not an 4538 -- aggregate). 4539 4540 -- N_Qualified_Expression 4541 -- Sloc points to apostrophe 4542 -- Subtype_Mark (Node4) 4543 -- Expression (Node3) expression or aggregate 4544 -- plus fields for expression 4545 4546 -------------------- 4547 -- 4.8 Allocator -- 4548 -------------------- 4549 4550 -- ALLOCATOR ::= 4551 -- new [SUBPOOL_SPECIFICATION] SUBTYPE_INDICATION 4552 -- | new [SUBPOOL_SPECIFICATION] QUALIFIED_EXPRESSION 4553 -- 4554 -- SUBPOOL_SPECIFICATION ::= (subpool_handle_NAME) 4555 4556 -- Sprint syntax (when storage pool present) 4557 -- new xxx (storage_pool = pool) 4558 -- or 4559 -- new (subpool) xxx (storage_pool = pool) 4560 4561 -- N_Allocator 4562 -- Sloc points to NEW 4563 -- Expression (Node3) subtype indication or qualified expression 4564 -- Subpool_Handle_Name (Node4) (set to Empty if not present) 4565 -- Storage_Pool (Node1-Sem) 4566 -- Procedure_To_Call (Node2-Sem) 4567 -- Null_Exclusion_Present (Flag11) 4568 -- No_Initialization (Flag13-Sem) 4569 -- Is_Static_Coextension (Flag14-Sem) 4570 -- Do_Storage_Check (Flag17-Sem) 4571 -- Is_Dynamic_Coextension (Flag18-Sem) 4572 -- plus fields for expression 4573 4574 -- Note: like all nodes, the N_Allocator has the Comes_From_Source flag. 4575 -- This flag has a special function in conjunction with the restriction 4576 -- No_Implicit_Heap_Allocations, which will be triggered if this flag 4577 -- is not set. This means that if a source allocator is replaced with 4578 -- a constructed allocator, the Comes_From_Source flag should be copied 4579 -- to the newly created allocator. 4580 4581 --------------------------------- 4582 -- 5.1 Sequence Of Statements -- 4583 --------------------------------- 4584 4585 -- SEQUENCE_OF_STATEMENTS ::= STATEMENT {STATEMENT} 4586 4587 -- Note: Although the parser will not accept a declaration as a 4588 -- statement, the semantic analyzer may insert declarations (e.g. 4589 -- declarations of implicit types needed for execution of other 4590 -- statements) into a sequence of statements, so the code generator 4591 -- should be prepared to accept a declaration where a statement is 4592 -- expected. Note also that pragmas can appear as statements. 4593 4594 -------------------- 4595 -- 5.1 Statement -- 4596 -------------------- 4597 4598 -- STATEMENT ::= 4599 -- {LABEL} SIMPLE_STATEMENT | {LABEL} COMPOUND_STATEMENT 4600 4601 -- There is no explicit node in the tree for a statement. Instead, the 4602 -- individual statement appears directly. Labels are treated as a 4603 -- kind of statement, i.e. they are linked into a statement list at 4604 -- the point they appear, so the labeled statement appears following 4605 -- the label or labels in the statement list. 4606 4607 --------------------------- 4608 -- 5.1 Simple Statement -- 4609 --------------------------- 4610 4611 -- SIMPLE_STATEMENT ::= NULL_STATEMENT 4612 -- | ASSIGNMENT_STATEMENT | EXIT_STATEMENT 4613 -- | GOTO_STATEMENT | PROCEDURE_CALL_STATEMENT 4614 -- | SIMPLE_RETURN_STATEMENT | ENTRY_CALL_STATEMENT 4615 -- | REQUEUE_STATEMENT | DELAY_STATEMENT 4616 -- | ABORT_STATEMENT | RAISE_STATEMENT 4617 -- | CODE_STATEMENT 4618 4619 ----------------------------- 4620 -- 5.1 Compound Statement -- 4621 ----------------------------- 4622 4623 -- COMPOUND_STATEMENT ::= 4624 -- IF_STATEMENT | CASE_STATEMENT 4625 -- | LOOP_STATEMENT | BLOCK_STATEMENT 4626 -- | EXTENDED_RETURN_STATEMENT 4627 -- | ACCEPT_STATEMENT | SELECT_STATEMENT 4628 4629 ------------------------- 4630 -- 5.1 Null Statement -- 4631 ------------------------- 4632 4633 -- NULL_STATEMENT ::= null; 4634 4635 -- N_Null_Statement 4636 -- Sloc points to NULL 4637 4638 ---------------- 4639 -- 5.1 Label -- 4640 ---------------- 4641 4642 -- LABEL ::= <<label_STATEMENT_IDENTIFIER>> 4643 4644 -- Note that the occurrence of a label is not a defining identifier, 4645 -- but rather a referencing occurrence. The defining occurrence is 4646 -- in the implicit label declaration which occurs in the innermost 4647 -- enclosing block. 4648 4649 -- N_Label 4650 -- Sloc points to << 4651 -- Identifier (Node1) direct name of statement identifier 4652 -- Exception_Junk (Flag8-Sem) 4653 4654 -- Note: Before Ada 2012, a label is always followed by a statement, 4655 -- and this is true in the tree even in Ada 2012 mode (the parser 4656 -- inserts a null statement marked with Comes_From_Source False). 4657 4658 ------------------------------- 4659 -- 5.1 Statement Identifier -- 4660 ------------------------------- 4661 4662 -- STATEMENT_IDENTIFIER ::= DIRECT_NAME 4663 4664 -- The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier 4665 -- (not an OPERATOR_SYMBOL) 4666 4667 ------------------------------- 4668 -- 5.2 Assignment Statement -- 4669 ------------------------------- 4670 4671 -- ASSIGNMENT_STATEMENT ::= 4672 -- variable_NAME := EXPRESSION; 4673 4674 -- N_Assignment_Statement 4675 -- Sloc points to := 4676 -- Name (Node2) 4677 -- Expression (Node3) 4678 -- Do_Discriminant_Check (Flag1-Sem) 4679 -- Do_Tag_Check (Flag13-Sem) 4680 -- Do_Length_Check (Flag4-Sem) 4681 -- Forwards_OK (Flag5-Sem) 4682 -- Backwards_OK (Flag6-Sem) 4683 -- No_Ctrl_Actions (Flag7-Sem) 4684 -- Componentwise_Assignment (Flag14-Sem) 4685 -- Suppress_Assignment_Checks (Flag18-Sem) 4686 4687 -- Note: if a range check is required, then the Do_Range_Check flag 4688 -- is set in the Expression (right hand side), with the check being 4689 -- done against the type of the Name (left hand side). 4690 4691 -- Note: the back end places some restrictions on the form of the 4692 -- Expression field. If the object being assigned to is Atomic, then 4693 -- the Expression may not have the form of an aggregate (since this 4694 -- might cause the back end to generate separate assignments). In this 4695 -- case the front end must generate an extra temporary and initialize 4696 -- this temporary as required (the temporary itself is not atomic). 4697 4698 ----------------------- 4699 -- 5.3 If Statement -- 4700 ----------------------- 4701 4702 -- IF_STATEMENT ::= 4703 -- if CONDITION then 4704 -- SEQUENCE_OF_STATEMENTS 4705 -- {elsif CONDITION then 4706 -- SEQUENCE_OF_STATEMENTS} 4707 -- [else 4708 -- SEQUENCE_OF_STATEMENTS] 4709 -- end if; 4710 4711 -- Gigi restriction: This expander ensures that the type of the 4712 -- Condition fields is always Standard.Boolean, even if the type 4713 -- in the source is some non-standard boolean type. 4714 4715 -- N_If_Statement 4716 -- Sloc points to IF 4717 -- Condition (Node1) 4718 -- Then_Statements (List2) 4719 -- Elsif_Parts (List3) (set to No_List if none present) 4720 -- Else_Statements (List4) (set to No_List if no else part present) 4721 -- End_Span (Uint5) (set to Uint_0 if expander generated) 4722 -- From_Conditional_Expression (Flag1-Sem) 4723 4724 -- N_Elsif_Part 4725 -- Sloc points to ELSIF 4726 -- Condition (Node1) 4727 -- Then_Statements (List2) 4728 -- Condition_Actions (List3-Sem) 4729 4730 -------------------- 4731 -- 5.3 Condition -- 4732 -------------------- 4733 4734 -- CONDITION ::= boolean_EXPRESSION 4735 4736 ------------------------- 4737 -- 5.4 Case Statement -- 4738 ------------------------- 4739 4740 -- CASE_STATEMENT ::= 4741 -- case EXPRESSION is 4742 -- CASE_STATEMENT_ALTERNATIVE 4743 -- {CASE_STATEMENT_ALTERNATIVE} 4744 -- end case; 4745 4746 -- Note: the Alternatives can contain pragmas. These only occur at 4747 -- the start of the list, since any pragmas occurring after the first 4748 -- alternative are absorbed into the corresponding statement sequence. 4749 4750 -- N_Case_Statement 4751 -- Sloc points to CASE 4752 -- Expression (Node3) 4753 -- Alternatives (List4) 4754 -- End_Span (Uint5) (set to Uint_0 if expander generated) 4755 -- From_Conditional_Expression (Flag1-Sem) 4756 4757 -- Note: Before Ada 2012, a pragma in a statement sequence is always 4758 -- followed by a statement, and this is true in the tree even in Ada 4759 -- 2012 mode (the parser inserts a null statement marked with the flag 4760 -- Comes_From_Source False). 4761 4762 ------------------------------------- 4763 -- 5.4 Case Statement Alternative -- 4764 ------------------------------------- 4765 4766 -- CASE_STATEMENT_ALTERNATIVE ::= 4767 -- when DISCRETE_CHOICE_LIST => 4768 -- SEQUENCE_OF_STATEMENTS 4769 4770 -- N_Case_Statement_Alternative 4771 -- Sloc points to WHEN 4772 -- Discrete_Choices (List4) 4773 -- Statements (List3) 4774 -- Has_SP_Choice (Flag15-Sem) 4775 4776 -- Note: in the list of Discrete_Choices, the tree passed to the back 4777 -- end does not have choice entries corresponding to names of statically 4778 -- predicated subtypes. Such entries are always expanded out to the list 4779 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 4780 -- mode does not have this expansion, and has the original choices. 4781 4782 ------------------------- 4783 -- 5.5 Loop Statement -- 4784 ------------------------- 4785 4786 -- LOOP_STATEMENT ::= 4787 -- [loop_STATEMENT_IDENTIFIER :] 4788 -- [ITERATION_SCHEME] loop 4789 -- SEQUENCE_OF_STATEMENTS 4790 -- end loop [loop_IDENTIFIER]; 4791 4792 -- Note: The occurrence of a loop label is not a defining identifier 4793 -- but rather a referencing occurrence. The defining occurrence is in 4794 -- the implicit label declaration which occurs in the innermost 4795 -- enclosing block. 4796 4797 -- Note: there is always a loop statement identifier present in the 4798 -- tree, even if none was given in the source. In the case where no loop 4799 -- identifier is given in the source, the parser creates a name of the 4800 -- form _Loop_n, where n is a decimal integer (the two underlines ensure 4801 -- that the loop names created in this manner do not conflict with any 4802 -- user defined identifiers), and the flag Has_Created_Identifier is set 4803 -- to True. The only exception to the rule that all loop statement nodes 4804 -- have identifiers occurs for loops constructed by the expander, and 4805 -- the semantic analyzer will create and supply dummy loop identifiers 4806 -- in these cases. 4807 4808 -- N_Loop_Statement 4809 -- Sloc points to LOOP 4810 -- Identifier (Node1) loop identifier (set to Empty if no identifier) 4811 -- Iteration_Scheme (Node2) (set to Empty if no iteration scheme) 4812 -- Statements (List3) 4813 -- End_Label (Node4) 4814 -- Has_Created_Identifier (Flag15) 4815 -- Is_Null_Loop (Flag16) 4816 -- Suppress_Loop_Warnings (Flag17) 4817 4818 -- Note: the parser fills in the Identifier field if there is an 4819 -- explicit loop identifier. Otherwise the parser leaves this field 4820 -- set to Empty, and then the semantic processing for a loop statement 4821 -- creates an identifier, setting the Has_Created_Identifier flag to 4822 -- True. So after semantic analysis, the Identifier is always set, 4823 -- referencing an identifier whose entity has an Ekind of E_Loop. 4824 4825 --------------------------- 4826 -- 5.5 Iteration Scheme -- 4827 --------------------------- 4828 4829 -- ITERATION_SCHEME ::= 4830 -- while CONDITION 4831 -- | for LOOP_PARAMETER_SPECIFICATION 4832 -- | for ITERATOR_SPECIFICATION 4833 4834 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4835 -- is present at a time, in which case the other one is empty. Both are 4836 -- empty in the case of a WHILE loop. 4837 4838 -- Gigi restriction: The expander ensures that the type of the Condition 4839 -- field is always Standard.Boolean, even if the type in the source is 4840 -- some non-standard boolean type. 4841 4842 -- N_Iteration_Scheme 4843 -- Sloc points to WHILE or FOR 4844 -- Condition (Node1) (set to Empty if FOR case) 4845 -- Condition_Actions (List3-Sem) 4846 -- Iterator_Specification (Node2) (set to Empty if WHILE case) 4847 -- Loop_Parameter_Specification (Node4) (set to Empty if WHILE case) 4848 4849 --------------------------------------- 4850 -- 5.5 Loop Parameter Specification -- 4851 --------------------------------------- 4852 4853 -- LOOP_PARAMETER_SPECIFICATION ::= 4854 -- DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION 4855 4856 -- N_Loop_Parameter_Specification 4857 -- Sloc points to first identifier 4858 -- Defining_Identifier (Node1) 4859 -- Reverse_Present (Flag15) 4860 -- Discrete_Subtype_Definition (Node4) 4861 4862 ----------------------------------- 4863 -- 5.5.1 Iterator Specification -- 4864 ----------------------------------- 4865 4866 -- ITERATOR_SPECIFICATION ::= 4867 -- DEFINING_IDENTIFIER in [reverse] NAME 4868 -- | DEFINING_IDENTIFIER [: SUBTYPE_INDICATION] of [reverse] NAME 4869 4870 -- N_Iterator_Specification 4871 -- Sloc points to defining identifier 4872 -- Defining_Identifier (Node1) 4873 -- Name (Node2) 4874 -- Reverse_Present (Flag15) 4875 -- Of_Present (Flag16) 4876 -- Subtype_Indication (Node5) 4877 4878 -- Note: The Of_Present flag distinguishes the two forms 4879 4880 -------------------------- 4881 -- 5.6 Block Statement -- 4882 -------------------------- 4883 4884 -- BLOCK_STATEMENT ::= 4885 -- [block_STATEMENT_IDENTIFIER:] 4886 -- [declare 4887 -- DECLARATIVE_PART] 4888 -- begin 4889 -- HANDLED_SEQUENCE_OF_STATEMENTS 4890 -- end [block_IDENTIFIER]; 4891 4892 -- Note that the occurrence of a block identifier is not a defining 4893 -- identifier, but rather a referencing occurrence. The defining 4894 -- occurrence is an E_Block entity declared by the implicit label 4895 -- declaration which occurs in the innermost enclosing block statement 4896 -- or body; the block identifier denotes that E_Block. 4897 4898 -- For block statements that come from source code, there is always a 4899 -- block statement identifier present in the tree, denoting an E_Block. 4900 -- In the case where no block identifier is given in the source, 4901 -- the parser creates a name of the form B_n, where n is a decimal 4902 -- integer, and the flag Has_Created_Identifier is set to True. Blocks 4903 -- constructed by the expander usually have no identifier, and no 4904 -- corresponding entity. 4905 4906 -- Note: the block statement created for an extended return statement 4907 -- has an entity, and this entity is an E_Return_Statement, rather than 4908 -- the usual E_Block. 4909 4910 -- Note: Exception_Junk is set for the wrapping blocks created during 4911 -- local raise optimization (Exp_Ch11.Expand_Local_Exception_Handlers). 4912 4913 -- Note: from a control flow viewpoint, a block statement defines an 4914 -- extended basic block, i.e. the entry of the block dominates every 4915 -- statement in the sequence. When generating new statements with 4916 -- exception handlers in the expander at the end of a sequence that 4917 -- comes from source code, it can be necessary to wrap them all in a 4918 -- block statement in order to expose the implicit control flow to 4919 -- gigi and thus prevent it from issuing bogus control flow warnings. 4920 4921 -- N_Block_Statement 4922 -- Sloc points to DECLARE or BEGIN 4923 -- Identifier (Node1) block direct name (set to Empty if not present) 4924 -- Declarations (List2) (set to No_List if no DECLARE part) 4925 -- Handled_Statement_Sequence (Node4) 4926 -- Cleanup_Actions (List5-Sem) 4927 -- Is_Task_Master (Flag5-Sem) 4928 -- Activation_Chain_Entity (Node3-Sem) 4929 -- Has_Created_Identifier (Flag15) 4930 -- Is_Task_Allocation_Block (Flag6) 4931 -- Is_Asynchronous_Call_Block (Flag7) 4932 -- Exception_Junk (Flag8-Sem) 4933 -- Is_Finalization_Wrapper (Flag9-Sem) 4934 4935 ------------------------- 4936 -- 5.7 Exit Statement -- 4937 ------------------------- 4938 4939 -- EXIT_STATEMENT ::= exit [loop_NAME] [when CONDITION]; 4940 4941 -- Gigi restriction: The expander ensures that the type of the Condition 4942 -- field is always Standard.Boolean, even if the type in the source is 4943 -- some non-standard boolean type. 4944 4945 -- N_Exit_Statement 4946 -- Sloc points to EXIT 4947 -- Name (Node2) (set to Empty if no loop name present) 4948 -- Condition (Node1) (set to Empty if no WHEN part present) 4949 -- Next_Exit_Statement (Node3-Sem): Next exit on chain 4950 4951 ------------------------- 4952 -- 5.9 Goto Statement -- 4953 ------------------------- 4954 4955 -- GOTO_STATEMENT ::= goto label_NAME; 4956 4957 -- N_Goto_Statement 4958 -- Sloc points to GOTO 4959 -- Name (Node2) 4960 -- Exception_Junk (Flag8-Sem) 4961 4962 --------------------------------- 4963 -- 6.1 Subprogram Declaration -- 4964 --------------------------------- 4965 4966 -- SUBPROGRAM_DECLARATION ::= 4967 -- SUBPROGRAM_SPECIFICATION 4968 -- [ASPECT_SPECIFICATIONS]; 4969 4970 -- N_Subprogram_Declaration 4971 -- Sloc points to FUNCTION or PROCEDURE 4972 -- Specification (Node1) 4973 -- Body_To_Inline (Node3-Sem) 4974 -- Corresponding_Body (Node5-Sem) 4975 -- Parent_Spec (Node4-Sem) 4976 -- Is_Entry_Barrier_Function (Flag8-Sem) 4977 -- Is_Task_Body_Procedure (Flag1-Sem) 4978 4979 ------------------------------------------ 4980 -- 6.1 Abstract Subprogram Declaration -- 4981 ------------------------------------------ 4982 4983 -- ABSTRACT_SUBPROGRAM_DECLARATION ::= 4984 -- SUBPROGRAM_SPECIFICATION is abstract 4985 -- [ASPECT_SPECIFICATIONS]; 4986 4987 -- N_Abstract_Subprogram_Declaration 4988 -- Sloc points to ABSTRACT 4989 -- Specification (Node1) 4990 4991 ----------------------------------- 4992 -- 6.1 Subprogram Specification -- 4993 ----------------------------------- 4994 4995 -- SUBPROGRAM_SPECIFICATION ::= 4996 -- [[not] overriding] 4997 -- procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE 4998 -- | [[not] overriding] 4999 -- function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE 5000 5001 -- Note: there are no separate nodes for the profiles, instead the 5002 -- information appears directly in the following nodes. 5003 5004 -- N_Function_Specification 5005 -- Sloc points to FUNCTION 5006 -- Defining_Unit_Name (Node1) (the designator) 5007 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5008 -- Null_Exclusion_Present (Flag11) 5009 -- Result_Definition (Node4) for result subtype 5010 -- Generic_Parent (Node5-Sem) 5011 -- Must_Override (Flag14) set if overriding indicator present 5012 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5013 5014 -- N_Procedure_Specification 5015 -- Sloc points to PROCEDURE 5016 -- Defining_Unit_Name (Node1) 5017 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5018 -- Generic_Parent (Node5-Sem) 5019 -- Null_Present (Flag13) set for null procedure case (Ada 2005 feature) 5020 -- Must_Override (Flag14) set if overriding indicator present 5021 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5022 5023 -- Note: overriding indicator is an Ada 2005 feature 5024 5025 --------------------- 5026 -- 6.1 Designator -- 5027 --------------------- 5028 5029 -- DESIGNATOR ::= 5030 -- [PARENT_UNIT_NAME .] IDENTIFIER | OPERATOR_SYMBOL 5031 5032 -- Designators that are simply identifiers or operator symbols appear 5033 -- directly in the tree in this form. The following node is used only 5034 -- in the case where the designator has a parent unit name component. 5035 5036 -- N_Designator 5037 -- Sloc points to period 5038 -- Name (Node2) holds the parent unit name 5039 -- Identifier (Node1) 5040 5041 -- Note: Name is always non-Empty, since this node is only used for the 5042 -- case where a parent library unit package name is present. 5043 5044 -- Note that the identifier can also be an operator symbol here 5045 5046 ------------------------------ 5047 -- 6.1 Defining Designator -- 5048 ------------------------------ 5049 5050 -- DEFINING_DESIGNATOR ::= 5051 -- DEFINING_PROGRAM_UNIT_NAME | DEFINING_OPERATOR_SYMBOL 5052 5053 ------------------------------------- 5054 -- 6.1 Defining Program Unit Name -- 5055 ------------------------------------- 5056 5057 -- DEFINING_PROGRAM_UNIT_NAME ::= 5058 -- [PARENT_UNIT_NAME .] DEFINING_IDENTIFIER 5059 5060 -- The parent unit name is present only in the case of a child unit name 5061 -- (permissible only for Ada 95 for a library level unit, i.e. a unit 5062 -- at scope level one). If no such name is present, the defining program 5063 -- unit name is represented simply as the defining identifier. In the 5064 -- child unit case, the following node is used to represent the child 5065 -- unit name. 5066 5067 -- N_Defining_Program_Unit_Name 5068 -- Sloc points to period 5069 -- Name (Node2) holds the parent unit name 5070 -- Defining_Identifier (Node1) 5071 5072 -- Note: Name is always non-Empty, since this node is only used for the 5073 -- case where a parent unit name is present. 5074 5075 -------------------------- 5076 -- 6.1 Operator Symbol -- 5077 -------------------------- 5078 5079 -- OPERATOR_SYMBOL ::= STRING_LITERAL 5080 5081 -- Note: the fields of the N_Operator_Symbol node are laid out to match 5082 -- the corresponding fields of an N_Character_Literal node. This allows 5083 -- easy conversion of the operator symbol node into a character literal 5084 -- node in the case where a string constant of the form of an operator 5085 -- symbol is scanned out as such, but turns out semantically to be a 5086 -- string literal that is not an operator. For details see Sinfo.CN. 5087 -- Change_Operator_Symbol_To_String_Literal. 5088 5089 -- N_Operator_Symbol 5090 -- Sloc points to literal 5091 -- Chars (Name1) contains the Name_Id for the operator symbol 5092 -- Strval (Str3) Id of string value. This is used if the operator 5093 -- symbol turns out to be a normal string after all. 5094 -- Entity (Node4-Sem) 5095 -- Associated_Node (Node4-Sem) 5096 -- Has_Private_View (Flag11-Sem) set in generic units. 5097 -- Etype (Node5-Sem) 5098 5099 -- Note: the Strval field may be set to No_String for generated 5100 -- operator symbols that are known not to be string literals 5101 -- semantically. 5102 5103 ----------------------------------- 5104 -- 6.1 Defining Operator Symbol -- 5105 ----------------------------------- 5106 5107 -- DEFINING_OPERATOR_SYMBOL ::= OPERATOR_SYMBOL 5108 5109 -- A defining operator symbol is an entity, which has additional 5110 -- fields depending on the setting of the Ekind field. These 5111 -- additional fields are defined (and access subprograms declared) 5112 -- in package Einfo. 5113 5114 -- Note: N_Defining_Operator_Symbol is an extended node whose fields 5115 -- are deliberately layed out to match the layout of fields in an 5116 -- ordinary N_Operator_Symbol node allowing for easy alteration of 5117 -- an operator symbol node into a defining operator symbol node. 5118 -- See Sinfo.CN.Change_Operator_Symbol_To_Defining_Operator_Symbol 5119 -- for further details. 5120 5121 -- N_Defining_Operator_Symbol 5122 -- Sloc points to literal 5123 -- Chars (Name1) contains the Name_Id for the operator symbol 5124 -- Next_Entity (Node2-Sem) 5125 -- Scope (Node3-Sem) 5126 -- Etype (Node5-Sem) 5127 5128 ---------------------------- 5129 -- 6.1 Parameter Profile -- 5130 ---------------------------- 5131 5132 -- PARAMETER_PROFILE ::= [FORMAL_PART] 5133 5134 --------------------------------------- 5135 -- 6.1 Parameter and Result Profile -- 5136 --------------------------------------- 5137 5138 -- PARAMETER_AND_RESULT_PROFILE ::= 5139 -- [FORMAL_PART] return [NULL_EXCLUSION] SUBTYPE_MARK 5140 -- | [FORMAL_PART] return ACCESS_DEFINITION 5141 5142 -- There is no explicit node in the tree for a parameter and result 5143 -- profile. Instead the information appears directly in the parent. 5144 5145 ---------------------- 5146 -- 6.1 Formal Part -- 5147 ---------------------- 5148 5149 -- FORMAL_PART ::= 5150 -- (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION}) 5151 5152 ---------------------------------- 5153 -- 6.1 Parameter Specification -- 5154 ---------------------------------- 5155 5156 -- PARAMETER_SPECIFICATION ::= 5157 -- DEFINING_IDENTIFIER_LIST : [ALIASED] MODE [NULL_EXCLUSION] 5158 -- SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 5159 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 5160 -- [:= DEFAULT_EXPRESSION] 5161 5162 -- Although the syntax allows multiple identifiers in the list, the 5163 -- semantics is as though successive specifications were given with 5164 -- identical type definition and expression components. To simplify 5165 -- semantic processing, the parser represents a multiple declaration 5166 -- case as a sequence of single Specifications, using the More_Ids and 5167 -- Prev_Ids flags to preserve the original source form as described 5168 -- in the section on "Handling of Defining Identifier Lists". 5169 5170 -- ALIASED can only be present in Ada 2012 mode 5171 5172 -- N_Parameter_Specification 5173 -- Sloc points to first identifier 5174 -- Defining_Identifier (Node1) 5175 -- Aliased_Present (Flag4) 5176 -- In_Present (Flag15) 5177 -- Out_Present (Flag17) 5178 -- Null_Exclusion_Present (Flag11) 5179 -- Parameter_Type (Node2) subtype mark or access definition 5180 -- Expression (Node3) (set to Empty if no default expression present) 5181 -- Do_Accessibility_Check (Flag13-Sem) 5182 -- More_Ids (Flag5) (set to False if no more identifiers in list) 5183 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 5184 -- Default_Expression (Node5-Sem) 5185 5186 --------------- 5187 -- 6.1 Mode -- 5188 --------------- 5189 5190 -- MODE ::= [in] | in out | out 5191 5192 -- There is no explicit node in the tree for the Mode. Instead the 5193 -- In_Present and Out_Present flags are set in the parent node to 5194 -- record the presence of keywords specifying the mode. 5195 5196 -------------------------- 5197 -- 6.3 Subprogram Body -- 5198 -------------------------- 5199 5200 -- SUBPROGRAM_BODY ::= 5201 -- SUBPROGRAM_SPECIFICATION [ASPECT_SPECIFICATIONS] is 5202 -- DECLARATIVE_PART 5203 -- begin 5204 -- HANDLED_SEQUENCE_OF_STATEMENTS 5205 -- end [DESIGNATOR]; 5206 5207 -- N_Subprogram_Body 5208 -- Sloc points to FUNCTION or PROCEDURE 5209 -- Specification (Node1) 5210 -- Declarations (List2) 5211 -- Handled_Statement_Sequence (Node4) 5212 -- Activation_Chain_Entity (Node3-Sem) 5213 -- Corresponding_Spec (Node5-Sem) 5214 -- Acts_As_Spec (Flag4-Sem) 5215 -- Bad_Is_Detected (Flag15) used only by parser 5216 -- Do_Storage_Check (Flag17-Sem) 5217 -- Is_Entry_Barrier_Function (Flag8-Sem) 5218 -- Is_Protected_Subprogram_Body (Flag7-Sem) 5219 -- Is_Task_Body_Procedure (Flag1-Sem) 5220 -- Is_Task_Master (Flag5-Sem) 5221 -- Was_Originally_Stub (Flag13-Sem) 5222 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 5223 -- Was_Expression_Function (Flag18-Sem) 5224 5225 ------------------------- 5226 -- Expression Function -- 5227 ------------------------- 5228 5229 -- This is an Ada 2012 extension, we put it here for now, to be labeled 5230 -- and put in its proper section when we know exactly where that is. 5231 5232 -- EXPRESSION_FUNCTION ::= 5233 -- FUNCTION SPECIFICATION IS (EXPRESSION) 5234 -- [ASPECT_SPECIFICATIONS]; 5235 5236 -- N_Expression_Function 5237 -- Sloc points to FUNCTION 5238 -- Specification (Node1) 5239 -- Expression (Node3) 5240 -- Corresponding_Spec (Node5-Sem) 5241 5242 ----------------------------------- 5243 -- 6.4 Procedure Call Statement -- 5244 ----------------------------------- 5245 5246 -- PROCEDURE_CALL_STATEMENT ::= 5247 -- procedure_NAME; | procedure_PREFIX ACTUAL_PARAMETER_PART; 5248 5249 -- Note: the reason that a procedure call has expression fields is that 5250 -- it semantically resembles an expression, e.g. overloading is allowed 5251 -- and a type is concocted for semantic processing purposes. Certain of 5252 -- these fields, such as Parens are not relevant, but it is easier to 5253 -- just supply all of them together. 5254 5255 -- N_Procedure_Call_Statement 5256 -- Sloc points to first token of name or prefix 5257 -- Name (Node2) stores name or prefix 5258 -- Parameter_Associations (List3) (set to No_List if no 5259 -- actual parameter part) 5260 -- First_Named_Actual (Node4-Sem) 5261 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5262 -- Do_Tag_Check (Flag13-Sem) 5263 -- No_Elaboration_Check (Flag14-Sem) 5264 -- ABE_Is_Certain (Flag18-Sem) 5265 -- plus fields for expression 5266 5267 -- If any IN parameter requires a range check, then the corresponding 5268 -- argument expression has the Do_Range_Check flag set, and the range 5269 -- check is done against the formal type. Note that this argument 5270 -- expression may appear directly in the Parameter_Associations list, 5271 -- or may be a descendent of an N_Parameter_Association node that 5272 -- appears in this list. 5273 5274 ------------------------ 5275 -- 6.4 Function Call -- 5276 ------------------------ 5277 5278 -- FUNCTION_CALL ::= 5279 -- function_NAME | function_PREFIX ACTUAL_PARAMETER_PART 5280 5281 -- Note: the parser may generate an indexed component node or simply 5282 -- a name node instead of a function call node. The semantic pass must 5283 -- correct this misidentification. 5284 5285 -- N_Function_Call 5286 -- Sloc points to first token of name or prefix 5287 -- Name (Node2) stores name or prefix 5288 -- Parameter_Associations (List3) (set to No_List if no 5289 -- actual parameter part) 5290 -- First_Named_Actual (Node4-Sem) 5291 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5292 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 5293 -- Do_Tag_Check (Flag13-Sem) 5294 -- No_Elaboration_Check (Flag14-Sem) 5295 -- ABE_Is_Certain (Flag18-Sem) 5296 -- plus fields for expression 5297 5298 -------------------------------- 5299 -- 6.4 Actual Parameter Part -- 5300 -------------------------------- 5301 5302 -- ACTUAL_PARAMETER_PART ::= 5303 -- (PARAMETER_ASSOCIATION {,PARAMETER_ASSOCIATION}) 5304 5305 -------------------------------- 5306 -- 6.4 Parameter Association -- 5307 -------------------------------- 5308 5309 -- PARAMETER_ASSOCIATION ::= 5310 -- [formal_parameter_SELECTOR_NAME =>] EXPLICIT_ACTUAL_PARAMETER 5311 5312 -- Note: the N_Parameter_Association node is built only if a formal 5313 -- parameter selector name is present, otherwise the parameter 5314 -- association appears in the tree simply as the node for the 5315 -- explicit actual parameter. 5316 5317 -- N_Parameter_Association 5318 -- Sloc points to formal parameter 5319 -- Selector_Name (Node2) (always non-Empty) 5320 -- Explicit_Actual_Parameter (Node3) 5321 -- Next_Named_Actual (Node4-Sem) 5322 -- Is_Accessibility_Actual (Flag13-Sem) 5323 5324 --------------------------- 5325 -- 6.4 Actual Parameter -- 5326 --------------------------- 5327 5328 -- EXPLICIT_ACTUAL_PARAMETER ::= EXPRESSION | variable_NAME 5329 5330 --------------------------- 5331 -- 6.5 Return Statement -- 5332 --------------------------- 5333 5334 -- SIMPLE_RETURN_STATEMENT ::= return [EXPRESSION]; 5335 5336 -- EXTENDED_RETURN_STATEMENT ::= 5337 -- return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5338 -- [:= EXPRESSION] [do 5339 -- HANDLED_SEQUENCE_OF_STATEMENTS 5340 -- end return]; 5341 5342 -- RETURN_SUBTYPE_INDICATION ::= SUBTYPE_INDICATION | ACCESS_DEFINITION 5343 5344 -- The term "return statement" is defined in 6.5 to mean either a 5345 -- SIMPLE_RETURN_STATEMENT or an EXTENDED_RETURN_STATEMENT. We avoid 5346 -- the use of this term, since it used to mean someting else in earlier 5347 -- versions of Ada. 5348 5349 -- N_Simple_Return_Statement 5350 -- Sloc points to RETURN 5351 -- Return_Statement_Entity (Node5-Sem) 5352 -- Expression (Node3) (set to Empty if no expression present) 5353 -- Storage_Pool (Node1-Sem) 5354 -- Procedure_To_Call (Node2-Sem) 5355 -- Do_Tag_Check (Flag13-Sem) 5356 -- By_Ref (Flag5-Sem) 5357 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 5358 5359 -- Note: Return_Statement_Entity points to an E_Return_Statement 5360 5361 -- If a range check is required, then Do_Range_Check is set on the 5362 -- Expression. The check is against the return subtype of the function. 5363 5364 -- N_Extended_Return_Statement 5365 -- Sloc points to RETURN 5366 -- Return_Statement_Entity (Node5-Sem) 5367 -- Return_Object_Declarations (List3) 5368 -- Handled_Statement_Sequence (Node4) (set to Empty if not present) 5369 -- Storage_Pool (Node1-Sem) 5370 -- Procedure_To_Call (Node2-Sem) 5371 -- Do_Tag_Check (Flag13-Sem) 5372 -- By_Ref (Flag5-Sem) 5373 5374 -- Note: Return_Statement_Entity points to an E_Return_Statement. 5375 5376 -- Note that Return_Object_Declarations is a list containing the 5377 -- N_Object_Declaration -- see comment on this field above. 5378 5379 -- The declared object will have Is_Return_Object = True. 5380 5381 -- There is no such syntactic category as return_object_declaration 5382 -- in the RM. Return_Object_Declarations represents this portion of 5383 -- the syntax for EXTENDED_RETURN_STATEMENT: 5384 -- DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5385 -- [:= EXPRESSION] 5386 5387 -- There are two entities associated with an extended_return_statement: 5388 -- the Return_Statement_Entity represents the statement itself, 5389 -- and the Defining_Identifier of the Object_Declaration in 5390 -- Return_Object_Declarations represents the object being 5391 -- returned. N_Simple_Return_Statement has only the former. 5392 5393 ------------------------------ 5394 -- 7.1 Package Declaration -- 5395 ------------------------------ 5396 5397 -- PACKAGE_DECLARATION ::= 5398 -- PACKAGE_SPECIFICATION; 5399 5400 -- Note: the activation chain entity for a package spec is used for 5401 -- all tasks declared in the package spec, or in the package body. 5402 5403 -- N_Package_Declaration 5404 -- Sloc points to PACKAGE 5405 -- Specification (Node1) 5406 -- Corresponding_Body (Node5-Sem) 5407 -- Parent_Spec (Node4-Sem) 5408 -- Activation_Chain_Entity (Node3-Sem) 5409 5410 -------------------------------- 5411 -- 7.1 Package Specification -- 5412 -------------------------------- 5413 5414 -- PACKAGE_SPECIFICATION ::= 5415 -- package DEFINING_PROGRAM_UNIT_NAME 5416 -- [ASPECT_SPECIFICATIONS] 5417 -- is 5418 -- {BASIC_DECLARATIVE_ITEM} 5419 -- [private 5420 -- {BASIC_DECLARATIVE_ITEM}] 5421 -- end [[PARENT_UNIT_NAME .] IDENTIFIER] 5422 5423 -- N_Package_Specification 5424 -- Sloc points to PACKAGE 5425 -- Defining_Unit_Name (Node1) 5426 -- Visible_Declarations (List2) 5427 -- Private_Declarations (List3) (set to No_List if no private 5428 -- part present) 5429 -- End_Label (Node4) 5430 -- Generic_Parent (Node5-Sem) 5431 -- Limited_View_Installed (Flag18-Sem) 5432 5433 ----------------------- 5434 -- 7.1 Package Body -- 5435 ----------------------- 5436 5437 -- PACKAGE_BODY ::= 5438 -- package body DEFINING_PROGRAM_UNIT_NAME 5439 -- [ASPECT_SPECIFICATIONS] 5440 -- is 5441 -- DECLARATIVE_PART 5442 -- [begin 5443 -- HANDLED_SEQUENCE_OF_STATEMENTS] 5444 -- end [[PARENT_UNIT_NAME .] IDENTIFIER]; 5445 5446 -- N_Package_Body 5447 -- Sloc points to PACKAGE 5448 -- Defining_Unit_Name (Node1) 5449 -- Declarations (List2) 5450 -- Handled_Statement_Sequence (Node4) (set to Empty if no HSS present) 5451 -- Corresponding_Spec (Node5-Sem) 5452 -- Was_Originally_Stub (Flag13-Sem) 5453 5454 -- Note: if a source level package does not contain a handled sequence 5455 -- of statements, then the parser supplies a dummy one with a null 5456 -- sequence of statements. Comes_From_Source will be False in this 5457 -- constructed sequence. The reason we need this is for the End_Label 5458 -- field in the HSS. 5459 5460 ----------------------------------- 5461 -- 7.4 Private Type Declaration -- 5462 ----------------------------------- 5463 5464 -- PRIVATE_TYPE_DECLARATION ::= 5465 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 5466 -- is [[abstract] tagged] [limited] private 5467 -- [ASPECT_SPECIFICATIONS]; 5468 5469 -- Note: TAGGED is not permitted in Ada 83 mode 5470 5471 -- N_Private_Type_Declaration 5472 -- Sloc points to TYPE 5473 -- Defining_Identifier (Node1) 5474 -- Discriminant_Specifications (List4) (set to No_List if no 5475 -- discriminant part) 5476 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5477 -- Abstract_Present (Flag4) 5478 -- Tagged_Present (Flag15) 5479 -- Limited_Present (Flag17) 5480 5481 ---------------------------------------- 5482 -- 7.4 Private Extension Declaration -- 5483 ---------------------------------------- 5484 5485 -- PRIVATE_EXTENSION_DECLARATION ::= 5486 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is 5487 -- [abstract] [limited | synchronized] 5488 -- new ancestor_SUBTYPE_INDICATION [and INTERFACE_LIST] 5489 -- with private [ASPECT_SPECIFICATIONS]; 5490 5491 -- Note: LIMITED, and private extension declarations are not allowed 5492 -- in Ada 83 mode. 5493 5494 -- N_Private_Extension_Declaration 5495 -- Sloc points to TYPE 5496 -- Defining_Identifier (Node1) 5497 -- Uninitialized_Variable (Node3-Sem) 5498 -- Discriminant_Specifications (List4) (set to No_List if no 5499 -- discriminant part) 5500 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5501 -- Abstract_Present (Flag4) 5502 -- Limited_Present (Flag17) 5503 -- Synchronized_Present (Flag7) 5504 -- Subtype_Indication (Node5) 5505 -- Interface_List (List2) (set to No_List if none) 5506 5507 --------------------- 5508 -- 8.4 Use Clause -- 5509 --------------------- 5510 5511 -- USE_CLAUSE ::= USE_PACKAGE_CLAUSE | USE_TYPE_CLAUSE 5512 5513 ----------------------------- 5514 -- 8.4 Use Package Clause -- 5515 ----------------------------- 5516 5517 -- USE_PACKAGE_CLAUSE ::= use package_NAME {, package_NAME}; 5518 5519 -- N_Use_Package_Clause 5520 -- Sloc points to USE 5521 -- Names (List2) 5522 -- Next_Use_Clause (Node3-Sem) 5523 -- Hidden_By_Use_Clause (Elist4-Sem) 5524 5525 -------------------------- 5526 -- 8.4 Use Type Clause -- 5527 -------------------------- 5528 5529 -- USE_TYPE_CLAUSE ::= use [ALL] type SUBTYPE_MARK {, SUBTYPE_MARK}; 5530 5531 -- Note: use type clause is not permitted in Ada 83 mode 5532 5533 -- Note: the ALL keyword can appear only in Ada 2012 mode 5534 5535 -- N_Use_Type_Clause 5536 -- Sloc points to USE 5537 -- Subtype_Marks (List2) 5538 -- Next_Use_Clause (Node3-Sem) 5539 -- Hidden_By_Use_Clause (Elist4-Sem) 5540 -- Used_Operations (Elist5-Sem) 5541 -- All_Present (Flag15) 5542 5543 ------------------------------- 5544 -- 8.5 Renaming Declaration -- 5545 ------------------------------- 5546 5547 -- RENAMING_DECLARATION ::= 5548 -- OBJECT_RENAMING_DECLARATION 5549 -- | EXCEPTION_RENAMING_DECLARATION 5550 -- | PACKAGE_RENAMING_DECLARATION 5551 -- | SUBPROGRAM_RENAMING_DECLARATION 5552 -- | GENERIC_RENAMING_DECLARATION 5553 5554 -------------------------------------- 5555 -- 8.5 Object Renaming Declaration -- 5556 -------------------------------------- 5557 5558 -- OBJECT_RENAMING_DECLARATION ::= 5559 -- DEFINING_IDENTIFIER : 5560 -- [NULL_EXCLUSION] SUBTYPE_MARK renames object_NAME 5561 -- [ASPECT_SPECIFICATIONS]; 5562 -- | DEFINING_IDENTIFIER : 5563 -- ACCESS_DEFINITION renames object_NAME 5564 -- [ASPECT_SPECIFICATIONS]; 5565 5566 -- Note: Access_Definition is an optional field that gives support to 5567 -- Ada 2005 (AI-230). The parser generates nodes that have either the 5568 -- Subtype_Indication field or else the Access_Definition field. 5569 5570 -- N_Object_Renaming_Declaration 5571 -- Sloc points to first identifier 5572 -- Defining_Identifier (Node1) 5573 -- Null_Exclusion_Present (Flag11) (set to False if not present) 5574 -- Subtype_Mark (Node4) (set to Empty if not present) 5575 -- Access_Definition (Node3) (set to Empty if not present) 5576 -- Name (Node2) 5577 -- Corresponding_Generic_Association (Node5-Sem) 5578 5579 ----------------------------------------- 5580 -- 8.5 Exception Renaming Declaration -- 5581 ----------------------------------------- 5582 5583 -- EXCEPTION_RENAMING_DECLARATION ::= 5584 -- DEFINING_IDENTIFIER : exception renames exception_NAME 5585 -- [ASPECT_SPECIFICATIONS]; 5586 5587 -- N_Exception_Renaming_Declaration 5588 -- Sloc points to first identifier 5589 -- Defining_Identifier (Node1) 5590 -- Name (Node2) 5591 5592 --------------------------------------- 5593 -- 8.5 Package Renaming Declaration -- 5594 --------------------------------------- 5595 5596 -- PACKAGE_RENAMING_DECLARATION ::= 5597 -- package DEFINING_PROGRAM_UNIT_NAME renames package_NAME 5598 -- [ASPECT_SPECIFICATIONS]; 5599 5600 -- N_Package_Renaming_Declaration 5601 -- Sloc points to PACKAGE 5602 -- Defining_Unit_Name (Node1) 5603 -- Name (Node2) 5604 -- Parent_Spec (Node4-Sem) 5605 5606 ------------------------------------------ 5607 -- 8.5 Subprogram Renaming Declaration -- 5608 ------------------------------------------ 5609 5610 -- SUBPROGRAM_RENAMING_DECLARATION ::= 5611 -- SUBPROGRAM_SPECIFICATION renames callable_entity_NAME 5612 -- [ASPECT_SPECIFICATIONS]; 5613 5614 -- N_Subprogram_Renaming_Declaration 5615 -- Sloc points to RENAMES 5616 -- Specification (Node1) 5617 -- Name (Node2) 5618 -- Parent_Spec (Node4-Sem) 5619 -- Corresponding_Spec (Node5-Sem) 5620 -- Corresponding_Formal_Spec (Node3-Sem) 5621 -- From_Default (Flag6-Sem) 5622 5623 ----------------------------------------- 5624 -- 8.5.5 Generic Renaming Declaration -- 5625 ----------------------------------------- 5626 5627 -- GENERIC_RENAMING_DECLARATION ::= 5628 -- generic package DEFINING_PROGRAM_UNIT_NAME 5629 -- renames generic_package_NAME 5630 -- [ASPECT_SPECIFICATIONS]; 5631 -- | generic procedure DEFINING_PROGRAM_UNIT_NAME 5632 -- renames generic_procedure_NAME 5633 -- [ASPECT_SPECIFICATIONS]; 5634 -- | generic function DEFINING_PROGRAM_UNIT_NAME 5635 -- renames generic_function_NAME 5636 -- [ASPECT_SPECIFICATIONS]; 5637 5638 -- N_Generic_Package_Renaming_Declaration 5639 -- Sloc points to GENERIC 5640 -- Defining_Unit_Name (Node1) 5641 -- Name (Node2) 5642 -- Parent_Spec (Node4-Sem) 5643 5644 -- N_Generic_Procedure_Renaming_Declaration 5645 -- Sloc points to GENERIC 5646 -- Defining_Unit_Name (Node1) 5647 -- Name (Node2) 5648 -- Parent_Spec (Node4-Sem) 5649 5650 -- N_Generic_Function_Renaming_Declaration 5651 -- Sloc points to GENERIC 5652 -- Defining_Unit_Name (Node1) 5653 -- Name (Node2) 5654 -- Parent_Spec (Node4-Sem) 5655 5656 -------------------------------- 5657 -- 9.1 Task Type Declaration -- 5658 -------------------------------- 5659 5660 -- TASK_TYPE_DECLARATION ::= 5661 -- task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 5662 -- [ASPECT_SPECIFICATIONS] 5663 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 5664 5665 -- N_Task_Type_Declaration 5666 -- Sloc points to TASK 5667 -- Defining_Identifier (Node1) 5668 -- Discriminant_Specifications (List4) (set to No_List if no 5669 -- discriminant part) 5670 -- Interface_List (List2) (set to No_List if none) 5671 -- Task_Definition (Node3) (set to Empty if not present) 5672 -- Corresponding_Body (Node5-Sem) 5673 5674 ---------------------------------- 5675 -- 9.1 Single Task Declaration -- 5676 ---------------------------------- 5677 5678 -- SINGLE_TASK_DECLARATION ::= 5679 -- task DEFINING_IDENTIFIER 5680 -- [ASPECT_SPECIFICATIONS] 5681 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 5682 5683 -- N_Single_Task_Declaration 5684 -- Sloc points to TASK 5685 -- Defining_Identifier (Node1) 5686 -- Interface_List (List2) (set to No_List if none) 5687 -- Task_Definition (Node3) (set to Empty if not present) 5688 5689 -------------------------- 5690 -- 9.1 Task Definition -- 5691 -------------------------- 5692 5693 -- TASK_DEFINITION ::= 5694 -- {TASK_ITEM} 5695 -- [private 5696 -- {TASK_ITEM}] 5697 -- end [task_IDENTIFIER] 5698 5699 -- Note: as a result of semantic analysis, the list of task items can 5700 -- include implicit type declarations resulting from entry families. 5701 5702 -- N_Task_Definition 5703 -- Sloc points to first token of task definition 5704 -- Visible_Declarations (List2) 5705 -- Private_Declarations (List3) (set to No_List if no private part) 5706 -- End_Label (Node4) 5707 -- Has_Storage_Size_Pragma (Flag5-Sem) 5708 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 5709 5710 -------------------- 5711 -- 9.1 Task Item -- 5712 -------------------- 5713 5714 -- TASK_ITEM ::= ENTRY_DECLARATION | REPRESENTATION_CLAUSE 5715 5716 -------------------- 5717 -- 9.1 Task Body -- 5718 -------------------- 5719 5720 -- TASK_BODY ::= 5721 -- task body task_DEFINING_IDENTIFIER 5722 -- [ASPECT_SPECIFICATIONS] 5723 -- is 5724 -- DECLARATIVE_PART 5725 -- begin 5726 -- HANDLED_SEQUENCE_OF_STATEMENTS 5727 -- end [task_IDENTIFIER]; 5728 5729 -- Gigi restriction: This node never appears 5730 5731 -- N_Task_Body 5732 -- Sloc points to TASK 5733 -- Defining_Identifier (Node1) 5734 -- Declarations (List2) 5735 -- Handled_Statement_Sequence (Node4) 5736 -- Is_Task_Master (Flag5-Sem) 5737 -- Activation_Chain_Entity (Node3-Sem) 5738 -- Corresponding_Spec (Node5-Sem) 5739 -- Was_Originally_Stub (Flag13-Sem) 5740 5741 ------------------------------------- 5742 -- 9.4 Protected Type Declaration -- 5743 ------------------------------------- 5744 5745 -- PROTECTED_TYPE_DECLARATION ::= 5746 -- protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 5747 -- [ASPECT_SPECIFICATIONS] 5748 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 5749 5750 -- Note: protected type declarations are not permitted in Ada 83 mode 5751 5752 -- N_Protected_Type_Declaration 5753 -- Sloc points to PROTECTED 5754 -- Defining_Identifier (Node1) 5755 -- Discriminant_Specifications (List4) (set to No_List if no 5756 -- discriminant part) 5757 -- Interface_List (List2) (set to No_List if none) 5758 -- Protected_Definition (Node3) 5759 -- Corresponding_Body (Node5-Sem) 5760 5761 --------------------------------------- 5762 -- 9.4 Single Protected Declaration -- 5763 --------------------------------------- 5764 5765 -- SINGLE_PROTECTED_DECLARATION ::= 5766 -- protected DEFINING_IDENTIFIER 5767 -- [ASPECT_SPECIFICATIONS] 5768 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 5769 5770 -- Note: single protected declarations are not allowed in Ada 83 mode 5771 5772 -- N_Single_Protected_Declaration 5773 -- Sloc points to PROTECTED 5774 -- Defining_Identifier (Node1) 5775 -- Interface_List (List2) (set to No_List if none) 5776 -- Protected_Definition (Node3) 5777 5778 ------------------------------- 5779 -- 9.4 Protected Definition -- 5780 ------------------------------- 5781 5782 -- PROTECTED_DEFINITION ::= 5783 -- {PROTECTED_OPERATION_DECLARATION} 5784 -- [private 5785 -- {PROTECTED_ELEMENT_DECLARATION}] 5786 -- end [protected_IDENTIFIER] 5787 5788 -- N_Protected_Definition 5789 -- Sloc points to first token of protected definition 5790 -- Visible_Declarations (List2) 5791 -- Private_Declarations (List3) (set to No_List if no private part) 5792 -- End_Label (Node4) 5793 5794 ------------------------------------------ 5795 -- 9.4 Protected Operation Declaration -- 5796 ------------------------------------------ 5797 5798 -- PROTECTED_OPERATION_DECLARATION ::= 5799 -- SUBPROGRAM_DECLARATION 5800 -- | ENTRY_DECLARATION 5801 -- | REPRESENTATION_CLAUSE 5802 5803 ---------------------------------------- 5804 -- 9.4 Protected Element Declaration -- 5805 ---------------------------------------- 5806 5807 -- PROTECTED_ELEMENT_DECLARATION ::= 5808 -- PROTECTED_OPERATION_DECLARATION | COMPONENT_DECLARATION 5809 5810 ------------------------- 5811 -- 9.4 Protected Body -- 5812 ------------------------- 5813 5814 -- PROTECTED_BODY ::= 5815 -- protected body DEFINING_IDENTIFIER 5816 -- [ASPECT_SPECIFICATIONS]; 5817 -- is 5818 -- {PROTECTED_OPERATION_ITEM} 5819 -- end [protected_IDENTIFIER]; 5820 5821 -- Note: protected bodies are not allowed in Ada 83 mode 5822 5823 -- Gigi restriction: This node never appears 5824 5825 -- N_Protected_Body 5826 -- Sloc points to PROTECTED 5827 -- Defining_Identifier (Node1) 5828 -- Declarations (List2) protected operation items (and pragmas) 5829 -- End_Label (Node4) 5830 -- Corresponding_Spec (Node5-Sem) 5831 -- Was_Originally_Stub (Flag13-Sem) 5832 5833 ----------------------------------- 5834 -- 9.4 Protected Operation Item -- 5835 ----------------------------------- 5836 5837 -- PROTECTED_OPERATION_ITEM ::= 5838 -- SUBPROGRAM_DECLARATION 5839 -- | SUBPROGRAM_BODY 5840 -- | ENTRY_BODY 5841 -- | REPRESENTATION_CLAUSE 5842 5843 ------------------------------ 5844 -- 9.5.2 Entry Declaration -- 5845 ------------------------------ 5846 5847 -- ENTRY_DECLARATION ::= 5848 -- [[not] overriding] 5849 -- entry DEFINING_IDENTIFIER 5850 -- [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE 5851 -- [ASPECT_SPECIFICATIONS]; 5852 5853 -- N_Entry_Declaration 5854 -- Sloc points to ENTRY 5855 -- Defining_Identifier (Node1) 5856 -- Discrete_Subtype_Definition (Node4) (set to Empty if not present) 5857 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5858 -- Corresponding_Body (Node5-Sem) 5859 -- Must_Override (Flag14) set if overriding indicator present 5860 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5861 5862 -- Note: overriding indicator is an Ada 2005 feature 5863 5864 ----------------------------- 5865 -- 9.5.2 Accept statement -- 5866 ----------------------------- 5867 5868 -- ACCEPT_STATEMENT ::= 5869 -- accept entry_DIRECT_NAME 5870 -- [(ENTRY_INDEX)] PARAMETER_PROFILE [do 5871 -- HANDLED_SEQUENCE_OF_STATEMENTS 5872 -- end [entry_IDENTIFIER]]; 5873 5874 -- Gigi restriction: This node never appears 5875 5876 -- Note: there are no explicit declarations allowed in an accept 5877 -- statement. However, the implicit declarations for any statement 5878 -- identifiers (labels and block/loop identifiers) are declarations 5879 -- that belong logically to the accept statement, and that is why 5880 -- there is a Declarations field in this node. 5881 5882 -- N_Accept_Statement 5883 -- Sloc points to ACCEPT 5884 -- Entry_Direct_Name (Node1) 5885 -- Entry_Index (Node5) (set to Empty if not present) 5886 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5887 -- Handled_Statement_Sequence (Node4) 5888 -- Declarations (List2) (set to No_List if no declarations) 5889 5890 ------------------------ 5891 -- 9.5.2 Entry Index -- 5892 ------------------------ 5893 5894 -- ENTRY_INDEX ::= EXPRESSION 5895 5896 ----------------------- 5897 -- 9.5.2 Entry Body -- 5898 ----------------------- 5899 5900 -- ENTRY_BODY ::= 5901 -- entry DEFINING_IDENTIFIER ENTRY_BODY_FORMAL_PART ENTRY_BARRIER is 5902 -- DECLARATIVE_PART 5903 -- begin 5904 -- HANDLED_SEQUENCE_OF_STATEMENTS 5905 -- end [entry_IDENTIFIER]; 5906 5907 -- ENTRY_BARRIER ::= when CONDITION 5908 5909 -- Note: we store the CONDITION of the ENTRY_BARRIER in the node for 5910 -- the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting 5911 -- too full (it would otherwise have too many fields) 5912 5913 -- Gigi restriction: This node never appears 5914 5915 -- N_Entry_Body 5916 -- Sloc points to ENTRY 5917 -- Defining_Identifier (Node1) 5918 -- Entry_Body_Formal_Part (Node5) 5919 -- Declarations (List2) 5920 -- Handled_Statement_Sequence (Node4) 5921 -- Activation_Chain_Entity (Node3-Sem) 5922 5923 ----------------------------------- 5924 -- 9.5.2 Entry Body Formal Part -- 5925 ----------------------------------- 5926 5927 -- ENTRY_BODY_FORMAL_PART ::= 5928 -- [(ENTRY_INDEX_SPECIFICATION)] PARAMETER_PROFILE 5929 5930 -- Note that an entry body formal part node is present even if it is 5931 -- empty. This reflects the grammar, in which it is the components of 5932 -- the entry body formal part that are optional, not the entry body 5933 -- formal part itself. Also this means that the barrier condition 5934 -- always has somewhere to be stored. 5935 5936 -- Gigi restriction: This node never appears 5937 5938 -- N_Entry_Body_Formal_Part 5939 -- Sloc points to first token 5940 -- Entry_Index_Specification (Node4) (set to Empty if not present) 5941 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5942 -- Condition (Node1) from entry barrier of entry body 5943 5944 -------------------------- 5945 -- 9.5.2 Entry Barrier -- 5946 -------------------------- 5947 5948 -- ENTRY_BARRIER ::= when CONDITION 5949 5950 -------------------------------------- 5951 -- 9.5.2 Entry Index Specification -- 5952 -------------------------------------- 5953 5954 -- ENTRY_INDEX_SPECIFICATION ::= 5955 -- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION 5956 5957 -- Gigi restriction: This node never appears 5958 5959 -- N_Entry_Index_Specification 5960 -- Sloc points to FOR 5961 -- Defining_Identifier (Node1) 5962 -- Discrete_Subtype_Definition (Node4) 5963 5964 --------------------------------- 5965 -- 9.5.3 Entry Call Statement -- 5966 --------------------------------- 5967 5968 -- ENTRY_CALL_STATEMENT ::= entry_NAME [ACTUAL_PARAMETER_PART]; 5969 5970 -- The parser may generate a procedure call for this construct. The 5971 -- semantic pass must correct this misidentification where needed. 5972 5973 -- Gigi restriction: This node never appears 5974 5975 -- N_Entry_Call_Statement 5976 -- Sloc points to first token of name 5977 -- Name (Node2) 5978 -- Parameter_Associations (List3) (set to No_List if no 5979 -- actual parameter part) 5980 -- First_Named_Actual (Node4-Sem) 5981 5982 ------------------------------ 5983 -- 9.5.4 Requeue Statement -- 5984 ------------------------------ 5985 5986 -- REQUEUE_STATEMENT ::= requeue entry_NAME [with abort]; 5987 5988 -- Note: requeue statements are not permitted in Ada 83 mode 5989 5990 -- Gigi restriction: This node never appears 5991 5992 -- N_Requeue_Statement 5993 -- Sloc points to REQUEUE 5994 -- Name (Node2) 5995 -- Abort_Present (Flag15) 5996 5997 -------------------------- 5998 -- 9.6 Delay Statement -- 5999 -------------------------- 6000 6001 -- DELAY_STATEMENT ::= 6002 -- DELAY_UNTIL_STATEMENT 6003 -- | DELAY_RELATIVE_STATEMENT 6004 6005 -------------------------------- 6006 -- 9.6 Delay Until Statement -- 6007 -------------------------------- 6008 6009 -- DELAY_UNTIL_STATEMENT ::= delay until delay_EXPRESSION; 6010 6011 -- Note: delay until statements are not permitted in Ada 83 mode 6012 6013 -- Gigi restriction: This node never appears 6014 6015 -- N_Delay_Until_Statement 6016 -- Sloc points to DELAY 6017 -- Expression (Node3) 6018 6019 ----------------------------------- 6020 -- 9.6 Delay Relative Statement -- 6021 ----------------------------------- 6022 6023 -- DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION; 6024 6025 -- Gigi restriction: This node never appears 6026 6027 -- N_Delay_Relative_Statement 6028 -- Sloc points to DELAY 6029 -- Expression (Node3) 6030 6031 --------------------------- 6032 -- 9.7 Select Statement -- 6033 --------------------------- 6034 6035 -- SELECT_STATEMENT ::= 6036 -- SELECTIVE_ACCEPT 6037 -- | TIMED_ENTRY_CALL 6038 -- | CONDITIONAL_ENTRY_CALL 6039 -- | ASYNCHRONOUS_SELECT 6040 6041 ----------------------------- 6042 -- 9.7.1 Selective Accept -- 6043 ----------------------------- 6044 6045 -- SELECTIVE_ACCEPT ::= 6046 -- select 6047 -- [GUARD] 6048 -- SELECT_ALTERNATIVE 6049 -- {or 6050 -- [GUARD] 6051 -- SELECT_ALTERNATIVE} 6052 -- [else 6053 -- SEQUENCE_OF_STATEMENTS] 6054 -- end select; 6055 6056 -- Gigi restriction: This node never appears 6057 6058 -- Note: the guard expression, if present, appears in the node for 6059 -- the select alternative. 6060 6061 -- N_Selective_Accept 6062 -- Sloc points to SELECT 6063 -- Select_Alternatives (List1) 6064 -- Else_Statements (List4) (set to No_List if no else part) 6065 6066 ------------------ 6067 -- 9.7.1 Guard -- 6068 ------------------ 6069 6070 -- GUARD ::= when CONDITION => 6071 6072 -- As noted above, the CONDITION that is part of a GUARD is included 6073 -- in the node for the select alternative for convenience. 6074 6075 ------------------------------- 6076 -- 9.7.1 Select Alternative -- 6077 ------------------------------- 6078 6079 -- SELECT_ALTERNATIVE ::= 6080 -- ACCEPT_ALTERNATIVE 6081 -- | DELAY_ALTERNATIVE 6082 -- | TERMINATE_ALTERNATIVE 6083 6084 ------------------------------- 6085 -- 9.7.1 Accept Alternative -- 6086 ------------------------------- 6087 6088 -- ACCEPT_ALTERNATIVE ::= 6089 -- ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS] 6090 6091 -- Gigi restriction: This node never appears 6092 6093 -- N_Accept_Alternative 6094 -- Sloc points to ACCEPT 6095 -- Accept_Statement (Node2) 6096 -- Condition (Node1) from the guard (set to Empty if no guard present) 6097 -- Statements (List3) (set to Empty_List if no statements) 6098 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6099 -- Accept_Handler_Records (List5-Sem) 6100 6101 ------------------------------ 6102 -- 9.7.1 Delay Alternative -- 6103 ------------------------------ 6104 6105 -- DELAY_ALTERNATIVE ::= 6106 -- DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS] 6107 6108 -- Gigi restriction: This node never appears 6109 6110 -- N_Delay_Alternative 6111 -- Sloc points to DELAY 6112 -- Delay_Statement (Node2) 6113 -- Condition (Node1) from the guard (set to Empty if no guard present) 6114 -- Statements (List3) (set to Empty_List if no statements) 6115 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6116 6117 ---------------------------------- 6118 -- 9.7.1 Terminate Alternative -- 6119 ---------------------------------- 6120 6121 -- TERMINATE_ALTERNATIVE ::= terminate; 6122 6123 -- Gigi restriction: This node never appears 6124 6125 -- N_Terminate_Alternative 6126 -- Sloc points to TERMINATE 6127 -- Condition (Node1) from the guard (set to Empty if no guard present) 6128 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6129 -- Pragmas_After (List5) pragmas after alt (set to No_List if none) 6130 6131 ----------------------------- 6132 -- 9.7.2 Timed Entry Call -- 6133 ----------------------------- 6134 6135 -- TIMED_ENTRY_CALL ::= 6136 -- select 6137 -- ENTRY_CALL_ALTERNATIVE 6138 -- or 6139 -- DELAY_ALTERNATIVE 6140 -- end select; 6141 6142 -- Gigi restriction: This node never appears 6143 6144 -- N_Timed_Entry_Call 6145 -- Sloc points to SELECT 6146 -- Entry_Call_Alternative (Node1) 6147 -- Delay_Alternative (Node4) 6148 6149 ----------------------------------- 6150 -- 9.7.2 Entry Call Alternative -- 6151 ----------------------------------- 6152 6153 -- ENTRY_CALL_ALTERNATIVE ::= 6154 -- PROCEDURE_OR_ENTRY_CALL [SEQUENCE_OF_STATEMENTS] 6155 6156 -- PROCEDURE_OR_ENTRY_CALL ::= 6157 -- PROCEDURE_CALL_STATEMENT | ENTRY_CALL_STATEMENT 6158 6159 -- Gigi restriction: This node never appears 6160 6161 -- N_Entry_Call_Alternative 6162 -- Sloc points to first token of entry call statement 6163 -- Entry_Call_Statement (Node1) 6164 -- Statements (List3) (set to Empty_List if no statements) 6165 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6166 6167 ----------------------------------- 6168 -- 9.7.3 Conditional Entry Call -- 6169 ----------------------------------- 6170 6171 -- CONDITIONAL_ENTRY_CALL ::= 6172 -- select 6173 -- ENTRY_CALL_ALTERNATIVE 6174 -- else 6175 -- SEQUENCE_OF_STATEMENTS 6176 -- end select; 6177 6178 -- Gigi restriction: This node never appears 6179 6180 -- N_Conditional_Entry_Call 6181 -- Sloc points to SELECT 6182 -- Entry_Call_Alternative (Node1) 6183 -- Else_Statements (List4) 6184 6185 -------------------------------- 6186 -- 9.7.4 Asynchronous Select -- 6187 -------------------------------- 6188 6189 -- ASYNCHRONOUS_SELECT ::= 6190 -- select 6191 -- TRIGGERING_ALTERNATIVE 6192 -- then abort 6193 -- ABORTABLE_PART 6194 -- end select; 6195 6196 -- Note: asynchronous select is not permitted in Ada 83 mode 6197 6198 -- Gigi restriction: This node never appears 6199 6200 -- N_Asynchronous_Select 6201 -- Sloc points to SELECT 6202 -- Triggering_Alternative (Node1) 6203 -- Abortable_Part (Node2) 6204 6205 ----------------------------------- 6206 -- 9.7.4 Triggering Alternative -- 6207 ----------------------------------- 6208 6209 -- TRIGGERING_ALTERNATIVE ::= 6210 -- TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS] 6211 6212 -- Gigi restriction: This node never appears 6213 6214 -- N_Triggering_Alternative 6215 -- Sloc points to first token of triggering statement 6216 -- Triggering_Statement (Node1) 6217 -- Statements (List3) (set to Empty_List if no statements) 6218 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 6219 6220 --------------------------------- 6221 -- 9.7.4 Triggering Statement -- 6222 --------------------------------- 6223 6224 -- TRIGGERING_STATEMENT ::= PROCEDURE_OR_ENTRY_CALL | DELAY_STATEMENT 6225 6226 --------------------------- 6227 -- 9.7.4 Abortable Part -- 6228 --------------------------- 6229 6230 -- ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS 6231 6232 -- Gigi restriction: This node never appears 6233 6234 -- N_Abortable_Part 6235 -- Sloc points to ABORT 6236 -- Statements (List3) 6237 6238 -------------------------- 6239 -- 9.8 Abort Statement -- 6240 -------------------------- 6241 6242 -- ABORT_STATEMENT ::= abort task_NAME {, task_NAME}; 6243 6244 -- Gigi restriction: This node never appears 6245 6246 -- N_Abort_Statement 6247 -- Sloc points to ABORT 6248 -- Names (List2) 6249 6250 ------------------------- 6251 -- 10.1.1 Compilation -- 6252 ------------------------- 6253 6254 -- COMPILATION ::= {COMPILATION_UNIT} 6255 6256 -- There is no explicit node in the tree for a compilation, since in 6257 -- general the compiler is processing only a single compilation unit 6258 -- at a time. It is possible to parse multiple units in syntax check 6259 -- only mode, but the trees are discarded in that case. 6260 6261 ------------------------------ 6262 -- 10.1.1 Compilation Unit -- 6263 ------------------------------ 6264 6265 -- COMPILATION_UNIT ::= 6266 -- CONTEXT_CLAUSE LIBRARY_ITEM 6267 -- | CONTEXT_CLAUSE SUBUNIT 6268 6269 -- The N_Compilation_Unit node itself represents the above syntax. 6270 -- However, there are two additional items not reflected in the above 6271 -- syntax. First we have the global declarations that are added by the 6272 -- code generator. These are outer level declarations (so they cannot 6273 -- be represented as being inside the units). An example is the wrapper 6274 -- subprograms that are created to do ABE checking. As always a list of 6275 -- declarations can contain actions as well (i.e. statements), and such 6276 -- statements are executed as part of the elaboration of the unit. Note 6277 -- that all such declarations are elaborated before the library unit. 6278 6279 -- Similarly, certain actions need to be elaborated at the completion 6280 -- of elaboration of the library unit (notably the statement that sets 6281 -- the Boolean flag indicating that elaboration is complete). 6282 6283 -- The third item not reflected in the syntax is pragmas that appear 6284 -- after the compilation unit. As always pragmas are a problem since 6285 -- they are not part of the formal syntax, but can be stuck into the 6286 -- source following a set of ad hoc rules, and we have to find an ad 6287 -- hoc way of sticking them into the tree. For pragmas that appear 6288 -- before the library unit, we just consider them to be part of the 6289 -- context clause, and pragmas can appear in the Context_Items list 6290 -- of the compilation unit. However, pragmas can also appear after 6291 -- the library item. 6292 6293 -- To deal with all these problems, we create an auxiliary node for 6294 -- a compilation unit, referenced from the N_Compilation_Unit node, 6295 -- that contains these items. 6296 6297 -- N_Compilation_Unit 6298 -- Sloc points to first token of defining unit name 6299 -- Library_Unit (Node4-Sem) corresponding/parent spec/body 6300 -- Context_Items (List1) context items and pragmas preceding unit 6301 -- Private_Present (Flag15) set if library unit has private keyword 6302 -- Unit (Node2) library item or subunit 6303 -- Aux_Decls_Node (Node5) points to the N_Compilation_Unit_Aux node 6304 -- Has_No_Elaboration_Code (Flag17-Sem) 6305 -- Body_Required (Flag13-Sem) set for spec if body is required 6306 -- Acts_As_Spec (Flag4-Sem) flag for subprogram body with no spec 6307 -- Context_Pending (Flag16-Sem) 6308 -- First_Inlined_Subprogram (Node3-Sem) 6309 -- Has_Pragma_Suppress_All (Flag14-Sem) 6310 6311 -- N_Compilation_Unit_Aux 6312 -- Sloc is a copy of the Sloc from the N_Compilation_Unit node 6313 -- Declarations (List2) (set to No_List if no global declarations) 6314 -- Actions (List1) (set to No_List if no actions) 6315 -- Pragmas_After (List5) pragmas after unit (set to No_List if none) 6316 -- Config_Pragmas (List4) config pragmas (set to Empty_List if none) 6317 -- Default_Storage_Pool (Node3-Sem) 6318 6319 -------------------------- 6320 -- 10.1.1 Library Item -- 6321 -------------------------- 6322 6323 -- LIBRARY_ITEM ::= 6324 -- [private] LIBRARY_UNIT_DECLARATION 6325 -- | LIBRARY_UNIT_BODY 6326 -- | [private] LIBRARY_UNIT_RENAMING_DECLARATION 6327 6328 -- Note: PRIVATE is not allowed in Ada 83 mode 6329 6330 -- There is no explicit node in the tree for library item, instead 6331 -- the declaration or body, and the flag for private if present, 6332 -- appear in the N_Compilation_Unit node. 6333 6334 -------------------------------------- 6335 -- 10.1.1 Library Unit Declaration -- 6336 -------------------------------------- 6337 6338 -- LIBRARY_UNIT_DECLARATION ::= 6339 -- SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION 6340 -- | GENERIC_DECLARATION | GENERIC_INSTANTIATION 6341 6342 ----------------------------------------------- 6343 -- 10.1.1 Library Unit Renaming Declaration -- 6344 ----------------------------------------------- 6345 6346 -- LIBRARY_UNIT_RENAMING_DECLARATION ::= 6347 -- PACKAGE_RENAMING_DECLARATION 6348 -- | GENERIC_RENAMING_DECLARATION 6349 -- | SUBPROGRAM_RENAMING_DECLARATION 6350 6351 ------------------------------- 6352 -- 10.1.1 Library unit body -- 6353 ------------------------------- 6354 6355 -- LIBRARY_UNIT_BODY ::= SUBPROGRAM_BODY | PACKAGE_BODY 6356 6357 ------------------------------ 6358 -- 10.1.1 Parent Unit Name -- 6359 ------------------------------ 6360 6361 -- PARENT_UNIT_NAME ::= NAME 6362 6363 ---------------------------- 6364 -- 10.1.2 Context clause -- 6365 ---------------------------- 6366 6367 -- CONTEXT_CLAUSE ::= {CONTEXT_ITEM} 6368 6369 -- The context clause can include pragmas, and any pragmas that appear 6370 -- before the context clause proper (i.e. all configuration pragmas, 6371 -- also appear at the front of this list). 6372 6373 -------------------------- 6374 -- 10.1.2 Context_Item -- 6375 -------------------------- 6376 6377 -- CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE | WITH_TYPE_CLAUSE 6378 6379 ------------------------- 6380 -- 10.1.2 With clause -- 6381 ------------------------- 6382 6383 -- WITH_CLAUSE ::= 6384 -- with library_unit_NAME {,library_unit_NAME}; 6385 6386 -- A separate With clause is built for each name, so that we have 6387 -- a Corresponding_Spec field for each with'ed spec. The flags 6388 -- First_Name and Last_Name are used to reconstruct the exact 6389 -- source form. When a list of names appears in one with clause, 6390 -- the first name in the list has First_Name set, and the last 6391 -- has Last_Name set. If the with clause has only one name, then 6392 -- both of the flags First_Name and Last_Name are set in this name. 6393 6394 -- Note: in the case of implicit with's that are installed by the 6395 -- Rtsfind routine, Implicit_With is set, and the Sloc is typically 6396 -- set to Standard_Location, but it is incorrect to test the Sloc 6397 -- to find out if a with clause is implicit, test the flag instead. 6398 6399 -- N_With_Clause 6400 -- Sloc points to first token of library unit name 6401 -- Withed_Body (Node1-Sem) 6402 -- Name (Node2) 6403 -- Next_Implicit_With (Node3-Sem) 6404 -- Library_Unit (Node4-Sem) 6405 -- Corresponding_Spec (Node5-Sem) 6406 -- First_Name (Flag5) (set to True if first name or only one name) 6407 -- Last_Name (Flag6) (set to True if last name or only one name) 6408 -- Context_Installed (Flag13-Sem) 6409 -- Elaborate_Present (Flag4-Sem) 6410 -- Elaborate_All_Present (Flag14-Sem) 6411 -- Elaborate_All_Desirable (Flag9-Sem) 6412 -- Elaborate_Desirable (Flag11-Sem) 6413 -- Private_Present (Flag15) set if with_clause has private keyword 6414 -- Implicit_With (Flag16-Sem) 6415 -- Implicit_With_From_Instantiation (Flag12-Sem) 6416 -- Limited_Present (Flag17) set if LIMITED is present 6417 -- Limited_View_Installed (Flag18-Sem) 6418 -- Unreferenced_In_Spec (Flag7-Sem) 6419 -- No_Entities_Ref_In_Spec (Flag8-Sem) 6420 6421 -- Note: Limited_Present and Limited_View_Installed are used to support 6422 -- the implementation of Ada 2005 (AI-50217). 6423 6424 -- Similarly, Private_Present is used to support the implementation of 6425 -- Ada 2005 (AI-50262). 6426 6427 -- Note: if the WITH clause refers to a standard library unit, then a 6428 -- limited with clause is changed into a normal with clause, because we 6429 -- are not prepared to deal with limited with in the context of Rtsfind. 6430 -- So in this case, the Limited_Present flag will be False in the final 6431 -- tree. However, we do NOT do this transformation in ASIS mode, so for 6432 -- ASIS the flag will remain set in this situation. 6433 6434 ---------------------- 6435 -- With_Type clause -- 6436 ---------------------- 6437 6438 -- This is a GNAT extension, used to implement mutually recursive 6439 -- types declared in different packages. 6440 6441 -- Note: this is now obsolete. The functionality of this construct 6442 -- is now implemented by the Ada 2005 limited_with_clause. 6443 6444 --------------------- 6445 -- 10.2 Body stub -- 6446 --------------------- 6447 6448 -- BODY_STUB ::= 6449 -- SUBPROGRAM_BODY_STUB 6450 -- | PACKAGE_BODY_STUB 6451 -- | TASK_BODY_STUB 6452 -- | PROTECTED_BODY_STUB 6453 6454 ---------------------------------- 6455 -- 10.1.3 Subprogram Body Stub -- 6456 ---------------------------------- 6457 6458 -- SUBPROGRAM_BODY_STUB ::= 6459 -- SUBPROGRAM_SPECIFICATION is separate 6460 -- [ASPECT_SPECIFICATION]; 6461 6462 -- N_Subprogram_Body_Stub 6463 -- Sloc points to FUNCTION or PROCEDURE 6464 -- Specification (Node1) 6465 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6466 -- Library_Unit (Node4-Sem) points to the subunit 6467 -- Corresponding_Body (Node5-Sem) 6468 6469 ------------------------------- 6470 -- 10.1.3 Package Body Stub -- 6471 ------------------------------- 6472 6473 -- PACKAGE_BODY_STUB ::= 6474 -- package body DEFINING_IDENTIFIER is separate 6475 -- [ASPECT_SPECIFICATION]; 6476 6477 -- N_Package_Body_Stub 6478 -- Sloc points to PACKAGE 6479 -- Defining_Identifier (Node1) 6480 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6481 -- Library_Unit (Node4-Sem) points to the subunit 6482 -- Corresponding_Body (Node5-Sem) 6483 6484 ---------------------------- 6485 -- 10.1.3 Task Body Stub -- 6486 ---------------------------- 6487 6488 -- TASK_BODY_STUB ::= 6489 -- task body DEFINING_IDENTIFIER is separate 6490 -- [ASPECT_SPECIFICATION]; 6491 6492 -- N_Task_Body_Stub 6493 -- Sloc points to TASK 6494 -- Defining_Identifier (Node1) 6495 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6496 -- Library_Unit (Node4-Sem) points to the subunit 6497 -- Corresponding_Body (Node5-Sem) 6498 6499 --------------------------------- 6500 -- 10.1.3 Protected Body Stub -- 6501 --------------------------------- 6502 6503 -- PROTECTED_BODY_STUB ::= 6504 -- protected body DEFINING_IDENTIFIER is separate 6505 -- [ASPECT_SPECIFICATION]; 6506 6507 -- Note: protected body stubs are not allowed in Ada 83 mode 6508 6509 -- N_Protected_Body_Stub 6510 -- Sloc points to PROTECTED 6511 -- Defining_Identifier (Node1) 6512 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6513 -- Library_Unit (Node4-Sem) points to the subunit 6514 -- Corresponding_Body (Node5-Sem) 6515 6516 --------------------- 6517 -- 10.1.3 Subunit -- 6518 --------------------- 6519 6520 -- SUBUNIT ::= separate (PARENT_UNIT_NAME) PROPER_BODY 6521 6522 -- N_Subunit 6523 -- Sloc points to SEPARATE 6524 -- Name (Node2) is the name of the parent unit 6525 -- Proper_Body (Node1) is the subunit body 6526 -- Corresponding_Stub (Node3-Sem) is the stub declaration for the unit. 6527 6528 --------------------------------- 6529 -- 11.1 Exception Declaration -- 6530 --------------------------------- 6531 6532 -- EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception 6533 -- [ASPECT_SPECIFICATIONS]; 6534 6535 -- For consistency with object declarations etc., the parser converts 6536 -- the case of multiple identifiers being declared to a series of 6537 -- declarations in which the expression is copied, using the More_Ids 6538 -- and Prev_Ids flags to remember the source form as described in the 6539 -- section on "Handling of Defining Identifier Lists". 6540 6541 -- N_Exception_Declaration 6542 -- Sloc points to EXCEPTION 6543 -- Defining_Identifier (Node1) 6544 -- Expression (Node3-Sem) 6545 -- Renaming_Exception (Node2-Sem) 6546 -- More_Ids (Flag5) (set to False if no more identifiers in list) 6547 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 6548 6549 ------------------------------------------ 6550 -- 11.2 Handled Sequence Of Statements -- 6551 ------------------------------------------ 6552 6553 -- HANDLED_SEQUENCE_OF_STATEMENTS ::= 6554 -- SEQUENCE_OF_STATEMENTS 6555 -- [exception 6556 -- EXCEPTION_HANDLER 6557 -- {EXCEPTION_HANDLER}] 6558 -- [at end 6559 -- cleanup_procedure_call (param, param, param, ...);] 6560 6561 -- The AT END phrase is a GNAT extension to provide for cleanups. It is 6562 -- used only internally currently, but is considered to be syntactic. 6563 -- At the moment, the only cleanup action allowed is a single call to 6564 -- a parameterless procedure, and the Identifier field of the node is 6565 -- the procedure to be called. The cleanup action occurs whenever the 6566 -- sequence of statements is left for any reason. The possible reasons 6567 -- are: 6568 -- 1. reaching the end of the sequence 6569 -- 2. exit, return, or goto 6570 -- 3. exception or abort 6571 -- For some back ends, such as gcc with ZCX, "at end" is implemented 6572 -- entirely in the back end. In this case, a handled sequence of 6573 -- statements with an "at end" cannot also have exception handlers. 6574 -- For other back ends, such as gcc with front-end SJLJ, the 6575 -- implementation is split between the front end and back end; the front 6576 -- end implements 3, and the back end implements 1 and 2. In this case, 6577 -- if there is an "at end", the front end inserts the appropriate 6578 -- exception handler, and this handler takes precedence over "at end" 6579 -- in case of exception. 6580 6581 -- The inserted exception handler is of the form: 6582 6583 -- when all others => 6584 -- cleanup; 6585 -- raise; 6586 6587 -- where cleanup is the procedure to be called. The reason we do this is 6588 -- so that the front end can handle the necessary entries in the 6589 -- exception tables, and other exception handler actions required as 6590 -- part of the normal handling for exception handlers. 6591 6592 -- The AT END cleanup handler protects only the sequence of statements 6593 -- (not the associated declarations of the parent), just like exception 6594 -- handlers. The big difference is that the cleanup procedure is called 6595 -- on either a normal or an abnormal exit from the statement sequence. 6596 6597 -- Note: the list of Exception_Handlers can contain pragmas as well 6598 -- as actual handlers. In practice these pragmas can only occur at 6599 -- the start of the list, since any pragmas occurring later on will 6600 -- be included in the statement list of the corresponding handler. 6601 6602 -- Note: although in the Ada syntax, the sequence of statements in 6603 -- a handled sequence of statements can only contain statements, we 6604 -- allow free mixing of declarations and statements in the resulting 6605 -- expanded tree. This is for example used to deal with the case of 6606 -- a cleanup procedure that must handle declarations as well as the 6607 -- statements of a block. 6608 6609 -- Note: the cleanup_procedure_call does not go through the common 6610 -- processing for calls, which in particular means that it will not be 6611 -- automatically inlined in all cases, even though the procedure to be 6612 -- called is marked inline. More specifically, if the procedure comes 6613 -- from another unit than the main source unit, for example a run-time 6614 -- unit, then it needs to be manually added to the list of bodies to be 6615 -- inlined by invoking Add_Inlined_Body on it. 6616 6617 -- N_Handled_Sequence_Of_Statements 6618 -- Sloc points to first token of first statement 6619 -- Statements (List3) 6620 -- End_Label (Node4) (set to Empty if expander generated) 6621 -- Exception_Handlers (List5) (set to No_List if none present) 6622 -- At_End_Proc (Node1) (set to Empty if no clean up procedure) 6623 -- First_Real_Statement (Node2-Sem) 6624 6625 -- Note: the parent always contains a Declarations field which contains 6626 -- declarations associated with the handled sequence of statements. This 6627 -- is true even in the case of an accept statement (see description of 6628 -- the N_Accept_Statement node). 6629 6630 -- End_Label refers to the containing construct 6631 6632 ----------------------------- 6633 -- 11.2 Exception Handler -- 6634 ----------------------------- 6635 6636 -- EXCEPTION_HANDLER ::= 6637 -- when [CHOICE_PARAMETER_SPECIFICATION :] 6638 -- EXCEPTION_CHOICE {| EXCEPTION_CHOICE} => 6639 -- SEQUENCE_OF_STATEMENTS 6640 6641 -- Note: choice parameter specification is not allowed in Ada 83 mode 6642 6643 -- N_Exception_Handler 6644 -- Sloc points to WHEN 6645 -- Choice_Parameter (Node2) (set to Empty if not present) 6646 -- Exception_Choices (List4) 6647 -- Statements (List3) 6648 -- Exception_Label (Node5-Sem) (set to Empty of not present) 6649 -- Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present) 6650 -- Local_Raise_Not_OK (Flag7-Sem) 6651 -- Has_Local_Raise (Flag8-Sem) 6652 6653 ------------------------------------------ 6654 -- 11.2 Choice parameter specification -- 6655 ------------------------------------------ 6656 6657 -- CHOICE_PARAMETER_SPECIFICATION ::= DEFINING_IDENTIFIER 6658 6659 ---------------------------- 6660 -- 11.2 Exception Choice -- 6661 ---------------------------- 6662 6663 -- EXCEPTION_CHOICE ::= exception_NAME | others 6664 6665 -- Except in the case of OTHERS, no explicit node appears in the tree 6666 -- for exception choice. Instead the exception name appears directly. 6667 -- An OTHERS choice is represented by a N_Others_Choice node (see 6668 -- section 3.8.1. 6669 6670 -- Note: for the exception choice created for an at end handler, the 6671 -- exception choice is an N_Others_Choice node with All_Others set. 6672 6673 --------------------------- 6674 -- 11.3 Raise Statement -- 6675 --------------------------- 6676 6677 -- RAISE_STATEMENT ::= raise [exception_NAME]; 6678 6679 -- In Ada 2005, we have 6680 6681 -- RAISE_STATEMENT ::= 6682 -- raise; | raise exception_NAME [with string_EXPRESSION]; 6683 6684 -- N_Raise_Statement 6685 -- Sloc points to RAISE 6686 -- Name (Node2) (set to Empty if no exception name present) 6687 -- Expression (Node3) (set to Empty if no expression present) 6688 -- From_At_End (Flag4-Sem) 6689 6690 ---------------------------- 6691 -- 11.3 Raise Expression -- 6692 ---------------------------- 6693 6694 -- RAISE_EXPRESSION ::= raise exception_NAME [with string_EXPRESSION] 6695 6696 -- N_Raise_Expression 6697 -- Sloc points to RAISE 6698 -- Name (Node2) (always present) 6699 -- Expression (Node3) (set to Empty if no expression present) 6700 -- Convert_To_Return_False (Flag13-Sem) 6701 -- plus fields for expression 6702 6703 ------------------------------- 6704 -- 12.1 Generic Declaration -- 6705 ------------------------------- 6706 6707 -- GENERIC_DECLARATION ::= 6708 -- GENERIC_SUBPROGRAM_DECLARATION | GENERIC_PACKAGE_DECLARATION 6709 6710 ------------------------------------------ 6711 -- 12.1 Generic Subprogram Declaration -- 6712 ------------------------------------------ 6713 6714 -- GENERIC_SUBPROGRAM_DECLARATION ::= 6715 -- GENERIC_FORMAL_PART SUBPROGRAM_SPECIFICATION 6716 -- [ASPECT_SPECIFICATIONS]; 6717 6718 -- Note: Generic_Formal_Declarations can include pragmas 6719 6720 -- N_Generic_Subprogram_Declaration 6721 -- Sloc points to GENERIC 6722 -- Specification (Node1) subprogram specification 6723 -- Corresponding_Body (Node5-Sem) 6724 -- Generic_Formal_Declarations (List2) from generic formal part 6725 -- Parent_Spec (Node4-Sem) 6726 6727 --------------------------------------- 6728 -- 12.1 Generic Package Declaration -- 6729 --------------------------------------- 6730 6731 -- GENERIC_PACKAGE_DECLARATION ::= 6732 -- GENERIC_FORMAL_PART PACKAGE_SPECIFICATION 6733 -- [ASPECT_SPECIFICATIONS]; 6734 6735 -- Note: when we do generics right, the Activation_Chain_Entity entry 6736 -- for this node can be removed (since the expander won't see generic 6737 -- units any more)???. 6738 6739 -- Note: Generic_Formal_Declarations can include pragmas 6740 6741 -- N_Generic_Package_Declaration 6742 -- Sloc points to GENERIC 6743 -- Specification (Node1) package specification 6744 -- Corresponding_Body (Node5-Sem) 6745 -- Generic_Formal_Declarations (List2) from generic formal part 6746 -- Parent_Spec (Node4-Sem) 6747 -- Activation_Chain_Entity (Node3-Sem) 6748 6749 ------------------------------- 6750 -- 12.1 Generic Formal Part -- 6751 ------------------------------- 6752 6753 -- GENERIC_FORMAL_PART ::= 6754 -- generic {GENERIC_FORMAL_PARAMETER_DECLARATION | USE_CLAUSE} 6755 6756 ------------------------------------------------ 6757 -- 12.1 Generic Formal Parameter Declaration -- 6758 ------------------------------------------------ 6759 6760 -- GENERIC_FORMAL_PARAMETER_DECLARATION ::= 6761 -- FORMAL_OBJECT_DECLARATION 6762 -- | FORMAL_TYPE_DECLARATION 6763 -- | FORMAL_SUBPROGRAM_DECLARATION 6764 -- | FORMAL_PACKAGE_DECLARATION 6765 6766 --------------------------------- 6767 -- 12.3 Generic Instantiation -- 6768 --------------------------------- 6769 6770 -- GENERIC_INSTANTIATION ::= 6771 -- package DEFINING_PROGRAM_UNIT_NAME is 6772 -- new generic_package_NAME [GENERIC_ACTUAL_PART] 6773 -- [ASPECT_SPECIFICATIONS]; 6774 -- | [[not] overriding] 6775 -- procedure DEFINING_PROGRAM_UNIT_NAME is 6776 -- new generic_procedure_NAME [GENERIC_ACTUAL_PART] 6777 -- [ASPECT_SPECIFICATIONS]; 6778 -- | [[not] overriding] 6779 -- function DEFINING_DESIGNATOR is 6780 -- new generic_function_NAME [GENERIC_ACTUAL_PART] 6781 -- [ASPECT_SPECIFICATIONS]; 6782 6783 -- N_Package_Instantiation 6784 -- Sloc points to PACKAGE 6785 -- Defining_Unit_Name (Node1) 6786 -- Name (Node2) 6787 -- Generic_Associations (List3) (set to No_List if no 6788 -- generic actual part) 6789 -- Parent_Spec (Node4-Sem) 6790 -- Instance_Spec (Node5-Sem) 6791 -- ABE_Is_Certain (Flag18-Sem) 6792 6793 -- N_Procedure_Instantiation 6794 -- Sloc points to PROCEDURE 6795 -- Defining_Unit_Name (Node1) 6796 -- Name (Node2) 6797 -- Parent_Spec (Node4-Sem) 6798 -- Generic_Associations (List3) (set to No_List if no 6799 -- generic actual part) 6800 -- Instance_Spec (Node5-Sem) 6801 -- Must_Override (Flag14) set if overriding indicator present 6802 -- Must_Not_Override (Flag15) set if not_overriding indicator present 6803 -- ABE_Is_Certain (Flag18-Sem) 6804 6805 -- N_Function_Instantiation 6806 -- Sloc points to FUNCTION 6807 -- Defining_Unit_Name (Node1) 6808 -- Name (Node2) 6809 -- Generic_Associations (List3) (set to No_List if no 6810 -- generic actual part) 6811 -- Parent_Spec (Node4-Sem) 6812 -- Instance_Spec (Node5-Sem) 6813 -- Must_Override (Flag14) set if overriding indicator present 6814 -- Must_Not_Override (Flag15) set if not_overriding indicator present 6815 -- ABE_Is_Certain (Flag18-Sem) 6816 6817 -- Note: overriding indicator is an Ada 2005 feature 6818 6819 ------------------------------- 6820 -- 12.3 Generic Actual Part -- 6821 ------------------------------- 6822 6823 -- GENERIC_ACTUAL_PART ::= 6824 -- (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION}) 6825 6826 ------------------------------- 6827 -- 12.3 Generic Association -- 6828 ------------------------------- 6829 6830 -- GENERIC_ASSOCIATION ::= 6831 -- [generic_formal_parameter_SELECTOR_NAME =>] 6832 6833 -- Note: unlike the procedure call case, a generic association node 6834 -- is generated for every association, even if no formal parameter 6835 -- selector name is present. In this case the parser will leave the 6836 -- Selector_Name field set to Empty, to be filled in later by the 6837 -- semantic pass. 6838 6839 -- In Ada 2005, a formal may be associated with a box, if the 6840 -- association is part of the list of actuals for a formal package. 6841 -- If the association is given by OTHERS => <>, the association is 6842 -- an N_Others_Choice. 6843 6844 -- N_Generic_Association 6845 -- Sloc points to first token of generic association 6846 -- Selector_Name (Node2) (set to Empty if no formal 6847 -- parameter selector name) 6848 -- Explicit_Generic_Actual_Parameter (Node1) (Empty if box present) 6849 -- Box_Present (Flag15) (for formal_package associations with a box) 6850 6851 --------------------------------------------- 6852 -- 12.3 Explicit Generic Actual Parameter -- 6853 --------------------------------------------- 6854 6855 -- EXPLICIT_GENERIC_ACTUAL_PARAMETER ::= 6856 -- EXPRESSION | variable_NAME | subprogram_NAME 6857 -- | entry_NAME | SUBTYPE_MARK | package_instance_NAME 6858 6859 ------------------------------------- 6860 -- 12.4 Formal Object Declaration -- 6861 ------------------------------------- 6862 6863 -- FORMAL_OBJECT_DECLARATION ::= 6864 -- DEFINING_IDENTIFIER_LIST : 6865 -- MODE [NULL_EXCLUSION] SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 6866 -- [ASPECT_SPECIFICATIONS]; 6867 -- | DEFINING_IDENTIFIER_LIST : 6868 -- MODE ACCESS_DEFINITION [:= DEFAULT_EXPRESSION] 6869 -- [ASPECT_SPECIFICATIONS]; 6870 6871 -- Although the syntax allows multiple identifiers in the list, the 6872 -- semantics is as though successive declarations were given with 6873 -- identical type definition and expression components. To simplify 6874 -- semantic processing, the parser represents a multiple declaration 6875 -- case as a sequence of single declarations, using the More_Ids and 6876 -- Prev_Ids flags to preserve the original source form as described 6877 -- in the section on "Handling of Defining Identifier Lists". 6878 6879 -- N_Formal_Object_Declaration 6880 -- Sloc points to first identifier 6881 -- Defining_Identifier (Node1) 6882 -- In_Present (Flag15) 6883 -- Out_Present (Flag17) 6884 -- Null_Exclusion_Present (Flag11) (set to False if not present) 6885 -- Subtype_Mark (Node4) (set to Empty if not present) 6886 -- Access_Definition (Node3) (set to Empty if not present) 6887 -- Default_Expression (Node5) (set to Empty if no default expression) 6888 -- More_Ids (Flag5) (set to False if no more identifiers in list) 6889 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 6890 6891 ----------------------------------- 6892 -- 12.5 Formal Type Declaration -- 6893 ----------------------------------- 6894 6895 -- FORMAL_TYPE_DECLARATION ::= 6896 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 6897 -- is FORMAL_TYPE_DEFINITION 6898 -- [ASPECT_SPECIFICATIONS]; 6899 -- | type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [is tagged] 6900 6901 -- N_Formal_Type_Declaration 6902 -- Sloc points to TYPE 6903 -- Defining_Identifier (Node1) 6904 -- Formal_Type_Definition (Node3) 6905 -- Discriminant_Specifications (List4) (set to No_List if no 6906 -- discriminant part) 6907 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 6908 6909 ---------------------------------- 6910 -- 12.5 Formal type definition -- 6911 ---------------------------------- 6912 6913 -- FORMAL_TYPE_DEFINITION ::= 6914 -- FORMAL_PRIVATE_TYPE_DEFINITION 6915 -- | FORMAL_DERIVED_TYPE_DEFINITION 6916 -- | FORMAL_DISCRETE_TYPE_DEFINITION 6917 -- | FORMAL_SIGNED_INTEGER_TYPE_DEFINITION 6918 -- | FORMAL_MODULAR_TYPE_DEFINITION 6919 -- | FORMAL_FLOATING_POINT_DEFINITION 6920 -- | FORMAL_ORDINARY_FIXED_POINT_DEFINITION 6921 -- | FORMAL_DECIMAL_FIXED_POINT_DEFINITION 6922 -- | FORMAL_ARRAY_TYPE_DEFINITION 6923 -- | FORMAL_ACCESS_TYPE_DEFINITION 6924 -- | FORMAL_INTERFACE_TYPE_DEFINITION 6925 -- | FORMAL_INCOMPLETE_TYPE_DEFINITION 6926 6927 -- The Ada 2012 syntax introduces two new non-terminals: 6928 -- Formal_{Complete,Incomplete}_Type_Declaration just to introduce 6929 -- the latter category. Here we introduce an incomplete type definition 6930 -- in order to preserve as much as possible the existing structure. 6931 6932 --------------------------------------------- 6933 -- 12.5.1 Formal Private Type Definition -- 6934 --------------------------------------------- 6935 6936 -- FORMAL_PRIVATE_TYPE_DEFINITION ::= 6937 -- [[abstract] tagged] [limited] private 6938 6939 -- Note: TAGGED is not allowed in Ada 83 mode 6940 6941 -- N_Formal_Private_Type_Definition 6942 -- Sloc points to PRIVATE 6943 -- Uninitialized_Variable (Node3-Sem) 6944 -- Abstract_Present (Flag4) 6945 -- Tagged_Present (Flag15) 6946 -- Limited_Present (Flag17) 6947 6948 -------------------------------------------- 6949 -- 12.5.1 Formal Derived Type Definition -- 6950 -------------------------------------------- 6951 6952 -- FORMAL_DERIVED_TYPE_DEFINITION ::= 6953 -- [abstract] [limited | synchronized] 6954 -- new SUBTYPE_MARK [[and INTERFACE_LIST] with private] 6955 -- Note: this construct is not allowed in Ada 83 mode 6956 6957 -- N_Formal_Derived_Type_Definition 6958 -- Sloc points to NEW 6959 -- Subtype_Mark (Node4) 6960 -- Private_Present (Flag15) 6961 -- Abstract_Present (Flag4) 6962 -- Limited_Present (Flag17) 6963 -- Synchronized_Present (Flag7) 6964 -- Interface_List (List2) (set to No_List if none) 6965 6966 ----------------------------------------------- 6967 -- 12.5.1 Formal Incomplete Type Definition -- 6968 ----------------------------------------------- 6969 6970 -- FORMAL_INCOMPLETE_TYPE_DEFINITION ::= [tagged] 6971 6972 -- N_Formal_Incomplete_Type_Definition 6973 -- Sloc points to identifier of parent 6974 -- Tagged_Present (Flag15) 6975 6976 --------------------------------------------- 6977 -- 12.5.2 Formal Discrete Type Definition -- 6978 --------------------------------------------- 6979 6980 -- FORMAL_DISCRETE_TYPE_DEFINITION ::= (<>) 6981 6982 -- N_Formal_Discrete_Type_Definition 6983 -- Sloc points to ( 6984 6985 --------------------------------------------------- 6986 -- 12.5.2 Formal Signed Integer Type Definition -- 6987 --------------------------------------------------- 6988 6989 -- FORMAL_SIGNED_INTEGER_TYPE_DEFINITION ::= range <> 6990 6991 -- N_Formal_Signed_Integer_Type_Definition 6992 -- Sloc points to RANGE 6993 6994 -------------------------------------------- 6995 -- 12.5.2 Formal Modular Type Definition -- 6996 -------------------------------------------- 6997 6998 -- FORMAL_MODULAR_TYPE_DEFINITION ::= mod <> 6999 7000 -- N_Formal_Modular_Type_Definition 7001 -- Sloc points to MOD 7002 7003 ---------------------------------------------- 7004 -- 12.5.2 Formal Floating Point Definition -- 7005 ---------------------------------------------- 7006 7007 -- FORMAL_FLOATING_POINT_DEFINITION ::= digits <> 7008 7009 -- N_Formal_Floating_Point_Definition 7010 -- Sloc points to DIGITS 7011 7012 ---------------------------------------------------- 7013 -- 12.5.2 Formal Ordinary Fixed Point Definition -- 7014 ---------------------------------------------------- 7015 7016 -- FORMAL_ORDINARY_FIXED_POINT_DEFINITION ::= delta <> 7017 7018 -- N_Formal_Ordinary_Fixed_Point_Definition 7019 -- Sloc points to DELTA 7020 7021 --------------------------------------------------- 7022 -- 12.5.2 Formal Decimal Fixed Point Definition -- 7023 --------------------------------------------------- 7024 7025 -- FORMAL_DECIMAL_FIXED_POINT_DEFINITION ::= delta <> digits <> 7026 7027 -- Note: formal decimal fixed point definition not allowed in Ada 83 7028 7029 -- N_Formal_Decimal_Fixed_Point_Definition 7030 -- Sloc points to DELTA 7031 7032 ------------------------------------------ 7033 -- 12.5.3 Formal Array Type Definition -- 7034 ------------------------------------------ 7035 7036 -- FORMAL_ARRAY_TYPE_DEFINITION ::= ARRAY_TYPE_DEFINITION 7037 7038 ------------------------------------------- 7039 -- 12.5.4 Formal Access Type Definition -- 7040 ------------------------------------------- 7041 7042 -- FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION 7043 7044 ---------------------------------------------- 7045 -- 12.5.5 Formal Interface Type Definition -- 7046 ---------------------------------------------- 7047 7048 -- FORMAL_INTERFACE_TYPE_DEFINITION ::= INTERFACE_TYPE_DEFINITION 7049 7050 ----------------------------------------- 7051 -- 12.6 Formal Subprogram Declaration -- 7052 ----------------------------------------- 7053 7054 -- FORMAL_SUBPROGRAM_DECLARATION ::= 7055 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION 7056 -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION 7057 7058 -------------------------------------------------- 7059 -- 12.6 Formal Concrete Subprogram Declaration -- 7060 -------------------------------------------------- 7061 7062 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::= 7063 -- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT] 7064 -- [ASPECT_SPECIFICATIONS]; 7065 7066 -- N_Formal_Concrete_Subprogram_Declaration 7067 -- Sloc points to WITH 7068 -- Specification (Node1) 7069 -- Default_Name (Node2) (set to Empty if no subprogram default) 7070 -- Box_Present (Flag15) 7071 7072 -- Note: if no subprogram default is present, then Name is set 7073 -- to Empty, and Box_Present is False. 7074 7075 -------------------------------------------------- 7076 -- 12.6 Formal Abstract Subprogram Declaration -- 7077 -------------------------------------------------- 7078 7079 -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::= 7080 -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT] 7081 -- [ASPECT_SPECIFICATIONS]; 7082 7083 -- N_Formal_Abstract_Subprogram_Declaration 7084 -- Sloc points to WITH 7085 -- Specification (Node1) 7086 -- Default_Name (Node2) (set to Empty if no subprogram default) 7087 -- Box_Present (Flag15) 7088 7089 -- Note: if no subprogram default is present, then Name is set 7090 -- to Empty, and Box_Present is False. 7091 7092 ------------------------------ 7093 -- 12.6 Subprogram Default -- 7094 ------------------------------ 7095 7096 -- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <> 7097 7098 -- There is no separate node in the tree for a subprogram default. 7099 -- Instead the parent (N_Formal_Concrete_Subprogram_Declaration 7100 -- or N_Formal_Abstract_Subprogram_Declaration) node contains the 7101 -- default name or box indication, as needed. 7102 7103 ------------------------ 7104 -- 12.6 Default Name -- 7105 ------------------------ 7106 7107 -- DEFAULT_NAME ::= NAME 7108 7109 -------------------------------------- 7110 -- 12.7 Formal Package Declaration -- 7111 -------------------------------------- 7112 7113 -- FORMAL_PACKAGE_DECLARATION ::= 7114 -- with package DEFINING_IDENTIFIER 7115 -- is new generic_package_NAME FORMAL_PACKAGE_ACTUAL_PART 7116 -- [ASPECT_SPECIFICATIONS]; 7117 7118 -- Note: formal package declarations not allowed in Ada 83 mode 7119 7120 -- N_Formal_Package_Declaration 7121 -- Sloc points to WITH 7122 -- Defining_Identifier (Node1) 7123 -- Name (Node2) 7124 -- Generic_Associations (List3) (set to No_List if (<>) case or 7125 -- empty generic actual part) 7126 -- Box_Present (Flag15) 7127 -- Instance_Spec (Node5-Sem) 7128 -- ABE_Is_Certain (Flag18-Sem) 7129 7130 -------------------------------------- 7131 -- 12.7 Formal Package Actual Part -- 7132 -------------------------------------- 7133 7134 -- FORMAL_PACKAGE_ACTUAL_PART ::= 7135 -- ([OTHERS] => <>) 7136 -- | [GENERIC_ACTUAL_PART] 7137 -- (FORMAL_PACKAGE_ASSOCIATION {. FORMAL_PACKAGE_ASSOCIATION} 7138 7139 -- FORMAL_PACKAGE_ASSOCIATION ::= 7140 -- GENERIC_ASSOCIATION 7141 -- | GENERIC_FORMAL_PARAMETER_SELECTOR_NAME => <> 7142 7143 -- There is no explicit node in the tree for a formal package actual 7144 -- part. Instead the information appears in the parent node (i.e. the 7145 -- formal package declaration node itself). 7146 7147 -- There is no explicit node for a formal package association. All of 7148 -- them are represented either by a generic association, possibly with 7149 -- Box_Present, or by an N_Others_Choice. 7150 7151 --------------------------------- 7152 -- 13.1 Representation clause -- 7153 --------------------------------- 7154 7155 -- REPRESENTATION_CLAUSE ::= 7156 -- ATTRIBUTE_DEFINITION_CLAUSE 7157 -- | ENUMERATION_REPRESENTATION_CLAUSE 7158 -- | RECORD_REPRESENTATION_CLAUSE 7159 -- | AT_CLAUSE 7160 7161 ---------------------- 7162 -- 13.1 Local Name -- 7163 ---------------------- 7164 7165 -- LOCAL_NAME := 7166 -- DIRECT_NAME 7167 -- | DIRECT_NAME'ATTRIBUTE_DESIGNATOR 7168 -- | library_unit_NAME 7169 7170 -- The construct DIRECT_NAME'ATTRIBUTE_DESIGNATOR appears in the tree 7171 -- as an attribute reference, which has essentially the same form. 7172 7173 --------------------------------------- 7174 -- 13.3 Attribute definition clause -- 7175 --------------------------------------- 7176 7177 -- ATTRIBUTE_DEFINITION_CLAUSE ::= 7178 -- for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use EXPRESSION; 7179 -- | for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use NAME; 7180 7181 -- In Ada 83, the expression must be a simple expression and the 7182 -- local name must be a direct name. 7183 7184 -- Note: the only attribute definition clause that is processed by 7185 -- gigi is an address clause. For all other cases, the information 7186 -- is extracted by the front end and either results in setting entity 7187 -- information, e.g. Esize for the Size clause, or in appropriate 7188 -- expansion actions (e.g. in the case of Storage_Size). 7189 7190 -- For an address clause, Gigi constructs the appropriate addressing 7191 -- code. It also ensures that no aliasing optimizations are made 7192 -- for the object for which the address clause appears. 7193 7194 -- Note: for an address clause used to achieve an overlay: 7195 7196 -- A : Integer; 7197 -- B : Integer; 7198 -- for B'Address use A'Address; 7199 7200 -- the above rule means that Gigi will ensure that no optimizations 7201 -- will be made for B that would violate the implementation advice 7202 -- of RM 13.3(19). However, this advice applies only to B and not 7203 -- to A, which seems unfortunate. The GNAT front end will mark the 7204 -- object A as volatile to also prevent unwanted optimization 7205 -- assumptions based on no aliasing being made for B. 7206 7207 -- N_Attribute_Definition_Clause 7208 -- Sloc points to FOR 7209 -- Name (Node2) the local name 7210 -- Chars (Name1) the identifier name from the attribute designator 7211 -- Expression (Node3) the expression or name 7212 -- Entity (Node4-Sem) 7213 -- Next_Rep_Item (Node5-Sem) 7214 -- From_At_Mod (Flag4-Sem) 7215 -- Check_Address_Alignment (Flag11-Sem) 7216 -- From_Aspect_Specification (Flag13-Sem) 7217 -- Is_Delayed_Aspect (Flag14-Sem) 7218 -- Address_Warning_Posted (Flag18-Sem) 7219 7220 -- Note: if From_Aspect_Specification is set, then Sloc points to the 7221 -- aspect name, and Entity is resolved already to reference the entity 7222 -- to which the aspect applies. 7223 7224 ----------------------------------- 7225 -- 13.3.1 Aspect Specifications -- 7226 ----------------------------------- 7227 7228 -- We modify the RM grammar here, the RM grammar is: 7229 7230 -- ASPECT_SPECIFICATION ::= 7231 -- with ASPECT_MARK [=> ASPECT_DEFINITION] {, 7232 -- ASPECT_MARK [=> ASPECT_DEFINITION] } 7233 7234 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7235 7236 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7237 7238 -- That's inconvenient, since there is no non-terminal name for a single 7239 -- entry in the list of aspects. So we use this grammar instead: 7240 7241 -- ASPECT_SPECIFICATIONS ::= 7242 -- with ASPECT_SPECIFICATION {, ASPECT_SPECIFICATION} 7243 7244 -- ASPECT_SPECIFICATION => 7245 -- ASPECT_MARK [=> ASPECT_DEFINITION] 7246 7247 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7248 7249 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7250 7251 -- Note that for Annotate, the ASPECT_DEFINITION is a pure positional 7252 -- aggregate with the elements of the aggregate corresponding to the 7253 -- successive arguments of the corresponding pragma. 7254 7255 -- See separate package Aspects for details on the incorporation of 7256 -- these nodes into the tree, and how aspect specifications for a given 7257 -- declaration node are associated with that node. 7258 7259 -- N_Aspect_Specification 7260 -- Sloc points to aspect identifier 7261 -- Identifier (Node1) aspect identifier 7262 -- Aspect_Rep_Item (Node2-Sem) 7263 -- Expression (Node3) Aspect_Definition (set to Empty if none) 7264 -- Entity (Node4-Sem) entity to which the aspect applies 7265 -- Next_Rep_Item (Node5-Sem) 7266 -- Class_Present (Flag6) Set if 'Class present 7267 -- Is_Ignored (Flag9-Sem) 7268 -- Is_Checked (Flag11-Sem) 7269 -- Is_Delayed_Aspect (Flag14-Sem) 7270 -- Is_Disabled (Flag15-Sem) 7271 -- Is_Boolean_Aspect (Flag16-Sem) 7272 -- Split_PPC (Flag17) Set if split pre/post attribute 7273 7274 -- Note: Aspect_Specification is an Ada 2012 feature 7275 7276 -- Note: The Identifier serves to identify the aspect involved (it 7277 -- is the aspect whose name corresponds to the Chars field). This 7278 -- means that the other fields of this identifier are unused, and 7279 -- in particular we use the Entity field of this identifier to save 7280 -- a copy of the expression for visibility analysis, see spec of 7281 -- Sem_Ch13 for full details of this usage. 7282 7283 -- In the case of aspects of the form xxx'Class, the aspect identifier 7284 -- is for xxx, and Class_Present is set to True. 7285 7286 -- Note: When a Pre or Post aspect specification is processed, it is 7287 -- broken into AND THEN sections. The left most section has Split_PPC 7288 -- set to False, indicating that it is the original specification (e.g. 7289 -- for posting errors). For the other sections, Split_PPC is set True. 7290 7291 --------------------------------------------- 7292 -- 13.4 Enumeration representation clause -- 7293 --------------------------------------------- 7294 7295 -- ENUMERATION_REPRESENTATION_CLAUSE ::= 7296 -- for first_subtype_LOCAL_NAME use ENUMERATION_AGGREGATE; 7297 7298 -- In Ada 83, the name must be a direct name 7299 7300 -- N_Enumeration_Representation_Clause 7301 -- Sloc points to FOR 7302 -- Identifier (Node1) direct name 7303 -- Array_Aggregate (Node3) 7304 -- Next_Rep_Item (Node5-Sem) 7305 7306 --------------------------------- 7307 -- 13.4 Enumeration aggregate -- 7308 --------------------------------- 7309 7310 -- ENUMERATION_AGGREGATE ::= ARRAY_AGGREGATE 7311 7312 ------------------------------------------ 7313 -- 13.5.1 Record representation clause -- 7314 ------------------------------------------ 7315 7316 -- RECORD_REPRESENTATION_CLAUSE ::= 7317 -- for first_subtype_LOCAL_NAME use 7318 -- record [MOD_CLAUSE] 7319 -- {COMPONENT_CLAUSE} 7320 -- end record; 7321 7322 -- Gigi restriction: Mod_Clause is always Empty (if present it is 7323 -- replaced by a corresponding Alignment attribute definition clause). 7324 7325 -- Note: Component_Clauses can include pragmas 7326 7327 -- N_Record_Representation_Clause 7328 -- Sloc points to FOR 7329 -- Identifier (Node1) direct name 7330 -- Mod_Clause (Node2) (set to Empty if no mod clause present) 7331 -- Component_Clauses (List3) 7332 -- Next_Rep_Item (Node5-Sem) 7333 7334 ------------------------------ 7335 -- 13.5.1 Component clause -- 7336 ------------------------------ 7337 7338 -- COMPONENT_CLAUSE ::= 7339 -- component_LOCAL_NAME at POSITION 7340 -- range FIRST_BIT .. LAST_BIT; 7341 7342 -- N_Component_Clause 7343 -- Sloc points to AT 7344 -- Component_Name (Node1) points to Name or Attribute_Reference 7345 -- Position (Node2) 7346 -- First_Bit (Node3) 7347 -- Last_Bit (Node4) 7348 7349 ---------------------- 7350 -- 13.5.1 Position -- 7351 ---------------------- 7352 7353 -- POSITION ::= static_EXPRESSION 7354 7355 ----------------------- 7356 -- 13.5.1 First_Bit -- 7357 ----------------------- 7358 7359 -- FIRST_BIT ::= static_SIMPLE_EXPRESSION 7360 7361 ---------------------- 7362 -- 13.5.1 Last_Bit -- 7363 ---------------------- 7364 7365 -- LAST_BIT ::= static_SIMPLE_EXPRESSION 7366 7367 -------------------------- 7368 -- 13.8 Code statement -- 7369 -------------------------- 7370 7371 -- CODE_STATEMENT ::= QUALIFIED_EXPRESSION; 7372 7373 -- Note: in GNAT, the qualified expression has the form 7374 7375 -- Asm_Insn'(Asm (...)); 7376 7377 -- See package System.Machine_Code in file s-maccod.ads for details on 7378 -- the allowed parameters to Asm. There are two ways this node can 7379 -- arise, as a code statement, in which case the expression is the 7380 -- qualified expression, or as a result of the expansion of an intrinsic 7381 -- call to the Asm or Asm_Input procedure. 7382 7383 -- N_Code_Statement 7384 -- Sloc points to first token of the expression 7385 -- Expression (Node3) 7386 7387 -- Note: package Exp_Code contains an abstract functional interface 7388 -- for use by Gigi in accessing the data from N_Code_Statement nodes. 7389 7390 ------------------------ 7391 -- 13.12 Restriction -- 7392 ------------------------ 7393 7394 -- RESTRICTION ::= 7395 -- restriction_IDENTIFIER 7396 -- | restriction_parameter_IDENTIFIER => EXPRESSION 7397 7398 -- There is no explicit node for restrictions. Instead the restriction 7399 -- appears in normal pragma syntax as a pragma argument association, 7400 -- which has the same syntactic form. 7401 7402 -------------------------- 7403 -- B.2 Shift Operators -- 7404 -------------------------- 7405 7406 -- Calls to the intrinsic shift functions are converted to one of 7407 -- the following shift nodes, which have the form of normal binary 7408 -- operator names. Note that for a given shift operation, one node 7409 -- covers all possible types, as for normal operators. 7410 7411 -- Note: it is perfectly permissible for the expander to generate 7412 -- shift operation nodes directly, in which case they will be analyzed 7413 -- and parsed in the usual manner. 7414 7415 -- Sprint syntax: shift-function-name!(expr, count) 7416 7417 -- Note: the Left_Opnd field holds the first argument (the value to 7418 -- be shifted). The Right_Opnd field holds the second argument (the 7419 -- shift count). The Chars field is the name of the intrinsic function. 7420 7421 -- N_Op_Rotate_Left 7422 -- Sloc points to the function name 7423 -- plus fields for binary operator 7424 -- plus fields for expression 7425 -- Shift_Count_OK (Flag4-Sem) 7426 7427 -- N_Op_Rotate_Right 7428 -- Sloc points to the function name 7429 -- plus fields for binary operator 7430 -- plus fields for expression 7431 -- Shift_Count_OK (Flag4-Sem) 7432 7433 -- N_Op_Shift_Left 7434 -- Sloc points to the function name 7435 -- plus fields for binary operator 7436 -- plus fields for expression 7437 -- Shift_Count_OK (Flag4-Sem) 7438 7439 -- N_Op_Shift_Right_Arithmetic 7440 -- Sloc points to the function name 7441 -- plus fields for binary operator 7442 -- plus fields for expression 7443 -- Shift_Count_OK (Flag4-Sem) 7444 7445 -- N_Op_Shift_Right 7446 -- Sloc points to the function name 7447 -- plus fields for binary operator 7448 -- plus fields for expression 7449 -- Shift_Count_OK (Flag4-Sem) 7450 7451 -- Note: N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic 7452 -- never appear in the expanded tree if Modify_Tree_For_C mode is set. 7453 7454 -- Note: For N_Op_Shift_Left and N_Op_Shift_Right, the right operand is 7455 -- always less than the word size if Modify_Tree_For_C mode is set. 7456 7457 -------------------------- 7458 -- Obsolescent Features -- 7459 -------------------------- 7460 7461 -- The syntax descriptions and tree nodes for obsolescent features are 7462 -- grouped together, corresponding to their location in appendix I in 7463 -- the RM. However, parsing and semantic analysis for these constructs 7464 -- is located in an appropriate chapter (see individual notes). 7465 7466 --------------------------- 7467 -- J.3 Delta Constraint -- 7468 --------------------------- 7469 7470 -- Note: the parse routine for this construct is located in section 7471 -- 3.5.9 of Par-Ch3, and semantic analysis is in Sem_Ch3, which is 7472 -- where delta constraint logically belongs. 7473 7474 -- DELTA_CONSTRAINT ::= DELTA static_EXPRESSION [RANGE_CONSTRAINT] 7475 7476 -- N_Delta_Constraint 7477 -- Sloc points to DELTA 7478 -- Delta_Expression (Node3) 7479 -- Range_Constraint (Node4) (set to Empty if not present) 7480 7481 -------------------- 7482 -- J.7 At Clause -- 7483 -------------------- 7484 7485 -- AT_CLAUSE ::= for DIRECT_NAME use at EXPRESSION; 7486 7487 -- Note: the parse routine for this construct is located in Par-Ch13, 7488 -- and the semantic analysis is in Sem_Ch13, where at clause logically 7489 -- belongs if it were not obsolescent. 7490 7491 -- Note: in Ada 83 the expression must be a simple expression 7492 7493 -- Gigi restriction: This node never appears, it is rewritten as an 7494 -- address attribute definition clause. 7495 7496 -- N_At_Clause 7497 -- Sloc points to FOR 7498 -- Identifier (Node1) 7499 -- Expression (Node3) 7500 7501 --------------------- 7502 -- J.8 Mod clause -- 7503 --------------------- 7504 7505 -- MOD_CLAUSE ::= at mod static_EXPRESSION; 7506 7507 -- Note: the parse routine for this construct is located in Par-Ch13, 7508 -- and the semantic analysis is in Sem_Ch13, where mod clause logically 7509 -- belongs if it were not obsolescent. 7510 7511 -- Note: in Ada 83, the expression must be a simple expression 7512 7513 -- Gigi restriction: this node never appears. It is replaced 7514 -- by a corresponding Alignment attribute definition clause. 7515 7516 -- Note: pragmas can appear before and after the MOD_CLAUSE since 7517 -- its name has "clause" in it. This is rather strange, but is quite 7518 -- definitely specified. The pragmas before are collected in the 7519 -- Pragmas_Before field of the mod clause node itself, and pragmas 7520 -- after are simply swallowed up in the list of component clauses. 7521 7522 -- N_Mod_Clause 7523 -- Sloc points to AT 7524 -- Expression (Node3) 7525 -- Pragmas_Before (List4) Pragmas before mod clause (No_List if none) 7526 7527 -------------------- 7528 -- Semantic Nodes -- 7529 -------------------- 7530 7531 -- These semantic nodes are used to hold additional semantic information. 7532 -- They are inserted into the tree as a result of semantic processing. 7533 -- Although there are no legitimate source syntax constructions that 7534 -- correspond directly to these nodes, we need a source syntax for the 7535 -- reconstructed tree printed by Sprint, and the node descriptions here 7536 -- show this syntax. 7537 7538 ------------------------ 7539 -- Compound Statement -- 7540 ------------------------ 7541 7542 -- This node is created by the analyzer/expander to handle some 7543 -- expansion cases where a sequence of actions needs to be captured 7544 -- within a single node (which acts as a container and allows the 7545 -- entire list of actions to be moved around as a whole) appearing 7546 -- in a sequence of statements. 7547 7548 -- This is the statement counterpart to the expression node 7549 -- N_Expression_With_Actions. 7550 7551 -- The required semantics is that the set of actions is executed in 7552 -- the order in which it appears, as though they appeared by themselves 7553 -- in the enclosing list of declarations of statements. Unlike what 7554 -- happens when using an N_Block_Statement, no new scope is introduced. 7555 7556 -- Note: for the time being, this is used only as a transient 7557 -- representation during expansion, and all compound statement nodes 7558 -- must be exploded back to their constituent statements before handing 7559 -- the tree to the back end. 7560 7561 -- Sprint syntax: do 7562 -- action; 7563 -- action; 7564 -- ... 7565 -- action; 7566 -- end; 7567 7568 -- N_Compound_Statement 7569 -- Actions (List1) 7570 7571 -------------- 7572 -- Contract -- 7573 -------------- 7574 7575 -- This node is used to hold the various parts of an entry, subprogram 7576 -- [body] or package [body] contract, in particular: 7577 -- Abstract states declared by a package declaration 7578 -- Contract cases that apply to a subprogram 7579 -- Dependency relations of inputs and output of a subprogram 7580 -- Global annotations classifying data as input or output 7581 -- Initialization sequences for a package declaration 7582 -- Pre- and postconditions that apply to a subprogram 7583 7584 -- The node appears in an entry and [generic] subprogram [body] entity. 7585 7586 -- Sprint syntax: <none> as the node should not appear in the tree, but 7587 -- only attached to an entry or [generic] subprogram 7588 -- entity. 7589 7590 -- N_Contract 7591 -- Sloc points to the subprogram's name 7592 -- Pre_Post_Conditions (Node1-Sem) (set to Empty if none) 7593 -- Contract_Test_Cases (Node2-Sem) (set to Empty if none) 7594 -- Classifications (Node3-Sem) (set to Empty if none) 7595 -- Is_Expanded_Contract (Flag1-Sem) 7596 7597 -- Pre_Post_Conditions contains a collection of pragmas that correspond 7598 -- to pre- and postconditions associated with an entry or a subprogram 7599 -- [body or stub]. The pragmas can either come from source or be the 7600 -- byproduct of aspect expansion. Currently the following pragmas appear 7601 -- in this list: 7602 -- Post 7603 -- Postcondition 7604 -- Pre 7605 -- Precondition 7606 -- Refined_Post 7607 -- The ordering in the list is in LIFO fashion. 7608 7609 -- Note that there might be multiple preconditions or postconditions 7610 -- in this list, either because they come from separate pragmas in the 7611 -- source, or because a Pre (resp. Post) aspect specification has been 7612 -- broken into AND THEN sections. See Split_PPC for details. 7613 7614 -- Contract_Test_Cases contains a collection of pragmas that correspond 7615 -- to aspects/pragmas Contract_Cases and Test_Case. The ordering in the 7616 -- list is in LIFO fashion. 7617 7618 -- Classifications contains pragmas that either declare, categorize or 7619 -- establish dependencies between subprogram or package inputs and 7620 -- outputs. Currently the following pragmas appear in this list: 7621 -- Abstract_States 7622 -- Async_Readers 7623 -- Async_Writers 7624 -- Constant_After_Elaboration 7625 -- Depends 7626 -- Effective_Reads 7627 -- Effective_Writes 7628 -- Extensions_Visible 7629 -- Global 7630 -- Initial_Condition 7631 -- Initializes 7632 -- Part_Of 7633 -- Refined_Depends 7634 -- Refined_Global 7635 -- Refined_States 7636 -- Volatile_Function 7637 -- The ordering is in LIFO fashion. 7638 7639 ------------------- 7640 -- Expanded Name -- 7641 ------------------- 7642 7643 -- The N_Expanded_Name node is used to represent a selected component 7644 -- name that has been resolved to an expanded name. The semantic phase 7645 -- replaces N_Selected_Component nodes that represent names by the use 7646 -- of this node, leaving the N_Selected_Component node used only when 7647 -- the prefix is a record or protected type. 7648 7649 -- The fields of the N_Expanded_Name node are layed out identically 7650 -- to those of the N_Selected_Component node, allowing conversion of 7651 -- an expanded name node to a selected component node to be done 7652 -- easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name. 7653 7654 -- There is no special sprint syntax for an expanded name 7655 7656 -- N_Expanded_Name 7657 -- Sloc points to the period 7658 -- Chars (Name1) copy of Chars field of selector name 7659 -- Prefix (Node3) 7660 -- Selector_Name (Node2) 7661 -- Entity (Node4-Sem) 7662 -- Associated_Node (Node4-Sem) 7663 -- Has_Private_View (Flag11-Sem) set in generic units. 7664 -- Redundant_Use (Flag13-Sem) 7665 -- Atomic_Sync_Required (Flag14-Sem) 7666 -- plus fields for expression 7667 7668 ----------------------------- 7669 -- Expression With Actions -- 7670 ----------------------------- 7671 7672 -- This node is created by the analyzer/expander to handle some 7673 -- expansion cases, notably short circuit forms where there are 7674 -- actions associated with the right-hand side operand. 7675 7676 -- The N_Expression_With_Actions node represents an expression with 7677 -- an associated set of actions (which are executable statements and 7678 -- declarations, as might occur in a handled statement sequence). 7679 7680 -- The required semantics is that the set of actions is executed in 7681 -- the order in which it appears just before the expression is 7682 -- evaluated (and these actions must only be executed if the value 7683 -- of the expression is evaluated). The node is considered to be 7684 -- a subexpression, whose value is the value of the Expression after 7685 -- executing all the actions. 7686 7687 -- If the actions contain declarations, then these declarations may 7688 -- be referenced within the expression. However note that there is 7689 -- no proper scope associated with the expression-with-action, so the 7690 -- back-end will elaborate them in the context of the enclosing scope. 7691 7692 -- Sprint syntax: do 7693 -- action; 7694 -- action; 7695 -- ... 7696 -- action; 7697 -- in expression end 7698 7699 -- N_Expression_With_Actions 7700 -- Actions (List1) 7701 -- Expression (Node3) 7702 -- plus fields for expression 7703 7704 -- Note: In the final generated tree presented to the code generator, 7705 -- the actions list is always non-null, since there is no point in this 7706 -- node if the actions are Empty. During semantic analysis there are 7707 -- cases where it is convenient to temporarily generate an empty actions 7708 -- list. This arises in cases where we create such an empty actions 7709 -- list, and it may or may not end up being a place where additional 7710 -- actions are inserted. The expander removes such empty cases after 7711 -- the expression of the node is fully analyzed and expanded, at which 7712 -- point it is safe to remove it, since no more actions can be inserted. 7713 7714 -- Note: In Modify_Tree_For_C, we never generate any declarations in 7715 -- the action list, which can contain only non-declarative statements. 7716 7717 -------------------- 7718 -- Free Statement -- 7719 -------------------- 7720 7721 -- The N_Free_Statement node is generated as a result of a call to an 7722 -- instantiation of Unchecked_Deallocation. The instantiation of this 7723 -- generic is handled specially and generates this node directly. 7724 7725 -- Sprint syntax: free expression 7726 7727 -- N_Free_Statement 7728 -- Sloc is copied from the unchecked deallocation call 7729 -- Expression (Node3) argument to unchecked deallocation call 7730 -- Storage_Pool (Node1-Sem) 7731 -- Procedure_To_Call (Node2-Sem) 7732 -- Actual_Designated_Subtype (Node4-Sem) 7733 7734 -- Note: in the case where a debug source file is generated, the Sloc 7735 -- for this node points to the FREE keyword in the Sprint file output. 7736 7737 ------------------- 7738 -- Freeze Entity -- 7739 ------------------- 7740 7741 -- This node marks the point in a declarative part at which an entity 7742 -- declared therein becomes frozen. The expander places initialization 7743 -- procedures for types at those points. Gigi uses the freezing point 7744 -- to elaborate entities that may depend on previous private types. 7745 7746 -- See the section in Einfo "Delayed Freezing and Elaboration" for 7747 -- a full description of the use of this node. 7748 7749 -- The Entity field points back to the entity for the type (whose 7750 -- Freeze_Node field points back to this freeze node). 7751 7752 -- The Actions field contains a list of declarations and statements 7753 -- generated by the expander which are associated with the freeze 7754 -- node, and are elaborated as though the freeze node were replaced 7755 -- by this sequence of actions. 7756 7757 -- Note: the Sloc field in the freeze node references a construct 7758 -- associated with the freezing point. This is used for posting 7759 -- messages in some error/warning situations, e.g. the case where 7760 -- a primitive operation of a tagged type is declared too late. 7761 7762 -- Sprint syntax: freeze entity-name [ 7763 -- freeze actions 7764 -- ] 7765 7766 -- N_Freeze_Entity 7767 -- Sloc points near freeze point (see above special note) 7768 -- Entity (Node4-Sem) 7769 -- Access_Types_To_Process (Elist2-Sem) (set to No_Elist if none) 7770 -- TSS_Elist (Elist3-Sem) (set to No_Elist if no associated TSS's) 7771 -- Actions (List1) (set to No_List if no freeze actions) 7772 -- First_Subtype_Link (Node5-Sem) (set to Empty if no link) 7773 7774 -- The Actions field holds actions associated with the freeze. These 7775 -- actions are elaborated at the point where the type is frozen. 7776 7777 -- Note: in the case where a debug source file is generated, the Sloc 7778 -- for this node points to the FREEZE keyword in the Sprint file output. 7779 7780 --------------------------- 7781 -- Freeze Generic Entity -- 7782 --------------------------- 7783 7784 -- The freeze point of an entity indicates the point at which the 7785 -- information needed to generate code for the entity is complete. 7786 -- The freeze node for an entity triggers expander activities, such as 7787 -- build initialization procedures, and backend activities, such as 7788 -- completing the elaboration of packages. 7789 7790 -- For entities declared within a generic unit, for which no code is 7791 -- generated, the freeze point is not equally meaningful. However, in 7792 -- Ada 2012 several semantic checks on declarations must be delayed to 7793 -- the freeze point, and we need to include such a mark in the tree to 7794 -- trigger these checks. The Freeze_Generic_Entity node plays no other 7795 -- role, and is ignored by the expander and the back-end. 7796 7797 -- Sprint syntax: freeze_generic entity-name 7798 7799 -- N_Freeze_Generic_Entity 7800 -- Sloc points near freeze point 7801 -- Entity (Node4-Sem) 7802 7803 -------------------------------- 7804 -- Implicit Label Declaration -- 7805 -------------------------------- 7806 7807 -- An implicit label declaration is created for every occurrence of a 7808 -- label on a statement or a label on a block or loop. It is chained 7809 -- in the declarations of the innermost enclosing block as specified 7810 -- in RM section 5.1 (3). 7811 7812 -- The Defining_Identifier is the actual identifier for the statement 7813 -- identifier. Note that the occurrence of the label is a reference, NOT 7814 -- the defining occurrence. The defining occurrence occurs at the head 7815 -- of the innermost enclosing block, and is represented by this node. 7816 7817 -- Note: from the grammar, this might better be called an implicit 7818 -- statement identifier declaration, but the term we choose seems 7819 -- friendlier, since at least informally statement identifiers are 7820 -- called labels in both cases (i.e. when used in labels, and when 7821 -- used as the identifiers of blocks and loops). 7822 7823 -- Note: although this is logically a semantic node, since it does not 7824 -- correspond directly to a source syntax construction, these nodes are 7825 -- actually created by the parser in a post pass done just after parsing 7826 -- is complete, before semantic analysis is started (see Par.Labl). 7827 7828 -- Sprint syntax: labelname : label; 7829 7830 -- N_Implicit_Label_Declaration 7831 -- Sloc points to the << token for a statement identifier, or to the 7832 -- LOOP, DECLARE, or BEGIN token for a loop or block identifier 7833 -- Defining_Identifier (Node1) 7834 -- Label_Construct (Node2-Sem) 7835 7836 -- Note: in the case where a debug source file is generated, the Sloc 7837 -- for this node points to the label name in the generated declaration. 7838 7839 --------------------- 7840 -- Itype Reference -- 7841 --------------------- 7842 7843 -- This node is used to create a reference to an Itype. The only purpose 7844 -- is to make sure the Itype is defined if this is the first reference. 7845 7846 -- A typical use of this node is when an Itype is to be referenced in 7847 -- two branches of an IF statement. In this case it is important that 7848 -- the first use of the Itype not be inside the conditional, since then 7849 -- it might not be defined if the other branch of the IF is taken, in 7850 -- the case where the definition generates elaboration code. 7851 7852 -- The Itype field points to the referenced Itype 7853 7854 -- Sprint syntax: reference itype-name 7855 7856 -- N_Itype_Reference 7857 -- Sloc points to the node generating the reference 7858 -- Itype (Node1-Sem) 7859 7860 -- Note: in the case where a debug source file is generated, the Sloc 7861 -- for this node points to the REFERENCE keyword in the file output. 7862 7863 --------------------- 7864 -- Raise xxx Error -- 7865 --------------------- 7866 7867 -- One of these nodes is created during semantic analysis to replace 7868 -- a node for an expression that is determined to definitely raise 7869 -- the corresponding exception. 7870 7871 -- The N_Raise_xxx_Error node may also stand alone in place 7872 -- of a declaration or statement, in which case it simply causes 7873 -- the exception to be raised (i.e. it is equivalent to a raise 7874 -- statement that raises the corresponding exception). This use 7875 -- is distinguished by the fact that the Etype in this case is 7876 -- Standard_Void_Type; in the subexpression case, the Etype is the 7877 -- same as the type of the subexpression which it replaces. 7878 7879 -- If Condition is empty, then the raise is unconditional. If the 7880 -- Condition field is non-empty, it is a boolean expression which 7881 -- is first evaluated, and the exception is raised only if the 7882 -- value of the expression is True. In the unconditional case, the 7883 -- creation of this node is usually accompanied by a warning message 7884 -- error. The creation of this node will usually be accompanied by a 7885 -- message (unless it appears within the right operand of a short 7886 -- circuit form whose left argument is static and decisively 7887 -- eliminates elaboration of the raise operation. The condition field 7888 -- can ONLY be present when the node is used as a statement form, it 7889 -- may NOT be present in the case where the node appears within an 7890 -- expression. 7891 7892 -- The exception is generated with a message that contains the 7893 -- file name and line number, and then appended text. The Reason 7894 -- code shows the text to be added. The Reason code is an element 7895 -- of the type Types.RT_Exception_Code, and indicates both the 7896 -- message to be added, and the exception to be raised (which must 7897 -- match the node type). The value is stored by storing a Uint which 7898 -- is the Pos value of the enumeration element in this type. 7899 7900 -- Gigi restriction: This expander ensures that the type of the 7901 -- Condition field is always Standard.Boolean, even if the type 7902 -- in the source is some non-standard boolean type. 7903 7904 -- Sprint syntax: [xxx_error "msg"] 7905 -- or: [xxx_error when condition "msg"] 7906 7907 -- N_Raise_Constraint_Error 7908 -- Sloc references related construct 7909 -- Condition (Node1) (set to Empty if no condition) 7910 -- Reason (Uint3) 7911 -- plus fields for expression 7912 7913 -- N_Raise_Program_Error 7914 -- Sloc references related construct 7915 -- Condition (Node1) (set to Empty if no condition) 7916 -- Reason (Uint3) 7917 -- plus fields for expression 7918 7919 -- N_Raise_Storage_Error 7920 -- Sloc references related construct 7921 -- Condition (Node1) (set to Empty if no condition) 7922 -- Reason (Uint3) 7923 -- plus fields for expression 7924 7925 -- Note: Sloc is copied from the expression generating the exception. 7926 -- In the case where a debug source file is generated, the Sloc for 7927 -- this node points to the left bracket in the Sprint file output. 7928 7929 -- Note: the back end may be required to translate these nodes into 7930 -- appropriate goto statements. See description of N_Push/Pop_xxx_Label. 7931 7932 --------------------------------------------- 7933 -- Optimization of Exception Raise to Goto -- 7934 --------------------------------------------- 7935 7936 -- In some cases, the front end will determine that any exception raised 7937 -- by the back end for a certain exception should be transformed into a 7938 -- goto statement. 7939 7940 -- There are three kinds of exceptions raised by the back end (note that 7941 -- for this purpose we consider gigi to be part of the back end in the 7942 -- gcc case): 7943 7944 -- 1. Exceptions resulting from N_Raise_xxx_Error nodes 7945 -- 2. Exceptions from checks triggered by Do_xxx_Check flags 7946 -- 3. Other cases not specifically marked by the front end 7947 7948 -- Normally all such exceptions are translated into calls to the proper 7949 -- Rcheck_xx procedure, where xx encodes both the exception to be raised 7950 -- and the exception message. 7951 7952 -- The front end may determine that for a particular sequence of code, 7953 -- exceptions in any of these three categories for a particular builtin 7954 -- exception should result in a goto, rather than a call to Rcheck_xx. 7955 -- The exact sequence to be generated is: 7956 7957 -- Local_Raise (exception'Identity); 7958 -- goto Label 7959 7960 -- The front end marks such a sequence of code by bracketing it with 7961 -- push and pop nodes: 7962 7963 -- N_Push_xxx_Label (referencing the label) 7964 -- ... 7965 -- (code where transformation is expected for exception xxx) 7966 -- ... 7967 -- N_Pop_xxx_Label 7968 7969 -- The use of push/pop reflects the fact that such regions can properly 7970 -- nest, and one special case is a subregion in which no transformation 7971 -- is allowed. Such a region is marked by a N_Push_xxx_Label node whose 7972 -- Exception_Label field is Empty. 7973 7974 -- N_Push_Constraint_Error_Label 7975 -- Sloc references first statement in region covered 7976 -- Exception_Label (Node5-Sem) 7977 7978 -- N_Push_Program_Error_Label 7979 -- Sloc references first statement in region covered 7980 -- Exception_Label (Node5-Sem) 7981 7982 -- N_Push_Storage_Error_Label 7983 -- Sloc references first statement in region covered 7984 -- Exception_Label (Node5-Sem) 7985 7986 -- N_Pop_Constraint_Error_Label 7987 -- Sloc references last statement in region covered 7988 7989 -- N_Pop_Program_Error_Label 7990 -- Sloc references last statement in region covered 7991 7992 -- N_Pop_Storage_Error_Label 7993 -- Sloc references last statement in region covered 7994 7995 --------------- 7996 -- Reference -- 7997 --------------- 7998 7999 -- For a number of purposes, we need to construct references to objects. 8000 -- These references are subsequently treated as normal access values. 8001 -- An example is the construction of the parameter block passed to a 8002 -- task entry. The N_Reference node is provided for this purpose. It is 8003 -- similar in effect to the use of the Unrestricted_Access attribute, 8004 -- and like Unrestricted_Access can be applied to objects which would 8005 -- not be valid prefixes for the Unchecked_Access attribute (e.g. 8006 -- objects which are not aliased, and slices). In addition it can be 8007 -- applied to composite type values as well as objects, including string 8008 -- values and aggregates. 8009 8010 -- Note: we use the Prefix field for this expression so that the 8011 -- resulting node can be treated using common code with the attribute 8012 -- nodes for the 'Access and related attributes. Logically it would make 8013 -- more sense to call it an Expression field, but then we would have to 8014 -- special case the treatment of the N_Reference node. 8015 8016 -- Note: evaluating a N_Reference node is guaranteed to yield a non-null 8017 -- value at run time. Therefore, it is valid to set Is_Known_Non_Null on 8018 -- a temporary initialized to a N_Reference node in order to eliminate 8019 -- superfluous access checks. 8020 8021 -- Sprint syntax: prefix'reference 8022 8023 -- N_Reference 8024 -- Sloc is copied from the expression 8025 -- Prefix (Node3) 8026 -- plus fields for expression 8027 8028 -- Note: in the case where a debug source file is generated, the Sloc 8029 -- for this node points to the quote in the Sprint file output. 8030 8031 ---------------- 8032 -- SCIL Nodes -- 8033 ---------------- 8034 8035 -- SCIL nodes are special nodes added to the tree when the CodePeer mode 8036 -- is active. They are only generated if SCIL generation is enabled. 8037 -- A standard tree-walk will not encounter these nodes even if they 8038 -- are present; these nodes are only accessible via the function 8039 -- SCIL_LL.Get_SCIL_Node. These nodes have no associated dynamic 8040 -- semantics. 8041 8042 -- Sprint syntax: [ <node kind> ] 8043 -- No semantic field values are displayed. 8044 8045 -- N_SCIL_Dispatch_Table_Tag_Init 8046 -- Sloc references a node for a tag initialization 8047 -- SCIL_Entity (Node4-Sem) 8048 -- 8049 -- An N_SCIL_Dispatch_Table_Tag_Init node may be associated (via 8050 -- Get_SCIL_Node) with the N_Object_Declaration node corresponding to 8051 -- the declaration of the dispatch table for a tagged type. 8052 8053 -- N_SCIL_Dispatching_Call 8054 -- Sloc references the node of a dispatching call 8055 -- SCIL_Target_Prim (Node2-Sem) 8056 -- SCIL_Entity (Node4-Sem) 8057 -- SCIL_Controlling_Tag (Node5-Sem) 8058 -- 8059 -- An N_Scil_Dispatching call node may be associated (via Get_SCIL_Node) 8060 -- with the N_Procedure_Call_Statement or N_Function_Call node (or a 8061 -- rewriting thereof) corresponding to a dispatching call. 8062 8063 -- N_SCIL_Membership_Test 8064 -- Sloc references the node of a membership test 8065 -- SCIL_Tag_Value (Node5-Sem) 8066 -- SCIL_Entity (Node4-Sem) 8067 -- 8068 -- An N_Scil_Membership_Test node may be associated (via Get_SCIL_Node) 8069 -- with the N_In node (or a rewriting thereof) corresponding to a 8070 -- classwide membership test. 8071 8072 -------------------------- 8073 -- Unchecked Expression -- 8074 -------------------------- 8075 8076 -- An unchecked expression is one that must be analyzed and resolved 8077 -- with all checks off, regardless of the current setting of scope 8078 -- suppress flags. 8079 8080 -- Sprint syntax: `(expression) 8081 8082 -- Note: this node is always removed from the tree (and replaced by 8083 -- its constituent expression) on completion of analysis, so it only 8084 -- appears in intermediate trees, and will never be seen by Gigi. 8085 8086 -- N_Unchecked_Expression 8087 -- Sloc is a copy of the Sloc of the expression 8088 -- Expression (Node3) 8089 -- plus fields for expression 8090 8091 -- Note: in the case where a debug source file is generated, the Sloc 8092 -- for this node points to the back quote in the Sprint file output. 8093 8094 ------------------------------- 8095 -- Unchecked Type Conversion -- 8096 ------------------------------- 8097 8098 -- An unchecked type conversion node represents the semantic action 8099 -- corresponding to a call to an instantiation of Unchecked_Conversion. 8100 -- It is generated as a result of actual use of Unchecked_Conversion 8101 -- and also the expander generates unchecked type conversion nodes 8102 -- directly for expansion of complex semantic actions. 8103 8104 -- Note: an unchecked type conversion is a variable as far as the 8105 -- semantics are concerned, which is convenient for the expander. 8106 -- This does not change what Ada source programs are legal, since 8107 -- clearly a function call to an instantiation of Unchecked_Conversion 8108 -- is not a variable in any case. 8109 8110 -- Sprint syntax: subtype-mark!(expression) 8111 8112 -- N_Unchecked_Type_Conversion 8113 -- Sloc points to related node in source 8114 -- Subtype_Mark (Node4) 8115 -- Expression (Node3) 8116 -- Kill_Range_Check (Flag11-Sem) 8117 -- No_Truncation (Flag17-Sem) 8118 -- plus fields for expression 8119 8120 -- Note: in the case where a debug source file is generated, the Sloc 8121 -- for this node points to the exclamation in the Sprint file output. 8122 8123 ----------------------------------- 8124 -- Validate_Unchecked_Conversion -- 8125 ----------------------------------- 8126 8127 -- The front end does most of the validation of unchecked conversion, 8128 -- including checking sizes (this is done after the back end is called 8129 -- to take advantage of back-annotation of calculated sizes). 8130 8131 -- The front end also deals with specific cases that are not allowed 8132 -- e.g. involving unconstrained array types. 8133 8134 -- For the case of the standard gigi backend, this means that all 8135 -- checks are done in the front end. 8136 8137 -- However, in the case of specialized back-ends, in particular the JVM 8138 -- backend in the past, additional requirements and restrictions may 8139 -- apply to unchecked conversion, and these are most conveniently 8140 -- performed in the specialized back-end. 8141 8142 -- To accommodate this requirement, for such back ends, the following 8143 -- special node is generated recording an unchecked conversion that 8144 -- needs to be validated. The back end should post an appropriate 8145 -- error message if the unchecked conversion is invalid or warrants 8146 -- a special warning message. 8147 8148 -- Source_Type and Target_Type point to the entities for the two 8149 -- types involved in the unchecked conversion instantiation that 8150 -- is to be validated. 8151 8152 -- Sprint syntax: validate Unchecked_Conversion (source, target); 8153 8154 -- N_Validate_Unchecked_Conversion 8155 -- Sloc points to instantiation (location for warning message) 8156 -- Source_Type (Node1-Sem) 8157 -- Target_Type (Node2-Sem) 8158 8159 -- Note: in the case where a debug source file is generated, the Sloc 8160 -- for this node points to the VALIDATE keyword in the file output. 8161 8162 ----------- 8163 -- Empty -- 8164 ----------- 8165 8166 -- Used as the contents of the Nkind field of the dummy Empty node 8167 -- and in some other situations to indicate an uninitialized value. 8168 8169 -- N_Empty 8170 -- Chars (Name1) is set to No_Name 8171 8172 ----------- 8173 -- Error -- 8174 ----------- 8175 8176 -- Used as the contents of the Nkind field of the dummy Error node. 8177 -- Has an Etype field, which gets set to Any_Type later on, to help 8178 -- error recovery (Error_Posted is also set in the Error node). 8179 8180 -- N_Error 8181 -- Chars (Name1) is set to Error_Name 8182 -- Etype (Node5-Sem) 8183 8184 -------------------------- 8185 -- Node Type Definition -- 8186 -------------------------- 8187 8188 -- The following is the definition of the Node_Kind type. As previously 8189 -- discussed, this is separated off to allow rearrangement of the order to 8190 -- facilitate definition of subtype ranges. The comments show the subtype 8191 -- classes which apply to each set of node kinds. The first entry in the 8192 -- comment characterizes the following list of nodes. 8193 8194 type Node_Kind is ( 8195 N_Unused_At_Start, 8196 8197 -- N_Representation_Clause 8198 8199 N_At_Clause, 8200 N_Component_Clause, 8201 N_Enumeration_Representation_Clause, 8202 N_Mod_Clause, 8203 N_Record_Representation_Clause, 8204 8205 -- N_Representation_Clause, N_Has_Chars 8206 8207 N_Attribute_Definition_Clause, 8208 8209 -- N_Has_Chars 8210 8211 N_Empty, 8212 N_Pragma_Argument_Association, 8213 8214 -- N_Has_Etype, N_Has_Chars 8215 8216 -- Note: of course N_Error does not really have Etype or Chars fields, 8217 -- and any attempt to access these fields in N_Error will cause an 8218 -- error, but historically this always has been positioned so that an 8219 -- "in N_Has_Chars" or "in N_Has_Etype" test yields true for N_Error. 8220 -- Most likely this makes coding easier somewhere but still seems 8221 -- undesirable. To be investigated some time ??? 8222 8223 N_Error, 8224 8225 -- N_Entity, N_Has_Etype, N_Has_Chars 8226 8227 N_Defining_Character_Literal, 8228 N_Defining_Identifier, 8229 N_Defining_Operator_Symbol, 8230 8231 -- N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity 8232 8233 N_Expanded_Name, 8234 8235 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 8236 -- N_Has_Chars, N_Has_Entity 8237 8238 N_Identifier, 8239 N_Operator_Symbol, 8240 8241 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 8242 -- N_Has_Chars, N_Has_Entity 8243 8244 N_Character_Literal, 8245 8246 -- N_Binary_Op, N_Op, N_Subexpr, 8247 -- N_Has_Etype, N_Has_Chars, N_Has_Entity 8248 8249 N_Op_Add, 8250 N_Op_Concat, 8251 N_Op_Expon, 8252 N_Op_Subtract, 8253 8254 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Treat_Fixed_As_Integer 8255 -- N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator 8256 8257 N_Op_Divide, 8258 N_Op_Mod, 8259 N_Op_Multiply, 8260 N_Op_Rem, 8261 8262 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8263 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8264 8265 N_Op_And, 8266 8267 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8268 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare 8269 8270 N_Op_Eq, 8271 N_Op_Ge, 8272 N_Op_Gt, 8273 N_Op_Le, 8274 N_Op_Lt, 8275 N_Op_Ne, 8276 8277 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8278 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8279 8280 N_Op_Or, 8281 N_Op_Xor, 8282 8283 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype, 8284 -- N_Op_Shift, N_Has_Chars, N_Has_Entity 8285 8286 N_Op_Rotate_Left, 8287 N_Op_Rotate_Right, 8288 N_Op_Shift_Left, 8289 N_Op_Shift_Right, 8290 N_Op_Shift_Right_Arithmetic, 8291 8292 -- N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype, 8293 -- N_Has_Chars, N_Has_Entity 8294 8295 N_Op_Abs, 8296 N_Op_Minus, 8297 N_Op_Not, 8298 N_Op_Plus, 8299 8300 -- N_Subexpr, N_Has_Etype, N_Has_Entity 8301 8302 N_Attribute_Reference, 8303 8304 -- N_Subexpr, N_Has_Etype, N_Membership_Test 8305 8306 N_In, 8307 N_Not_In, 8308 8309 -- N_Subexpr, N_Has_Etype, N_Short_Circuit 8310 8311 N_And_Then, 8312 N_Or_Else, 8313 8314 -- N_Subexpr, N_Has_Etype, N_Subprogram_Call 8315 8316 N_Function_Call, 8317 N_Procedure_Call_Statement, 8318 8319 -- N_Subexpr, N_Has_Etype, N_Raise_xxx_Error 8320 8321 N_Raise_Constraint_Error, 8322 N_Raise_Program_Error, 8323 N_Raise_Storage_Error, 8324 8325 -- N_Subexpr, N_Has_Etype, N_Numeric_Or_String_Literal 8326 8327 N_Integer_Literal, 8328 N_Real_Literal, 8329 N_String_Literal, 8330 8331 -- N_Subexpr, N_Has_Etype 8332 8333 N_Explicit_Dereference, 8334 N_Expression_With_Actions, 8335 N_If_Expression, 8336 N_Indexed_Component, 8337 N_Null, 8338 N_Qualified_Expression, 8339 N_Quantified_Expression, 8340 N_Aggregate, 8341 N_Allocator, 8342 N_Case_Expression, 8343 N_Extension_Aggregate, 8344 N_Raise_Expression, 8345 N_Range, 8346 N_Reference, 8347 N_Selected_Component, 8348 N_Slice, 8349 N_Type_Conversion, 8350 N_Unchecked_Expression, 8351 N_Unchecked_Type_Conversion, 8352 8353 -- N_Has_Etype 8354 8355 N_Subtype_Indication, 8356 8357 -- N_Declaration 8358 8359 N_Component_Declaration, 8360 N_Entry_Declaration, 8361 N_Expression_Function, 8362 N_Formal_Object_Declaration, 8363 N_Formal_Type_Declaration, 8364 N_Full_Type_Declaration, 8365 N_Incomplete_Type_Declaration, 8366 N_Iterator_Specification, 8367 N_Loop_Parameter_Specification, 8368 N_Object_Declaration, 8369 N_Protected_Type_Declaration, 8370 N_Private_Extension_Declaration, 8371 N_Private_Type_Declaration, 8372 N_Subtype_Declaration, 8373 8374 -- N_Subprogram_Specification, N_Declaration 8375 8376 N_Function_Specification, 8377 N_Procedure_Specification, 8378 8379 -- N_Access_To_Subprogram_Definition 8380 8381 N_Access_Function_Definition, 8382 N_Access_Procedure_Definition, 8383 8384 -- N_Later_Decl_Item 8385 8386 N_Task_Type_Declaration, 8387 8388 -- N_Body_Stub, N_Later_Decl_Item 8389 8390 N_Package_Body_Stub, 8391 N_Protected_Body_Stub, 8392 N_Subprogram_Body_Stub, 8393 N_Task_Body_Stub, 8394 8395 -- N_Generic_Instantiation, N_Later_Decl_Item 8396 -- N_Subprogram_Instantiation 8397 8398 N_Function_Instantiation, 8399 N_Procedure_Instantiation, 8400 8401 -- N_Generic_Instantiation, N_Later_Decl_Item 8402 8403 N_Package_Instantiation, 8404 8405 -- N_Unit_Body, N_Later_Decl_Item, N_Proper_Body 8406 8407 N_Package_Body, 8408 N_Subprogram_Body, 8409 8410 -- N_Later_Decl_Item, N_Proper_Body 8411 8412 N_Protected_Body, 8413 N_Task_Body, 8414 8415 -- N_Later_Decl_Item 8416 8417 N_Implicit_Label_Declaration, 8418 N_Package_Declaration, 8419 N_Single_Task_Declaration, 8420 N_Subprogram_Declaration, 8421 N_Use_Package_Clause, 8422 8423 -- N_Generic_Declaration, N_Later_Decl_Item 8424 8425 N_Generic_Package_Declaration, 8426 N_Generic_Subprogram_Declaration, 8427 8428 -- N_Array_Type_Definition 8429 8430 N_Constrained_Array_Definition, 8431 N_Unconstrained_Array_Definition, 8432 8433 -- N_Renaming_Declaration 8434 8435 N_Exception_Renaming_Declaration, 8436 N_Object_Renaming_Declaration, 8437 N_Package_Renaming_Declaration, 8438 N_Subprogram_Renaming_Declaration, 8439 8440 -- N_Generic_Renaming_Declaration, N_Renaming_Declaration 8441 8442 N_Generic_Function_Renaming_Declaration, 8443 N_Generic_Package_Renaming_Declaration, 8444 N_Generic_Procedure_Renaming_Declaration, 8445 8446 -- N_Statement_Other_Than_Procedure_Call 8447 8448 N_Abort_Statement, 8449 N_Accept_Statement, 8450 N_Assignment_Statement, 8451 N_Asynchronous_Select, 8452 N_Block_Statement, 8453 N_Case_Statement, 8454 N_Code_Statement, 8455 N_Compound_Statement, 8456 N_Conditional_Entry_Call, 8457 8458 -- N_Statement_Other_Than_Procedure_Call, N_Delay_Statement 8459 8460 N_Delay_Relative_Statement, 8461 N_Delay_Until_Statement, 8462 8463 -- N_Statement_Other_Than_Procedure_Call 8464 8465 N_Entry_Call_Statement, 8466 N_Free_Statement, 8467 N_Goto_Statement, 8468 N_Loop_Statement, 8469 N_Null_Statement, 8470 N_Raise_Statement, 8471 N_Requeue_Statement, 8472 N_Simple_Return_Statement, 8473 N_Extended_Return_Statement, 8474 N_Selective_Accept, 8475 N_Timed_Entry_Call, 8476 8477 -- N_Statement_Other_Than_Procedure_Call, N_Has_Condition 8478 8479 N_Exit_Statement, 8480 N_If_Statement, 8481 8482 -- N_Has_Condition 8483 8484 N_Accept_Alternative, 8485 N_Delay_Alternative, 8486 N_Elsif_Part, 8487 N_Entry_Body_Formal_Part, 8488 N_Iteration_Scheme, 8489 N_Terminate_Alternative, 8490 8491 -- N_Formal_Subprogram_Declaration 8492 8493 N_Formal_Abstract_Subprogram_Declaration, 8494 N_Formal_Concrete_Subprogram_Declaration, 8495 8496 -- N_Push_xxx_Label, N_Push_Pop_xxx_Label 8497 8498 N_Push_Constraint_Error_Label, 8499 N_Push_Program_Error_Label, 8500 N_Push_Storage_Error_Label, 8501 8502 -- N_Pop_xxx_Label, N_Push_Pop_xxx_Label 8503 8504 N_Pop_Constraint_Error_Label, 8505 N_Pop_Program_Error_Label, 8506 N_Pop_Storage_Error_Label, 8507 8508 -- SCIL nodes 8509 8510 N_SCIL_Dispatch_Table_Tag_Init, 8511 N_SCIL_Dispatching_Call, 8512 N_SCIL_Membership_Test, 8513 8514 -- Other nodes (not part of any subtype class) 8515 8516 N_Abortable_Part, 8517 N_Abstract_Subprogram_Declaration, 8518 N_Access_Definition, 8519 N_Access_To_Object_Definition, 8520 N_Aspect_Specification, 8521 N_Case_Expression_Alternative, 8522 N_Case_Statement_Alternative, 8523 N_Compilation_Unit, 8524 N_Compilation_Unit_Aux, 8525 N_Component_Association, 8526 N_Component_Definition, 8527 N_Component_List, 8528 N_Contract, 8529 N_Derived_Type_Definition, 8530 N_Decimal_Fixed_Point_Definition, 8531 N_Defining_Program_Unit_Name, 8532 N_Delta_Constraint, 8533 N_Designator, 8534 N_Digits_Constraint, 8535 N_Discriminant_Association, 8536 N_Discriminant_Specification, 8537 N_Enumeration_Type_Definition, 8538 N_Entry_Body, 8539 N_Entry_Call_Alternative, 8540 N_Entry_Index_Specification, 8541 N_Exception_Declaration, 8542 N_Exception_Handler, 8543 N_Floating_Point_Definition, 8544 N_Formal_Decimal_Fixed_Point_Definition, 8545 N_Formal_Derived_Type_Definition, 8546 N_Formal_Discrete_Type_Definition, 8547 N_Formal_Floating_Point_Definition, 8548 N_Formal_Modular_Type_Definition, 8549 N_Formal_Ordinary_Fixed_Point_Definition, 8550 N_Formal_Package_Declaration, 8551 N_Formal_Private_Type_Definition, 8552 N_Formal_Incomplete_Type_Definition, 8553 N_Formal_Signed_Integer_Type_Definition, 8554 N_Freeze_Entity, 8555 N_Freeze_Generic_Entity, 8556 N_Generic_Association, 8557 N_Handled_Sequence_Of_Statements, 8558 N_Index_Or_Discriminant_Constraint, 8559 N_Itype_Reference, 8560 N_Label, 8561 N_Modular_Type_Definition, 8562 N_Number_Declaration, 8563 N_Ordinary_Fixed_Point_Definition, 8564 N_Others_Choice, 8565 N_Package_Specification, 8566 N_Parameter_Association, 8567 N_Parameter_Specification, 8568 N_Pragma, 8569 N_Protected_Definition, 8570 N_Range_Constraint, 8571 N_Real_Range_Specification, 8572 N_Record_Definition, 8573 N_Signed_Integer_Type_Definition, 8574 N_Single_Protected_Declaration, 8575 N_Subunit, 8576 N_Task_Definition, 8577 N_Triggering_Alternative, 8578 N_Use_Type_Clause, 8579 N_Validate_Unchecked_Conversion, 8580 N_Variant, 8581 N_Variant_Part, 8582 N_With_Clause, 8583 N_Unused_At_End); 8584 8585 for Node_Kind'Size use 8; 8586 -- The data structures in Atree assume this 8587 8588 ---------------------------- 8589 -- Node Class Definitions -- 8590 ---------------------------- 8591 8592 subtype N_Access_To_Subprogram_Definition is Node_Kind range 8593 N_Access_Function_Definition .. 8594 N_Access_Procedure_Definition; 8595 8596 subtype N_Array_Type_Definition is Node_Kind range 8597 N_Constrained_Array_Definition .. 8598 N_Unconstrained_Array_Definition; 8599 8600 subtype N_Binary_Op is Node_Kind range 8601 N_Op_Add .. 8602 N_Op_Shift_Right_Arithmetic; 8603 8604 subtype N_Body_Stub is Node_Kind range 8605 N_Package_Body_Stub .. 8606 N_Task_Body_Stub; 8607 8608 subtype N_Declaration is Node_Kind range 8609 N_Component_Declaration .. 8610 N_Procedure_Specification; 8611 -- Note: this includes all constructs normally thought of as declarations 8612 -- except those which are separately grouped as later declarations. 8613 8614 subtype N_Delay_Statement is Node_Kind range 8615 N_Delay_Relative_Statement .. 8616 N_Delay_Until_Statement; 8617 8618 subtype N_Direct_Name is Node_Kind range 8619 N_Identifier .. 8620 N_Character_Literal; 8621 8622 subtype N_Entity is Node_Kind range 8623 N_Defining_Character_Literal .. 8624 N_Defining_Operator_Symbol; 8625 8626 subtype N_Formal_Subprogram_Declaration is Node_Kind range 8627 N_Formal_Abstract_Subprogram_Declaration .. 8628 N_Formal_Concrete_Subprogram_Declaration; 8629 8630 subtype N_Generic_Declaration is Node_Kind range 8631 N_Generic_Package_Declaration .. 8632 N_Generic_Subprogram_Declaration; 8633 8634 subtype N_Generic_Instantiation is Node_Kind range 8635 N_Function_Instantiation .. 8636 N_Package_Instantiation; 8637 8638 subtype N_Generic_Renaming_Declaration is Node_Kind range 8639 N_Generic_Function_Renaming_Declaration .. 8640 N_Generic_Procedure_Renaming_Declaration; 8641 8642 subtype N_Has_Chars is Node_Kind range 8643 N_Attribute_Definition_Clause .. 8644 N_Op_Plus; 8645 8646 subtype N_Has_Entity is Node_Kind range 8647 N_Expanded_Name .. 8648 N_Attribute_Reference; 8649 -- Nodes that have Entity fields 8650 -- Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity, 8651 -- N_Aspect_Specification, or N_Attribute_Definition_Clause. 8652 8653 subtype N_Has_Etype is Node_Kind range 8654 N_Error .. 8655 N_Subtype_Indication; 8656 8657 subtype N_Has_Treat_Fixed_As_Integer is Node_Kind range 8658 N_Op_Divide .. 8659 N_Op_Rem; 8660 8661 subtype N_Multiplying_Operator is Node_Kind range 8662 N_Op_Divide .. 8663 N_Op_Rem; 8664 8665 subtype N_Later_Decl_Item is Node_Kind range 8666 N_Task_Type_Declaration .. 8667 N_Generic_Subprogram_Declaration; 8668 -- Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes 8669 -- only those items which can appear as later declarative items. This also 8670 -- includes N_Implicit_Label_Declaration which is not specifically in the 8671 -- grammar but may appear as a valid later declarative items. It does NOT 8672 -- include N_Pragma which can also appear among later declarative items. 8673 -- It does however include N_Protected_Body, which is a bit peculiar, but 8674 -- harmless since this cannot appear in Ada 83 mode anyway. 8675 8676 subtype N_Membership_Test is Node_Kind range 8677 N_In .. 8678 N_Not_In; 8679 8680 subtype N_Numeric_Or_String_Literal is Node_Kind range 8681 N_Integer_Literal .. 8682 N_String_Literal; 8683 8684 subtype N_Op is Node_Kind range 8685 N_Op_Add .. 8686 N_Op_Plus; 8687 8688 subtype N_Op_Boolean is Node_Kind range 8689 N_Op_And .. 8690 N_Op_Xor; 8691 -- Binary operators which take operands of a boolean type, and yield 8692 -- a result of a boolean type. 8693 8694 subtype N_Op_Compare is Node_Kind range 8695 N_Op_Eq .. 8696 N_Op_Ne; 8697 8698 subtype N_Op_Shift is Node_Kind range 8699 N_Op_Rotate_Left .. 8700 N_Op_Shift_Right_Arithmetic; 8701 8702 subtype N_Proper_Body is Node_Kind range 8703 N_Package_Body .. 8704 N_Task_Body; 8705 8706 subtype N_Push_xxx_Label is Node_Kind range 8707 N_Push_Constraint_Error_Label .. 8708 N_Push_Storage_Error_Label; 8709 8710 subtype N_Pop_xxx_Label is Node_Kind range 8711 N_Pop_Constraint_Error_Label .. 8712 N_Pop_Storage_Error_Label; 8713 8714 subtype N_Push_Pop_xxx_Label is Node_Kind range 8715 N_Push_Constraint_Error_Label .. 8716 N_Pop_Storage_Error_Label; 8717 8718 subtype N_Raise_xxx_Error is Node_Kind range 8719 N_Raise_Constraint_Error .. 8720 N_Raise_Storage_Error; 8721 8722 subtype N_Renaming_Declaration is Node_Kind range 8723 N_Exception_Renaming_Declaration .. 8724 N_Generic_Procedure_Renaming_Declaration; 8725 8726 subtype N_Representation_Clause is Node_Kind range 8727 N_At_Clause .. 8728 N_Attribute_Definition_Clause; 8729 8730 subtype N_Short_Circuit is Node_Kind range 8731 N_And_Then .. 8732 N_Or_Else; 8733 8734 subtype N_SCIL_Node is Node_Kind range 8735 N_SCIL_Dispatch_Table_Tag_Init .. 8736 N_SCIL_Membership_Test; 8737 8738 subtype N_Statement_Other_Than_Procedure_Call is Node_Kind range 8739 N_Abort_Statement .. 8740 N_If_Statement; 8741 -- Note that this includes all statement types except for the cases of the 8742 -- N_Procedure_Call_Statement which is considered to be a subexpression 8743 -- (since overloading is possible, so it needs to go through the normal 8744 -- overloading resolution for expressions). 8745 8746 subtype N_Subprogram_Call is Node_Kind range 8747 N_Function_Call .. 8748 N_Procedure_Call_Statement; 8749 8750 subtype N_Subprogram_Instantiation is Node_Kind range 8751 N_Function_Instantiation .. 8752 N_Procedure_Instantiation; 8753 8754 subtype N_Has_Condition is Node_Kind range 8755 N_Exit_Statement .. 8756 N_Terminate_Alternative; 8757 -- Nodes with condition fields (does not include N_Raise_xxx_Error) 8758 8759 subtype N_Subexpr is Node_Kind range 8760 N_Expanded_Name .. 8761 N_Unchecked_Type_Conversion; 8762 -- Nodes with expression fields 8763 8764 subtype N_Subprogram_Specification is Node_Kind range 8765 N_Function_Specification .. 8766 N_Procedure_Specification; 8767 8768 subtype N_Unary_Op is Node_Kind range 8769 N_Op_Abs .. 8770 N_Op_Plus; 8771 8772 subtype N_Unit_Body is Node_Kind range 8773 N_Package_Body .. 8774 N_Subprogram_Body; 8775 8776 --------------------------- 8777 -- Node Access Functions -- 8778 --------------------------- 8779 8780 -- The following functions return the contents of the indicated field of 8781 -- the node referenced by the argument, which is a Node_Id. They provide 8782 -- logical access to fields in the node which could be accessed using the 8783 -- Atree.Unchecked_Access package, but the idea is always to use these 8784 -- higher level routines which preserve strong typing. In debug mode, 8785 -- these routines check that they are being applied to an appropriate 8786 -- node, as well as checking that the node is in range. 8787 8788 function ABE_Is_Certain 8789 (N : Node_Id) return Boolean; -- Flag18 8790 8791 function Abort_Present 8792 (N : Node_Id) return Boolean; -- Flag15 8793 8794 function Abortable_Part 8795 (N : Node_Id) return Node_Id; -- Node2 8796 8797 function Abstract_Present 8798 (N : Node_Id) return Boolean; -- Flag4 8799 8800 function Accept_Handler_Records 8801 (N : Node_Id) return List_Id; -- List5 8802 8803 function Accept_Statement 8804 (N : Node_Id) return Node_Id; -- Node2 8805 8806 function Access_Definition 8807 (N : Node_Id) return Node_Id; -- Node3 8808 8809 function Access_To_Subprogram_Definition 8810 (N : Node_Id) return Node_Id; -- Node3 8811 8812 function Access_Types_To_Process 8813 (N : Node_Id) return Elist_Id; -- Elist2 8814 8815 function Actions 8816 (N : Node_Id) return List_Id; -- List1 8817 8818 function Activation_Chain_Entity 8819 (N : Node_Id) return Node_Id; -- Node3 8820 8821 function Acts_As_Spec 8822 (N : Node_Id) return Boolean; -- Flag4 8823 8824 function Actual_Designated_Subtype 8825 (N : Node_Id) return Node_Id; -- Node4 8826 8827 function Address_Warning_Posted 8828 (N : Node_Id) return Boolean; -- Flag18 8829 8830 function Aggregate_Bounds 8831 (N : Node_Id) return Node_Id; -- Node3 8832 8833 function Aliased_Present 8834 (N : Node_Id) return Boolean; -- Flag4 8835 8836 function All_Others 8837 (N : Node_Id) return Boolean; -- Flag11 8838 8839 function All_Present 8840 (N : Node_Id) return Boolean; -- Flag15 8841 8842 function Alternatives 8843 (N : Node_Id) return List_Id; -- List4 8844 8845 function Ancestor_Part 8846 (N : Node_Id) return Node_Id; -- Node3 8847 8848 function Atomic_Sync_Required 8849 (N : Node_Id) return Boolean; -- Flag14 8850 8851 function Array_Aggregate 8852 (N : Node_Id) return Node_Id; -- Node3 8853 8854 function Aspect_Rep_Item 8855 (N : Node_Id) return Node_Id; -- Node2 8856 8857 function Assignment_OK 8858 (N : Node_Id) return Boolean; -- Flag15 8859 8860 function Associated_Node 8861 (N : Node_Id) return Node_Id; -- Node4 8862 8863 function At_End_Proc 8864 (N : Node_Id) return Node_Id; -- Node1 8865 8866 function Attribute_Name 8867 (N : Node_Id) return Name_Id; -- Name2 8868 8869 function Aux_Decls_Node 8870 (N : Node_Id) return Node_Id; -- Node5 8871 8872 function Backwards_OK 8873 (N : Node_Id) return Boolean; -- Flag6 8874 8875 function Bad_Is_Detected 8876 (N : Node_Id) return Boolean; -- Flag15 8877 8878 function By_Ref 8879 (N : Node_Id) return Boolean; -- Flag5 8880 8881 function Body_Required 8882 (N : Node_Id) return Boolean; -- Flag13 8883 8884 function Body_To_Inline 8885 (N : Node_Id) return Node_Id; -- Node3 8886 8887 function Box_Present 8888 (N : Node_Id) return Boolean; -- Flag15 8889 8890 function Char_Literal_Value 8891 (N : Node_Id) return Uint; -- Uint2 8892 8893 function Chars 8894 (N : Node_Id) return Name_Id; -- Name1 8895 8896 function Check_Address_Alignment 8897 (N : Node_Id) return Boolean; -- Flag11 8898 8899 function Choice_Parameter 8900 (N : Node_Id) return Node_Id; -- Node2 8901 8902 function Choices 8903 (N : Node_Id) return List_Id; -- List1 8904 8905 function Class_Present 8906 (N : Node_Id) return Boolean; -- Flag6 8907 8908 function Classifications 8909 (N : Node_Id) return Node_Id; -- Node3 8910 8911 function Cleanup_Actions 8912 (N : Node_Id) return List_Id; -- List5 8913 8914 function Comes_From_Extended_Return_Statement 8915 (N : Node_Id) return Boolean; -- Flag18 8916 8917 function Compile_Time_Known_Aggregate 8918 (N : Node_Id) return Boolean; -- Flag18 8919 8920 function Component_Associations 8921 (N : Node_Id) return List_Id; -- List2 8922 8923 function Component_Clauses 8924 (N : Node_Id) return List_Id; -- List3 8925 8926 function Component_Definition 8927 (N : Node_Id) return Node_Id; -- Node4 8928 8929 function Component_Items 8930 (N : Node_Id) return List_Id; -- List3 8931 8932 function Component_List 8933 (N : Node_Id) return Node_Id; -- Node1 8934 8935 function Component_Name 8936 (N : Node_Id) return Node_Id; -- Node1 8937 8938 function Componentwise_Assignment 8939 (N : Node_Id) return Boolean; -- Flag14 8940 8941 function Condition 8942 (N : Node_Id) return Node_Id; -- Node1 8943 8944 function Condition_Actions 8945 (N : Node_Id) return List_Id; -- List3 8946 8947 function Config_Pragmas 8948 (N : Node_Id) return List_Id; -- List4 8949 8950 function Constant_Present 8951 (N : Node_Id) return Boolean; -- Flag17 8952 8953 function Constraint 8954 (N : Node_Id) return Node_Id; -- Node3 8955 8956 function Constraints 8957 (N : Node_Id) return List_Id; -- List1 8958 8959 function Context_Installed 8960 (N : Node_Id) return Boolean; -- Flag13 8961 8962 function Context_Pending 8963 (N : Node_Id) return Boolean; -- Flag16 8964 8965 function Context_Items 8966 (N : Node_Id) return List_Id; -- List1 8967 8968 function Contract_Test_Cases 8969 (N : Node_Id) return Node_Id; -- Node2 8970 8971 function Controlling_Argument 8972 (N : Node_Id) return Node_Id; -- Node1 8973 8974 function Conversion_OK 8975 (N : Node_Id) return Boolean; -- Flag14 8976 8977 function Convert_To_Return_False 8978 (N : Node_Id) return Boolean; -- Flag13 8979 8980 function Corresponding_Aspect 8981 (N : Node_Id) return Node_Id; -- Node3 8982 8983 function Corresponding_Body 8984 (N : Node_Id) return Node_Id; -- Node5 8985 8986 function Corresponding_Formal_Spec 8987 (N : Node_Id) return Node_Id; -- Node3 8988 8989 function Corresponding_Generic_Association 8990 (N : Node_Id) return Node_Id; -- Node5 8991 8992 function Corresponding_Integer_Value 8993 (N : Node_Id) return Uint; -- Uint4 8994 8995 function Corresponding_Spec 8996 (N : Node_Id) return Node_Id; -- Node5 8997 8998 function Corresponding_Spec_Of_Stub 8999 (N : Node_Id) return Node_Id; -- Node2 9000 9001 function Corresponding_Stub 9002 (N : Node_Id) return Node_Id; -- Node3 9003 9004 function Dcheck_Function 9005 (N : Node_Id) return Entity_Id; -- Node5 9006 9007 function Declarations 9008 (N : Node_Id) return List_Id; -- List2 9009 9010 function Default_Expression 9011 (N : Node_Id) return Node_Id; -- Node5 9012 9013 function Default_Storage_Pool 9014 (N : Node_Id) return Node_Id; -- Node3 9015 9016 function Default_Name 9017 (N : Node_Id) return Node_Id; -- Node2 9018 9019 function Defining_Identifier 9020 (N : Node_Id) return Entity_Id; -- Node1 9021 9022 function Defining_Unit_Name 9023 (N : Node_Id) return Node_Id; -- Node1 9024 9025 function Delay_Alternative 9026 (N : Node_Id) return Node_Id; -- Node4 9027 9028 function Delay_Statement 9029 (N : Node_Id) return Node_Id; -- Node2 9030 9031 function Delta_Expression 9032 (N : Node_Id) return Node_Id; -- Node3 9033 9034 function Digits_Expression 9035 (N : Node_Id) return Node_Id; -- Node2 9036 9037 function Discr_Check_Funcs_Built 9038 (N : Node_Id) return Boolean; -- Flag11 9039 9040 function Discrete_Choices 9041 (N : Node_Id) return List_Id; -- List4 9042 9043 function Discrete_Range 9044 (N : Node_Id) return Node_Id; -- Node4 9045 9046 function Discrete_Subtype_Definition 9047 (N : Node_Id) return Node_Id; -- Node4 9048 9049 function Discrete_Subtype_Definitions 9050 (N : Node_Id) return List_Id; -- List2 9051 9052 function Discriminant_Specifications 9053 (N : Node_Id) return List_Id; -- List4 9054 9055 function Discriminant_Type 9056 (N : Node_Id) return Node_Id; -- Node5 9057 9058 function Do_Accessibility_Check 9059 (N : Node_Id) return Boolean; -- Flag13 9060 9061 function Do_Discriminant_Check 9062 (N : Node_Id) return Boolean; -- Flag1 9063 9064 function Do_Division_Check 9065 (N : Node_Id) return Boolean; -- Flag13 9066 9067 function Do_Length_Check 9068 (N : Node_Id) return Boolean; -- Flag4 9069 9070 function Do_Overflow_Check 9071 (N : Node_Id) return Boolean; -- Flag17 9072 9073 function Do_Range_Check 9074 (N : Node_Id) return Boolean; -- Flag9 9075 9076 function Do_Storage_Check 9077 (N : Node_Id) return Boolean; -- Flag17 9078 9079 function Do_Tag_Check 9080 (N : Node_Id) return Boolean; -- Flag13 9081 9082 function Elaborate_All_Desirable 9083 (N : Node_Id) return Boolean; -- Flag9 9084 9085 function Elaborate_All_Present 9086 (N : Node_Id) return Boolean; -- Flag14 9087 9088 function Elaborate_Desirable 9089 (N : Node_Id) return Boolean; -- Flag11 9090 9091 function Elaborate_Present 9092 (N : Node_Id) return Boolean; -- Flag4 9093 9094 function Else_Actions 9095 (N : Node_Id) return List_Id; -- List3 9096 9097 function Else_Statements 9098 (N : Node_Id) return List_Id; -- List4 9099 9100 function Elsif_Parts 9101 (N : Node_Id) return List_Id; -- List3 9102 9103 function Enclosing_Variant 9104 (N : Node_Id) return Node_Id; -- Node2 9105 9106 function End_Label 9107 (N : Node_Id) return Node_Id; -- Node4 9108 9109 function End_Span 9110 (N : Node_Id) return Uint; -- Uint5 9111 9112 function Entity 9113 (N : Node_Id) return Node_Id; -- Node4 9114 9115 function Entity_Or_Associated_Node 9116 (N : Node_Id) return Node_Id; -- Node4 9117 9118 function Entry_Body_Formal_Part 9119 (N : Node_Id) return Node_Id; -- Node5 9120 9121 function Entry_Call_Alternative 9122 (N : Node_Id) return Node_Id; -- Node1 9123 9124 function Entry_Call_Statement 9125 (N : Node_Id) return Node_Id; -- Node1 9126 9127 function Entry_Direct_Name 9128 (N : Node_Id) return Node_Id; -- Node1 9129 9130 function Entry_Index 9131 (N : Node_Id) return Node_Id; -- Node5 9132 9133 function Entry_Index_Specification 9134 (N : Node_Id) return Node_Id; -- Node4 9135 9136 function Etype 9137 (N : Node_Id) return Node_Id; -- Node5 9138 9139 function Exception_Choices 9140 (N : Node_Id) return List_Id; -- List4 9141 9142 function Exception_Handlers 9143 (N : Node_Id) return List_Id; -- List5 9144 9145 function Exception_Junk 9146 (N : Node_Id) return Boolean; -- Flag8 9147 9148 function Exception_Label 9149 (N : Node_Id) return Node_Id; -- Node5 9150 9151 function Explicit_Actual_Parameter 9152 (N : Node_Id) return Node_Id; -- Node3 9153 9154 function Expansion_Delayed 9155 (N : Node_Id) return Boolean; -- Flag11 9156 9157 function Explicit_Generic_Actual_Parameter 9158 (N : Node_Id) return Node_Id; -- Node1 9159 9160 function Expression 9161 (N : Node_Id) return Node_Id; -- Node3 9162 9163 function Expressions 9164 (N : Node_Id) return List_Id; -- List1 9165 9166 function First_Bit 9167 (N : Node_Id) return Node_Id; -- Node3 9168 9169 function First_Inlined_Subprogram 9170 (N : Node_Id) return Entity_Id; -- Node3 9171 9172 function First_Name 9173 (N : Node_Id) return Boolean; -- Flag5 9174 9175 function First_Named_Actual 9176 (N : Node_Id) return Node_Id; -- Node4 9177 9178 function First_Real_Statement 9179 (N : Node_Id) return Node_Id; -- Node2 9180 9181 function First_Subtype_Link 9182 (N : Node_Id) return Entity_Id; -- Node5 9183 9184 function Float_Truncate 9185 (N : Node_Id) return Boolean; -- Flag11 9186 9187 function Formal_Type_Definition 9188 (N : Node_Id) return Node_Id; -- Node3 9189 9190 function Forwards_OK 9191 (N : Node_Id) return Boolean; -- Flag5 9192 9193 function From_Aspect_Specification 9194 (N : Node_Id) return Boolean; -- Flag13 9195 9196 function From_At_End 9197 (N : Node_Id) return Boolean; -- Flag4 9198 9199 function From_At_Mod 9200 (N : Node_Id) return Boolean; -- Flag4 9201 9202 function From_Conditional_Expression 9203 (N : Node_Id) return Boolean; -- Flag1 9204 9205 function From_Default 9206 (N : Node_Id) return Boolean; -- Flag6 9207 9208 function Generalized_Indexing 9209 (N : Node_Id) return Node_Id; -- Node4 9210 function Generic_Associations 9211 (N : Node_Id) return List_Id; -- List3 9212 9213 function Generic_Formal_Declarations 9214 (N : Node_Id) return List_Id; -- List2 9215 9216 function Generic_Parent 9217 (N : Node_Id) return Node_Id; -- Node5 9218 9219 function Generic_Parent_Type 9220 (N : Node_Id) return Node_Id; -- Node4 9221 9222 function Handled_Statement_Sequence 9223 (N : Node_Id) return Node_Id; -- Node4 9224 9225 function Handler_List_Entry 9226 (N : Node_Id) return Node_Id; -- Node2 9227 9228 function Has_Created_Identifier 9229 (N : Node_Id) return Boolean; -- Flag15 9230 9231 function Has_Dereference_Action 9232 (N : Node_Id) return Boolean; -- Flag13 9233 9234 function Has_Dynamic_Length_Check 9235 (N : Node_Id) return Boolean; -- Flag10 9236 9237 function Has_Dynamic_Range_Check 9238 (N : Node_Id) return Boolean; -- Flag12 9239 9240 function Has_Init_Expression 9241 (N : Node_Id) return Boolean; -- Flag14 9242 9243 function Has_Local_Raise 9244 (N : Node_Id) return Boolean; -- Flag8 9245 9246 function Has_No_Elaboration_Code 9247 (N : Node_Id) return Boolean; -- Flag17 9248 9249 function Has_Pragma_Suppress_All 9250 (N : Node_Id) return Boolean; -- Flag14 9251 9252 function Has_Private_View 9253 (N : Node_Id) return Boolean; -- Flag11 9254 9255 function Has_Relative_Deadline_Pragma 9256 (N : Node_Id) return Boolean; -- Flag9 9257 9258 function Has_Self_Reference 9259 (N : Node_Id) return Boolean; -- Flag13 9260 9261 function Has_SP_Choice 9262 (N : Node_Id) return Boolean; -- Flag15 9263 9264 function Has_Storage_Size_Pragma 9265 (N : Node_Id) return Boolean; -- Flag5 9266 9267 function Has_Wide_Character 9268 (N : Node_Id) return Boolean; -- Flag11 9269 9270 function Has_Wide_Wide_Character 9271 (N : Node_Id) return Boolean; -- Flag13 9272 9273 function Header_Size_Added 9274 (N : Node_Id) return Boolean; -- Flag11 9275 9276 function Hidden_By_Use_Clause 9277 (N : Node_Id) return Elist_Id; -- Elist4 9278 9279 function High_Bound 9280 (N : Node_Id) return Node_Id; -- Node2 9281 9282 function Identifier 9283 (N : Node_Id) return Node_Id; -- Node1 9284 9285 function Interface_List 9286 (N : Node_Id) return List_Id; -- List2 9287 9288 function Interface_Present 9289 (N : Node_Id) return Boolean; -- Flag16 9290 9291 function Implicit_With 9292 (N : Node_Id) return Boolean; -- Flag16 9293 9294 function Implicit_With_From_Instantiation 9295 (N : Node_Id) return Boolean; -- Flag12 9296 9297 function Import_Interface_Present 9298 (N : Node_Id) return Boolean; -- Flag16 9299 9300 function In_Present 9301 (N : Node_Id) return Boolean; -- Flag15 9302 9303 function Includes_Infinities 9304 (N : Node_Id) return Boolean; -- Flag11 9305 9306 function Incomplete_View 9307 (N : Node_Id) return Node_Id; -- Node2 9308 9309 function Inherited_Discriminant 9310 (N : Node_Id) return Boolean; -- Flag13 9311 9312 function Instance_Spec 9313 (N : Node_Id) return Node_Id; -- Node5 9314 9315 function Intval 9316 (N : Node_Id) return Uint; -- Uint3 9317 9318 function Is_Accessibility_Actual 9319 (N : Node_Id) return Boolean; -- Flag13 9320 9321 function Is_Analyzed_Pragma 9322 (N : Node_Id) return Boolean; -- Flag5 9323 9324 function Is_Asynchronous_Call_Block 9325 (N : Node_Id) return Boolean; -- Flag7 9326 9327 function Is_Boolean_Aspect 9328 (N : Node_Id) return Boolean; -- Flag16 9329 9330 function Is_Checked 9331 (N : Node_Id) return Boolean; -- Flag11 9332 9333 function Is_Component_Left_Opnd 9334 (N : Node_Id) return Boolean; -- Flag13 9335 9336 function Is_Component_Right_Opnd 9337 (N : Node_Id) return Boolean; -- Flag14 9338 9339 function Is_Controlling_Actual 9340 (N : Node_Id) return Boolean; -- Flag16 9341 9342 function Is_Delayed_Aspect 9343 (N : Node_Id) return Boolean; -- Flag14 9344 9345 function Is_Disabled 9346 (N : Node_Id) return Boolean; -- Flag15 9347 9348 function Is_Dynamic_Coextension 9349 (N : Node_Id) return Boolean; -- Flag18 9350 9351 function Is_Elsif 9352 (N : Node_Id) return Boolean; -- Flag13 9353 9354 function Is_Entry_Barrier_Function 9355 (N : Node_Id) return Boolean; -- Flag8 9356 9357 function Is_Expanded_Build_In_Place_Call 9358 (N : Node_Id) return Boolean; -- Flag11 9359 9360 function Is_Expanded_Contract 9361 (N : Node_Id) return Boolean; -- Flag1 9362 9363 function Is_Finalization_Wrapper 9364 (N : Node_Id) return Boolean; -- Flag9 9365 9366 function Is_Folded_In_Parser 9367 (N : Node_Id) return Boolean; -- Flag4 9368 9369 function Is_Generic_Contract_Pragma 9370 (N : Node_Id) return Boolean; -- Flag2 9371 9372 function Is_Ghost_Pragma 9373 (N : Node_Id) return Boolean; -- Flag3 9374 9375 function Is_Ignored 9376 (N : Node_Id) return Boolean; -- Flag9 9377 9378 function Is_In_Discriminant_Check 9379 (N : Node_Id) return Boolean; -- Flag11 9380 9381 function Is_Inherited_Pragma 9382 (N : Node_Id) return Boolean; -- Flag4 9383 9384 function Is_Machine_Number 9385 (N : Node_Id) return Boolean; -- Flag11 9386 9387 function Is_Null_Loop 9388 (N : Node_Id) return Boolean; -- Flag16 9389 9390 function Is_Overloaded 9391 (N : Node_Id) return Boolean; -- Flag5 9392 9393 function Is_Power_Of_2_For_Shift 9394 (N : Node_Id) return Boolean; -- Flag13 9395 9396 function Is_Prefixed_Call 9397 (N : Node_Id) return Boolean; -- Flag17 9398 9399 function Is_Protected_Subprogram_Body 9400 (N : Node_Id) return Boolean; -- Flag7 9401 9402 function Is_Static_Coextension 9403 (N : Node_Id) return Boolean; -- Flag14 9404 9405 function Is_Static_Expression 9406 (N : Node_Id) return Boolean; -- Flag6 9407 9408 function Is_Subprogram_Descriptor 9409 (N : Node_Id) return Boolean; -- Flag16 9410 9411 function Is_Task_Allocation_Block 9412 (N : Node_Id) return Boolean; -- Flag6 9413 9414 function Is_Task_Body_Procedure 9415 (N : Node_Id) return Boolean; -- Flag1 9416 9417 function Is_Task_Master 9418 (N : Node_Id) return Boolean; -- Flag5 9419 9420 function Iteration_Scheme 9421 (N : Node_Id) return Node_Id; -- Node2 9422 9423 function Iterator_Specification 9424 (N : Node_Id) return Node_Id; -- Node2 9425 9426 function Itype 9427 (N : Node_Id) return Entity_Id; -- Node1 9428 9429 function Kill_Range_Check 9430 (N : Node_Id) return Boolean; -- Flag11 9431 9432 function Label_Construct 9433 (N : Node_Id) return Node_Id; -- Node2 9434 9435 function Left_Opnd 9436 (N : Node_Id) return Node_Id; -- Node2 9437 9438 function Last_Bit 9439 (N : Node_Id) return Node_Id; -- Node4 9440 9441 function Last_Name 9442 (N : Node_Id) return Boolean; -- Flag6 9443 9444 function Library_Unit 9445 (N : Node_Id) return Node_Id; -- Node4 9446 9447 function Limited_View_Installed 9448 (N : Node_Id) return Boolean; -- Flag18 9449 9450 function Limited_Present 9451 (N : Node_Id) return Boolean; -- Flag17 9452 9453 function Literals 9454 (N : Node_Id) return List_Id; -- List1 9455 9456 function Local_Raise_Not_OK 9457 (N : Node_Id) return Boolean; -- Flag7 9458 9459 function Local_Raise_Statements 9460 (N : Node_Id) return Elist_Id; -- Elist1 9461 9462 function Loop_Actions 9463 (N : Node_Id) return List_Id; -- List2 9464 9465 function Loop_Parameter_Specification 9466 (N : Node_Id) return Node_Id; -- Node4 9467 9468 function Low_Bound 9469 (N : Node_Id) return Node_Id; -- Node1 9470 9471 function Mod_Clause 9472 (N : Node_Id) return Node_Id; -- Node2 9473 9474 function More_Ids 9475 (N : Node_Id) return Boolean; -- Flag5 9476 9477 function Must_Be_Byte_Aligned 9478 (N : Node_Id) return Boolean; -- Flag14 9479 9480 function Must_Not_Freeze 9481 (N : Node_Id) return Boolean; -- Flag8 9482 9483 function Must_Not_Override 9484 (N : Node_Id) return Boolean; -- Flag15 9485 9486 function Must_Override 9487 (N : Node_Id) return Boolean; -- Flag14 9488 9489 function Name 9490 (N : Node_Id) return Node_Id; -- Node2 9491 9492 function Names 9493 (N : Node_Id) return List_Id; -- List2 9494 9495 function Next_Entity 9496 (N : Node_Id) return Node_Id; -- Node2 9497 9498 function Next_Exit_Statement 9499 (N : Node_Id) return Node_Id; -- Node3 9500 9501 function Next_Implicit_With 9502 (N : Node_Id) return Node_Id; -- Node3 9503 9504 function Next_Named_Actual 9505 (N : Node_Id) return Node_Id; -- Node4 9506 9507 function Next_Pragma 9508 (N : Node_Id) return Node_Id; -- Node1 9509 9510 function Next_Rep_Item 9511 (N : Node_Id) return Node_Id; -- Node5 9512 9513 function Next_Use_Clause 9514 (N : Node_Id) return Node_Id; -- Node3 9515 9516 function No_Ctrl_Actions 9517 (N : Node_Id) return Boolean; -- Flag7 9518 9519 function No_Elaboration_Check 9520 (N : Node_Id) return Boolean; -- Flag14 9521 9522 function No_Entities_Ref_In_Spec 9523 (N : Node_Id) return Boolean; -- Flag8 9524 9525 function No_Initialization 9526 (N : Node_Id) return Boolean; -- Flag13 9527 9528 function No_Minimize_Eliminate 9529 (N : Node_Id) return Boolean; -- Flag17 9530 9531 function No_Truncation 9532 (N : Node_Id) return Boolean; -- Flag17 9533 9534 function Non_Aliased_Prefix 9535 (N : Node_Id) return Boolean; -- Flag18 9536 9537 function Null_Present 9538 (N : Node_Id) return Boolean; -- Flag13 9539 9540 function Null_Excluding_Subtype 9541 (N : Node_Id) return Boolean; -- Flag16 9542 9543 function Null_Exclusion_Present 9544 (N : Node_Id) return Boolean; -- Flag11 9545 9546 function Null_Exclusion_In_Return_Present 9547 (N : Node_Id) return Boolean; -- Flag14 9548 9549 function Null_Record_Present 9550 (N : Node_Id) return Boolean; -- Flag17 9551 9552 function Object_Definition 9553 (N : Node_Id) return Node_Id; -- Node4 9554 9555 function Of_Present 9556 (N : Node_Id) return Boolean; -- Flag16 9557 9558 function Original_Discriminant 9559 (N : Node_Id) return Node_Id; -- Node2 9560 9561 function Original_Entity 9562 (N : Node_Id) return Entity_Id; -- Node2 9563 9564 function Others_Discrete_Choices 9565 (N : Node_Id) return List_Id; -- List1 9566 9567 function Out_Present 9568 (N : Node_Id) return Boolean; -- Flag17 9569 9570 function Parameter_Associations 9571 (N : Node_Id) return List_Id; -- List3 9572 9573 function Parameter_Specifications 9574 (N : Node_Id) return List_Id; -- List3 9575 9576 function Parameter_Type 9577 (N : Node_Id) return Node_Id; -- Node2 9578 9579 function Parent_Spec 9580 (N : Node_Id) return Node_Id; -- Node4 9581 9582 function Position 9583 (N : Node_Id) return Node_Id; -- Node2 9584 9585 function Pragma_Argument_Associations 9586 (N : Node_Id) return List_Id; -- List2 9587 9588 function Pragma_Identifier 9589 (N : Node_Id) return Node_Id; -- Node4 9590 9591 function Pragmas_After 9592 (N : Node_Id) return List_Id; -- List5 9593 9594 function Pragmas_Before 9595 (N : Node_Id) return List_Id; -- List4 9596 9597 function Pre_Post_Conditions 9598 (N : Node_Id) return Node_Id; -- Node1 9599 9600 function Prefix 9601 (N : Node_Id) return Node_Id; -- Node3 9602 9603 function Premature_Use 9604 (N : Node_Id) return Node_Id; -- Node5 9605 9606 function Present_Expr 9607 (N : Node_Id) return Uint; -- Uint3 9608 9609 function Prev_Ids 9610 (N : Node_Id) return Boolean; -- Flag6 9611 9612 function Print_In_Hex 9613 (N : Node_Id) return Boolean; -- Flag13 9614 9615 function Private_Declarations 9616 (N : Node_Id) return List_Id; -- List3 9617 9618 function Private_Present 9619 (N : Node_Id) return Boolean; -- Flag15 9620 9621 function Procedure_To_Call 9622 (N : Node_Id) return Node_Id; -- Node2 9623 9624 function Proper_Body 9625 (N : Node_Id) return Node_Id; -- Node1 9626 9627 function Protected_Definition 9628 (N : Node_Id) return Node_Id; -- Node3 9629 9630 function Protected_Present 9631 (N : Node_Id) return Boolean; -- Flag6 9632 9633 function Raises_Constraint_Error 9634 (N : Node_Id) return Boolean; -- Flag7 9635 9636 function Range_Constraint 9637 (N : Node_Id) return Node_Id; -- Node4 9638 9639 function Range_Expression 9640 (N : Node_Id) return Node_Id; -- Node4 9641 9642 function Real_Range_Specification 9643 (N : Node_Id) return Node_Id; -- Node4 9644 9645 function Realval 9646 (N : Node_Id) return Ureal; -- Ureal3 9647 9648 function Reason 9649 (N : Node_Id) return Uint; -- Uint3 9650 9651 function Record_Extension_Part 9652 (N : Node_Id) return Node_Id; -- Node3 9653 9654 function Redundant_Use 9655 (N : Node_Id) return Boolean; -- Flag13 9656 9657 function Renaming_Exception 9658 (N : Node_Id) return Node_Id; -- Node2 9659 9660 function Result_Definition 9661 (N : Node_Id) return Node_Id; -- Node4 9662 9663 function Return_Object_Declarations 9664 (N : Node_Id) return List_Id; -- List3 9665 9666 function Return_Statement_Entity 9667 (N : Node_Id) return Node_Id; -- Node5 9668 9669 function Reverse_Present 9670 (N : Node_Id) return Boolean; -- Flag15 9671 9672 function Right_Opnd 9673 (N : Node_Id) return Node_Id; -- Node3 9674 9675 function Rounded_Result 9676 (N : Node_Id) return Boolean; -- Flag18 9677 9678 function SCIL_Controlling_Tag 9679 (N : Node_Id) return Node_Id; -- Node5 9680 9681 function SCIL_Entity 9682 (N : Node_Id) return Node_Id; -- Node4 9683 9684 function SCIL_Tag_Value 9685 (N : Node_Id) return Node_Id; -- Node5 9686 9687 function SCIL_Target_Prim 9688 (N : Node_Id) return Node_Id; -- Node2 9689 9690 function Scope 9691 (N : Node_Id) return Node_Id; -- Node3 9692 9693 function Select_Alternatives 9694 (N : Node_Id) return List_Id; -- List1 9695 9696 function Selector_Name 9697 (N : Node_Id) return Node_Id; -- Node2 9698 9699 function Selector_Names 9700 (N : Node_Id) return List_Id; -- List1 9701 9702 function Shift_Count_OK 9703 (N : Node_Id) return Boolean; -- Flag4 9704 9705 function Source_Type 9706 (N : Node_Id) return Entity_Id; -- Node1 9707 9708 function Specification 9709 (N : Node_Id) return Node_Id; -- Node1 9710 9711 function Split_PPC 9712 (N : Node_Id) return Boolean; -- Flag17 9713 9714 function Statements 9715 (N : Node_Id) return List_Id; -- List3 9716 9717 function Storage_Pool 9718 (N : Node_Id) return Node_Id; -- Node1 9719 9720 function Subpool_Handle_Name 9721 (N : Node_Id) return Node_Id; -- Node4 9722 9723 function Strval 9724 (N : Node_Id) return String_Id; -- Str3 9725 9726 function Subtype_Indication 9727 (N : Node_Id) return Node_Id; -- Node5 9728 9729 function Subtype_Mark 9730 (N : Node_Id) return Node_Id; -- Node4 9731 9732 function Subtype_Marks 9733 (N : Node_Id) return List_Id; -- List2 9734 9735 function Suppress_Assignment_Checks 9736 (N : Node_Id) return Boolean; -- Flag18 9737 9738 function Suppress_Loop_Warnings 9739 (N : Node_Id) return Boolean; -- Flag17 9740 9741 function Synchronized_Present 9742 (N : Node_Id) return Boolean; -- Flag7 9743 9744 function Tagged_Present 9745 (N : Node_Id) return Boolean; -- Flag15 9746 9747 function Target_Type 9748 (N : Node_Id) return Entity_Id; -- Node2 9749 9750 function Task_Definition 9751 (N : Node_Id) return Node_Id; -- Node3 9752 9753 function Task_Present 9754 (N : Node_Id) return Boolean; -- Flag5 9755 9756 function Then_Actions 9757 (N : Node_Id) return List_Id; -- List2 9758 9759 function Then_Statements 9760 (N : Node_Id) return List_Id; -- List2 9761 9762 function Treat_Fixed_As_Integer 9763 (N : Node_Id) return Boolean; -- Flag14 9764 9765 function Triggering_Alternative 9766 (N : Node_Id) return Node_Id; -- Node1 9767 9768 function Triggering_Statement 9769 (N : Node_Id) return Node_Id; -- Node1 9770 9771 function TSS_Elist 9772 (N : Node_Id) return Elist_Id; -- Elist3 9773 9774 function Type_Definition 9775 (N : Node_Id) return Node_Id; -- Node3 9776 9777 function Uneval_Old_Accept 9778 (N : Node_Id) return Boolean; -- Flag7 9779 9780 function Uneval_Old_Warn 9781 (N : Node_Id) return Boolean; -- Flag18 9782 9783 function Unit 9784 (N : Node_Id) return Node_Id; -- Node2 9785 9786 function Unknown_Discriminants_Present 9787 (N : Node_Id) return Boolean; -- Flag13 9788 9789 function Unreferenced_In_Spec 9790 (N : Node_Id) return Boolean; -- Flag7 9791 9792 function Variant_Part 9793 (N : Node_Id) return Node_Id; -- Node4 9794 9795 function Variants 9796 (N : Node_Id) return List_Id; -- List1 9797 9798 function Visible_Declarations 9799 (N : Node_Id) return List_Id; -- List2 9800 9801 function Uninitialized_Variable 9802 (N : Node_Id) return Node_Id; -- Node3 9803 9804 function Used_Operations 9805 (N : Node_Id) return Elist_Id; -- Elist5 9806 9807 function Was_Expression_Function 9808 (N : Node_Id) return Boolean; -- Flag18 9809 9810 function Was_Originally_Stub 9811 (N : Node_Id) return Boolean; -- Flag13 9812 9813 function Withed_Body 9814 (N : Node_Id) return Node_Id; -- Node1 9815 9816 -- End functions (note used by xsinfo utility program to end processing) 9817 9818 ---------------------------- 9819 -- Node Update Procedures -- 9820 ---------------------------- 9821 9822 -- These are the corresponding node update routines, which again provide 9823 -- a high level logical access with type checking. In addition to setting 9824 -- the indicated field of the node N to the given Val, in the case of 9825 -- tree pointers (List1-4), the parent pointer of the Val node is set to 9826 -- point back to node N. This automates the setting of the parent pointer. 9827 9828 procedure Set_ABE_Is_Certain 9829 (N : Node_Id; Val : Boolean := True); -- Flag18 9830 9831 procedure Set_Abort_Present 9832 (N : Node_Id; Val : Boolean := True); -- Flag15 9833 9834 procedure Set_Abortable_Part 9835 (N : Node_Id; Val : Node_Id); -- Node2 9836 9837 procedure Set_Abstract_Present 9838 (N : Node_Id; Val : Boolean := True); -- Flag4 9839 9840 procedure Set_Accept_Handler_Records 9841 (N : Node_Id; Val : List_Id); -- List5 9842 9843 procedure Set_Accept_Statement 9844 (N : Node_Id; Val : Node_Id); -- Node2 9845 9846 procedure Set_Access_Definition 9847 (N : Node_Id; Val : Node_Id); -- Node3 9848 9849 procedure Set_Access_To_Subprogram_Definition 9850 (N : Node_Id; Val : Node_Id); -- Node3 9851 9852 procedure Set_Access_Types_To_Process 9853 (N : Node_Id; Val : Elist_Id); -- Elist2 9854 9855 procedure Set_Actions 9856 (N : Node_Id; Val : List_Id); -- List1 9857 9858 procedure Set_Activation_Chain_Entity 9859 (N : Node_Id; Val : Node_Id); -- Node3 9860 9861 procedure Set_Acts_As_Spec 9862 (N : Node_Id; Val : Boolean := True); -- Flag4 9863 9864 procedure Set_Actual_Designated_Subtype 9865 (N : Node_Id; Val : Node_Id); -- Node4 9866 9867 procedure Set_Address_Warning_Posted 9868 (N : Node_Id; Val : Boolean := True); -- Flag18 9869 9870 procedure Set_Aggregate_Bounds 9871 (N : Node_Id; Val : Node_Id); -- Node3 9872 9873 procedure Set_Aliased_Present 9874 (N : Node_Id; Val : Boolean := True); -- Flag4 9875 9876 procedure Set_All_Others 9877 (N : Node_Id; Val : Boolean := True); -- Flag11 9878 9879 procedure Set_All_Present 9880 (N : Node_Id; Val : Boolean := True); -- Flag15 9881 9882 procedure Set_Alternatives 9883 (N : Node_Id; Val : List_Id); -- List4 9884 9885 procedure Set_Ancestor_Part 9886 (N : Node_Id; Val : Node_Id); -- Node3 9887 9888 procedure Set_Atomic_Sync_Required 9889 (N : Node_Id; Val : Boolean := True); -- Flag14 9890 9891 procedure Set_Array_Aggregate 9892 (N : Node_Id; Val : Node_Id); -- Node3 9893 9894 procedure Set_Aspect_Rep_Item 9895 (N : Node_Id; Val : Node_Id); -- Node2 9896 9897 procedure Set_Assignment_OK 9898 (N : Node_Id; Val : Boolean := True); -- Flag15 9899 9900 procedure Set_Associated_Node 9901 (N : Node_Id; Val : Node_Id); -- Node4 9902 9903 procedure Set_Attribute_Name 9904 (N : Node_Id; Val : Name_Id); -- Name2 9905 9906 procedure Set_At_End_Proc 9907 (N : Node_Id; Val : Node_Id); -- Node1 9908 9909 procedure Set_Aux_Decls_Node 9910 (N : Node_Id; Val : Node_Id); -- Node5 9911 9912 procedure Set_Backwards_OK 9913 (N : Node_Id; Val : Boolean := True); -- Flag6 9914 9915 procedure Set_Bad_Is_Detected 9916 (N : Node_Id; Val : Boolean := True); -- Flag15 9917 9918 procedure Set_Body_Required 9919 (N : Node_Id; Val : Boolean := True); -- Flag13 9920 9921 procedure Set_Body_To_Inline 9922 (N : Node_Id; Val : Node_Id); -- Node3 9923 9924 procedure Set_Box_Present 9925 (N : Node_Id; Val : Boolean := True); -- Flag15 9926 9927 procedure Set_By_Ref 9928 (N : Node_Id; Val : Boolean := True); -- Flag5 9929 9930 procedure Set_Char_Literal_Value 9931 (N : Node_Id; Val : Uint); -- Uint2 9932 9933 procedure Set_Chars 9934 (N : Node_Id; Val : Name_Id); -- Name1 9935 9936 procedure Set_Check_Address_Alignment 9937 (N : Node_Id; Val : Boolean := True); -- Flag11 9938 9939 procedure Set_Choice_Parameter 9940 (N : Node_Id; Val : Node_Id); -- Node2 9941 9942 procedure Set_Choices 9943 (N : Node_Id; Val : List_Id); -- List1 9944 9945 procedure Set_Class_Present 9946 (N : Node_Id; Val : Boolean := True); -- Flag6 9947 9948 procedure Set_Classifications 9949 (N : Node_Id; Val : Node_Id); -- Node3 9950 9951 procedure Set_Cleanup_Actions 9952 (N : Node_Id; Val : List_Id); -- List5 9953 9954 procedure Set_Comes_From_Extended_Return_Statement 9955 (N : Node_Id; Val : Boolean := True); -- Flag18 9956 9957 procedure Set_Compile_Time_Known_Aggregate 9958 (N : Node_Id; Val : Boolean := True); -- Flag18 9959 9960 procedure Set_Component_Associations 9961 (N : Node_Id; Val : List_Id); -- List2 9962 9963 procedure Set_Component_Clauses 9964 (N : Node_Id; Val : List_Id); -- List3 9965 9966 procedure Set_Component_Definition 9967 (N : Node_Id; Val : Node_Id); -- Node4 9968 9969 procedure Set_Component_Items 9970 (N : Node_Id; Val : List_Id); -- List3 9971 9972 procedure Set_Component_List 9973 (N : Node_Id; Val : Node_Id); -- Node1 9974 9975 procedure Set_Component_Name 9976 (N : Node_Id; Val : Node_Id); -- Node1 9977 9978 procedure Set_Componentwise_Assignment 9979 (N : Node_Id; Val : Boolean := True); -- Flag14 9980 9981 procedure Set_Condition 9982 (N : Node_Id; Val : Node_Id); -- Node1 9983 9984 procedure Set_Condition_Actions 9985 (N : Node_Id; Val : List_Id); -- List3 9986 9987 procedure Set_Config_Pragmas 9988 (N : Node_Id; Val : List_Id); -- List4 9989 9990 procedure Set_Constant_Present 9991 (N : Node_Id; Val : Boolean := True); -- Flag17 9992 9993 procedure Set_Constraint 9994 (N : Node_Id; Val : Node_Id); -- Node3 9995 9996 procedure Set_Constraints 9997 (N : Node_Id; Val : List_Id); -- List1 9998 9999 procedure Set_Context_Installed 10000 (N : Node_Id; Val : Boolean := True); -- Flag13 10001 10002 procedure Set_Context_Items 10003 (N : Node_Id; Val : List_Id); -- List1 10004 10005 procedure Set_Context_Pending 10006 (N : Node_Id; Val : Boolean := True); -- Flag16 10007 10008 procedure Set_Contract_Test_Cases 10009 (N : Node_Id; Val : Node_Id); -- Node2 10010 10011 procedure Set_Controlling_Argument 10012 (N : Node_Id; Val : Node_Id); -- Node1 10013 10014 procedure Set_Conversion_OK 10015 (N : Node_Id; Val : Boolean := True); -- Flag14 10016 10017 procedure Set_Convert_To_Return_False 10018 (N : Node_Id; Val : Boolean := True); -- Flag13 10019 10020 procedure Set_Corresponding_Aspect 10021 (N : Node_Id; Val : Node_Id); -- Node3 10022 10023 procedure Set_Corresponding_Body 10024 (N : Node_Id; Val : Node_Id); -- Node5 10025 10026 procedure Set_Corresponding_Formal_Spec 10027 (N : Node_Id; Val : Node_Id); -- Node3 10028 10029 procedure Set_Corresponding_Generic_Association 10030 (N : Node_Id; Val : Node_Id); -- Node5 10031 10032 procedure Set_Corresponding_Integer_Value 10033 (N : Node_Id; Val : Uint); -- Uint4 10034 10035 procedure Set_Corresponding_Spec 10036 (N : Node_Id; Val : Node_Id); -- Node5 10037 10038 procedure Set_Corresponding_Spec_Of_Stub 10039 (N : Node_Id; Val : Node_Id); -- Node2 10040 10041 procedure Set_Corresponding_Stub 10042 (N : Node_Id; Val : Node_Id); -- Node3 10043 10044 procedure Set_Dcheck_Function 10045 (N : Node_Id; Val : Entity_Id); -- Node5 10046 10047 procedure Set_Declarations 10048 (N : Node_Id; Val : List_Id); -- List2 10049 10050 procedure Set_Default_Expression 10051 (N : Node_Id; Val : Node_Id); -- Node5 10052 10053 procedure Set_Default_Storage_Pool 10054 (N : Node_Id; Val : Node_Id); -- Node3 10055 10056 procedure Set_Default_Name 10057 (N : Node_Id; Val : Node_Id); -- Node2 10058 10059 procedure Set_Defining_Identifier 10060 (N : Node_Id; Val : Entity_Id); -- Node1 10061 10062 procedure Set_Defining_Unit_Name 10063 (N : Node_Id; Val : Node_Id); -- Node1 10064 10065 procedure Set_Delay_Alternative 10066 (N : Node_Id; Val : Node_Id); -- Node4 10067 10068 procedure Set_Delay_Statement 10069 (N : Node_Id; Val : Node_Id); -- Node2 10070 10071 procedure Set_Delta_Expression 10072 (N : Node_Id; Val : Node_Id); -- Node3 10073 10074 procedure Set_Digits_Expression 10075 (N : Node_Id; Val : Node_Id); -- Node2 10076 10077 procedure Set_Discr_Check_Funcs_Built 10078 (N : Node_Id; Val : Boolean := True); -- Flag11 10079 10080 procedure Set_Discrete_Choices 10081 (N : Node_Id; Val : List_Id); -- List4 10082 10083 procedure Set_Discrete_Range 10084 (N : Node_Id; Val : Node_Id); -- Node4 10085 10086 procedure Set_Discrete_Subtype_Definition 10087 (N : Node_Id; Val : Node_Id); -- Node4 10088 10089 procedure Set_Discrete_Subtype_Definitions 10090 (N : Node_Id; Val : List_Id); -- List2 10091 10092 procedure Set_Discriminant_Specifications 10093 (N : Node_Id; Val : List_Id); -- List4 10094 10095 procedure Set_Discriminant_Type 10096 (N : Node_Id; Val : Node_Id); -- Node5 10097 10098 procedure Set_Do_Accessibility_Check 10099 (N : Node_Id; Val : Boolean := True); -- Flag13 10100 10101 procedure Set_Do_Discriminant_Check 10102 (N : Node_Id; Val : Boolean := True); -- Flag1 10103 10104 procedure Set_Do_Division_Check 10105 (N : Node_Id; Val : Boolean := True); -- Flag13 10106 10107 procedure Set_Do_Length_Check 10108 (N : Node_Id; Val : Boolean := True); -- Flag4 10109 10110 procedure Set_Do_Overflow_Check 10111 (N : Node_Id; Val : Boolean := True); -- Flag17 10112 10113 procedure Set_Do_Range_Check 10114 (N : Node_Id; Val : Boolean := True); -- Flag9 10115 10116 procedure Set_Do_Storage_Check 10117 (N : Node_Id; Val : Boolean := True); -- Flag17 10118 10119 procedure Set_Do_Tag_Check 10120 (N : Node_Id; Val : Boolean := True); -- Flag13 10121 10122 procedure Set_Elaborate_All_Desirable 10123 (N : Node_Id; Val : Boolean := True); -- Flag9 10124 10125 procedure Set_Elaborate_All_Present 10126 (N : Node_Id; Val : Boolean := True); -- Flag14 10127 10128 procedure Set_Elaborate_Desirable 10129 (N : Node_Id; Val : Boolean := True); -- Flag11 10130 10131 procedure Set_Elaborate_Present 10132 (N : Node_Id; Val : Boolean := True); -- Flag4 10133 10134 procedure Set_Else_Actions 10135 (N : Node_Id; Val : List_Id); -- List3 10136 10137 procedure Set_Else_Statements 10138 (N : Node_Id; Val : List_Id); -- List4 10139 10140 procedure Set_Elsif_Parts 10141 (N : Node_Id; Val : List_Id); -- List3 10142 10143 procedure Set_Enclosing_Variant 10144 (N : Node_Id; Val : Node_Id); -- Node2 10145 10146 procedure Set_End_Label 10147 (N : Node_Id; Val : Node_Id); -- Node4 10148 10149 procedure Set_End_Span 10150 (N : Node_Id; Val : Uint); -- Uint5 10151 10152 procedure Set_Entity 10153 (N : Node_Id; Val : Node_Id); -- Node4 10154 10155 procedure Set_Entry_Body_Formal_Part 10156 (N : Node_Id; Val : Node_Id); -- Node5 10157 10158 procedure Set_Entry_Call_Alternative 10159 (N : Node_Id; Val : Node_Id); -- Node1 10160 10161 procedure Set_Entry_Call_Statement 10162 (N : Node_Id; Val : Node_Id); -- Node1 10163 10164 procedure Set_Entry_Direct_Name 10165 (N : Node_Id; Val : Node_Id); -- Node1 10166 10167 procedure Set_Entry_Index 10168 (N : Node_Id; Val : Node_Id); -- Node5 10169 10170 procedure Set_Entry_Index_Specification 10171 (N : Node_Id; Val : Node_Id); -- Node4 10172 10173 procedure Set_Etype 10174 (N : Node_Id; Val : Node_Id); -- Node5 10175 10176 procedure Set_Exception_Choices 10177 (N : Node_Id; Val : List_Id); -- List4 10178 10179 procedure Set_Exception_Handlers 10180 (N : Node_Id; Val : List_Id); -- List5 10181 10182 procedure Set_Exception_Junk 10183 (N : Node_Id; Val : Boolean := True); -- Flag8 10184 10185 procedure Set_Exception_Label 10186 (N : Node_Id; Val : Node_Id); -- Node5 10187 10188 procedure Set_Expansion_Delayed 10189 (N : Node_Id; Val : Boolean := True); -- Flag11 10190 10191 procedure Set_Explicit_Actual_Parameter 10192 (N : Node_Id; Val : Node_Id); -- Node3 10193 10194 procedure Set_Explicit_Generic_Actual_Parameter 10195 (N : Node_Id; Val : Node_Id); -- Node1 10196 10197 procedure Set_Expression 10198 (N : Node_Id; Val : Node_Id); -- Node3 10199 10200 procedure Set_Expressions 10201 (N : Node_Id; Val : List_Id); -- List1 10202 10203 procedure Set_First_Bit 10204 (N : Node_Id; Val : Node_Id); -- Node3 10205 10206 procedure Set_First_Inlined_Subprogram 10207 (N : Node_Id; Val : Entity_Id); -- Node3 10208 10209 procedure Set_First_Name 10210 (N : Node_Id; Val : Boolean := True); -- Flag5 10211 10212 procedure Set_First_Named_Actual 10213 (N : Node_Id; Val : Node_Id); -- Node4 10214 10215 procedure Set_First_Real_Statement 10216 (N : Node_Id; Val : Node_Id); -- Node2 10217 10218 procedure Set_First_Subtype_Link 10219 (N : Node_Id; Val : Entity_Id); -- Node5 10220 10221 procedure Set_Float_Truncate 10222 (N : Node_Id; Val : Boolean := True); -- Flag11 10223 10224 procedure Set_Formal_Type_Definition 10225 (N : Node_Id; Val : Node_Id); -- Node3 10226 10227 procedure Set_Forwards_OK 10228 (N : Node_Id; Val : Boolean := True); -- Flag5 10229 10230 procedure Set_From_Aspect_Specification 10231 (N : Node_Id; Val : Boolean := True); -- Flag13 10232 10233 procedure Set_From_At_End 10234 (N : Node_Id; Val : Boolean := True); -- Flag4 10235 10236 procedure Set_From_At_Mod 10237 (N : Node_Id; Val : Boolean := True); -- Flag4 10238 10239 procedure Set_From_Conditional_Expression 10240 (N : Node_Id; Val : Boolean := True); -- Flag1 10241 10242 procedure Set_From_Default 10243 (N : Node_Id; Val : Boolean := True); -- Flag6 10244 10245 procedure Set_Generalized_Indexing 10246 (N : Node_Id; Val : Node_Id); -- Node4 10247 10248 procedure Set_Generic_Associations 10249 (N : Node_Id; Val : List_Id); -- List3 10250 10251 procedure Set_Generic_Formal_Declarations 10252 (N : Node_Id; Val : List_Id); -- List2 10253 10254 procedure Set_Generic_Parent 10255 (N : Node_Id; Val : Node_Id); -- Node5 10256 10257 procedure Set_Generic_Parent_Type 10258 (N : Node_Id; Val : Node_Id); -- Node4 10259 10260 procedure Set_Handled_Statement_Sequence 10261 (N : Node_Id; Val : Node_Id); -- Node4 10262 10263 procedure Set_Handler_List_Entry 10264 (N : Node_Id; Val : Node_Id); -- Node2 10265 10266 procedure Set_Has_Created_Identifier 10267 (N : Node_Id; Val : Boolean := True); -- Flag15 10268 10269 procedure Set_Has_Dereference_Action 10270 (N : Node_Id; Val : Boolean := True); -- Flag13 10271 10272 procedure Set_Has_Dynamic_Length_Check 10273 (N : Node_Id; Val : Boolean := True); -- Flag10 10274 10275 procedure Set_Has_Dynamic_Range_Check 10276 (N : Node_Id; Val : Boolean := True); -- Flag12 10277 10278 procedure Set_Has_Init_Expression 10279 (N : Node_Id; Val : Boolean := True); -- Flag14 10280 10281 procedure Set_Has_Local_Raise 10282 (N : Node_Id; Val : Boolean := True); -- Flag8 10283 10284 procedure Set_Has_No_Elaboration_Code 10285 (N : Node_Id; Val : Boolean := True); -- Flag17 10286 10287 procedure Set_Has_Pragma_Suppress_All 10288 (N : Node_Id; Val : Boolean := True); -- Flag14 10289 10290 procedure Set_Has_Private_View 10291 (N : Node_Id; Val : Boolean := True); -- Flag11 10292 10293 procedure Set_Has_Relative_Deadline_Pragma 10294 (N : Node_Id; Val : Boolean := True); -- Flag9 10295 10296 procedure Set_Has_Self_Reference 10297 (N : Node_Id; Val : Boolean := True); -- Flag13 10298 10299 procedure Set_Has_SP_Choice 10300 (N : Node_Id; Val : Boolean := True); -- Flag15 10301 10302 procedure Set_Has_Storage_Size_Pragma 10303 (N : Node_Id; Val : Boolean := True); -- Flag5 10304 10305 procedure Set_Has_Wide_Character 10306 (N : Node_Id; Val : Boolean := True); -- Flag11 10307 10308 procedure Set_Has_Wide_Wide_Character 10309 (N : Node_Id; Val : Boolean := True); -- Flag13 10310 10311 procedure Set_Header_Size_Added 10312 (N : Node_Id; Val : Boolean := True); -- Flag11 10313 10314 procedure Set_Hidden_By_Use_Clause 10315 (N : Node_Id; Val : Elist_Id); -- Elist4 10316 10317 procedure Set_High_Bound 10318 (N : Node_Id; Val : Node_Id); -- Node2 10319 10320 procedure Set_Identifier 10321 (N : Node_Id; Val : Node_Id); -- Node1 10322 10323 procedure Set_Interface_List 10324 (N : Node_Id; Val : List_Id); -- List2 10325 10326 procedure Set_Interface_Present 10327 (N : Node_Id; Val : Boolean := True); -- Flag16 10328 10329 procedure Set_Implicit_With 10330 (N : Node_Id; Val : Boolean := True); -- Flag16 10331 10332 procedure Set_Implicit_With_From_Instantiation 10333 (N : Node_Id; Val : Boolean := True); -- Flag12 10334 10335 procedure Set_Import_Interface_Present 10336 (N : Node_Id; Val : Boolean := True); -- Flag16 10337 10338 procedure Set_In_Present 10339 (N : Node_Id; Val : Boolean := True); -- Flag15 10340 10341 procedure Set_Includes_Infinities 10342 (N : Node_Id; Val : Boolean := True); -- Flag11 10343 10344 procedure Set_Incomplete_View 10345 (N : Node_Id; Val : Node_Id); -- Node2 10346 10347 procedure Set_Inherited_Discriminant 10348 (N : Node_Id; Val : Boolean := True); -- Flag13 10349 10350 procedure Set_Instance_Spec 10351 (N : Node_Id; Val : Node_Id); -- Node5 10352 10353 procedure Set_Intval 10354 (N : Node_Id; Val : Uint); -- Uint3 10355 10356 procedure Set_Is_Accessibility_Actual 10357 (N : Node_Id; Val : Boolean := True); -- Flag13 10358 10359 procedure Set_Is_Analyzed_Pragma 10360 (N : Node_Id; Val : Boolean := True); -- Flag5 10361 10362 procedure Set_Is_Asynchronous_Call_Block 10363 (N : Node_Id; Val : Boolean := True); -- Flag7 10364 10365 procedure Set_Is_Boolean_Aspect 10366 (N : Node_Id; Val : Boolean := True); -- Flag16 10367 10368 procedure Set_Is_Checked 10369 (N : Node_Id; Val : Boolean := True); -- Flag11 10370 10371 procedure Set_Is_Component_Left_Opnd 10372 (N : Node_Id; Val : Boolean := True); -- Flag13 10373 10374 procedure Set_Is_Component_Right_Opnd 10375 (N : Node_Id; Val : Boolean := True); -- Flag14 10376 10377 procedure Set_Is_Controlling_Actual 10378 (N : Node_Id; Val : Boolean := True); -- Flag16 10379 10380 procedure Set_Is_Delayed_Aspect 10381 (N : Node_Id; Val : Boolean := True); -- Flag14 10382 10383 procedure Set_Is_Disabled 10384 (N : Node_Id; Val : Boolean := True); -- Flag15 10385 10386 procedure Set_Is_Dynamic_Coextension 10387 (N : Node_Id; Val : Boolean := True); -- Flag18 10388 10389 procedure Set_Is_Elsif 10390 (N : Node_Id; Val : Boolean := True); -- Flag13 10391 10392 procedure Set_Is_Entry_Barrier_Function 10393 (N : Node_Id; Val : Boolean := True); -- Flag8 10394 10395 procedure Set_Is_Expanded_Build_In_Place_Call 10396 (N : Node_Id; Val : Boolean := True); -- Flag11 10397 10398 procedure Set_Is_Expanded_Contract 10399 (N : Node_Id; Val : Boolean := True); -- Flag1 10400 10401 procedure Set_Is_Finalization_Wrapper 10402 (N : Node_Id; Val : Boolean := True); -- Flag9 10403 10404 procedure Set_Is_Folded_In_Parser 10405 (N : Node_Id; Val : Boolean := True); -- Flag4 10406 10407 procedure Set_Is_Generic_Contract_Pragma 10408 (N : Node_Id; Val : Boolean := True); -- Flag2 10409 10410 procedure Set_Is_Ghost_Pragma 10411 (N : Node_Id; Val : Boolean := True); -- Flag3 10412 10413 procedure Set_Is_Ignored 10414 (N : Node_Id; Val : Boolean := True); -- Flag9 10415 10416 procedure Set_Is_In_Discriminant_Check 10417 (N : Node_Id; Val : Boolean := True); -- Flag11 10418 10419 procedure Set_Is_Inherited_Pragma 10420 (N : Node_Id; Val : Boolean := True); -- Flag4 10421 10422 procedure Set_Is_Machine_Number 10423 (N : Node_Id; Val : Boolean := True); -- Flag11 10424 10425 procedure Set_Is_Null_Loop 10426 (N : Node_Id; Val : Boolean := True); -- Flag16 10427 10428 procedure Set_Is_Overloaded 10429 (N : Node_Id; Val : Boolean := True); -- Flag5 10430 10431 procedure Set_Is_Power_Of_2_For_Shift 10432 (N : Node_Id; Val : Boolean := True); -- Flag13 10433 10434 procedure Set_Is_Prefixed_Call 10435 (N : Node_Id; Val : Boolean := True); -- Flag17 10436 10437 procedure Set_Is_Protected_Subprogram_Body 10438 (N : Node_Id; Val : Boolean := True); -- Flag7 10439 10440 procedure Set_Is_Static_Coextension 10441 (N : Node_Id; Val : Boolean := True); -- Flag14 10442 10443 procedure Set_Is_Static_Expression 10444 (N : Node_Id; Val : Boolean := True); -- Flag6 10445 10446 procedure Set_Is_Subprogram_Descriptor 10447 (N : Node_Id; Val : Boolean := True); -- Flag16 10448 10449 procedure Set_Is_Task_Allocation_Block 10450 (N : Node_Id; Val : Boolean := True); -- Flag6 10451 10452 procedure Set_Is_Task_Body_Procedure 10453 (N : Node_Id; Val : Boolean := True); -- Flag1 10454 10455 procedure Set_Is_Task_Master 10456 (N : Node_Id; Val : Boolean := True); -- Flag5 10457 10458 procedure Set_Iteration_Scheme 10459 (N : Node_Id; Val : Node_Id); -- Node2 10460 10461 procedure Set_Iterator_Specification 10462 (N : Node_Id; Val : Node_Id); -- Node2 10463 10464 procedure Set_Itype 10465 (N : Node_Id; Val : Entity_Id); -- Node1 10466 10467 procedure Set_Kill_Range_Check 10468 (N : Node_Id; Val : Boolean := True); -- Flag11 10469 10470 procedure Set_Last_Bit 10471 (N : Node_Id; Val : Node_Id); -- Node4 10472 10473 procedure Set_Last_Name 10474 (N : Node_Id; Val : Boolean := True); -- Flag6 10475 10476 procedure Set_Library_Unit 10477 (N : Node_Id; Val : Node_Id); -- Node4 10478 10479 procedure Set_Label_Construct 10480 (N : Node_Id; Val : Node_Id); -- Node2 10481 10482 procedure Set_Left_Opnd 10483 (N : Node_Id; Val : Node_Id); -- Node2 10484 10485 procedure Set_Limited_View_Installed 10486 (N : Node_Id; Val : Boolean := True); -- Flag18 10487 10488 procedure Set_Limited_Present 10489 (N : Node_Id; Val : Boolean := True); -- Flag17 10490 10491 procedure Set_Literals 10492 (N : Node_Id; Val : List_Id); -- List1 10493 10494 procedure Set_Local_Raise_Not_OK 10495 (N : Node_Id; Val : Boolean := True); -- Flag7 10496 10497 procedure Set_Local_Raise_Statements 10498 (N : Node_Id; Val : Elist_Id); -- Elist1 10499 10500 procedure Set_Loop_Actions 10501 (N : Node_Id; Val : List_Id); -- List2 10502 10503 procedure Set_Loop_Parameter_Specification 10504 (N : Node_Id; Val : Node_Id); -- Node4 10505 10506 procedure Set_Low_Bound 10507 (N : Node_Id; Val : Node_Id); -- Node1 10508 10509 procedure Set_Mod_Clause 10510 (N : Node_Id; Val : Node_Id); -- Node2 10511 10512 procedure Set_More_Ids 10513 (N : Node_Id; Val : Boolean := True); -- Flag5 10514 10515 procedure Set_Must_Be_Byte_Aligned 10516 (N : Node_Id; Val : Boolean := True); -- Flag14 10517 10518 procedure Set_Must_Not_Freeze 10519 (N : Node_Id; Val : Boolean := True); -- Flag8 10520 10521 procedure Set_Must_Not_Override 10522 (N : Node_Id; Val : Boolean := True); -- Flag15 10523 10524 procedure Set_Must_Override 10525 (N : Node_Id; Val : Boolean := True); -- Flag14 10526 10527 procedure Set_Name 10528 (N : Node_Id; Val : Node_Id); -- Node2 10529 10530 procedure Set_Names 10531 (N : Node_Id; Val : List_Id); -- List2 10532 10533 procedure Set_Next_Entity 10534 (N : Node_Id; Val : Node_Id); -- Node2 10535 10536 procedure Set_Next_Exit_Statement 10537 (N : Node_Id; Val : Node_Id); -- Node3 10538 10539 procedure Set_Next_Implicit_With 10540 (N : Node_Id; Val : Node_Id); -- Node3 10541 10542 procedure Set_Next_Named_Actual 10543 (N : Node_Id; Val : Node_Id); -- Node4 10544 10545 procedure Set_Next_Pragma 10546 (N : Node_Id; Val : Node_Id); -- Node1 10547 10548 procedure Set_Next_Rep_Item 10549 (N : Node_Id; Val : Node_Id); -- Node5 10550 10551 procedure Set_Next_Use_Clause 10552 (N : Node_Id; Val : Node_Id); -- Node3 10553 10554 procedure Set_No_Ctrl_Actions 10555 (N : Node_Id; Val : Boolean := True); -- Flag7 10556 10557 procedure Set_No_Elaboration_Check 10558 (N : Node_Id; Val : Boolean := True); -- Flag14 10559 10560 procedure Set_No_Entities_Ref_In_Spec 10561 (N : Node_Id; Val : Boolean := True); -- Flag8 10562 10563 procedure Set_No_Initialization 10564 (N : Node_Id; Val : Boolean := True); -- Flag13 10565 10566 procedure Set_No_Minimize_Eliminate 10567 (N : Node_Id; Val : Boolean := True); -- Flag17 10568 10569 procedure Set_No_Truncation 10570 (N : Node_Id; Val : Boolean := True); -- Flag17 10571 10572 procedure Set_Non_Aliased_Prefix 10573 (N : Node_Id; Val : Boolean := True); -- Flag18 10574 10575 procedure Set_Null_Present 10576 (N : Node_Id; Val : Boolean := True); -- Flag13 10577 10578 procedure Set_Null_Excluding_Subtype 10579 (N : Node_Id; Val : Boolean := True); -- Flag16 10580 10581 procedure Set_Null_Exclusion_Present 10582 (N : Node_Id; Val : Boolean := True); -- Flag11 10583 10584 procedure Set_Null_Exclusion_In_Return_Present 10585 (N : Node_Id; Val : Boolean := True); -- Flag14 10586 10587 procedure Set_Null_Record_Present 10588 (N : Node_Id; Val : Boolean := True); -- Flag17 10589 10590 procedure Set_Object_Definition 10591 (N : Node_Id; Val : Node_Id); -- Node4 10592 10593 procedure Set_Of_Present 10594 (N : Node_Id; Val : Boolean := True); -- Flag16 10595 10596 procedure Set_Original_Discriminant 10597 (N : Node_Id; Val : Node_Id); -- Node2 10598 10599 procedure Set_Original_Entity 10600 (N : Node_Id; Val : Entity_Id); -- Node2 10601 10602 procedure Set_Others_Discrete_Choices 10603 (N : Node_Id; Val : List_Id); -- List1 10604 10605 procedure Set_Out_Present 10606 (N : Node_Id; Val : Boolean := True); -- Flag17 10607 10608 procedure Set_Parameter_Associations 10609 (N : Node_Id; Val : List_Id); -- List3 10610 10611 procedure Set_Parameter_Specifications 10612 (N : Node_Id; Val : List_Id); -- List3 10613 10614 procedure Set_Parameter_Type 10615 (N : Node_Id; Val : Node_Id); -- Node2 10616 10617 procedure Set_Parent_Spec 10618 (N : Node_Id; Val : Node_Id); -- Node4 10619 10620 procedure Set_Position 10621 (N : Node_Id; Val : Node_Id); -- Node2 10622 10623 procedure Set_Pragma_Argument_Associations 10624 (N : Node_Id; Val : List_Id); -- List2 10625 10626 procedure Set_Pragma_Identifier 10627 (N : Node_Id; Val : Node_Id); -- Node4 10628 10629 procedure Set_Pragmas_After 10630 (N : Node_Id; Val : List_Id); -- List5 10631 10632 procedure Set_Pragmas_Before 10633 (N : Node_Id; Val : List_Id); -- List4 10634 10635 procedure Set_Pre_Post_Conditions 10636 (N : Node_Id; Val : Node_Id); -- Node1 10637 10638 procedure Set_Prefix 10639 (N : Node_Id; Val : Node_Id); -- Node3 10640 10641 procedure Set_Premature_Use 10642 (N : Node_Id; Val : Node_Id); -- Node5 10643 10644 procedure Set_Present_Expr 10645 (N : Node_Id; Val : Uint); -- Uint3 10646 10647 procedure Set_Prev_Ids 10648 (N : Node_Id; Val : Boolean := True); -- Flag6 10649 10650 procedure Set_Print_In_Hex 10651 (N : Node_Id; Val : Boolean := True); -- Flag13 10652 10653 procedure Set_Private_Declarations 10654 (N : Node_Id; Val : List_Id); -- List3 10655 10656 procedure Set_Private_Present 10657 (N : Node_Id; Val : Boolean := True); -- Flag15 10658 10659 procedure Set_Procedure_To_Call 10660 (N : Node_Id; Val : Node_Id); -- Node2 10661 10662 procedure Set_Proper_Body 10663 (N : Node_Id; Val : Node_Id); -- Node1 10664 10665 procedure Set_Protected_Definition 10666 (N : Node_Id; Val : Node_Id); -- Node3 10667 10668 procedure Set_Protected_Present 10669 (N : Node_Id; Val : Boolean := True); -- Flag6 10670 10671 procedure Set_Raises_Constraint_Error 10672 (N : Node_Id; Val : Boolean := True); -- Flag7 10673 10674 procedure Set_Range_Constraint 10675 (N : Node_Id; Val : Node_Id); -- Node4 10676 10677 procedure Set_Range_Expression 10678 (N : Node_Id; Val : Node_Id); -- Node4 10679 10680 procedure Set_Real_Range_Specification 10681 (N : Node_Id; Val : Node_Id); -- Node4 10682 10683 procedure Set_Realval 10684 (N : Node_Id; Val : Ureal); -- Ureal3 10685 10686 procedure Set_Reason 10687 (N : Node_Id; Val : Uint); -- Uint3 10688 10689 procedure Set_Record_Extension_Part 10690 (N : Node_Id; Val : Node_Id); -- Node3 10691 10692 procedure Set_Redundant_Use 10693 (N : Node_Id; Val : Boolean := True); -- Flag13 10694 10695 procedure Set_Renaming_Exception 10696 (N : Node_Id; Val : Node_Id); -- Node2 10697 10698 procedure Set_Result_Definition 10699 (N : Node_Id; Val : Node_Id); -- Node4 10700 10701 procedure Set_Return_Object_Declarations 10702 (N : Node_Id; Val : List_Id); -- List3 10703 10704 procedure Set_Return_Statement_Entity 10705 (N : Node_Id; Val : Node_Id); -- Node5 10706 10707 procedure Set_Reverse_Present 10708 (N : Node_Id; Val : Boolean := True); -- Flag15 10709 10710 procedure Set_Right_Opnd 10711 (N : Node_Id; Val : Node_Id); -- Node3 10712 10713 procedure Set_Rounded_Result 10714 (N : Node_Id; Val : Boolean := True); -- Flag18 10715 10716 procedure Set_SCIL_Controlling_Tag 10717 (N : Node_Id; Val : Node_Id); -- Node5 10718 10719 procedure Set_SCIL_Entity 10720 (N : Node_Id; Val : Node_Id); -- Node4 10721 10722 procedure Set_SCIL_Tag_Value 10723 (N : Node_Id; Val : Node_Id); -- Node5 10724 10725 procedure Set_SCIL_Target_Prim 10726 (N : Node_Id; Val : Node_Id); -- Node2 10727 10728 procedure Set_Scope 10729 (N : Node_Id; Val : Node_Id); -- Node3 10730 10731 procedure Set_Select_Alternatives 10732 (N : Node_Id; Val : List_Id); -- List1 10733 10734 procedure Set_Selector_Name 10735 (N : Node_Id; Val : Node_Id); -- Node2 10736 10737 procedure Set_Selector_Names 10738 (N : Node_Id; Val : List_Id); -- List1 10739 10740 procedure Set_Shift_Count_OK 10741 (N : Node_Id; Val : Boolean := True); -- Flag4 10742 10743 procedure Set_Source_Type 10744 (N : Node_Id; Val : Entity_Id); -- Node1 10745 10746 procedure Set_Specification 10747 (N : Node_Id; Val : Node_Id); -- Node1 10748 10749 procedure Set_Split_PPC 10750 (N : Node_Id; Val : Boolean); -- Flag17 10751 10752 procedure Set_Statements 10753 (N : Node_Id; Val : List_Id); -- List3 10754 10755 procedure Set_Storage_Pool 10756 (N : Node_Id; Val : Node_Id); -- Node1 10757 10758 procedure Set_Subpool_Handle_Name 10759 (N : Node_Id; Val : Node_Id); -- Node4 10760 10761 procedure Set_Strval 10762 (N : Node_Id; Val : String_Id); -- Str3 10763 10764 procedure Set_Subtype_Indication 10765 (N : Node_Id; Val : Node_Id); -- Node5 10766 10767 procedure Set_Subtype_Mark 10768 (N : Node_Id; Val : Node_Id); -- Node4 10769 10770 procedure Set_Subtype_Marks 10771 (N : Node_Id; Val : List_Id); -- List2 10772 10773 procedure Set_Suppress_Assignment_Checks 10774 (N : Node_Id; Val : Boolean := True); -- Flag18 10775 10776 procedure Set_Suppress_Loop_Warnings 10777 (N : Node_Id; Val : Boolean := True); -- Flag17 10778 10779 procedure Set_Synchronized_Present 10780 (N : Node_Id; Val : Boolean := True); -- Flag7 10781 10782 procedure Set_Tagged_Present 10783 (N : Node_Id; Val : Boolean := True); -- Flag15 10784 10785 procedure Set_Target_Type 10786 (N : Node_Id; Val : Entity_Id); -- Node2 10787 10788 procedure Set_Task_Definition 10789 (N : Node_Id; Val : Node_Id); -- Node3 10790 10791 procedure Set_Task_Present 10792 (N : Node_Id; Val : Boolean := True); -- Flag5 10793 10794 procedure Set_Then_Actions 10795 (N : Node_Id; Val : List_Id); -- List2 10796 10797 procedure Set_Then_Statements 10798 (N : Node_Id; Val : List_Id); -- List2 10799 10800 procedure Set_Treat_Fixed_As_Integer 10801 (N : Node_Id; Val : Boolean := True); -- Flag14 10802 10803 procedure Set_Triggering_Alternative 10804 (N : Node_Id; Val : Node_Id); -- Node1 10805 10806 procedure Set_Triggering_Statement 10807 (N : Node_Id; Val : Node_Id); -- Node1 10808 10809 procedure Set_TSS_Elist 10810 (N : Node_Id; Val : Elist_Id); -- Elist3 10811 10812 procedure Set_Type_Definition 10813 (N : Node_Id; Val : Node_Id); -- Node3 10814 10815 procedure Set_Uneval_Old_Accept 10816 (N : Node_Id; Val : Boolean := True); -- Flag7 10817 10818 procedure Set_Uneval_Old_Warn 10819 (N : Node_Id; Val : Boolean := True); -- Flag18 10820 10821 procedure Set_Unit 10822 (N : Node_Id; Val : Node_Id); -- Node2 10823 10824 procedure Set_Unknown_Discriminants_Present 10825 (N : Node_Id; Val : Boolean := True); -- Flag13 10826 10827 procedure Set_Unreferenced_In_Spec 10828 (N : Node_Id; Val : Boolean := True); -- Flag7 10829 10830 procedure Set_Variant_Part 10831 (N : Node_Id; Val : Node_Id); -- Node4 10832 10833 procedure Set_Variants 10834 (N : Node_Id; Val : List_Id); -- List1 10835 10836 procedure Set_Visible_Declarations 10837 (N : Node_Id; Val : List_Id); -- List2 10838 10839 procedure Set_Uninitialized_Variable 10840 (N : Node_Id; Val : Node_Id); -- Node3 10841 10842 procedure Set_Used_Operations 10843 (N : Node_Id; Val : Elist_Id); -- Elist5 10844 10845 procedure Set_Was_Expression_Function 10846 (N : Node_Id; Val : Boolean := True); -- Flag18 10847 10848 procedure Set_Was_Originally_Stub 10849 (N : Node_Id; Val : Boolean := True); -- Flag13 10850 10851 procedure Set_Withed_Body 10852 (N : Node_Id; Val : Node_Id); -- Node1 10853 10854 ------------------------- 10855 -- Iterator Procedures -- 10856 ------------------------- 10857 10858 -- The call to Next_xxx (N) is equivalent to N := Next_xxx (N) 10859 10860 procedure Next_Entity (N : in out Node_Id); 10861 procedure Next_Named_Actual (N : in out Node_Id); 10862 procedure Next_Rep_Item (N : in out Node_Id); 10863 procedure Next_Use_Clause (N : in out Node_Id); 10864 10865 ------------------------------------------- 10866 -- Miscellaneous Tree Access Subprograms -- 10867 ------------------------------------------- 10868 10869 function End_Location (N : Node_Id) return Source_Ptr; 10870 -- N is an N_If_Statement or N_Case_Statement node, and this function 10871 -- returns the location of the IF token in the END IF sequence by 10872 -- translating the value of the End_Span field. 10873 10874 procedure Set_End_Location (N : Node_Id; S : Source_Ptr); 10875 -- N is an N_If_Statement or N_Case_Statement node. This procedure sets 10876 -- the End_Span field to correspond to the given value S. In other words, 10877 -- End_Span is set to the difference between S and Sloc (N), the starting 10878 -- location. 10879 10880 function Get_Pragma_Arg (Arg : Node_Id) return Node_Id; 10881 -- Given an argument to a pragma Arg, this function returns the expression 10882 -- for the argument. This is Arg itself, or, in the case where Arg is a 10883 -- pragma argument association node, the expression from this node. 10884 10885 -------------------------------- 10886 -- Node_Kind Membership Tests -- 10887 -------------------------------- 10888 10889 -- The following functions allow a convenient notation for testing whether 10890 -- a Node_Kind value matches any one of a list of possible values. In each 10891 -- case True is returned if the given T argument is equal to any of the V 10892 -- arguments. Note that there is a similar set of functions defined in 10893 -- Atree where the first argument is a Node_Id whose Nkind field is tested. 10894 10895 function Nkind_In 10896 (T : Node_Kind; 10897 V1 : Node_Kind; 10898 V2 : Node_Kind) return Boolean; 10899 10900 function Nkind_In 10901 (T : Node_Kind; 10902 V1 : Node_Kind; 10903 V2 : Node_Kind; 10904 V3 : Node_Kind) return Boolean; 10905 10906 function Nkind_In 10907 (T : Node_Kind; 10908 V1 : Node_Kind; 10909 V2 : Node_Kind; 10910 V3 : Node_Kind; 10911 V4 : Node_Kind) return Boolean; 10912 10913 function Nkind_In 10914 (T : Node_Kind; 10915 V1 : Node_Kind; 10916 V2 : Node_Kind; 10917 V3 : Node_Kind; 10918 V4 : Node_Kind; 10919 V5 : Node_Kind) return Boolean; 10920 10921 function Nkind_In 10922 (T : Node_Kind; 10923 V1 : Node_Kind; 10924 V2 : Node_Kind; 10925 V3 : Node_Kind; 10926 V4 : Node_Kind; 10927 V5 : Node_Kind; 10928 V6 : Node_Kind) return Boolean; 10929 10930 function Nkind_In 10931 (T : Node_Kind; 10932 V1 : Node_Kind; 10933 V2 : Node_Kind; 10934 V3 : Node_Kind; 10935 V4 : Node_Kind; 10936 V5 : Node_Kind; 10937 V6 : Node_Kind; 10938 V7 : Node_Kind) return Boolean; 10939 10940 function Nkind_In 10941 (T : Node_Kind; 10942 V1 : Node_Kind; 10943 V2 : Node_Kind; 10944 V3 : Node_Kind; 10945 V4 : Node_Kind; 10946 V5 : Node_Kind; 10947 V6 : Node_Kind; 10948 V7 : Node_Kind; 10949 V8 : Node_Kind) return Boolean; 10950 10951 function Nkind_In 10952 (T : Node_Kind; 10953 V1 : Node_Kind; 10954 V2 : Node_Kind; 10955 V3 : Node_Kind; 10956 V4 : Node_Kind; 10957 V5 : Node_Kind; 10958 V6 : Node_Kind; 10959 V7 : Node_Kind; 10960 V8 : Node_Kind; 10961 V9 : Node_Kind) return Boolean; 10962 10963 pragma Inline (Nkind_In); 10964 -- Inline all above functions 10965 10966 ----------------------- 10967 -- Utility Functions -- 10968 ----------------------- 10969 10970 function Pragma_Name (N : Node_Id) return Name_Id; 10971 pragma Inline (Pragma_Name); 10972 -- Convenient function to obtain Chars field of Pragma_Identifier 10973 10974 ----------------------------- 10975 -- Syntactic Parent Tables -- 10976 ----------------------------- 10977 10978 -- These tables show for each node, and for each of the five fields, 10979 -- whether the corresponding field is syntactic (True) or semantic (False). 10980 -- Unused entries are also set to False. 10981 10982 subtype Field_Num is Natural range 1 .. 5; 10983 10984 Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := ( 10985 10986 -- Following entries can be built automatically from the sinfo sources 10987 -- using the makeisf utility (currently this program is in spitbol). 10988 10989 N_Identifier => 10990 (1 => True, -- Chars (Name1) 10991 2 => False, -- Original_Discriminant (Node2-Sem) 10992 3 => False, -- unused 10993 4 => False, -- Entity (Node4-Sem) 10994 5 => False), -- Etype (Node5-Sem) 10995 10996 N_Integer_Literal => 10997 (1 => False, -- unused 10998 2 => False, -- Original_Entity (Node2-Sem) 10999 3 => True, -- Intval (Uint3) 11000 4 => False, -- unused 11001 5 => False), -- Etype (Node5-Sem) 11002 11003 N_Real_Literal => 11004 (1 => False, -- unused 11005 2 => False, -- Original_Entity (Node2-Sem) 11006 3 => True, -- Realval (Ureal3) 11007 4 => False, -- Corresponding_Integer_Value (Uint4-Sem) 11008 5 => False), -- Etype (Node5-Sem) 11009 11010 N_Character_Literal => 11011 (1 => True, -- Chars (Name1) 11012 2 => True, -- Char_Literal_Value (Uint2) 11013 3 => False, -- unused 11014 4 => False, -- Entity (Node4-Sem) 11015 5 => False), -- Etype (Node5-Sem) 11016 11017 N_String_Literal => 11018 (1 => False, -- unused 11019 2 => False, -- unused 11020 3 => True, -- Strval (Str3) 11021 4 => False, -- unused 11022 5 => False), -- Etype (Node5-Sem) 11023 11024 N_Pragma => 11025 (1 => False, -- Next_Pragma (Node1-Sem) 11026 2 => True, -- Pragma_Argument_Associations (List2) 11027 3 => False, -- Corresponding_Aspect (Node3-Sem) 11028 4 => True, -- Pragma_Identifier (Node4) 11029 5 => False), -- Next_Rep_Item (Node5-Sem) 11030 11031 N_Pragma_Argument_Association => 11032 (1 => True, -- Chars (Name1) 11033 2 => False, -- unused 11034 3 => True, -- Expression (Node3) 11035 4 => False, -- unused 11036 5 => False), -- unused 11037 11038 N_Defining_Identifier => 11039 (1 => True, -- Chars (Name1) 11040 2 => False, -- Next_Entity (Node2-Sem) 11041 3 => False, -- Scope (Node3-Sem) 11042 4 => False, -- unused 11043 5 => False), -- Etype (Node5-Sem) 11044 11045 N_Full_Type_Declaration => 11046 (1 => True, -- Defining_Identifier (Node1) 11047 2 => False, -- Incomplete_View (Node2-Sem) 11048 3 => True, -- Type_Definition (Node3) 11049 4 => True, -- Discriminant_Specifications (List4) 11050 5 => False), -- unused 11051 11052 N_Subtype_Declaration => 11053 (1 => True, -- Defining_Identifier (Node1) 11054 2 => False, -- unused 11055 3 => False, -- unused 11056 4 => False, -- Generic_Parent_Type (Node4-Sem) 11057 5 => True), -- Subtype_Indication (Node5) 11058 11059 N_Subtype_Indication => 11060 (1 => False, -- unused 11061 2 => False, -- unused 11062 3 => True, -- Constraint (Node3) 11063 4 => True, -- Subtype_Mark (Node4) 11064 5 => False), -- Etype (Node5-Sem) 11065 11066 N_Object_Declaration => 11067 (1 => True, -- Defining_Identifier (Node1) 11068 2 => False, -- Handler_List_Entry (Node2-Sem) 11069 3 => True, -- Expression (Node3) 11070 4 => True, -- Object_Definition (Node4) 11071 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 11072 11073 N_Number_Declaration => 11074 (1 => True, -- Defining_Identifier (Node1) 11075 2 => False, -- unused 11076 3 => True, -- Expression (Node3) 11077 4 => False, -- unused 11078 5 => False), -- unused 11079 11080 N_Derived_Type_Definition => 11081 (1 => False, -- unused 11082 2 => True, -- Interface_List (List2) 11083 3 => True, -- Record_Extension_Part (Node3) 11084 4 => False, -- unused 11085 5 => True), -- Subtype_Indication (Node5) 11086 11087 N_Range_Constraint => 11088 (1 => False, -- unused 11089 2 => False, -- unused 11090 3 => False, -- unused 11091 4 => True, -- Range_Expression (Node4) 11092 5 => False), -- unused 11093 11094 N_Range => 11095 (1 => True, -- Low_Bound (Node1) 11096 2 => True, -- High_Bound (Node2) 11097 3 => False, -- unused 11098 4 => False, -- unused 11099 5 => False), -- Etype (Node5-Sem) 11100 11101 N_Enumeration_Type_Definition => 11102 (1 => True, -- Literals (List1) 11103 2 => False, -- unused 11104 3 => False, -- unused 11105 4 => True, -- End_Label (Node4) 11106 5 => False), -- unused 11107 11108 N_Defining_Character_Literal => 11109 (1 => True, -- Chars (Name1) 11110 2 => False, -- Next_Entity (Node2-Sem) 11111 3 => False, -- Scope (Node3-Sem) 11112 4 => False, -- unused 11113 5 => False), -- Etype (Node5-Sem) 11114 11115 N_Signed_Integer_Type_Definition => 11116 (1 => True, -- Low_Bound (Node1) 11117 2 => True, -- High_Bound (Node2) 11118 3 => False, -- unused 11119 4 => False, -- unused 11120 5 => False), -- unused 11121 11122 N_Modular_Type_Definition => 11123 (1 => False, -- unused 11124 2 => False, -- unused 11125 3 => True, -- Expression (Node3) 11126 4 => False, -- unused 11127 5 => False), -- unused 11128 11129 N_Floating_Point_Definition => 11130 (1 => False, -- unused 11131 2 => True, -- Digits_Expression (Node2) 11132 3 => False, -- unused 11133 4 => True, -- Real_Range_Specification (Node4) 11134 5 => False), -- unused 11135 11136 N_Real_Range_Specification => 11137 (1 => True, -- Low_Bound (Node1) 11138 2 => True, -- High_Bound (Node2) 11139 3 => False, -- unused 11140 4 => False, -- unused 11141 5 => False), -- unused 11142 11143 N_Ordinary_Fixed_Point_Definition => 11144 (1 => False, -- unused 11145 2 => False, -- unused 11146 3 => True, -- Delta_Expression (Node3) 11147 4 => True, -- Real_Range_Specification (Node4) 11148 5 => False), -- unused 11149 11150 N_Decimal_Fixed_Point_Definition => 11151 (1 => False, -- unused 11152 2 => True, -- Digits_Expression (Node2) 11153 3 => True, -- Delta_Expression (Node3) 11154 4 => True, -- Real_Range_Specification (Node4) 11155 5 => False), -- unused 11156 11157 N_Digits_Constraint => 11158 (1 => False, -- unused 11159 2 => True, -- Digits_Expression (Node2) 11160 3 => False, -- unused 11161 4 => True, -- Range_Constraint (Node4) 11162 5 => False), -- unused 11163 11164 N_Unconstrained_Array_Definition => 11165 (1 => False, -- unused 11166 2 => True, -- Subtype_Marks (List2) 11167 3 => False, -- unused 11168 4 => True, -- Component_Definition (Node4) 11169 5 => False), -- unused 11170 11171 N_Constrained_Array_Definition => 11172 (1 => False, -- unused 11173 2 => True, -- Discrete_Subtype_Definitions (List2) 11174 3 => False, -- unused 11175 4 => True, -- Component_Definition (Node4) 11176 5 => False), -- unused 11177 11178 N_Component_Definition => 11179 (1 => False, -- unused 11180 2 => False, -- unused 11181 3 => True, -- Access_Definition (Node3) 11182 4 => False, -- unused 11183 5 => True), -- Subtype_Indication (Node5) 11184 11185 N_Discriminant_Specification => 11186 (1 => True, -- Defining_Identifier (Node1) 11187 2 => False, -- unused 11188 3 => True, -- Expression (Node3) 11189 4 => False, -- unused 11190 5 => True), -- Discriminant_Type (Node5) 11191 11192 N_Index_Or_Discriminant_Constraint => 11193 (1 => True, -- Constraints (List1) 11194 2 => False, -- unused 11195 3 => False, -- unused 11196 4 => False, -- unused 11197 5 => False), -- unused 11198 11199 N_Discriminant_Association => 11200 (1 => True, -- Selector_Names (List1) 11201 2 => False, -- unused 11202 3 => True, -- Expression (Node3) 11203 4 => False, -- unused 11204 5 => False), -- unused 11205 11206 N_Record_Definition => 11207 (1 => True, -- Component_List (Node1) 11208 2 => True, -- Interface_List (List2) 11209 3 => False, -- unused 11210 4 => True, -- End_Label (Node4) 11211 5 => False), -- unused 11212 11213 N_Component_List => 11214 (1 => False, -- unused 11215 2 => False, -- unused 11216 3 => True, -- Component_Items (List3) 11217 4 => True, -- Variant_Part (Node4) 11218 5 => False), -- unused 11219 11220 N_Component_Declaration => 11221 (1 => True, -- Defining_Identifier (Node1) 11222 2 => False, -- unused 11223 3 => True, -- Expression (Node3) 11224 4 => True, -- Component_Definition (Node4) 11225 5 => False), -- unused 11226 11227 N_Variant_Part => 11228 (1 => True, -- Variants (List1) 11229 2 => True, -- Name (Node2) 11230 3 => False, -- unused 11231 4 => False, -- unused 11232 5 => False), -- unused 11233 11234 N_Variant => 11235 (1 => True, -- Component_List (Node1) 11236 2 => False, -- Enclosing_Variant (Node2-Sem) 11237 3 => False, -- Present_Expr (Uint3-Sem) 11238 4 => True, -- Discrete_Choices (List4) 11239 5 => False), -- Dcheck_Function (Node5-Sem) 11240 11241 N_Others_Choice => 11242 (1 => False, -- Others_Discrete_Choices (List1-Sem) 11243 2 => False, -- unused 11244 3 => False, -- unused 11245 4 => False, -- unused 11246 5 => False), -- unused 11247 11248 N_Access_To_Object_Definition => 11249 (1 => False, -- unused 11250 2 => False, -- unused 11251 3 => False, -- unused 11252 4 => False, -- unused 11253 5 => True), -- Subtype_Indication (Node5) 11254 11255 N_Access_Function_Definition => 11256 (1 => False, -- unused 11257 2 => False, -- unused 11258 3 => True, -- Parameter_Specifications (List3) 11259 4 => True, -- Result_Definition (Node4) 11260 5 => False), -- unused 11261 11262 N_Access_Procedure_Definition => 11263 (1 => False, -- unused 11264 2 => False, -- unused 11265 3 => True, -- Parameter_Specifications (List3) 11266 4 => False, -- unused 11267 5 => False), -- unused 11268 11269 N_Access_Definition => 11270 (1 => False, -- unused 11271 2 => False, -- unused 11272 3 => True, -- Access_To_Subprogram_Definition (Node3) 11273 4 => True, -- Subtype_Mark (Node4) 11274 5 => False), -- unused 11275 11276 N_Incomplete_Type_Declaration => 11277 (1 => True, -- Defining_Identifier (Node1) 11278 2 => False, -- unused 11279 3 => False, -- unused 11280 4 => True, -- Discriminant_Specifications (List4) 11281 5 => False), -- Premature_Use 11282 11283 N_Explicit_Dereference => 11284 (1 => False, -- unused 11285 2 => False, -- unused 11286 3 => True, -- Prefix (Node3) 11287 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 11288 5 => False), -- Etype (Node5-Sem) 11289 11290 N_Indexed_Component => 11291 (1 => True, -- Expressions (List1) 11292 2 => False, -- unused 11293 3 => True, -- Prefix (Node3) 11294 4 => False, -- Generalized_Indexing (Node4-Sem) 11295 5 => False), -- Etype (Node5-Sem) 11296 11297 N_Slice => 11298 (1 => False, -- unused 11299 2 => False, -- unused 11300 3 => True, -- Prefix (Node3) 11301 4 => True, -- Discrete_Range (Node4) 11302 5 => False), -- Etype (Node5-Sem) 11303 11304 N_Selected_Component => 11305 (1 => False, -- unused 11306 2 => True, -- Selector_Name (Node2) 11307 3 => True, -- Prefix (Node3) 11308 4 => False, -- unused 11309 5 => False), -- Etype (Node5-Sem) 11310 11311 N_Attribute_Reference => 11312 (1 => True, -- Expressions (List1) 11313 2 => True, -- Attribute_Name (Name2) 11314 3 => True, -- Prefix (Node3) 11315 4 => False, -- Entity (Node4-Sem) 11316 5 => False), -- Etype (Node5-Sem) 11317 11318 N_Aggregate => 11319 (1 => True, -- Expressions (List1) 11320 2 => True, -- Component_Associations (List2) 11321 3 => False, -- Aggregate_Bounds (Node3-Sem) 11322 4 => False, -- unused 11323 5 => False), -- Etype (Node5-Sem) 11324 11325 N_Component_Association => 11326 (1 => True, -- Choices (List1) 11327 2 => False, -- Loop_Actions (List2-Sem) 11328 3 => True, -- Expression (Node3) 11329 4 => False, -- unused 11330 5 => False), -- unused 11331 11332 N_Extension_Aggregate => 11333 (1 => True, -- Expressions (List1) 11334 2 => True, -- Component_Associations (List2) 11335 3 => True, -- Ancestor_Part (Node3) 11336 4 => False, -- unused 11337 5 => False), -- Etype (Node5-Sem) 11338 11339 N_Null => 11340 (1 => False, -- unused 11341 2 => False, -- unused 11342 3 => False, -- unused 11343 4 => False, -- unused 11344 5 => False), -- Etype (Node5-Sem) 11345 11346 N_And_Then => 11347 (1 => False, -- Actions (List1-Sem) 11348 2 => True, -- Left_Opnd (Node2) 11349 3 => True, -- Right_Opnd (Node3) 11350 4 => False, -- unused 11351 5 => False), -- Etype (Node5-Sem) 11352 11353 N_Or_Else => 11354 (1 => False, -- Actions (List1-Sem) 11355 2 => True, -- Left_Opnd (Node2) 11356 3 => True, -- Right_Opnd (Node3) 11357 4 => False, -- unused 11358 5 => False), -- Etype (Node5-Sem) 11359 11360 N_In => 11361 (1 => False, -- unused 11362 2 => True, -- Left_Opnd (Node2) 11363 3 => True, -- Right_Opnd (Node3) 11364 4 => True, -- Alternatives (List4) 11365 5 => False), -- Etype (Node5-Sem) 11366 11367 N_Not_In => 11368 (1 => False, -- unused 11369 2 => True, -- Left_Opnd (Node2) 11370 3 => True, -- Right_Opnd (Node3) 11371 4 => True, -- Alternatives (List4) 11372 5 => False), -- Etype (Node5-Sem) 11373 11374 N_Op_And => 11375 (1 => True, -- Chars (Name1) 11376 2 => True, -- Left_Opnd (Node2) 11377 3 => True, -- Right_Opnd (Node3) 11378 4 => False, -- Entity (Node4-Sem) 11379 5 => False), -- Etype (Node5-Sem) 11380 11381 N_Op_Or => 11382 (1 => True, -- Chars (Name1) 11383 2 => True, -- Left_Opnd (Node2) 11384 3 => True, -- Right_Opnd (Node3) 11385 4 => False, -- Entity (Node4-Sem) 11386 5 => False), -- Etype (Node5-Sem) 11387 11388 N_Op_Xor => 11389 (1 => True, -- Chars (Name1) 11390 2 => True, -- Left_Opnd (Node2) 11391 3 => True, -- Right_Opnd (Node3) 11392 4 => False, -- Entity (Node4-Sem) 11393 5 => False), -- Etype (Node5-Sem) 11394 11395 N_Op_Eq => 11396 (1 => True, -- Chars (Name1) 11397 2 => True, -- Left_Opnd (Node2) 11398 3 => True, -- Right_Opnd (Node3) 11399 4 => False, -- Entity (Node4-Sem) 11400 5 => False), -- Etype (Node5-Sem) 11401 11402 N_Op_Ne => 11403 (1 => True, -- Chars (Name1) 11404 2 => True, -- Left_Opnd (Node2) 11405 3 => True, -- Right_Opnd (Node3) 11406 4 => False, -- Entity (Node4-Sem) 11407 5 => False), -- Etype (Node5-Sem) 11408 11409 N_Op_Lt => 11410 (1 => True, -- Chars (Name1) 11411 2 => True, -- Left_Opnd (Node2) 11412 3 => True, -- Right_Opnd (Node3) 11413 4 => False, -- Entity (Node4-Sem) 11414 5 => False), -- Etype (Node5-Sem) 11415 11416 N_Op_Le => 11417 (1 => True, -- Chars (Name1) 11418 2 => True, -- Left_Opnd (Node2) 11419 3 => True, -- Right_Opnd (Node3) 11420 4 => False, -- Entity (Node4-Sem) 11421 5 => False), -- Etype (Node5-Sem) 11422 11423 N_Op_Gt => 11424 (1 => True, -- Chars (Name1) 11425 2 => True, -- Left_Opnd (Node2) 11426 3 => True, -- Right_Opnd (Node3) 11427 4 => False, -- Entity (Node4-Sem) 11428 5 => False), -- Etype (Node5-Sem) 11429 11430 N_Op_Ge => 11431 (1 => True, -- Chars (Name1) 11432 2 => True, -- Left_Opnd (Node2) 11433 3 => True, -- Right_Opnd (Node3) 11434 4 => False, -- Entity (Node4-Sem) 11435 5 => False), -- Etype (Node5-Sem) 11436 11437 N_Op_Add => 11438 (1 => True, -- Chars (Name1) 11439 2 => True, -- Left_Opnd (Node2) 11440 3 => True, -- Right_Opnd (Node3) 11441 4 => False, -- Entity (Node4-Sem) 11442 5 => False), -- Etype (Node5-Sem) 11443 11444 N_Op_Subtract => 11445 (1 => True, -- Chars (Name1) 11446 2 => True, -- Left_Opnd (Node2) 11447 3 => True, -- Right_Opnd (Node3) 11448 4 => False, -- Entity (Node4-Sem) 11449 5 => False), -- Etype (Node5-Sem) 11450 11451 N_Op_Concat => 11452 (1 => True, -- Chars (Name1) 11453 2 => True, -- Left_Opnd (Node2) 11454 3 => True, -- Right_Opnd (Node3) 11455 4 => False, -- Entity (Node4-Sem) 11456 5 => False), -- Etype (Node5-Sem) 11457 11458 N_Op_Multiply => 11459 (1 => True, -- Chars (Name1) 11460 2 => True, -- Left_Opnd (Node2) 11461 3 => True, -- Right_Opnd (Node3) 11462 4 => False, -- Entity (Node4-Sem) 11463 5 => False), -- Etype (Node5-Sem) 11464 11465 N_Op_Divide => 11466 (1 => True, -- Chars (Name1) 11467 2 => True, -- Left_Opnd (Node2) 11468 3 => True, -- Right_Opnd (Node3) 11469 4 => False, -- Entity (Node4-Sem) 11470 5 => False), -- Etype (Node5-Sem) 11471 11472 N_Op_Mod => 11473 (1 => True, -- Chars (Name1) 11474 2 => True, -- Left_Opnd (Node2) 11475 3 => True, -- Right_Opnd (Node3) 11476 4 => False, -- Entity (Node4-Sem) 11477 5 => False), -- Etype (Node5-Sem) 11478 11479 N_Op_Rem => 11480 (1 => True, -- Chars (Name1) 11481 2 => True, -- Left_Opnd (Node2) 11482 3 => True, -- Right_Opnd (Node3) 11483 4 => False, -- Entity (Node4-Sem) 11484 5 => False), -- Etype (Node5-Sem) 11485 11486 N_Op_Expon => 11487 (1 => True, -- Chars (Name1) 11488 2 => True, -- Left_Opnd (Node2) 11489 3 => True, -- Right_Opnd (Node3) 11490 4 => False, -- Entity (Node4-Sem) 11491 5 => False), -- Etype (Node5-Sem) 11492 11493 N_Op_Plus => 11494 (1 => True, -- Chars (Name1) 11495 2 => False, -- unused 11496 3 => True, -- Right_Opnd (Node3) 11497 4 => False, -- Entity (Node4-Sem) 11498 5 => False), -- Etype (Node5-Sem) 11499 11500 N_Op_Minus => 11501 (1 => True, -- Chars (Name1) 11502 2 => False, -- unused 11503 3 => True, -- Right_Opnd (Node3) 11504 4 => False, -- Entity (Node4-Sem) 11505 5 => False), -- Etype (Node5-Sem) 11506 11507 N_Op_Abs => 11508 (1 => True, -- Chars (Name1) 11509 2 => False, -- unused 11510 3 => True, -- Right_Opnd (Node3) 11511 4 => False, -- Entity (Node4-Sem) 11512 5 => False), -- Etype (Node5-Sem) 11513 11514 N_Op_Not => 11515 (1 => True, -- Chars (Name1) 11516 2 => False, -- unused 11517 3 => True, -- Right_Opnd (Node3) 11518 4 => False, -- Entity (Node4-Sem) 11519 5 => False), -- Etype (Node5-Sem) 11520 11521 N_Type_Conversion => 11522 (1 => False, -- unused 11523 2 => False, -- unused 11524 3 => True, -- Expression (Node3) 11525 4 => True, -- Subtype_Mark (Node4) 11526 5 => False), -- Etype (Node5-Sem) 11527 11528 N_Qualified_Expression => 11529 (1 => False, -- unused 11530 2 => False, -- unused 11531 3 => True, -- Expression (Node3) 11532 4 => True, -- Subtype_Mark (Node4) 11533 5 => False), -- Etype (Node5-Sem) 11534 11535 N_Quantified_Expression => 11536 (1 => True, -- Condition (Node1) 11537 2 => True, -- Iterator_Specification 11538 3 => False, -- unused 11539 4 => True, -- Loop_Parameter_Specification (Node4) 11540 5 => False), -- Etype (Node5-Sem) 11541 11542 N_Allocator => 11543 (1 => False, -- Storage_Pool (Node1-Sem) 11544 2 => False, -- Procedure_To_Call (Node2-Sem) 11545 3 => True, -- Expression (Node3) 11546 4 => True, -- Subpool_Handle_Name (Node4) 11547 5 => False), -- Etype (Node5-Sem) 11548 11549 N_Null_Statement => 11550 (1 => False, -- unused 11551 2 => False, -- unused 11552 3 => False, -- unused 11553 4 => False, -- unused 11554 5 => False), -- unused 11555 11556 N_Label => 11557 (1 => True, -- Identifier (Node1) 11558 2 => False, -- unused 11559 3 => False, -- unused 11560 4 => False, -- unused 11561 5 => False), -- unused 11562 11563 N_Assignment_Statement => 11564 (1 => False, -- unused 11565 2 => True, -- Name (Node2) 11566 3 => True, -- Expression (Node3) 11567 4 => False, -- unused 11568 5 => False), -- unused 11569 11570 N_If_Statement => 11571 (1 => True, -- Condition (Node1) 11572 2 => True, -- Then_Statements (List2) 11573 3 => True, -- Elsif_Parts (List3) 11574 4 => True, -- Else_Statements (List4) 11575 5 => True), -- End_Span (Uint5) 11576 11577 N_Elsif_Part => 11578 (1 => True, -- Condition (Node1) 11579 2 => True, -- Then_Statements (List2) 11580 3 => False, -- Condition_Actions (List3-Sem) 11581 4 => False, -- unused 11582 5 => False), -- unused 11583 11584 N_Case_Expression => 11585 (1 => False, -- unused 11586 2 => False, -- unused 11587 3 => True, -- Expression (Node3) 11588 4 => True, -- Alternatives (List4) 11589 5 => False), -- unused 11590 11591 N_Case_Expression_Alternative => 11592 (1 => False, -- Actions (List1-Sem) 11593 2 => False, -- unused 11594 3 => True, -- Statements (List3) 11595 4 => True, -- Expression (Node4) 11596 5 => False), -- unused 11597 11598 N_Case_Statement => 11599 (1 => False, -- unused 11600 2 => False, -- unused 11601 3 => True, -- Expression (Node3) 11602 4 => True, -- Alternatives (List4) 11603 5 => True), -- End_Span (Uint5) 11604 11605 N_Case_Statement_Alternative => 11606 (1 => False, -- unused 11607 2 => False, -- unused 11608 3 => True, -- Statements (List3) 11609 4 => True, -- Discrete_Choices (List4) 11610 5 => False), -- unused 11611 11612 N_Loop_Statement => 11613 (1 => True, -- Identifier (Node1) 11614 2 => True, -- Iteration_Scheme (Node2) 11615 3 => True, -- Statements (List3) 11616 4 => True, -- End_Label (Node4) 11617 5 => False), -- unused 11618 11619 N_Iteration_Scheme => 11620 (1 => True, -- Condition (Node1) 11621 2 => True, -- Iterator_Specification (Node2) 11622 3 => False, -- Condition_Actions (List3-Sem) 11623 4 => True, -- Loop_Parameter_Specification (Node4) 11624 5 => False), -- unused 11625 11626 N_Loop_Parameter_Specification => 11627 (1 => True, -- Defining_Identifier (Node1) 11628 2 => False, -- unused 11629 3 => False, -- unused 11630 4 => True, -- Discrete_Subtype_Definition (Node4) 11631 5 => False), -- unused 11632 11633 N_Iterator_Specification => 11634 (1 => True, -- Defining_Identifier (Node1) 11635 2 => True, -- Name (Node2) 11636 3 => False, -- Unused 11637 4 => False, -- Unused 11638 5 => True), -- Subtype_Indication (Node5) 11639 11640 N_Block_Statement => 11641 (1 => True, -- Identifier (Node1) 11642 2 => True, -- Declarations (List2) 11643 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11644 4 => True, -- Handled_Statement_Sequence (Node4) 11645 5 => False), -- unused 11646 11647 N_Exit_Statement => 11648 (1 => True, -- Condition (Node1) 11649 2 => True, -- Name (Node2) 11650 3 => False, -- unused 11651 4 => False, -- unused 11652 5 => False), -- unused 11653 11654 N_Goto_Statement => 11655 (1 => False, -- unused 11656 2 => True, -- Name (Node2) 11657 3 => False, -- unused 11658 4 => False, -- unused 11659 5 => False), -- unused 11660 11661 N_Subprogram_Declaration => 11662 (1 => True, -- Specification (Node1) 11663 2 => False, -- unused 11664 3 => False, -- Body_To_Inline (Node3-Sem) 11665 4 => False, -- Parent_Spec (Node4-Sem) 11666 5 => False), -- Corresponding_Body (Node5-Sem) 11667 11668 N_Abstract_Subprogram_Declaration => 11669 (1 => True, -- Specification (Node1) 11670 2 => False, -- unused 11671 3 => False, -- unused 11672 4 => False, -- unused 11673 5 => False), -- unused 11674 11675 N_Function_Specification => 11676 (1 => True, -- Defining_Unit_Name (Node1) 11677 2 => False, -- unused 11678 3 => True, -- Parameter_Specifications (List3) 11679 4 => True, -- Result_Definition (Node4) 11680 5 => False), -- Generic_Parent (Node5-Sem) 11681 11682 N_Procedure_Specification => 11683 (1 => True, -- Defining_Unit_Name (Node1) 11684 2 => False, -- unused 11685 3 => True, -- Parameter_Specifications (List3) 11686 4 => False, -- unused 11687 5 => False), -- Generic_Parent (Node5-Sem) 11688 11689 N_Designator => 11690 (1 => True, -- Identifier (Node1) 11691 2 => True, -- Name (Node2) 11692 3 => False, -- unused 11693 4 => False, -- unused 11694 5 => False), -- unused 11695 11696 N_Defining_Program_Unit_Name => 11697 (1 => True, -- Defining_Identifier (Node1) 11698 2 => True, -- Name (Node2) 11699 3 => False, -- unused 11700 4 => False, -- unused 11701 5 => False), -- unused 11702 11703 N_Operator_Symbol => 11704 (1 => True, -- Chars (Name1) 11705 2 => False, -- unused 11706 3 => True, -- Strval (Str3) 11707 4 => False, -- Entity (Node4-Sem) 11708 5 => False), -- Etype (Node5-Sem) 11709 11710 N_Defining_Operator_Symbol => 11711 (1 => True, -- Chars (Name1) 11712 2 => False, -- Next_Entity (Node2-Sem) 11713 3 => False, -- Scope (Node3-Sem) 11714 4 => False, -- unused 11715 5 => False), -- Etype (Node5-Sem) 11716 11717 N_Parameter_Specification => 11718 (1 => True, -- Defining_Identifier (Node1) 11719 2 => True, -- Parameter_Type (Node2) 11720 3 => True, -- Expression (Node3) 11721 4 => False, -- unused 11722 5 => False), -- Default_Expression (Node5-Sem) 11723 11724 N_Subprogram_Body => 11725 (1 => True, -- Specification (Node1) 11726 2 => True, -- Declarations (List2) 11727 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11728 4 => True, -- Handled_Statement_Sequence (Node4) 11729 5 => False), -- Corresponding_Spec (Node5-Sem) 11730 11731 N_Expression_Function => 11732 (1 => True, -- Specification (Node1) 11733 2 => False, -- unused 11734 3 => True, -- Expression (Node3) 11735 4 => False, -- unused 11736 5 => False), -- unused 11737 11738 N_Procedure_Call_Statement => 11739 (1 => False, -- Controlling_Argument (Node1-Sem) 11740 2 => True, -- Name (Node2) 11741 3 => True, -- Parameter_Associations (List3) 11742 4 => False, -- First_Named_Actual (Node4-Sem) 11743 5 => False), -- Etype (Node5-Sem) 11744 11745 N_Function_Call => 11746 (1 => False, -- Controlling_Argument (Node1-Sem) 11747 2 => True, -- Name (Node2) 11748 3 => True, -- Parameter_Associations (List3) 11749 4 => False, -- First_Named_Actual (Node4-Sem) 11750 5 => False), -- Etype (Node5-Sem) 11751 11752 N_Parameter_Association => 11753 (1 => False, -- unused 11754 2 => True, -- Selector_Name (Node2) 11755 3 => True, -- Explicit_Actual_Parameter (Node3) 11756 4 => False, -- Next_Named_Actual (Node4-Sem) 11757 5 => False), -- unused 11758 11759 N_Simple_Return_Statement => 11760 (1 => False, -- Storage_Pool (Node1-Sem) 11761 2 => False, -- Procedure_To_Call (Node2-Sem) 11762 3 => True, -- Expression (Node3) 11763 4 => False, -- unused 11764 5 => False), -- Return_Statement_Entity (Node5-Sem) 11765 11766 N_Extended_Return_Statement => 11767 (1 => False, -- Storage_Pool (Node1-Sem) 11768 2 => False, -- Procedure_To_Call (Node2-Sem) 11769 3 => True, -- Return_Object_Declarations (List3) 11770 4 => True, -- Handled_Statement_Sequence (Node4) 11771 5 => False), -- Return_Statement_Entity (Node5-Sem) 11772 11773 N_Package_Declaration => 11774 (1 => True, -- Specification (Node1) 11775 2 => False, -- unused 11776 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11777 4 => False, -- Parent_Spec (Node4-Sem) 11778 5 => False), -- Corresponding_Body (Node5-Sem) 11779 11780 N_Package_Specification => 11781 (1 => True, -- Defining_Unit_Name (Node1) 11782 2 => True, -- Visible_Declarations (List2) 11783 3 => True, -- Private_Declarations (List3) 11784 4 => True, -- End_Label (Node4) 11785 5 => False), -- Generic_Parent (Node5-Sem) 11786 11787 N_Package_Body => 11788 (1 => True, -- Defining_Unit_Name (Node1) 11789 2 => True, -- Declarations (List2) 11790 3 => False, -- unused 11791 4 => True, -- Handled_Statement_Sequence (Node4) 11792 5 => False), -- Corresponding_Spec (Node5-Sem) 11793 11794 N_Private_Type_Declaration => 11795 (1 => True, -- Defining_Identifier (Node1) 11796 2 => False, -- unused 11797 3 => False, -- unused 11798 4 => True, -- Discriminant_Specifications (List4) 11799 5 => False), -- unused 11800 11801 N_Private_Extension_Declaration => 11802 (1 => True, -- Defining_Identifier (Node1) 11803 2 => True, -- Interface_List (List2) 11804 3 => False, -- unused 11805 4 => True, -- Discriminant_Specifications (List4) 11806 5 => True), -- Subtype_Indication (Node5) 11807 11808 N_Use_Package_Clause => 11809 (1 => False, -- unused 11810 2 => True, -- Names (List2) 11811 3 => False, -- Next_Use_Clause (Node3-Sem) 11812 4 => False, -- Hidden_By_Use_Clause (Elist4-Sem) 11813 5 => False), -- unused 11814 11815 N_Use_Type_Clause => 11816 (1 => False, -- unused 11817 2 => True, -- Subtype_Marks (List2) 11818 3 => False, -- Next_Use_Clause (Node3-Sem) 11819 4 => False, -- Hidden_By_Use_Clause (Elist4-Sem) 11820 5 => False), -- unused 11821 11822 N_Object_Renaming_Declaration => 11823 (1 => True, -- Defining_Identifier (Node1) 11824 2 => True, -- Name (Node2) 11825 3 => True, -- Access_Definition (Node3) 11826 4 => True, -- Subtype_Mark (Node4) 11827 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 11828 11829 N_Exception_Renaming_Declaration => 11830 (1 => True, -- Defining_Identifier (Node1) 11831 2 => True, -- Name (Node2) 11832 3 => False, -- unused 11833 4 => False, -- unused 11834 5 => False), -- unused 11835 11836 N_Package_Renaming_Declaration => 11837 (1 => True, -- Defining_Unit_Name (Node1) 11838 2 => True, -- Name (Node2) 11839 3 => False, -- unused 11840 4 => False, -- Parent_Spec (Node4-Sem) 11841 5 => False), -- unused 11842 11843 N_Subprogram_Renaming_Declaration => 11844 (1 => True, -- Specification (Node1) 11845 2 => True, -- Name (Node2) 11846 3 => False, -- Corresponding_Formal_Spec (Node3-Sem) 11847 4 => False, -- Parent_Spec (Node4-Sem) 11848 5 => False), -- Corresponding_Spec (Node5-Sem) 11849 11850 N_Generic_Package_Renaming_Declaration => 11851 (1 => True, -- Defining_Unit_Name (Node1) 11852 2 => True, -- Name (Node2) 11853 3 => False, -- unused 11854 4 => False, -- Parent_Spec (Node4-Sem) 11855 5 => False), -- unused 11856 11857 N_Generic_Procedure_Renaming_Declaration => 11858 (1 => True, -- Defining_Unit_Name (Node1) 11859 2 => True, -- Name (Node2) 11860 3 => False, -- unused 11861 4 => False, -- Parent_Spec (Node4-Sem) 11862 5 => False), -- unused 11863 11864 N_Generic_Function_Renaming_Declaration => 11865 (1 => True, -- Defining_Unit_Name (Node1) 11866 2 => True, -- Name (Node2) 11867 3 => False, -- unused 11868 4 => False, -- Parent_Spec (Node4-Sem) 11869 5 => False), -- unused 11870 11871 N_Task_Type_Declaration => 11872 (1 => True, -- Defining_Identifier (Node1) 11873 2 => True, -- Interface_List (List2) 11874 3 => True, -- Task_Definition (Node3) 11875 4 => True, -- Discriminant_Specifications (List4) 11876 5 => False), -- Corresponding_Body (Node5-Sem) 11877 11878 N_Single_Task_Declaration => 11879 (1 => True, -- Defining_Identifier (Node1) 11880 2 => True, -- Interface_List (List2) 11881 3 => True, -- Task_Definition (Node3) 11882 4 => False, -- unused 11883 5 => False), -- unused 11884 11885 N_Task_Definition => 11886 (1 => False, -- unused 11887 2 => True, -- Visible_Declarations (List2) 11888 3 => True, -- Private_Declarations (List3) 11889 4 => True, -- End_Label (Node4) 11890 5 => False), -- unused 11891 11892 N_Task_Body => 11893 (1 => True, -- Defining_Identifier (Node1) 11894 2 => True, -- Declarations (List2) 11895 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11896 4 => True, -- Handled_Statement_Sequence (Node4) 11897 5 => False), -- Corresponding_Spec (Node5-Sem) 11898 11899 N_Protected_Type_Declaration => 11900 (1 => True, -- Defining_Identifier (Node1) 11901 2 => True, -- Interface_List (List2) 11902 3 => True, -- Protected_Definition (Node3) 11903 4 => True, -- Discriminant_Specifications (List4) 11904 5 => False), -- Corresponding_Body (Node5-Sem) 11905 11906 N_Single_Protected_Declaration => 11907 (1 => True, -- Defining_Identifier (Node1) 11908 2 => True, -- Interface_List (List2) 11909 3 => True, -- Protected_Definition (Node3) 11910 4 => False, -- unused 11911 5 => False), -- unused 11912 11913 N_Protected_Definition => 11914 (1 => False, -- unused 11915 2 => True, -- Visible_Declarations (List2) 11916 3 => True, -- Private_Declarations (List3) 11917 4 => True, -- End_Label (Node4) 11918 5 => False), -- unused 11919 11920 N_Protected_Body => 11921 (1 => True, -- Defining_Identifier (Node1) 11922 2 => True, -- Declarations (List2) 11923 3 => False, -- unused 11924 4 => True, -- End_Label (Node4) 11925 5 => False), -- Corresponding_Spec (Node5-Sem) 11926 11927 N_Entry_Declaration => 11928 (1 => True, -- Defining_Identifier (Node1) 11929 2 => False, -- unused 11930 3 => True, -- Parameter_Specifications (List3) 11931 4 => True, -- Discrete_Subtype_Definition (Node4) 11932 5 => False), -- Corresponding_Body (Node5-Sem) 11933 11934 N_Accept_Statement => 11935 (1 => True, -- Entry_Direct_Name (Node1) 11936 2 => True, -- Declarations (List2) 11937 3 => True, -- Parameter_Specifications (List3) 11938 4 => True, -- Handled_Statement_Sequence (Node4) 11939 5 => True), -- Entry_Index (Node5) 11940 11941 N_Entry_Body => 11942 (1 => True, -- Defining_Identifier (Node1) 11943 2 => True, -- Declarations (List2) 11944 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11945 4 => True, -- Handled_Statement_Sequence (Node4) 11946 5 => True), -- Entry_Body_Formal_Part (Node5) 11947 11948 N_Entry_Body_Formal_Part => 11949 (1 => True, -- Condition (Node1) 11950 2 => False, -- unused 11951 3 => True, -- Parameter_Specifications (List3) 11952 4 => True, -- Entry_Index_Specification (Node4) 11953 5 => False), -- unused 11954 11955 N_Entry_Index_Specification => 11956 (1 => True, -- Defining_Identifier (Node1) 11957 2 => False, -- unused 11958 3 => False, -- unused 11959 4 => True, -- Discrete_Subtype_Definition (Node4) 11960 5 => False), -- unused 11961 11962 N_Entry_Call_Statement => 11963 (1 => False, -- unused 11964 2 => True, -- Name (Node2) 11965 3 => True, -- Parameter_Associations (List3) 11966 4 => False, -- First_Named_Actual (Node4-Sem) 11967 5 => False), -- unused 11968 11969 N_Requeue_Statement => 11970 (1 => False, -- unused 11971 2 => True, -- Name (Node2) 11972 3 => False, -- unused 11973 4 => False, -- unused 11974 5 => False), -- unused 11975 11976 N_Delay_Until_Statement => 11977 (1 => False, -- unused 11978 2 => False, -- unused 11979 3 => True, -- Expression (Node3) 11980 4 => False, -- unused 11981 5 => False), -- unused 11982 11983 N_Delay_Relative_Statement => 11984 (1 => False, -- unused 11985 2 => False, -- unused 11986 3 => True, -- Expression (Node3) 11987 4 => False, -- unused 11988 5 => False), -- unused 11989 11990 N_Selective_Accept => 11991 (1 => True, -- Select_Alternatives (List1) 11992 2 => False, -- unused 11993 3 => False, -- unused 11994 4 => True, -- Else_Statements (List4) 11995 5 => False), -- unused 11996 11997 N_Accept_Alternative => 11998 (1 => True, -- Condition (Node1) 11999 2 => True, -- Accept_Statement (Node2) 12000 3 => True, -- Statements (List3) 12001 4 => True, -- Pragmas_Before (List4) 12002 5 => False), -- Accept_Handler_Records (List5-Sem) 12003 12004 N_Delay_Alternative => 12005 (1 => True, -- Condition (Node1) 12006 2 => True, -- Delay_Statement (Node2) 12007 3 => True, -- Statements (List3) 12008 4 => True, -- Pragmas_Before (List4) 12009 5 => False), -- unused 12010 12011 N_Terminate_Alternative => 12012 (1 => True, -- Condition (Node1) 12013 2 => False, -- unused 12014 3 => False, -- unused 12015 4 => True, -- Pragmas_Before (List4) 12016 5 => True), -- Pragmas_After (List5) 12017 12018 N_Timed_Entry_Call => 12019 (1 => True, -- Entry_Call_Alternative (Node1) 12020 2 => False, -- unused 12021 3 => False, -- unused 12022 4 => True, -- Delay_Alternative (Node4) 12023 5 => False), -- unused 12024 12025 N_Entry_Call_Alternative => 12026 (1 => True, -- Entry_Call_Statement (Node1) 12027 2 => False, -- unused 12028 3 => True, -- Statements (List3) 12029 4 => True, -- Pragmas_Before (List4) 12030 5 => False), -- unused 12031 12032 N_Conditional_Entry_Call => 12033 (1 => True, -- Entry_Call_Alternative (Node1) 12034 2 => False, -- unused 12035 3 => False, -- unused 12036 4 => True, -- Else_Statements (List4) 12037 5 => False), -- unused 12038 12039 N_Asynchronous_Select => 12040 (1 => True, -- Triggering_Alternative (Node1) 12041 2 => True, -- Abortable_Part (Node2) 12042 3 => False, -- unused 12043 4 => False, -- unused 12044 5 => False), -- unused 12045 12046 N_Triggering_Alternative => 12047 (1 => True, -- Triggering_Statement (Node1) 12048 2 => False, -- unused 12049 3 => True, -- Statements (List3) 12050 4 => True, -- Pragmas_Before (List4) 12051 5 => False), -- unused 12052 12053 N_Abortable_Part => 12054 (1 => False, -- unused 12055 2 => False, -- unused 12056 3 => True, -- Statements (List3) 12057 4 => False, -- unused 12058 5 => False), -- unused 12059 12060 N_Abort_Statement => 12061 (1 => False, -- unused 12062 2 => True, -- Names (List2) 12063 3 => False, -- unused 12064 4 => False, -- unused 12065 5 => False), -- unused 12066 12067 N_Compilation_Unit => 12068 (1 => True, -- Context_Items (List1) 12069 2 => True, -- Unit (Node2) 12070 3 => False, -- First_Inlined_Subprogram (Node3-Sem) 12071 4 => False, -- Library_Unit (Node4-Sem) 12072 5 => True), -- Aux_Decls_Node (Node5) 12073 12074 N_Compilation_Unit_Aux => 12075 (1 => True, -- Actions (List1) 12076 2 => True, -- Declarations (List2) 12077 3 => False, -- Default_Storage_Pool (Node3) 12078 4 => True, -- Config_Pragmas (List4) 12079 5 => True), -- Pragmas_After (List5) 12080 12081 N_With_Clause => 12082 (1 => False, -- unused 12083 2 => True, -- Name (Node2) 12084 3 => False, -- unused 12085 4 => False, -- Library_Unit (Node4-Sem) 12086 5 => False), -- Corresponding_Spec (Node5-Sem) 12087 12088 N_Subprogram_Body_Stub => 12089 (1 => True, -- Specification (Node1) 12090 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12091 3 => False, -- unused 12092 4 => False, -- Library_Unit (Node4-Sem) 12093 5 => False), -- Corresponding_Body (Node5-Sem) 12094 12095 N_Package_Body_Stub => 12096 (1 => True, -- Defining_Identifier (Node1) 12097 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12098 3 => False, -- unused 12099 4 => False, -- Library_Unit (Node4-Sem) 12100 5 => False), -- Corresponding_Body (Node5-Sem) 12101 12102 N_Task_Body_Stub => 12103 (1 => True, -- Defining_Identifier (Node1) 12104 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12105 3 => False, -- unused 12106 4 => False, -- Library_Unit (Node4-Sem) 12107 5 => False), -- Corresponding_Body (Node5-Sem) 12108 12109 N_Protected_Body_Stub => 12110 (1 => True, -- Defining_Identifier (Node1) 12111 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 12112 3 => False, -- unused 12113 4 => False, -- Library_Unit (Node4-Sem) 12114 5 => False), -- Corresponding_Body (Node5-Sem) 12115 12116 N_Subunit => 12117 (1 => True, -- Proper_Body (Node1) 12118 2 => True, -- Name (Node2) 12119 3 => False, -- Corresponding_Stub (Node3-Sem) 12120 4 => False, -- unused 12121 5 => False), -- unused 12122 12123 N_Exception_Declaration => 12124 (1 => True, -- Defining_Identifier (Node1) 12125 2 => False, -- unused 12126 3 => False, -- Expression (Node3-Sem) 12127 4 => False, -- unused 12128 5 => False), -- unused 12129 12130 N_Handled_Sequence_Of_Statements => 12131 (1 => True, -- At_End_Proc (Node1) 12132 2 => False, -- First_Real_Statement (Node2-Sem) 12133 3 => True, -- Statements (List3) 12134 4 => True, -- End_Label (Node4) 12135 5 => True), -- Exception_Handlers (List5) 12136 12137 N_Exception_Handler => 12138 (1 => False, -- Local_Raise_Statements (Elist1) 12139 2 => True, -- Choice_Parameter (Node2) 12140 3 => True, -- Statements (List3) 12141 4 => True, -- Exception_Choices (List4) 12142 5 => False), -- Exception_Label (Node5) 12143 12144 N_Raise_Statement => 12145 (1 => False, -- unused 12146 2 => True, -- Name (Node2) 12147 3 => True, -- Expression (Node3) 12148 4 => False, -- unused 12149 5 => False), -- unused 12150 12151 N_Raise_Expression => 12152 (1 => False, -- unused 12153 2 => True, -- Name (Node2) 12154 3 => True, -- Expression (Node3) 12155 4 => False, -- unused 12156 5 => False), -- Etype (Node5-Sem) 12157 12158 N_Generic_Subprogram_Declaration => 12159 (1 => True, -- Specification (Node1) 12160 2 => True, -- Generic_Formal_Declarations (List2) 12161 3 => False, -- unused 12162 4 => False, -- Parent_Spec (Node4-Sem) 12163 5 => False), -- Corresponding_Body (Node5-Sem) 12164 12165 N_Generic_Package_Declaration => 12166 (1 => True, -- Specification (Node1) 12167 2 => True, -- Generic_Formal_Declarations (List2) 12168 3 => False, -- Activation_Chain_Entity (Node3-Sem) 12169 4 => False, -- Parent_Spec (Node4-Sem) 12170 5 => False), -- Corresponding_Body (Node5-Sem) 12171 12172 N_Package_Instantiation => 12173 (1 => True, -- Defining_Unit_Name (Node1) 12174 2 => True, -- Name (Node2) 12175 3 => True, -- Generic_Associations (List3) 12176 4 => False, -- Parent_Spec (Node4-Sem) 12177 5 => False), -- Instance_Spec (Node5-Sem) 12178 12179 N_Procedure_Instantiation => 12180 (1 => True, -- Defining_Unit_Name (Node1) 12181 2 => True, -- Name (Node2) 12182 3 => True, -- Generic_Associations (List3) 12183 4 => False, -- Parent_Spec (Node4-Sem) 12184 5 => False), -- Instance_Spec (Node5-Sem) 12185 12186 N_Function_Instantiation => 12187 (1 => True, -- Defining_Unit_Name (Node1) 12188 2 => True, -- Name (Node2) 12189 3 => True, -- Generic_Associations (List3) 12190 4 => False, -- Parent_Spec (Node4-Sem) 12191 5 => False), -- Instance_Spec (Node5-Sem) 12192 12193 N_Generic_Association => 12194 (1 => True, -- Explicit_Generic_Actual_Parameter (Node1) 12195 2 => True, -- Selector_Name (Node2) 12196 3 => False, -- unused 12197 4 => False, -- unused 12198 5 => False), -- unused 12199 12200 N_Formal_Object_Declaration => 12201 (1 => True, -- Defining_Identifier (Node1) 12202 2 => False, -- unused 12203 3 => True, -- Access_Definition (Node3) 12204 4 => True, -- Subtype_Mark (Node4) 12205 5 => True), -- Default_Expression (Node5) 12206 12207 N_Formal_Type_Declaration => 12208 (1 => True, -- Defining_Identifier (Node1) 12209 2 => False, -- unused 12210 3 => True, -- Formal_Type_Definition (Node3) 12211 4 => True, -- Discriminant_Specifications (List4) 12212 5 => False), -- unused 12213 12214 N_Formal_Private_Type_Definition => 12215 (1 => False, -- unused 12216 2 => False, -- unused 12217 3 => False, -- unused 12218 4 => False, -- unused 12219 5 => False), -- unused 12220 12221 N_Formal_Incomplete_Type_Definition => 12222 (1 => False, -- unused 12223 2 => False, -- unused 12224 3 => False, -- unused 12225 4 => False, -- unused 12226 5 => False), -- unused 12227 12228 N_Formal_Derived_Type_Definition => 12229 (1 => False, -- unused 12230 2 => True, -- Interface_List (List2) 12231 3 => False, -- unused 12232 4 => True, -- Subtype_Mark (Node4) 12233 5 => False), -- unused 12234 12235 N_Formal_Discrete_Type_Definition => 12236 (1 => False, -- unused 12237 2 => False, -- unused 12238 3 => False, -- unused 12239 4 => False, -- unused 12240 5 => False), -- unused 12241 12242 N_Formal_Signed_Integer_Type_Definition => 12243 (1 => False, -- unused 12244 2 => False, -- unused 12245 3 => False, -- unused 12246 4 => False, -- unused 12247 5 => False), -- unused 12248 12249 N_Formal_Modular_Type_Definition => 12250 (1 => False, -- unused 12251 2 => False, -- unused 12252 3 => False, -- unused 12253 4 => False, -- unused 12254 5 => False), -- unused 12255 12256 N_Formal_Floating_Point_Definition => 12257 (1 => False, -- unused 12258 2 => False, -- unused 12259 3 => False, -- unused 12260 4 => False, -- unused 12261 5 => False), -- unused 12262 12263 N_Formal_Ordinary_Fixed_Point_Definition => 12264 (1 => False, -- unused 12265 2 => False, -- unused 12266 3 => False, -- unused 12267 4 => False, -- unused 12268 5 => False), -- unused 12269 12270 N_Formal_Decimal_Fixed_Point_Definition => 12271 (1 => False, -- unused 12272 2 => False, -- unused 12273 3 => False, -- unused 12274 4 => False, -- unused 12275 5 => False), -- unused 12276 12277 N_Formal_Concrete_Subprogram_Declaration => 12278 (1 => True, -- Specification (Node1) 12279 2 => True, -- Default_Name (Node2) 12280 3 => False, -- unused 12281 4 => False, -- unused 12282 5 => False), -- unused 12283 12284 N_Formal_Abstract_Subprogram_Declaration => 12285 (1 => True, -- Specification (Node1) 12286 2 => True, -- Default_Name (Node2) 12287 3 => False, -- unused 12288 4 => False, -- unused 12289 5 => False), -- unused 12290 12291 N_Formal_Package_Declaration => 12292 (1 => True, -- Defining_Identifier (Node1) 12293 2 => True, -- Name (Node2) 12294 3 => True, -- Generic_Associations (List3) 12295 4 => False, -- unused 12296 5 => False), -- Instance_Spec (Node5-Sem) 12297 12298 N_Attribute_Definition_Clause => 12299 (1 => True, -- Chars (Name1) 12300 2 => True, -- Name (Node2) 12301 3 => True, -- Expression (Node3) 12302 4 => False, -- unused 12303 5 => False), -- Next_Rep_Item (Node5-Sem) 12304 12305 N_Aspect_Specification => 12306 (1 => True, -- Identifier (Node1) 12307 2 => False, -- Aspect_Rep_Item (Node2-Sem) 12308 3 => True, -- Expression (Node3) 12309 4 => False, -- Entity (Node4-Sem) 12310 5 => False), -- Next_Rep_Item (Node5-Sem) 12311 12312 N_Enumeration_Representation_Clause => 12313 (1 => True, -- Identifier (Node1) 12314 2 => False, -- unused 12315 3 => True, -- Array_Aggregate (Node3) 12316 4 => False, -- unused 12317 5 => False), -- Next_Rep_Item (Node5-Sem) 12318 12319 N_Record_Representation_Clause => 12320 (1 => True, -- Identifier (Node1) 12321 2 => True, -- Mod_Clause (Node2) 12322 3 => True, -- Component_Clauses (List3) 12323 4 => False, -- unused 12324 5 => False), -- Next_Rep_Item (Node5-Sem) 12325 12326 N_Component_Clause => 12327 (1 => True, -- Component_Name (Node1) 12328 2 => True, -- Position (Node2) 12329 3 => True, -- First_Bit (Node3) 12330 4 => True, -- Last_Bit (Node4) 12331 5 => False), -- unused 12332 12333 N_Code_Statement => 12334 (1 => False, -- unused 12335 2 => False, -- unused 12336 3 => True, -- Expression (Node3) 12337 4 => False, -- unused 12338 5 => False), -- unused 12339 12340 N_Op_Rotate_Left => 12341 (1 => True, -- Chars (Name1) 12342 2 => True, -- Left_Opnd (Node2) 12343 3 => True, -- Right_Opnd (Node3) 12344 4 => False, -- Entity (Node4-Sem) 12345 5 => False), -- Etype (Node5-Sem) 12346 12347 N_Op_Rotate_Right => 12348 (1 => True, -- Chars (Name1) 12349 2 => True, -- Left_Opnd (Node2) 12350 3 => True, -- Right_Opnd (Node3) 12351 4 => False, -- Entity (Node4-Sem) 12352 5 => False), -- Etype (Node5-Sem) 12353 12354 N_Op_Shift_Left => 12355 (1 => True, -- Chars (Name1) 12356 2 => True, -- Left_Opnd (Node2) 12357 3 => True, -- Right_Opnd (Node3) 12358 4 => False, -- Entity (Node4-Sem) 12359 5 => False), -- Etype (Node5-Sem) 12360 12361 N_Op_Shift_Right_Arithmetic => 12362 (1 => True, -- Chars (Name1) 12363 2 => True, -- Left_Opnd (Node2) 12364 3 => True, -- Right_Opnd (Node3) 12365 4 => False, -- Entity (Node4-Sem) 12366 5 => False), -- Etype (Node5-Sem) 12367 12368 N_Op_Shift_Right => 12369 (1 => True, -- Chars (Name1) 12370 2 => True, -- Left_Opnd (Node2) 12371 3 => True, -- Right_Opnd (Node3) 12372 4 => False, -- Entity (Node4-Sem) 12373 5 => False), -- Etype (Node5-Sem) 12374 12375 N_Delta_Constraint => 12376 (1 => False, -- unused 12377 2 => False, -- unused 12378 3 => True, -- Delta_Expression (Node3) 12379 4 => True, -- Range_Constraint (Node4) 12380 5 => False), -- unused 12381 12382 N_At_Clause => 12383 (1 => True, -- Identifier (Node1) 12384 2 => False, -- unused 12385 3 => True, -- Expression (Node3) 12386 4 => False, -- unused 12387 5 => False), -- unused 12388 12389 N_Mod_Clause => 12390 (1 => False, -- unused 12391 2 => False, -- unused 12392 3 => True, -- Expression (Node3) 12393 4 => True, -- Pragmas_Before (List4) 12394 5 => False), -- unused 12395 12396 N_If_Expression => 12397 (1 => True, -- Expressions (List1) 12398 2 => False, -- Then_Actions (List2-Sem) 12399 3 => False, -- Else_Actions (List3-Sem) 12400 4 => False, -- unused 12401 5 => False), -- Etype (Node5-Sem) 12402 12403 N_Compound_Statement => 12404 (1 => True, -- Actions (List1) 12405 2 => False, -- unused 12406 3 => False, -- unused 12407 4 => False, -- unused 12408 5 => False), -- unused 12409 12410 N_Contract => 12411 (1 => False, -- Pre_Post_Conditions (Node1-Sem) 12412 2 => False, -- Contract_Test_Cases (Node2-Sem) 12413 3 => False, -- Classifications (Node3-Sem) 12414 4 => False, -- unused 12415 5 => False), -- unused 12416 12417 N_Expanded_Name => 12418 (1 => True, -- Chars (Name1) 12419 2 => True, -- Selector_Name (Node2) 12420 3 => True, -- Prefix (Node3) 12421 4 => False, -- Entity (Node4-Sem) 12422 5 => False), -- Etype (Node5-Sem) 12423 12424 N_Expression_With_Actions => 12425 (1 => True, -- Actions (List1) 12426 2 => False, -- unused 12427 3 => True, -- Expression (Node3) 12428 4 => False, -- unused 12429 5 => False), -- unused 12430 12431 N_Free_Statement => 12432 (1 => False, -- Storage_Pool (Node1-Sem) 12433 2 => False, -- Procedure_To_Call (Node2-Sem) 12434 3 => True, -- Expression (Node3) 12435 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 12436 5 => False), -- unused 12437 12438 N_Freeze_Entity => 12439 (1 => True, -- Actions (List1) 12440 2 => False, -- Access_Types_To_Process (Elist2-Sem) 12441 3 => False, -- TSS_Elist (Elist3-Sem) 12442 4 => False, -- Entity (Node4-Sem) 12443 5 => False), -- First_Subtype_Link (Node5-Sem) 12444 12445 N_Freeze_Generic_Entity => 12446 (1 => False, -- unused 12447 2 => False, -- unused 12448 3 => False, -- unused 12449 4 => False, -- Entity (Node4-Sem) 12450 5 => False), -- unused 12451 12452 N_Implicit_Label_Declaration => 12453 (1 => True, -- Defining_Identifier (Node1) 12454 2 => False, -- Label_Construct (Node2-Sem) 12455 3 => False, -- unused 12456 4 => False, -- unused 12457 5 => False), -- unused 12458 12459 N_Itype_Reference => 12460 (1 => False, -- Itype (Node1-Sem) 12461 2 => False, -- unused 12462 3 => False, -- unused 12463 4 => False, -- unused 12464 5 => False), -- unused 12465 12466 N_Raise_Constraint_Error => 12467 (1 => True, -- Condition (Node1) 12468 2 => False, -- unused 12469 3 => True, -- Reason (Uint3) 12470 4 => False, -- unused 12471 5 => False), -- Etype (Node5-Sem) 12472 12473 N_Raise_Program_Error => 12474 (1 => True, -- Condition (Node1) 12475 2 => False, -- unused 12476 3 => True, -- Reason (Uint3) 12477 4 => False, -- unused 12478 5 => False), -- Etype (Node5-Sem) 12479 12480 N_Raise_Storage_Error => 12481 (1 => True, -- Condition (Node1) 12482 2 => False, -- unused 12483 3 => True, -- Reason (Uint3) 12484 4 => False, -- unused 12485 5 => False), -- Etype (Node5-Sem) 12486 12487 N_Push_Constraint_Error_Label => 12488 (1 => False, -- unused 12489 2 => False, -- unused 12490 3 => False, -- unused 12491 4 => False, -- unused 12492 5 => False), -- unused 12493 12494 N_Push_Program_Error_Label => 12495 (1 => False, -- Exception_Label 12496 2 => False, -- unused 12497 3 => False, -- unused 12498 4 => False, -- unused 12499 5 => False), -- Exception_Label 12500 12501 N_Push_Storage_Error_Label => 12502 (1 => False, -- Exception_Label 12503 2 => False, -- unused 12504 3 => False, -- unused 12505 4 => False, -- unused 12506 5 => False), -- Exception_Label 12507 12508 N_Pop_Constraint_Error_Label => 12509 (1 => False, -- unused 12510 2 => False, -- unused 12511 3 => False, -- unused 12512 4 => False, -- unused 12513 5 => False), -- unused 12514 12515 N_Pop_Program_Error_Label => 12516 (1 => False, -- unused 12517 2 => False, -- unused 12518 3 => False, -- unused 12519 4 => False, -- unused 12520 5 => False), -- unused 12521 12522 N_Pop_Storage_Error_Label => 12523 (1 => False, -- unused 12524 2 => False, -- unused 12525 3 => False, -- unused 12526 4 => False, -- unused 12527 5 => False), -- unused 12528 12529 N_Reference => 12530 (1 => False, -- unused 12531 2 => False, -- unused 12532 3 => True, -- Prefix (Node3) 12533 4 => False, -- unused 12534 5 => False), -- Etype (Node5-Sem) 12535 12536 N_Unchecked_Expression => 12537 (1 => False, -- unused 12538 2 => False, -- unused 12539 3 => True, -- Expression (Node3) 12540 4 => False, -- unused 12541 5 => False), -- Etype (Node5-Sem) 12542 12543 N_Unchecked_Type_Conversion => 12544 (1 => False, -- unused 12545 2 => False, -- unused 12546 3 => True, -- Expression (Node3) 12547 4 => True, -- Subtype_Mark (Node4) 12548 5 => False), -- Etype (Node5-Sem) 12549 12550 N_Validate_Unchecked_Conversion => 12551 (1 => False, -- Source_Type (Node1-Sem) 12552 2 => False, -- Target_Type (Node2-Sem) 12553 3 => False, -- unused 12554 4 => False, -- unused 12555 5 => False), -- unused 12556 12557 -- Entries for SCIL nodes 12558 12559 N_SCIL_Dispatch_Table_Tag_Init => 12560 (1 => False, -- unused 12561 2 => False, -- unused 12562 3 => False, -- unused 12563 4 => False, -- SCIL_Entity (Node4-Sem) 12564 5 => False), -- unused 12565 12566 N_SCIL_Dispatching_Call => 12567 (1 => False, -- unused 12568 2 => False, -- SCIL_Target_Prim (Node2-Sem) 12569 3 => False, -- unused 12570 4 => False, -- SCIL_Entity (Node4-Sem) 12571 5 => False), -- SCIL_Controlling_Tag (Node5-Sem) 12572 12573 N_SCIL_Membership_Test => 12574 (1 => False, -- unused 12575 2 => False, -- unused 12576 3 => False, -- unused 12577 4 => False, -- SCIL_Entity (Node4-Sem) 12578 5 => False), -- SCIL_Tag_Value (Node5-Sem) 12579 12580 -- Entries for Empty, Error and Unused. Even thought these have a Chars 12581 -- field for debugging purposes, they are not really syntactic fields, so 12582 -- we mark all fields as unused. 12583 12584 N_Empty => 12585 (1 => False, -- unused 12586 2 => False, -- unused 12587 3 => False, -- unused 12588 4 => False, -- unused 12589 5 => False), -- unused 12590 12591 N_Error => 12592 (1 => False, -- unused 12593 2 => False, -- unused 12594 3 => False, -- unused 12595 4 => False, -- unused 12596 5 => False), -- unused 12597 12598 N_Unused_At_Start => 12599 (1 => False, -- unused 12600 2 => False, -- unused 12601 3 => False, -- unused 12602 4 => False, -- unused 12603 5 => False), -- unused 12604 12605 N_Unused_At_End => 12606 (1 => False, -- unused 12607 2 => False, -- unused 12608 3 => False, -- unused 12609 4 => False, -- unused 12610 5 => False)); -- unused 12611 12612 -------------------- 12613 -- Inline Pragmas -- 12614 -------------------- 12615 12616 pragma Inline (ABE_Is_Certain); 12617 pragma Inline (Abort_Present); 12618 pragma Inline (Abortable_Part); 12619 pragma Inline (Abstract_Present); 12620 pragma Inline (Accept_Handler_Records); 12621 pragma Inline (Accept_Statement); 12622 pragma Inline (Access_Definition); 12623 pragma Inline (Access_To_Subprogram_Definition); 12624 pragma Inline (Access_Types_To_Process); 12625 pragma Inline (Actions); 12626 pragma Inline (Activation_Chain_Entity); 12627 pragma Inline (Acts_As_Spec); 12628 pragma Inline (Actual_Designated_Subtype); 12629 pragma Inline (Address_Warning_Posted); 12630 pragma Inline (Aggregate_Bounds); 12631 pragma Inline (Aliased_Present); 12632 pragma Inline (All_Others); 12633 pragma Inline (All_Present); 12634 pragma Inline (Alternatives); 12635 pragma Inline (Ancestor_Part); 12636 pragma Inline (Atomic_Sync_Required); 12637 pragma Inline (Array_Aggregate); 12638 pragma Inline (Aspect_Rep_Item); 12639 pragma Inline (Assignment_OK); 12640 pragma Inline (Associated_Node); 12641 pragma Inline (At_End_Proc); 12642 pragma Inline (Attribute_Name); 12643 pragma Inline (Aux_Decls_Node); 12644 pragma Inline (Backwards_OK); 12645 pragma Inline (Bad_Is_Detected); 12646 pragma Inline (Body_To_Inline); 12647 pragma Inline (Body_Required); 12648 pragma Inline (By_Ref); 12649 pragma Inline (Box_Present); 12650 pragma Inline (Char_Literal_Value); 12651 pragma Inline (Chars); 12652 pragma Inline (Check_Address_Alignment); 12653 pragma Inline (Choice_Parameter); 12654 pragma Inline (Choices); 12655 pragma Inline (Class_Present); 12656 pragma Inline (Classifications); 12657 pragma Inline (Cleanup_Actions); 12658 pragma Inline (Comes_From_Extended_Return_Statement); 12659 pragma Inline (Compile_Time_Known_Aggregate); 12660 pragma Inline (Component_Associations); 12661 pragma Inline (Component_Clauses); 12662 pragma Inline (Component_Definition); 12663 pragma Inline (Component_Items); 12664 pragma Inline (Component_List); 12665 pragma Inline (Component_Name); 12666 pragma Inline (Componentwise_Assignment); 12667 pragma Inline (Condition); 12668 pragma Inline (Condition_Actions); 12669 pragma Inline (Config_Pragmas); 12670 pragma Inline (Constant_Present); 12671 pragma Inline (Constraint); 12672 pragma Inline (Constraints); 12673 pragma Inline (Context_Installed); 12674 pragma Inline (Context_Items); 12675 pragma Inline (Context_Pending); 12676 pragma Inline (Contract_Test_Cases); 12677 pragma Inline (Controlling_Argument); 12678 pragma Inline (Convert_To_Return_False); 12679 pragma Inline (Conversion_OK); 12680 pragma Inline (Corresponding_Aspect); 12681 pragma Inline (Corresponding_Body); 12682 pragma Inline (Corresponding_Formal_Spec); 12683 pragma Inline (Corresponding_Generic_Association); 12684 pragma Inline (Corresponding_Integer_Value); 12685 pragma Inline (Corresponding_Spec); 12686 pragma Inline (Corresponding_Spec_Of_Stub); 12687 pragma Inline (Corresponding_Stub); 12688 pragma Inline (Dcheck_Function); 12689 pragma Inline (Declarations); 12690 pragma Inline (Default_Expression); 12691 pragma Inline (Default_Storage_Pool); 12692 pragma Inline (Default_Name); 12693 pragma Inline (Defining_Identifier); 12694 pragma Inline (Defining_Unit_Name); 12695 pragma Inline (Delay_Alternative); 12696 pragma Inline (Delay_Statement); 12697 pragma Inline (Delta_Expression); 12698 pragma Inline (Digits_Expression); 12699 pragma Inline (Discr_Check_Funcs_Built); 12700 pragma Inline (Discrete_Choices); 12701 pragma Inline (Discrete_Range); 12702 pragma Inline (Discrete_Subtype_Definition); 12703 pragma Inline (Discrete_Subtype_Definitions); 12704 pragma Inline (Discriminant_Specifications); 12705 pragma Inline (Discriminant_Type); 12706 pragma Inline (Do_Accessibility_Check); 12707 pragma Inline (Do_Discriminant_Check); 12708 pragma Inline (Do_Length_Check); 12709 pragma Inline (Do_Division_Check); 12710 pragma Inline (Do_Overflow_Check); 12711 pragma Inline (Do_Range_Check); 12712 pragma Inline (Do_Storage_Check); 12713 pragma Inline (Do_Tag_Check); 12714 pragma Inline (Elaborate_Present); 12715 pragma Inline (Elaborate_All_Desirable); 12716 pragma Inline (Elaborate_All_Present); 12717 pragma Inline (Elaborate_Desirable); 12718 pragma Inline (Else_Actions); 12719 pragma Inline (Else_Statements); 12720 pragma Inline (Elsif_Parts); 12721 pragma Inline (Enclosing_Variant); 12722 pragma Inline (End_Label); 12723 pragma Inline (End_Span); 12724 pragma Inline (Entity); 12725 pragma Inline (Entity_Or_Associated_Node); 12726 pragma Inline (Entry_Body_Formal_Part); 12727 pragma Inline (Entry_Call_Alternative); 12728 pragma Inline (Entry_Call_Statement); 12729 pragma Inline (Entry_Direct_Name); 12730 pragma Inline (Entry_Index); 12731 pragma Inline (Entry_Index_Specification); 12732 pragma Inline (Etype); 12733 pragma Inline (Exception_Choices); 12734 pragma Inline (Exception_Handlers); 12735 pragma Inline (Exception_Junk); 12736 pragma Inline (Exception_Label); 12737 pragma Inline (Expansion_Delayed); 12738 pragma Inline (Explicit_Actual_Parameter); 12739 pragma Inline (Explicit_Generic_Actual_Parameter); 12740 pragma Inline (Expression); 12741 pragma Inline (Expressions); 12742 pragma Inline (First_Bit); 12743 pragma Inline (First_Inlined_Subprogram); 12744 pragma Inline (First_Name); 12745 pragma Inline (First_Named_Actual); 12746 pragma Inline (First_Real_Statement); 12747 pragma Inline (First_Subtype_Link); 12748 pragma Inline (Float_Truncate); 12749 pragma Inline (Formal_Type_Definition); 12750 pragma Inline (Forwards_OK); 12751 pragma Inline (From_Aspect_Specification); 12752 pragma Inline (From_At_End); 12753 pragma Inline (From_At_Mod); 12754 pragma Inline (From_Conditional_Expression); 12755 pragma Inline (From_Default); 12756 pragma Inline (Generalized_Indexing); 12757 pragma Inline (Generic_Associations); 12758 pragma Inline (Generic_Formal_Declarations); 12759 pragma Inline (Generic_Parent); 12760 pragma Inline (Generic_Parent_Type); 12761 pragma Inline (Handled_Statement_Sequence); 12762 pragma Inline (Handler_List_Entry); 12763 pragma Inline (Has_Created_Identifier); 12764 pragma Inline (Has_Dereference_Action); 12765 pragma Inline (Has_Dynamic_Length_Check); 12766 pragma Inline (Has_Dynamic_Range_Check); 12767 pragma Inline (Has_Init_Expression); 12768 pragma Inline (Has_Local_Raise); 12769 pragma Inline (Has_Self_Reference); 12770 pragma Inline (Has_SP_Choice); 12771 pragma Inline (Has_No_Elaboration_Code); 12772 pragma Inline (Has_Pragma_Suppress_All); 12773 pragma Inline (Has_Private_View); 12774 pragma Inline (Has_Relative_Deadline_Pragma); 12775 pragma Inline (Has_Storage_Size_Pragma); 12776 pragma Inline (Has_Wide_Character); 12777 pragma Inline (Has_Wide_Wide_Character); 12778 pragma Inline (Header_Size_Added); 12779 pragma Inline (Hidden_By_Use_Clause); 12780 pragma Inline (High_Bound); 12781 pragma Inline (Identifier); 12782 pragma Inline (Implicit_With); 12783 pragma Inline (Implicit_With_From_Instantiation); 12784 pragma Inline (Interface_List); 12785 pragma Inline (Interface_Present); 12786 pragma Inline (Includes_Infinities); 12787 pragma Inline (Import_Interface_Present); 12788 pragma Inline (In_Present); 12789 pragma Inline (Incomplete_View); 12790 pragma Inline (Inherited_Discriminant); 12791 pragma Inline (Instance_Spec); 12792 pragma Inline (Intval); 12793 pragma Inline (Iterator_Specification); 12794 pragma Inline (Is_Accessibility_Actual); 12795 pragma Inline (Is_Analyzed_Pragma); 12796 pragma Inline (Is_Asynchronous_Call_Block); 12797 pragma Inline (Is_Boolean_Aspect); 12798 pragma Inline (Is_Checked); 12799 pragma Inline (Is_Component_Left_Opnd); 12800 pragma Inline (Is_Component_Right_Opnd); 12801 pragma Inline (Is_Controlling_Actual); 12802 pragma Inline (Is_Delayed_Aspect); 12803 pragma Inline (Is_Disabled); 12804 pragma Inline (Is_Dynamic_Coextension); 12805 pragma Inline (Is_Elsif); 12806 pragma Inline (Is_Entry_Barrier_Function); 12807 pragma Inline (Is_Expanded_Build_In_Place_Call); 12808 pragma Inline (Is_Expanded_Contract); 12809 pragma Inline (Is_Finalization_Wrapper); 12810 pragma Inline (Is_Folded_In_Parser); 12811 pragma Inline (Is_Generic_Contract_Pragma); 12812 pragma Inline (Is_Ghost_Pragma); 12813 pragma Inline (Is_Ignored); 12814 pragma Inline (Is_In_Discriminant_Check); 12815 pragma Inline (Is_Inherited_Pragma); 12816 pragma Inline (Is_Machine_Number); 12817 pragma Inline (Is_Null_Loop); 12818 pragma Inline (Is_Overloaded); 12819 pragma Inline (Is_Power_Of_2_For_Shift); 12820 pragma Inline (Is_Prefixed_Call); 12821 pragma Inline (Is_Protected_Subprogram_Body); 12822 pragma Inline (Is_Static_Coextension); 12823 pragma Inline (Is_Static_Expression); 12824 pragma Inline (Is_Subprogram_Descriptor); 12825 pragma Inline (Is_Task_Allocation_Block); 12826 pragma Inline (Is_Task_Body_Procedure); 12827 pragma Inline (Is_Task_Master); 12828 pragma Inline (Iteration_Scheme); 12829 pragma Inline (Itype); 12830 pragma Inline (Kill_Range_Check); 12831 pragma Inline (Last_Bit); 12832 pragma Inline (Last_Name); 12833 pragma Inline (Library_Unit); 12834 pragma Inline (Label_Construct); 12835 pragma Inline (Left_Opnd); 12836 pragma Inline (Limited_View_Installed); 12837 pragma Inline (Limited_Present); 12838 pragma Inline (Literals); 12839 pragma Inline (Local_Raise_Not_OK); 12840 pragma Inline (Local_Raise_Statements); 12841 pragma Inline (Loop_Actions); 12842 pragma Inline (Loop_Parameter_Specification); 12843 pragma Inline (Low_Bound); 12844 pragma Inline (Mod_Clause); 12845 pragma Inline (More_Ids); 12846 pragma Inline (Must_Be_Byte_Aligned); 12847 pragma Inline (Must_Not_Freeze); 12848 pragma Inline (Must_Not_Override); 12849 pragma Inline (Must_Override); 12850 pragma Inline (Name); 12851 pragma Inline (Names); 12852 pragma Inline (Next_Entity); 12853 pragma Inline (Next_Exit_Statement); 12854 pragma Inline (Next_Implicit_With); 12855 pragma Inline (Next_Named_Actual); 12856 pragma Inline (Next_Pragma); 12857 pragma Inline (Next_Rep_Item); 12858 pragma Inline (Next_Use_Clause); 12859 pragma Inline (No_Ctrl_Actions); 12860 pragma Inline (No_Elaboration_Check); 12861 pragma Inline (No_Entities_Ref_In_Spec); 12862 pragma Inline (No_Initialization); 12863 pragma Inline (No_Minimize_Eliminate); 12864 pragma Inline (No_Truncation); 12865 pragma Inline (Non_Aliased_Prefix); 12866 pragma Inline (Null_Present); 12867 pragma Inline (Null_Excluding_Subtype); 12868 pragma Inline (Null_Exclusion_Present); 12869 pragma Inline (Null_Exclusion_In_Return_Present); 12870 pragma Inline (Null_Record_Present); 12871 pragma Inline (Object_Definition); 12872 pragma Inline (Of_Present); 12873 pragma Inline (Original_Discriminant); 12874 pragma Inline (Original_Entity); 12875 pragma Inline (Others_Discrete_Choices); 12876 pragma Inline (Out_Present); 12877 pragma Inline (Parameter_Associations); 12878 pragma Inline (Parameter_Specifications); 12879 pragma Inline (Parameter_Type); 12880 pragma Inline (Parent_Spec); 12881 pragma Inline (Position); 12882 pragma Inline (Pragma_Argument_Associations); 12883 pragma Inline (Pragma_Identifier); 12884 pragma Inline (Pragmas_After); 12885 pragma Inline (Pragmas_Before); 12886 pragma Inline (Pre_Post_Conditions); 12887 pragma Inline (Prefix); 12888 pragma Inline (Premature_Use); 12889 pragma Inline (Present_Expr); 12890 pragma Inline (Prev_Ids); 12891 pragma Inline (Print_In_Hex); 12892 pragma Inline (Private_Declarations); 12893 pragma Inline (Private_Present); 12894 pragma Inline (Procedure_To_Call); 12895 pragma Inline (Proper_Body); 12896 pragma Inline (Protected_Definition); 12897 pragma Inline (Protected_Present); 12898 pragma Inline (Raises_Constraint_Error); 12899 pragma Inline (Range_Constraint); 12900 pragma Inline (Range_Expression); 12901 pragma Inline (Real_Range_Specification); 12902 pragma Inline (Realval); 12903 pragma Inline (Reason); 12904 pragma Inline (Record_Extension_Part); 12905 pragma Inline (Redundant_Use); 12906 pragma Inline (Renaming_Exception); 12907 pragma Inline (Result_Definition); 12908 pragma Inline (Return_Object_Declarations); 12909 pragma Inline (Return_Statement_Entity); 12910 pragma Inline (Reverse_Present); 12911 pragma Inline (Right_Opnd); 12912 pragma Inline (Rounded_Result); 12913 pragma Inline (SCIL_Controlling_Tag); 12914 pragma Inline (SCIL_Entity); 12915 pragma Inline (SCIL_Tag_Value); 12916 pragma Inline (SCIL_Target_Prim); 12917 pragma Inline (Scope); 12918 pragma Inline (Select_Alternatives); 12919 pragma Inline (Selector_Name); 12920 pragma Inline (Selector_Names); 12921 pragma Inline (Shift_Count_OK); 12922 pragma Inline (Source_Type); 12923 pragma Inline (Specification); 12924 pragma Inline (Split_PPC); 12925 pragma Inline (Statements); 12926 pragma Inline (Storage_Pool); 12927 pragma Inline (Subpool_Handle_Name); 12928 pragma Inline (Strval); 12929 pragma Inline (Subtype_Indication); 12930 pragma Inline (Subtype_Mark); 12931 pragma Inline (Subtype_Marks); 12932 pragma Inline (Suppress_Assignment_Checks); 12933 pragma Inline (Suppress_Loop_Warnings); 12934 pragma Inline (Synchronized_Present); 12935 pragma Inline (Tagged_Present); 12936 pragma Inline (Target_Type); 12937 pragma Inline (Task_Definition); 12938 pragma Inline (Task_Present); 12939 pragma Inline (Then_Actions); 12940 pragma Inline (Then_Statements); 12941 pragma Inline (Triggering_Alternative); 12942 pragma Inline (Triggering_Statement); 12943 pragma Inline (Treat_Fixed_As_Integer); 12944 pragma Inline (TSS_Elist); 12945 pragma Inline (Type_Definition); 12946 pragma Inline (Uneval_Old_Accept); 12947 pragma Inline (Uneval_Old_Warn); 12948 pragma Inline (Unit); 12949 pragma Inline (Uninitialized_Variable); 12950 pragma Inline (Unknown_Discriminants_Present); 12951 pragma Inline (Unreferenced_In_Spec); 12952 pragma Inline (Variant_Part); 12953 pragma Inline (Variants); 12954 pragma Inline (Visible_Declarations); 12955 pragma Inline (Used_Operations); 12956 pragma Inline (Was_Expression_Function); 12957 pragma Inline (Was_Originally_Stub); 12958 pragma Inline (Withed_Body); 12959 12960 pragma Inline (Set_ABE_Is_Certain); 12961 pragma Inline (Set_Abort_Present); 12962 pragma Inline (Set_Abortable_Part); 12963 pragma Inline (Set_Abstract_Present); 12964 pragma Inline (Set_Accept_Handler_Records); 12965 pragma Inline (Set_Accept_Statement); 12966 pragma Inline (Set_Access_Definition); 12967 pragma Inline (Set_Access_To_Subprogram_Definition); 12968 pragma Inline (Set_Access_Types_To_Process); 12969 pragma Inline (Set_Actions); 12970 pragma Inline (Set_Activation_Chain_Entity); 12971 pragma Inline (Set_Acts_As_Spec); 12972 pragma Inline (Set_Actual_Designated_Subtype); 12973 pragma Inline (Set_Address_Warning_Posted); 12974 pragma Inline (Set_Aggregate_Bounds); 12975 pragma Inline (Set_Aliased_Present); 12976 pragma Inline (Set_All_Others); 12977 pragma Inline (Set_All_Present); 12978 pragma Inline (Set_Alternatives); 12979 pragma Inline (Set_Ancestor_Part); 12980 pragma Inline (Set_Array_Aggregate); 12981 pragma Inline (Set_Aspect_Rep_Item); 12982 pragma Inline (Set_Assignment_OK); 12983 pragma Inline (Set_Associated_Node); 12984 pragma Inline (Set_At_End_Proc); 12985 pragma Inline (Set_Atomic_Sync_Required); 12986 pragma Inline (Set_Attribute_Name); 12987 pragma Inline (Set_Aux_Decls_Node); 12988 pragma Inline (Set_Backwards_OK); 12989 pragma Inline (Set_Bad_Is_Detected); 12990 pragma Inline (Set_Body_Required); 12991 pragma Inline (Set_Body_To_Inline); 12992 pragma Inline (Set_Box_Present); 12993 pragma Inline (Set_By_Ref); 12994 pragma Inline (Set_Char_Literal_Value); 12995 pragma Inline (Set_Chars); 12996 pragma Inline (Set_Check_Address_Alignment); 12997 pragma Inline (Set_Choice_Parameter); 12998 pragma Inline (Set_Choices); 12999 pragma Inline (Set_Class_Present); 13000 pragma Inline (Set_Classifications); 13001 pragma Inline (Set_Cleanup_Actions); 13002 pragma Inline (Set_Comes_From_Extended_Return_Statement); 13003 pragma Inline (Set_Compile_Time_Known_Aggregate); 13004 pragma Inline (Set_Component_Associations); 13005 pragma Inline (Set_Component_Clauses); 13006 pragma Inline (Set_Component_Definition); 13007 pragma Inline (Set_Component_Items); 13008 pragma Inline (Set_Component_List); 13009 pragma Inline (Set_Component_Name); 13010 pragma Inline (Set_Componentwise_Assignment); 13011 pragma Inline (Set_Condition); 13012 pragma Inline (Set_Condition_Actions); 13013 pragma Inline (Set_Config_Pragmas); 13014 pragma Inline (Set_Constant_Present); 13015 pragma Inline (Set_Constraint); 13016 pragma Inline (Set_Constraints); 13017 pragma Inline (Set_Context_Installed); 13018 pragma Inline (Set_Context_Items); 13019 pragma Inline (Set_Context_Pending); 13020 pragma Inline (Set_Contract_Test_Cases); 13021 pragma Inline (Set_Controlling_Argument); 13022 pragma Inline (Set_Conversion_OK); 13023 pragma Inline (Set_Convert_To_Return_False); 13024 pragma Inline (Set_Corresponding_Aspect); 13025 pragma Inline (Set_Corresponding_Body); 13026 pragma Inline (Set_Corresponding_Formal_Spec); 13027 pragma Inline (Set_Corresponding_Generic_Association); 13028 pragma Inline (Set_Corresponding_Integer_Value); 13029 pragma Inline (Set_Corresponding_Spec); 13030 pragma Inline (Set_Corresponding_Spec_Of_Stub); 13031 pragma Inline (Set_Corresponding_Stub); 13032 pragma Inline (Set_Dcheck_Function); 13033 pragma Inline (Set_Declarations); 13034 pragma Inline (Set_Default_Expression); 13035 pragma Inline (Set_Default_Name); 13036 pragma Inline (Set_Default_Storage_Pool); 13037 pragma Inline (Set_Defining_Identifier); 13038 pragma Inline (Set_Defining_Unit_Name); 13039 pragma Inline (Set_Delay_Alternative); 13040 pragma Inline (Set_Delay_Statement); 13041 pragma Inline (Set_Delta_Expression); 13042 pragma Inline (Set_Digits_Expression); 13043 pragma Inline (Set_Discr_Check_Funcs_Built); 13044 pragma Inline (Set_Discrete_Choices); 13045 pragma Inline (Set_Discrete_Range); 13046 pragma Inline (Set_Discrete_Subtype_Definition); 13047 pragma Inline (Set_Discrete_Subtype_Definitions); 13048 pragma Inline (Set_Discriminant_Specifications); 13049 pragma Inline (Set_Discriminant_Type); 13050 pragma Inline (Set_Do_Accessibility_Check); 13051 pragma Inline (Set_Do_Discriminant_Check); 13052 pragma Inline (Set_Do_Division_Check); 13053 pragma Inline (Set_Do_Length_Check); 13054 pragma Inline (Set_Do_Overflow_Check); 13055 pragma Inline (Set_Do_Range_Check); 13056 pragma Inline (Set_Do_Storage_Check); 13057 pragma Inline (Set_Do_Tag_Check); 13058 pragma Inline (Set_Elaborate_All_Desirable); 13059 pragma Inline (Set_Elaborate_All_Present); 13060 pragma Inline (Set_Elaborate_Desirable); 13061 pragma Inline (Set_Elaborate_Present); 13062 pragma Inline (Set_Else_Actions); 13063 pragma Inline (Set_Else_Statements); 13064 pragma Inline (Set_Elsif_Parts); 13065 pragma Inline (Set_Enclosing_Variant); 13066 pragma Inline (Set_End_Label); 13067 pragma Inline (Set_End_Span); 13068 pragma Inline (Set_Entity); 13069 pragma Inline (Set_Entry_Body_Formal_Part); 13070 pragma Inline (Set_Entry_Call_Alternative); 13071 pragma Inline (Set_Entry_Call_Statement); 13072 pragma Inline (Set_Entry_Direct_Name); 13073 pragma Inline (Set_Entry_Index); 13074 pragma Inline (Set_Entry_Index_Specification); 13075 pragma Inline (Set_Etype); 13076 pragma Inline (Set_Exception_Choices); 13077 pragma Inline (Set_Exception_Handlers); 13078 pragma Inline (Set_Exception_Junk); 13079 pragma Inline (Set_Exception_Label); 13080 pragma Inline (Set_Expansion_Delayed); 13081 pragma Inline (Set_Explicit_Actual_Parameter); 13082 pragma Inline (Set_Explicit_Generic_Actual_Parameter); 13083 pragma Inline (Set_Expression); 13084 pragma Inline (Set_Expressions); 13085 pragma Inline (Set_First_Bit); 13086 pragma Inline (Set_First_Inlined_Subprogram); 13087 pragma Inline (Set_First_Name); 13088 pragma Inline (Set_First_Named_Actual); 13089 pragma Inline (Set_First_Real_Statement); 13090 pragma Inline (Set_First_Subtype_Link); 13091 pragma Inline (Set_Float_Truncate); 13092 pragma Inline (Set_Formal_Type_Definition); 13093 pragma Inline (Set_Forwards_OK); 13094 pragma Inline (Set_From_Aspect_Specification); 13095 pragma Inline (Set_From_At_End); 13096 pragma Inline (Set_From_At_Mod); 13097 pragma Inline (Set_From_Conditional_Expression); 13098 pragma Inline (Set_From_Default); 13099 pragma Inline (Set_Generalized_Indexing); 13100 pragma Inline (Set_Generic_Associations); 13101 pragma Inline (Set_Generic_Formal_Declarations); 13102 pragma Inline (Set_Generic_Parent); 13103 pragma Inline (Set_Generic_Parent_Type); 13104 pragma Inline (Set_Handled_Statement_Sequence); 13105 pragma Inline (Set_Handler_List_Entry); 13106 pragma Inline (Set_Has_Created_Identifier); 13107 pragma Inline (Set_Has_Dereference_Action); 13108 pragma Inline (Set_Has_Dynamic_Length_Check); 13109 pragma Inline (Set_Has_Dynamic_Range_Check); 13110 pragma Inline (Set_Has_Init_Expression); 13111 pragma Inline (Set_Has_Local_Raise); 13112 pragma Inline (Set_Has_No_Elaboration_Code); 13113 pragma Inline (Set_Has_Pragma_Suppress_All); 13114 pragma Inline (Set_Has_Private_View); 13115 pragma Inline (Set_Has_Relative_Deadline_Pragma); 13116 pragma Inline (Set_Has_Self_Reference); 13117 pragma Inline (Set_Has_SP_Choice); 13118 pragma Inline (Set_Has_Storage_Size_Pragma); 13119 pragma Inline (Set_Has_Wide_Character); 13120 pragma Inline (Set_Has_Wide_Wide_Character); 13121 pragma Inline (Set_Header_Size_Added); 13122 pragma Inline (Set_Hidden_By_Use_Clause); 13123 pragma Inline (Set_High_Bound); 13124 pragma Inline (Set_Identifier); 13125 pragma Inline (Set_Implicit_With); 13126 pragma Inline (Set_Import_Interface_Present); 13127 pragma Inline (Set_In_Present); 13128 pragma Inline (Set_Includes_Infinities); 13129 pragma Inline (Set_Incomplete_View); 13130 pragma Inline (Set_Inherited_Discriminant); 13131 pragma Inline (Set_Instance_Spec); 13132 pragma Inline (Set_Interface_List); 13133 pragma Inline (Set_Interface_Present); 13134 pragma Inline (Set_Intval); 13135 pragma Inline (Set_Is_Accessibility_Actual); 13136 pragma Inline (Set_Is_Analyzed_Pragma); 13137 pragma Inline (Set_Is_Asynchronous_Call_Block); 13138 pragma Inline (Set_Is_Boolean_Aspect); 13139 pragma Inline (Set_Is_Checked); 13140 pragma Inline (Set_Is_Component_Left_Opnd); 13141 pragma Inline (Set_Is_Component_Right_Opnd); 13142 pragma Inline (Set_Is_Controlling_Actual); 13143 pragma Inline (Set_Is_Delayed_Aspect); 13144 pragma Inline (Set_Is_Disabled); 13145 pragma Inline (Set_Is_Dynamic_Coextension); 13146 pragma Inline (Set_Is_Elsif); 13147 pragma Inline (Set_Is_Entry_Barrier_Function); 13148 pragma Inline (Set_Is_Expanded_Build_In_Place_Call); 13149 pragma Inline (Set_Is_Expanded_Contract); 13150 pragma Inline (Set_Is_Finalization_Wrapper); 13151 pragma Inline (Set_Is_Folded_In_Parser); 13152 pragma Inline (Set_Is_Generic_Contract_Pragma); 13153 pragma Inline (Set_Is_Ghost_Pragma); 13154 pragma Inline (Set_Is_Ignored); 13155 pragma Inline (Set_Is_In_Discriminant_Check); 13156 pragma Inline (Set_Is_Inherited_Pragma); 13157 pragma Inline (Set_Is_Machine_Number); 13158 pragma Inline (Set_Is_Null_Loop); 13159 pragma Inline (Set_Is_Overloaded); 13160 pragma Inline (Set_Is_Power_Of_2_For_Shift); 13161 pragma Inline (Set_Is_Prefixed_Call); 13162 pragma Inline (Set_Is_Protected_Subprogram_Body); 13163 pragma Inline (Set_Is_Static_Coextension); 13164 pragma Inline (Set_Is_Static_Expression); 13165 pragma Inline (Set_Is_Subprogram_Descriptor); 13166 pragma Inline (Set_Is_Task_Allocation_Block); 13167 pragma Inline (Set_Is_Task_Body_Procedure); 13168 pragma Inline (Set_Is_Task_Master); 13169 pragma Inline (Set_Iteration_Scheme); 13170 pragma Inline (Set_Iterator_Specification); 13171 pragma Inline (Set_Itype); 13172 pragma Inline (Set_Kill_Range_Check); 13173 pragma Inline (Set_Label_Construct); 13174 pragma Inline (Set_Last_Bit); 13175 pragma Inline (Set_Last_Name); 13176 pragma Inline (Set_Left_Opnd); 13177 pragma Inline (Set_Library_Unit); 13178 pragma Inline (Set_Limited_Present); 13179 pragma Inline (Set_Limited_View_Installed); 13180 pragma Inline (Set_Literals); 13181 pragma Inline (Set_Local_Raise_Not_OK); 13182 pragma Inline (Set_Local_Raise_Statements); 13183 pragma Inline (Set_Loop_Actions); 13184 pragma Inline (Set_Loop_Parameter_Specification); 13185 pragma Inline (Set_Low_Bound); 13186 pragma Inline (Set_Mod_Clause); 13187 pragma Inline (Set_More_Ids); 13188 pragma Inline (Set_Must_Be_Byte_Aligned); 13189 pragma Inline (Set_Must_Not_Freeze); 13190 pragma Inline (Set_Must_Not_Override); 13191 pragma Inline (Set_Must_Override); 13192 pragma Inline (Set_Name); 13193 pragma Inline (Set_Names); 13194 pragma Inline (Set_Next_Entity); 13195 pragma Inline (Set_Next_Exit_Statement); 13196 pragma Inline (Set_Next_Implicit_With); 13197 pragma Inline (Set_Next_Named_Actual); 13198 pragma Inline (Set_Next_Pragma); 13199 pragma Inline (Set_Next_Rep_Item); 13200 pragma Inline (Set_Next_Use_Clause); 13201 pragma Inline (Set_No_Ctrl_Actions); 13202 pragma Inline (Set_No_Elaboration_Check); 13203 pragma Inline (Set_No_Entities_Ref_In_Spec); 13204 pragma Inline (Set_No_Initialization); 13205 pragma Inline (Set_No_Minimize_Eliminate); 13206 pragma Inline (Set_No_Truncation); 13207 pragma Inline (Set_Non_Aliased_Prefix); 13208 pragma Inline (Set_Null_Excluding_Subtype); 13209 pragma Inline (Set_Null_Exclusion_Present); 13210 pragma Inline (Set_Null_Exclusion_In_Return_Present); 13211 pragma Inline (Set_Null_Present); 13212 pragma Inline (Set_Null_Record_Present); 13213 pragma Inline (Set_Object_Definition); 13214 pragma Inline (Set_Of_Present); 13215 pragma Inline (Set_Original_Discriminant); 13216 pragma Inline (Set_Original_Entity); 13217 pragma Inline (Set_Others_Discrete_Choices); 13218 pragma Inline (Set_Out_Present); 13219 pragma Inline (Set_Parameter_Associations); 13220 pragma Inline (Set_Parameter_Specifications); 13221 pragma Inline (Set_Parameter_Type); 13222 pragma Inline (Set_Parent_Spec); 13223 pragma Inline (Set_Position); 13224 pragma Inline (Set_Pragma_Argument_Associations); 13225 pragma Inline (Set_Pragma_Identifier); 13226 pragma Inline (Set_Pragmas_After); 13227 pragma Inline (Set_Pragmas_Before); 13228 pragma Inline (Set_Pre_Post_Conditions); 13229 pragma Inline (Set_Prefix); 13230 pragma Inline (Set_Premature_Use); 13231 pragma Inline (Set_Present_Expr); 13232 pragma Inline (Set_Prev_Ids); 13233 pragma Inline (Set_Print_In_Hex); 13234 pragma Inline (Set_Private_Declarations); 13235 pragma Inline (Set_Private_Present); 13236 pragma Inline (Set_Procedure_To_Call); 13237 pragma Inline (Set_Proper_Body); 13238 pragma Inline (Set_Protected_Definition); 13239 pragma Inline (Set_Protected_Present); 13240 pragma Inline (Set_Raises_Constraint_Error); 13241 pragma Inline (Set_Range_Constraint); 13242 pragma Inline (Set_Range_Expression); 13243 pragma Inline (Set_Real_Range_Specification); 13244 pragma Inline (Set_Realval); 13245 pragma Inline (Set_Reason); 13246 pragma Inline (Set_Record_Extension_Part); 13247 pragma Inline (Set_Redundant_Use); 13248 pragma Inline (Set_Renaming_Exception); 13249 pragma Inline (Set_Result_Definition); 13250 pragma Inline (Set_Return_Object_Declarations); 13251 pragma Inline (Set_Reverse_Present); 13252 pragma Inline (Set_Right_Opnd); 13253 pragma Inline (Set_Rounded_Result); 13254 pragma Inline (Set_SCIL_Controlling_Tag); 13255 pragma Inline (Set_SCIL_Entity); 13256 pragma Inline (Set_SCIL_Tag_Value); 13257 pragma Inline (Set_SCIL_Target_Prim); 13258 pragma Inline (Set_Scope); 13259 pragma Inline (Set_Select_Alternatives); 13260 pragma Inline (Set_Selector_Name); 13261 pragma Inline (Set_Selector_Names); 13262 pragma Inline (Set_Shift_Count_OK); 13263 pragma Inline (Set_Source_Type); 13264 pragma Inline (Set_Split_PPC); 13265 pragma Inline (Set_Statements); 13266 pragma Inline (Set_Storage_Pool); 13267 pragma Inline (Set_Strval); 13268 pragma Inline (Set_Subpool_Handle_Name); 13269 pragma Inline (Set_Subtype_Indication); 13270 pragma Inline (Set_Subtype_Mark); 13271 pragma Inline (Set_Subtype_Marks); 13272 pragma Inline (Set_Suppress_Assignment_Checks); 13273 pragma Inline (Set_Suppress_Loop_Warnings); 13274 pragma Inline (Set_Synchronized_Present); 13275 pragma Inline (Set_TSS_Elist); 13276 pragma Inline (Set_Tagged_Present); 13277 pragma Inline (Set_Target_Type); 13278 pragma Inline (Set_Task_Definition); 13279 pragma Inline (Set_Task_Present); 13280 pragma Inline (Set_Then_Actions); 13281 pragma Inline (Set_Then_Statements); 13282 pragma Inline (Set_Treat_Fixed_As_Integer); 13283 pragma Inline (Set_Triggering_Alternative); 13284 pragma Inline (Set_Triggering_Statement); 13285 pragma Inline (Set_Type_Definition); 13286 pragma Inline (Set_Uneval_Old_Accept); 13287 pragma Inline (Set_Uneval_Old_Warn); 13288 pragma Inline (Set_Unit); 13289 pragma Inline (Set_Uninitialized_Variable); 13290 pragma Inline (Set_Unknown_Discriminants_Present); 13291 pragma Inline (Set_Unreferenced_In_Spec); 13292 pragma Inline (Set_Used_Operations); 13293 pragma Inline (Set_Variant_Part); 13294 pragma Inline (Set_Variants); 13295 pragma Inline (Set_Visible_Declarations); 13296 pragma Inline (Set_Was_Expression_Function); 13297 pragma Inline (Set_Was_Originally_Stub); 13298 pragma Inline (Set_Withed_Body); 13299 13300end Sinfo; 13301