1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S I N F O -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2013, 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 -- In the body (sinfo), add entries to the access functions for all 90 -- its fields (except standard expression fields) to include the new 91 -- node in the checks. 92 -- Add an appropriate section to the case statement in sprint.adb 93 -- Add an appropriate section to the case statement in sem.adb 94 -- Add an appropriate section to the case statement in exp_util.adb 95 -- (Insert_Actions procedure) 96 -- For a subexpression, add an appropriate section to the case 97 -- statement in sem_eval.adb 98 -- For a subexpression, add an appropriate section to the case 99 -- statement in sem_res.adb 100 101 -- Finally, four utility programs must be run: 102 103 -- (Optional.) Run CSinfo to check that you have made the changes 104 -- consistently. It checks most of the rules given above. This utility 105 -- reads sinfo.ads and sinfo.adb and generates a report to standard 106 -- output. This step is optional because XSinfo runs CSinfo. 107 108 -- Run XSinfo to create sinfo.h, the corresponding C header. This 109 -- utility reads sinfo.ads and generates sinfo.h. Note that it does 110 -- not need to read sinfo.adb, since the contents of the body are 111 -- algorithmically determinable from the spec. 112 113 -- Run XTreeprs to create treeprs.ads, an updated version of the module 114 -- that is used to drive the tree print routine. This utility reads (but 115 -- does not modify) treeprs.adt, the template that provides the basic 116 -- structure of the file, and then fills in the data from the comments 117 -- in sinfo.ads. 118 119 -- Run XNmake to create nmake.ads and nmake.adb, the package body and 120 -- spec of the Nmake package which contains functions for constructing 121 -- nodes. 122 123 -- The above steps are done automatically by the build scripts when you do 124 -- a full bootstrap. 125 126 -- Note: sometime we could write a utility that actually generated the body 127 -- of sinfo from the spec instead of simply checking it, since, as noted 128 -- above, the contents of the body can be determined from the spec. 129 130 -------------------------------- 131 -- Implicit Nodes in the Tree -- 132 -------------------------------- 133 134 -- Generally the structure of the tree very closely follows the grammar as 135 -- defined in the RM. However, certain nodes are omitted to save space and 136 -- simplify semantic processing. Two general classes of such omitted nodes 137 -- are as follows: 138 139 -- If the only possibilities for a non-terminal are one or more other 140 -- non-terminals (i.e. the rule is a "skinny" rule), then usually the 141 -- corresponding node is omitted from the tree, and the target construct 142 -- appears directly. For example, a real type definition is either 143 -- floating point definition or a fixed point definition. No explicit node 144 -- appears for real type definition. Instead either the floating point 145 -- definition or fixed point definition appears directly. 146 147 -- If a non-terminal corresponds to a list of some other non-terminal 148 -- (possibly with separating punctuation), then usually it is omitted from 149 -- the tree, and a list of components appears instead. For example, 150 -- sequence of statements does not appear explicitly in the tree. Instead 151 -- a list of statements appears directly. 152 153 -- Some additional cases of omitted nodes occur and are documented 154 -- individually. In particular, many nodes are omitted in the tree 155 -- generated for an expression. 156 157 ------------------------------------------- 158 -- Handling of Defining Identifier Lists -- 159 ------------------------------------------- 160 161 -- In several declarative forms in the syntax, lists of defining 162 -- identifiers appear (object declarations, component declarations, number 163 -- declarations etc.) 164 165 -- The semantics of such statements are equivalent to a series of identical 166 -- declarations of single defining identifiers (except that conformance 167 -- checks require the same grouping of identifiers in the parameter case). 168 169 -- To simplify semantic processing, the parser breaks down such multiple 170 -- declaration cases into sequences of single declarations, duplicating 171 -- type and initialization information as required. The flags More_Ids and 172 -- Prev_Ids are used to record the original form of the source in the case 173 -- where the original source used a list of names, More_Ids being set on 174 -- all but the last name and Prev_Ids being set on all but the first name. 175 -- These flags are used to reconstruct the original source (e.g. in the 176 -- Sprint package), and also are included in the conformance checks, but 177 -- otherwise have no semantic significance. 178 179 -- Note: the reason that we use More_Ids and Prev_Ids rather than 180 -- First_Name and Last_Name flags is so that the flags are off in the 181 -- normal one identifier case, which minimizes tree print output. 182 183 ----------------------- 184 -- Use of Node Lists -- 185 ----------------------- 186 187 -- With a few exceptions, if a construction of the form {non-terminal} 188 -- appears in the tree, lists are used in the corresponding tree node (see 189 -- package Nlists for handling of node lists). In this case a field of the 190 -- parent node points to a list of nodes for the non-terminal. The field 191 -- name for such fields has a plural name which always ends in "s". For 192 -- example, a case statement has a field Alternatives pointing to list of 193 -- case statement alternative nodes. 194 195 -- Only fields pointing to lists have names ending in "s", so generally the 196 -- structure is strongly typed, fields not ending in s point to single 197 -- nodes, and fields ending in s point to lists. 198 199 -- The following example shows how a traversal of a list is written. We 200 -- suppose here that Stmt points to a N_Case_Statement node which has a 201 -- list field called Alternatives: 202 203 -- Alt := First (Alternatives (Stmt)); 204 -- while Present (Alt) loop 205 -- .. 206 -- -- processing for case statement alternative Alt 207 -- .. 208 -- Alt := Next (Alt); 209 -- end loop; 210 211 -- The Present function tests for Empty, which in this case signals the end 212 -- of the list. First returns Empty immediately if the list is empty. 213 -- Present is defined in Atree, First and Next are defined in Nlists. 214 215 -- The exceptions to this rule occur with {DEFINING_IDENTIFIERS} in all 216 -- contexts, which is handled as described in the previous section, and 217 -- with {,library_unit_NAME} in the N_With_Clause mode, which is handled 218 -- using the First_Name and Last_Name flags, as further detailed in the 219 -- description of the N_With_Clause node. 220 221 ------------- 222 -- Pragmas -- 223 ------------- 224 225 -- Pragmas can appear in many different context, but are not included in 226 -- the grammar. Still they must appear in the tree, so they can be properly 227 -- processed. 228 229 -- Two approaches are used. In some cases, an extra field is defined in an 230 -- appropriate node that contains a list of pragmas appearing in the 231 -- expected context. For example pragmas can appear before an 232 -- Accept_Alternative in a Selective_Accept_Statement, and these pragmas 233 -- appear in the Pragmas_Before field of the N_Accept_Alternative node. 234 235 -- The other approach is to simply allow pragmas to appear in syntactic 236 -- lists where the grammar (of course) does not include the possibility. 237 -- For example, the Variants field of an N_Variant_Part node points to a 238 -- list that can contain both N_Pragma and N_Variant nodes. 239 240 -- To make processing easier in the latter case, the Nlists package 241 -- provides a set of routines (First_Non_Pragma, Last_Non_Pragma, 242 -- Next_Non_Pragma, Prev_Non_Pragma) that allow such lists to be handled 243 -- ignoring all pragmas. 244 245 -- In the case of the variants list, we can either write: 246 247 -- Variant := First (Variants (N)); 248 -- while Present (Variant) loop 249 -- ... 250 -- Variant := Next (Variant); 251 -- end loop; 252 253 -- or 254 255 -- Variant := First_Non_Pragma (Variants (N)); 256 -- while Present (Variant) loop 257 -- ... 258 -- Variant := Next_Non_Pragma (Variant); 259 -- end loop; 260 261 -- In the first form of the loop, Variant can either be an N_Pragma or an 262 -- N_Variant node. In the second form, Variant can only be N_Variant since 263 -- all pragmas are skipped. 264 265 --------------------- 266 -- Optional Fields -- 267 --------------------- 268 269 -- Fields which correspond to a section of the syntax enclosed in square 270 -- brackets are generally omitted (and the corresponding field set to Empty 271 -- for a node, or No_List for a list). The documentation of such fields 272 -- notes these cases. One exception to this rule occurs in the case of 273 -- possibly empty statement sequences (such as the sequence of statements 274 -- in an entry call alternative). Such cases appear in the syntax rules as 275 -- [SEQUENCE_OF_STATEMENTS] and the fields corresponding to such optional 276 -- statement sequences always contain an empty list (not No_List) if no 277 -- statements are present. 278 279 -- Note: the utility program that constructs the body and spec of the Nmake 280 -- package relies on the format of the comments to determine if a field 281 -- should have a default value in the corresponding make routine. The rule 282 -- is that if the first line of the description of the field contains the 283 -- string "(set to xxx if", then a default value of xxx is provided for 284 -- this field in the corresponding Make_yyy routine. 285 286 ----------------------------------- 287 -- Note on Body/Spec Terminology -- 288 ----------------------------------- 289 290 -- In informal discussions about Ada, it is customary to refer to package 291 -- and subprogram specs and bodies. However, this is not technically 292 -- correct, what is normally referred to as a spec or specification is in 293 -- fact a package declaration or subprogram declaration. We are careful in 294 -- GNAT to use the correct terminology and in particular, the full word 295 -- specification is never used as an incorrect substitute for declaration. 296 -- The structure and terminology used in the tree also reflects the grammar 297 -- and thus uses declaration and specification in the technically correct 298 -- manner. 299 300 -- However, there are contexts in which the informal terminology is useful. 301 -- We have the word "body" to refer to the Interp_Etype declared by the 302 -- declaration of a unit body, and in some contexts we need similar term to 303 -- refer to the entity declared by the package or subprogram declaration, 304 -- and simply using declaration can be confusing since the body also has a 305 -- declaration. 306 307 -- An example of such a context is the link between the package body and 308 -- its declaration. With_Declaration is confusing, since the package body 309 -- itself is a declaration. 310 311 -- To deal with this problem, we reserve the informal term Spec, i.e. the 312 -- popular abbreviation used in this context, to refer to the entity 313 -- declared by the package or subprogram declaration. So in the above 314 -- example case, the field in the body is called With_Spec. 315 316 -- Another important context for the use of the word Spec is in error 317 -- messages, where a hyper-correct use of declaration would be confusing to 318 -- a typical Ada programmer, and even for an expert programmer can cause 319 -- confusion since the body has a declaration as well. 320 321 -- So, to summarize: 322 323 -- Declaration always refers to the syntactic entity that is called 324 -- a declaration. In particular, subprogram declaration 325 -- and package declaration are used to describe the 326 -- syntactic entity that includes the semicolon. 327 328 -- Specification always refers to the syntactic entity that is called 329 -- a specification. In particular, the terms procedure 330 -- specification, function specification, package 331 -- specification, subprogram specification always refer 332 -- to the syntactic entity that has no semicolon. 333 334 -- Spec is an informal term, used to refer to the entity 335 -- that is declared by a task declaration, protected 336 -- declaration, generic declaration, subprogram 337 -- declaration or package declaration. 338 339 -- This convention is followed throughout the GNAT documentation 340 -- both internal and external, and in all error message text. 341 342 ------------------------ 343 -- Internal Use Nodes -- 344 ------------------------ 345 346 -- These are Node_Kind settings used in the internal implementation which 347 -- are not logically part of the specification. 348 349 -- N_Unused_At_Start 350 -- Completely unused entry at the start of the enumeration type. This 351 -- is inserted so that no legitimate value is zero, which helps to get 352 -- better debugging behavior, since zero is a likely uninitialized value). 353 354 -- N_Unused_At_End 355 -- Completely unused entry at the end of the enumeration type. This is 356 -- handy so that arrays with Node_Kind as the index type have an extra 357 -- entry at the end (see for example the use of the Pchar_Pos_Array in 358 -- Treepr, where the extra entry provides the limit value when dealing with 359 -- the last used entry in the array). 360 361 ----------------------------------------- 362 -- Note on the settings of Sloc fields -- 363 ----------------------------------------- 364 365 -- The Sloc field of nodes that come from the source is set by the parser. 366 -- For internal nodes, and nodes generated during expansion the Sloc is 367 -- usually set in the call to the constructor for the node. In general the 368 -- Sloc value chosen for an internal node is the Sloc of the source node 369 -- whose processing is responsible for the expansion. For example, the Sloc 370 -- of an inherited primitive operation is the Sloc of the corresponding 371 -- derived type declaration. 372 373 -- For the nodes of a generic instantiation, the Sloc value is encoded to 374 -- represent both the original Sloc in the generic unit, and the Sloc of 375 -- the instantiation itself. See Sinput.ads for details. 376 377 -- Subprogram instances create two callable entities: one is the visible 378 -- subprogram instance, and the other is an anonymous subprogram nested 379 -- within a wrapper package that contains the renamings for the actuals. 380 -- Both of these entities have the Sloc of the defining entity in the 381 -- instantiation node. This simplifies some ASIS queries. 382 383 ----------------------- 384 -- Field Definitions -- 385 ----------------------- 386 387 -- In the following node definitions, all fields, both syntactic and 388 -- semantic, are documented. The one exception is in the case of entities 389 -- (defining identifiers, character literals and operator symbols), where 390 -- the usage of the fields depends on the entity kind. Entity fields are 391 -- fully documented in the separate package Einfo. 392 393 -- In the node definitions, three common sets of fields are abbreviated to 394 -- save both space in the documentation, and also space in the string 395 -- (defined in Tree_Print_Strings) used to print trees. The following 396 -- abbreviations are used: 397 398 -- Note: the utility program that creates the Treeprs spec (in the file 399 -- xtreeprs.adb) knows about the special fields here, so it must be 400 -- modified if any change is made to these fields. 401 402 -- "plus fields for binary operator" 403 -- Chars (Name1) Name_Id for the operator 404 -- Left_Opnd (Node2) left operand expression 405 -- Right_Opnd (Node3) right operand expression 406 -- Entity (Node4-Sem) defining entity for operator 407 -- Associated_Node (Node4-Sem) for generic processing 408 -- Do_Overflow_Check (Flag17-Sem) set if overflow check needed 409 -- Has_Private_View (Flag11-Sem) set in generic units. 410 411 -- "plus fields for unary operator" 412 -- Chars (Name1) Name_Id for the operator 413 -- Right_Opnd (Node3) right operand expression 414 -- Entity (Node4-Sem) defining entity for operator 415 -- Associated_Node (Node4-Sem) for generic processing 416 -- Do_Overflow_Check (Flag17-Sem) set if overflow check needed 417 -- Has_Private_View (Flag11-Sem) set in generic units. 418 419 -- "plus fields for expression" 420 -- Paren_Count number of parentheses levels 421 -- Etype (Node5-Sem) type of the expression 422 -- Is_Overloaded (Flag5-Sem) >1 type interpretation exists 423 -- Is_Static_Expression (Flag6-Sem) set for static expression 424 -- Raises_Constraint_Error (Flag7-Sem) evaluation raises CE 425 -- Must_Not_Freeze (Flag8-Sem) set if must not freeze 426 -- Do_Range_Check (Flag9-Sem) set if a range check needed 427 -- Has_Dynamic_Length_Check (Flag10-Sem) set if length check inserted 428 -- Has_Dynamic_Range_Check (Flag12-Sem) set if range check inserted 429 -- Assignment_OK (Flag15-Sem) set if modification is OK 430 -- Is_Controlling_Actual (Flag16-Sem) set for controlling argument 431 432 -- Note: see under (EXPRESSION) for further details on the use of 433 -- the Paren_Count field to record the number of parentheses levels. 434 435 -- Node_Kind is the type used in the Nkind field to indicate the node kind. 436 -- The actual definition of this type is given later (the reason for this 437 -- is that we want the descriptions ordered by logical chapter in the RM, 438 -- but the type definition is reordered to facilitate the definition of 439 -- some subtype ranges. The individual descriptions of the nodes show how 440 -- the various fields are used in each node kind, as well as providing 441 -- logical names for the fields. Functions and procedures are provided for 442 -- accessing and setting these fields using these logical names. 443 444 ----------------------- 445 -- Gigi Restrictions -- 446 ----------------------- 447 448 -- The tree passed to Gigi is more restricted than the general tree form. 449 -- For example, as a result of expansion, most of the tasking nodes can 450 -- never appear. For each node to which either a complete or partial 451 -- restriction applies, a note entitled "Gigi restriction" appears which 452 -- documents the restriction. 453 454 -- Note that most of these restrictions apply only to trees generated when 455 -- code is being generated, since they involved expander actions that 456 -- destroy the tree. 457 458 --------------- 459 -- ASIS Mode -- 460 --------------- 461 462 -- When a file is compiled in ASIS mode (-gnatct), expansion is skipped, 463 -- and the analysis must generate a tree in a form that meets all ASIS 464 -- requirements. 465 466 -- ASIS must be able to recover the original tree that corresponds to the 467 -- source. It relies heavily on Original_Node for this purpose, which as 468 -- described in Atree, records the history when a node is rewritten. ASIS 469 -- uses Original_Node to recover the original node before the Rewrite. 470 471 -- At least in ASIS mode (not really important in non-ASIS mode), when 472 -- N1 is rewritten as N2: 473 474 -- The subtree rooted by the original node N1 should be fully decorated, 475 -- i.e. all semantic fields noted in sinfo.ads should be set properly 476 -- and any referenced entities should be complete (with exceptions for 477 -- representation information, noted below). 478 479 -- For all the direct descendants of N1 (original node) their Parent 480 -- links should point not to N1, but to N2 (rewriting node). 481 482 -- The Parent links of rewritten nodes (N1 in this example) are set in 483 -- some cases (to point to the rewritten parent), but in other cases 484 -- they are set to Empty. This needs sorting out ??? It would be much 485 -- cleaner if they could always be set in the original node ??? 486 487 -- Representation Information 488 489 -- For the purposes of the data description annex, the representation 490 -- information for source declared entities must be complete in the 491 -- ASIS tree. 492 493 -- This requires that the front end call the back end (gigi/gcc) in 494 -- a special "back annotate only" mode to obtain information on layout 495 -- from the back end. 496 497 -- For the purposes of this special "back annotate only" mode, the 498 -- requirements that would normally need to be met to generate code 499 -- are relaxed as follows: 500 501 -- Anonymous types need not have full representation information (e.g. 502 -- sizes need not be set for types where the front end would normally 503 -- set the sizes), since anonymous types can be ignored in this mode. 504 505 -- In this mode, gigi will see at least fragments of a fully annotated 506 -- unexpanded tree. This means that it will encounter nodes it does 507 -- not normally handle (such as stubs, task bodies etc). It should 508 -- simply ignore these nodes, since they are not relevant to the task 509 -- of back annotating representation information. 510 511 -------------------- 512 -- GNATprove Mode -- 513 -------------------- 514 515 -- When a file is compiled in GNATprove mode (-gnatd.F), a very light 516 -- expansion is performed and the analysis must generate a tree in a 517 -- form that meets additional requirements. 518 519 -- This light expansion does two transformations of the tree that cannot 520 -- be postponed till after semantic analysis: 521 522 -- 1. Replace object renamings by renamed object. This requires the 523 -- introduction of temporaries at the point of the renaming, which 524 -- must be properly analyzed. 525 526 -- 2. Fully qualify entity names. This is needed to generate suitable 527 -- local effects and call-graphs in ALI files, with the completely 528 -- qualified names (in particular the suffix to distinguish homonyms). 529 530 -- The tree after this light expansion should be fully analyzed 531 -- semantically, which sometimes requires the insertion of semantic 532 -- pre-analysis, for example for subprogram contracts and pragma 533 -- check/assert. In particular, all expression must have their proper type, 534 -- and semantic links should be set between tree nodes (partial to full 535 -- view, etc.) Some kinds of nodes should be either absent, or can be 536 -- ignored by the formal verification backend: 537 538 -- N_Object_Renaming_Declaration: can be ignored safely 539 -- N_Expression_Function: absent (rewritten) 540 -- N_Expression_With_Actions: absent (not generated) 541 542 -- SPARK cross-references are generated from the regular cross-references 543 -- (used for browsing and code understanding) and additional references 544 -- collected during semantic analysis, in particular on all dereferences. 545 -- These SPARK cross-references are output in a separate section of ALI 546 -- files, as described in spark_xrefs.adb. They are the basis for the 547 -- computation of data dependences in GNATprove. This implies that all 548 -- cross-references should be generated in this mode, even those that would 549 -- not make sense from a user point-of-view, and that cross-references that 550 -- do not lead to data dependences for subprograms can be safely ignored. 551 552 -- In addition pragma Debug statements are removed from the tree (rewritten 553 -- to NULL stmt), since they should be ignored in formal verification. 554 555 -- An error is also issued for missing subunits, similar to the warning 556 -- issued when generating code, to avoid formal verification of a partial 557 -- unit. 558 559 ----------------------- 560 -- Check Flag Fields -- 561 ----------------------- 562 563 -- The following flag fields appear in expression nodes: 564 565 -- Do_Division_Check 566 -- Do_Overflow_Check 567 -- Do_Range_Check 568 569 -- These three flags are always set by the front end during semantic 570 -- analysis, on expression nodes that may trigger the corresponding 571 -- check. The front end then inserts or not the check during expansion. In 572 -- particular, these flags should also be correctly set in ASIS mode and 573 -- GNATprove mode. 574 575 -- Note: the expander always takes care of the Do_Range check case, 576 -- so this flag will never be set in the expanded tree passed to the 577 -- back end code generator. 578 579 -- Note that this accounts for all nodes that trigger the corresponding 580 -- checks, except for range checks on subtype_indications, which may be 581 -- required to check that a range_constraint is compatible with the given 582 -- subtype (RM 3.2.2(11)). 583 584 -- The following flag fields appear in various nodes: 585 586 -- Do_Accessibility_Check 587 -- Do_Discriminant_Check 588 -- Do_Length_Check 589 -- Do_Storage_Check 590 -- Do_Tag_Check 591 592 -- These flags are used in some specific cases by the front end, either 593 -- during semantic analysis or during expansion, and cannot be expected 594 -- to be set on all nodes that trigger the corresponding check. 595 596 ------------------------ 597 -- Common Flag Fields -- 598 ------------------------ 599 600 -- The following flag fields appear in all nodes: 601 602 -- Analyzed 603 -- This flag is used to indicate that a node (and all its children have 604 -- been analyzed. It is used to avoid reanalysis of a node that has 605 -- already been analyzed, both for efficiency and functional correctness 606 -- reasons. 607 608 -- Comes_From_Source 609 -- This flag is set if the node comes directly from an explicit construct 610 -- in the source. It is normally on for any nodes built by the scanner or 611 -- parser from the source program, with the exception that in a few cases 612 -- the parser adds nodes to normalize the representation (in particular 613 -- a null statement is added to a package body if there is no begin/end 614 -- initialization section. 615 -- 616 -- Most nodes inserted by the analyzer or expander are not considered 617 -- as coming from source, so the flag is off for such nodes. In a few 618 -- cases, the expander constructs nodes closely equivalent to nodes 619 -- from the source program (e.g. the allocator built for build-in-place 620 -- case), and the Comes_From_Source flag is deliberately set. 621 622 -- Error_Posted 623 -- This flag is used to avoid multiple error messages being posted on or 624 -- referring to the same node. This flag is set if an error message 625 -- refers to a node or is posted on its source location, and has the 626 -- effect of inhibiting further messages involving this same node. 627 628 ----------------------- 629 -- Modify_Tree_For_C -- 630 ----------------------- 631 632 -- If the flag Opt.Modify_Tree_For_C is set True, then the tree is modified 633 -- in ways that help match the semantics better with C, easing the task of 634 -- interfacing to C code generators (other than GCC, where the work is done 635 -- in gigi, and there is no point in changing that), and also making life 636 -- easier for Cprint in generating C source code. 637 638 -- The current modifications implemented are as follows: 639 640 -- N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic nodes 641 -- are eliminated from the tree (since these operations do not exist in 642 -- C), and the operations are rewritten in terms of logical shifts and 643 -- other logical operations that do exist in C. See Exp_Ch4 expansion 644 -- routines for these operators for details of the transformations made. 645 646 -- The right operand of N_Op_Shift_Right and N_Op_Shift_Left is always 647 -- less than the word size (since other values are not well-defined in 648 -- C). This is done using an explicit test if necessary. 649 650 -- Min and Max attributes are expanded into equivalent if expressions, 651 -- dealing properly with side effect issues. 652 653 -- Mod for signed integer types is expanded into equivalent expressions 654 -- using Rem (which is % in C) and other C-available operators. 655 656 -- The Actions list of an Expression_With_Actions node does not contain 657 -- any declarations,(so that DO X, .. Y IN Z becomes (X, .. Y, Z) in C). 658 659 ------------------------------------ 660 -- Description of Semantic Fields -- 661 ------------------------------------ 662 663 -- The meaning of the syntactic fields is generally clear from their names 664 -- without any further description, since the names are chosen to 665 -- correspond very closely to the syntax in the reference manual. This 666 -- section describes the usage of the semantic fields, which are used to 667 -- contain additional information determined during semantic analysis. 668 669 -- ABE_Is_Certain (Flag18-Sem) 670 -- This flag is set in an instantiation node or a call node is determined 671 -- to be sure to raise an ABE. This is used to trigger special handling 672 -- of such cases, particularly in the instantiation case where we avoid 673 -- instantiating the body if this flag is set. This flag is also present 674 -- in an N_Formal_Package_Declaration_Node since formal package 675 -- declarations are treated like instantiations, but it is always set to 676 -- False in this context. 677 678 -- Accept_Handler_Records (List5-Sem) 679 -- This field is present only in an N_Accept_Alternative node. It is used 680 -- to temporarily hold the exception handler records from an accept 681 -- statement in a selective accept. These exception handlers will 682 -- eventually be placed in the Handler_Records list of the procedure 683 -- built for this accept (see Expand_N_Selective_Accept procedure in 684 -- Exp_Ch9 for further details). 685 686 -- Access_Types_To_Process (Elist2-Sem) 687 -- Present in N_Freeze_Entity nodes for Incomplete or private types. 688 -- Contains the list of access types which may require specific treatment 689 -- when the nature of the type completion is completely known. An example 690 -- of such treatment is the generation of the associated_final_chain. 691 692 -- Actions (List1-Sem) 693 -- This field contains a sequence of actions that are associated with the 694 -- node holding the field. See the individual node types for details of 695 -- how this field is used, as well as the description of the specific use 696 -- for a particular node type. 697 698 -- Activation_Chain_Entity (Node3-Sem) 699 -- This is used in tree nodes representing task activators (blocks, 700 -- subprogram bodies, package declarations, and task bodies). It is 701 -- initially Empty, and then gets set to point to the entity for the 702 -- declared Activation_Chain variable when the first task is declared. 703 -- When tasks are declared in the corresponding declarative region this 704 -- entity is located by name (its name is always _Chain) and the declared 705 -- tasks are added to the chain. Note that N_Extended_Return_Statement 706 -- does not have this attribute, although it does have an activation 707 -- chain. This chain is used to store the tasks temporarily, and is not 708 -- used for activating them. On successful completion of the return 709 -- statement, the tasks are moved to the caller's chain, and the caller 710 -- activates them. 711 712 -- Acts_As_Spec (Flag4-Sem) 713 -- A flag set in the N_Subprogram_Body node for a subprogram body which 714 -- is acting as its own spec, except in the case of a library level 715 -- subprogram, in which case the flag is set on the parent compilation 716 -- unit node instead. 717 718 -- Actual_Designated_Subtype (Node4-Sem) 719 -- Present in N_Free_Statement and N_Explicit_Dereference nodes. If gigi 720 -- needs to known the dynamic constrained subtype of the designated 721 -- object, this attribute is set to that type. This is done for 722 -- N_Free_Statements for access-to-classwide types and access to 723 -- unconstrained packed array types, and for N_Explicit_Dereference when 724 -- the designated type is an unconstrained packed array and the 725 -- dereference is the prefix of a 'Size attribute reference. 726 727 -- Address_Warning_Posted (Flag18-Sem) 728 -- Present in N_Attribute_Definition nodes. Set to indicate that we have 729 -- posted a warning for the address clause regarding size or alignment 730 -- issues. Used to inhibit multiple redundant messages. 731 732 -- Aggregate_Bounds (Node3-Sem) 733 -- Present in array N_Aggregate nodes. If the bounds of the aggregate are 734 -- known at compile time, this field points to an N_Range node with those 735 -- bounds. Otherwise Empty. 736 737 -- All_Others (Flag11-Sem) 738 -- Present in an N_Others_Choice node. This flag is set for an others 739 -- exception where all exceptions are to be caught, even those that are 740 -- not normally handled (in particular the tasking abort signal). This 741 -- is used for translation of the at end handler into a normal exception 742 -- handler. 743 744 -- Aspect_Rep_Item (Node2-Sem) 745 -- Present in N_Aspect_Specification nodes. Points to the corresponding 746 -- pragma/attribute definition node used to process the aspect. 747 748 -- Assignment_OK (Flag15-Sem) 749 -- This flag is set in a subexpression node for an object, indicating 750 -- that the associated object can be modified, even if this would not 751 -- normally be permissible (either by direct assignment, or by being 752 -- passed as an out or in-out parameter). This is used by the expander 753 -- for a number of purposes, including initialization of constants and 754 -- limited type objects (such as tasks), setting discriminant fields, 755 -- setting tag values, etc. N_Object_Declaration nodes also have this 756 -- flag defined. Here it is used to indicate that an initialization 757 -- expression is valid, even where it would normally not be allowed 758 -- (e.g. where the type involved is limited). 759 760 -- Associated_Node (Node4-Sem) 761 -- Present in nodes that can denote an entity: identifiers, character 762 -- literals, operator symbols, expanded names, operator nodes, and 763 -- attribute reference nodes (all these nodes have an Entity field). 764 -- This field is also present in N_Aggregate, N_Selected_Component, and 765 -- N_Extension_Aggregate nodes. This field is used in generic processing 766 -- to create links between the generic template and the generic copy. 767 -- See Sem_Ch12.Get_Associated_Node for full details. Note that this 768 -- field overlaps Entity, which is fine, since, as explained in Sem_Ch12, 769 -- the normal function of Entity is not required at the point where the 770 -- Associated_Node is set. Note also, that in generic templates, this 771 -- means that the Entity field does not necessarily point to an Entity. 772 -- Since the back end is expected to ignore generic templates, this is 773 -- harmless. 774 775 -- Atomic_Sync_Required (Flag14-Sem) 776 -- This flag is set on a node for which atomic synchronization is 777 -- required for the corresponding reference or modification. 778 779 -- At_End_Proc (Node1) 780 -- This field is present in an N_Handled_Sequence_Of_Statements node. 781 -- It contains an identifier reference for the cleanup procedure to be 782 -- called. See description of this node for further details. 783 784 -- Backwards_OK (Flag6-Sem) 785 -- A flag present in the N_Assignment_Statement node. It is used only 786 -- if the type being assigned is an array type, and is set if analysis 787 -- determines that it is definitely safe to do the copy backwards, i.e. 788 -- starting at the highest addressed element. This is the case if either 789 -- the operands do not overlap, or they may overlap, but if they do, 790 -- then the left operand is at a higher address than the right operand. 791 -- 792 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 793 -- means that the front end could not determine that either direction is 794 -- definitely safe, and a runtime check may be required if the backend 795 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 796 -- set, it means that the front end can assure no overlap of operands. 797 798 -- Body_To_Inline (Node3-Sem) 799 -- present in subprogram declarations. Denotes analyzed but unexpanded 800 -- body of subprogram, to be used when inlining calls. Present when the 801 -- subprogram has an Inline pragma and inlining is enabled. If the 802 -- declaration is completed by a renaming_as_body, and the renamed en- 803 -- tity is a subprogram, the Body_To_Inline is the name of that entity, 804 -- which is used directly in later calls to the original subprogram. 805 806 -- Body_Required (Flag13-Sem) 807 -- A flag that appears in the N_Compilation_Unit node indicating that 808 -- the corresponding unit requires a body. For the package case, this 809 -- indicates that a completion is required. In Ada 95, if the flag is not 810 -- set for the package case, then a body may not be present. In Ada 83, 811 -- if the flag is not set for the package case, then body is optional. 812 -- For a subprogram declaration, the flag is set except in the case where 813 -- a pragma Import or Interface applies, in which case no body is 814 -- permitted (in Ada 83 or Ada 95). 815 816 -- By_Ref (Flag5-Sem) 817 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement, 818 -- this flag is set when the returned expression is already allocated on 819 -- the secondary stack and thus the result is passed by reference rather 820 -- than copied another time. 821 822 -- Check_Address_Alignment (Flag11-Sem) 823 -- A flag present in N_Attribute_Definition clause for a 'Address 824 -- attribute definition. This flag is set if a dynamic check should be 825 -- generated at the freeze point for the entity to which this address 826 -- clause applies. The reason that we need this flag is that we want to 827 -- check for range checks being suppressed at the point where the 828 -- attribute definition clause is given, rather than testing this at the 829 -- freeze point. 830 831 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 832 -- Present in N_Simple_Return_Statement nodes. True if this node was 833 -- constructed as part of the N_Extended_Return_Statement expansion. 834 835 -- Compile_Time_Known_Aggregate (Flag18-Sem) 836 -- Present in N_Aggregate nodes. Set for aggregates which can be fully 837 -- evaluated at compile time without raising constraint error. Such 838 -- aggregates can be passed as is the back end without any expansion. 839 -- See Exp_Aggr for specific conditions under which this flag gets set. 840 841 -- Componentwise_Assignment (Flag14-Sem) 842 -- Present in N_Assignment_Statement nodes. Set for a record assignment 843 -- where all that needs doing is to expand it into component-by-component 844 -- assignments. This is used internally for the case of tagged types with 845 -- rep clauses, where we need to avoid recursion (we don't want to try to 846 -- generate a call to the primitive operation, because this is the case 847 -- where we are compiling the primitive operation). Note that when we are 848 -- expanding component assignments in this case, we never assign the _tag 849 -- field, but we recursively assign components of the parent type. 850 851 -- Condition_Actions (List3-Sem) 852 -- This field appears in else-if nodes and in the iteration scheme node 853 -- for while loops. This field is only used during semantic processing to 854 -- temporarily hold actions inserted into the tree. In the tree passed 855 -- to gigi, the condition actions field is always set to No_List. For 856 -- details on how this field is used, see the routine Insert_Actions in 857 -- package Exp_Util, and also the expansion routines for the relevant 858 -- nodes. 859 860 -- Context_Pending (Flag16-Sem) 861 -- This field appears in Compilation_Unit nodes, to indicate that the 862 -- context of the unit is being compiled. Used to detect circularities 863 -- that are not otherwise detected by the loading mechanism. Such 864 -- circularities can occur in the presence of limited and non-limited 865 -- with_clauses that mention the same units. 866 867 -- Controlling_Argument (Node1-Sem) 868 -- This field is set in procedure and function call nodes if the call 869 -- is a dispatching call (it is Empty for a non-dispatching call). It 870 -- indicates the source of the call's controlling tag. For procedure 871 -- calls, the Controlling_Argument is one of the actuals. For function 872 -- that has a dispatching result, it is an entity in the context of the 873 -- call that can provide a tag, or else it is the tag of the root type 874 -- of the class. It can also specify a tag directly rather than being a 875 -- tagged object. The latter is needed by the implementations of AI-239 876 -- and AI-260. 877 878 -- Conversion_OK (Flag14-Sem) 879 -- A flag set on type conversion nodes to indicate that the conversion 880 -- is to be considered as being valid, even though it is the case that 881 -- the conversion is not valid Ada. This is used for attributes Enum_Rep, 882 -- Fixed_Value and Integer_Value, for internal conversions done for 883 -- fixed-point operations, and for certain conversions for calls to 884 -- initialization procedures. If Conversion_OK is set, then Etype must be 885 -- set (the analyzer assumes that Etype has been set). For the case of 886 -- fixed-point operands, it also indicates that the conversion is to be 887 -- direct conversion of the underlying integer result, with no regard to 888 -- the small operand. 889 890 -- Convert_To_Return_False (Flag13-Sem) 891 -- Present in N_Raise_Expression nodes that appear in the body of the 892 -- special predicateM function used to test a predicate in the context 893 -- of a membership test, where raise expression results in returning a 894 -- value of False rather than raising an exception. 895 896 -- Corresponding_Aspect (Node3-Sem) 897 -- Present in N_Pragma node. Used to point back to the source aspect from 898 -- the corresponding pragma. This field is Empty for source pragmas. 899 900 -- Corresponding_Body (Node5-Sem) 901 -- This field is set in subprogram declarations, package declarations, 902 -- entry declarations of protected types, and in generic units. It points 903 -- to the defining entity for the corresponding body (NOT the node for 904 -- the body itself). 905 906 -- Corresponding_Formal_Spec (Node3-Sem) 907 -- This field is set in subprogram renaming declarations, where it points 908 -- to the defining entity for a formal subprogram in the case where the 909 -- renaming corresponds to a generic formal subprogram association in an 910 -- instantiation. The field is Empty if the renaming does not correspond 911 -- to such a formal association. 912 913 -- Corresponding_Generic_Association (Node5-Sem) 914 -- This field is defined for object declarations and object renaming 915 -- declarations. It is set for the declarations within an instance that 916 -- map generic formals to their actuals. If set, the field points to 917 -- a generic_association which is the original parent of the expression 918 -- or name appearing in the declaration. This simplifies ASIS queries. 919 920 -- Corresponding_Integer_Value (Uint4-Sem) 921 -- This field is set in real literals of fixed-point types (it is not 922 -- used for floating-point types). It contains the integer value used 923 -- to represent the fixed-point value. It is also set on the universal 924 -- real literals used to represent bounds of fixed-point base types 925 -- and their first named subtypes. 926 927 -- Corresponding_Spec (Node5-Sem) 928 -- This field is set in subprogram, package, task, and protected body 929 -- nodes, where it points to the defining entity in the corresponding 930 -- spec. The attribute is also set in N_With_Clause nodes where it points 931 -- to the defining entity for the with'ed spec, and in a subprogram 932 -- renaming declaration when it is a Renaming_As_Body. The field is Empty 933 -- if there is no corresponding spec, as in the case of a subprogram body 934 -- that serves as its own spec. 935 -- 936 -- In Ada 2012, Corresponding_Spec is set on expression functions that 937 -- complete a subprogram declaration. 938 939 -- Corresponding_Spec_Of_Stub (Node2-Sem) 940 -- This field is present in subprogram, package, task and protected body 941 -- stubs where it points to the corresponding spec of the stub. Due to 942 -- clashes in the structure of nodes, we cannot use Corresponding_Spec. 943 944 -- Corresponding_Stub (Node3-Sem) 945 -- This field is present in an N_Subunit node. It holds the node in 946 -- the parent unit that is the stub declaration for the subunit. It is 947 -- set when analysis of the stub forces loading of the proper body. If 948 -- expansion of the proper body creates new declarative nodes, they are 949 -- inserted at the point of the corresponding_stub. 950 951 -- Dcheck_Function (Node5-Sem) 952 -- This field is present in an N_Variant node, It references the entity 953 -- for the discriminant checking function for the variant. 954 955 -- Default_Expression (Node5-Sem) 956 -- This field is Empty if there is no default expression. If there is a 957 -- simple default expression (one with no side effects), then this field 958 -- simply contains a copy of the Expression field (both point to the tree 959 -- for the default expression). Default_Expression is used for 960 -- conformance checking. 961 962 -- Default_Storage_Pool (Node3-Sem) 963 -- This field is present in N_Compilation_Unit_Aux nodes. It is set to a 964 -- copy of Opt.Default_Pool at the end of the compilation unit. See 965 -- package Opt for details. This is used for inheriting the 966 -- Default_Storage_Pool in child units. 967 968 -- Discr_Check_Funcs_Built (Flag11-Sem) 969 -- This flag is present in N_Full_Type_Declaration nodes. It is set when 970 -- discriminant checking functions are constructed. The purpose is to 971 -- avoid attempting to set these functions more than once. 972 973 -- Do_Accessibility_Check (Flag13-Sem) 974 -- This flag is set on N_Parameter_Specification nodes to indicate 975 -- that an accessibility check is required for the parameter. It is 976 -- not yet decided who takes care of this check (TBD ???). 977 978 -- Do_Discriminant_Check (Flag1-Sem) 979 -- This flag is set on N_Selected_Component nodes to indicate that a 980 -- discriminant check is required using the discriminant check routine 981 -- associated with the selector. The actual check is generated by the 982 -- expander when processing selected components. In the case of 983 -- Unchecked_Union, the flag is also set, but no discriminant check 984 -- routine is associated with the selector, and the expander does not 985 -- generate a check. This flag is also present in assignment statements 986 -- (and set if the assignment requires a discriminant check), and in type 987 -- conversion nodes (and set if the conversion requires a check). 988 989 -- Do_Division_Check (Flag13-Sem) 990 -- This flag is set on a division operator (/ mod rem) to indicate 991 -- that a zero divide check is required. The actual check is dealt 992 -- with by the backend (all the front end does is to set the flag). 993 994 -- Do_Length_Check (Flag4-Sem) 995 -- This flag is set in an N_Assignment_Statement, N_Op_And, N_Op_Or, 996 -- N_Op_Xor, or N_Type_Conversion node to indicate that a length check 997 -- is required. It is not determined who deals with this flag (???). 998 999 -- Do_Overflow_Check (Flag17-Sem) 1000 -- This flag is set on an operator where an overflow check is required on 1001 -- the operation. The actual check is dealt with by the backend (all the 1002 -- front end does is to set the flag). The other cases where this flag is 1003 -- used is on a Type_Conversion node and for attribute reference nodes. 1004 -- For a type conversion, it means that the conversion is from one base 1005 -- type to another, and the value may not fit in the target base type. 1006 -- See also the description of Do_Range_Check for this case. The only 1007 -- attribute references which use this flag are Pred and Succ, where it 1008 -- means that the result should be checked for going outside the base 1009 -- range. Note that this flag is not set for modular types. This flag is 1010 -- also set on if and case expression nodes if we are operating in either 1011 -- MINIMIZED or ELIMINATED overflow checking mode (to make sure that we 1012 -- properly process overflow checking for dependent expressions). 1013 1014 -- Do_Range_Check (Flag9-Sem) 1015 -- This flag is set on an expression which appears in a context where a 1016 -- range check is required. The target type is clear from the context. 1017 -- The contexts in which this flag can appear are the following: 1018 1019 -- Right side of an assignment. In this case the target type is 1020 -- taken from the left side of the assignment, which is referenced 1021 -- by the Name of the N_Assignment_Statement node. 1022 1023 -- Subscript expressions in an indexed component. In this case the 1024 -- target type is determined from the type of the array, which is 1025 -- referenced by the Prefix of the N_Indexed_Component node. 1026 1027 -- Argument expression for a parameter, appearing either directly in 1028 -- the Parameter_Associations list of a call or as the Expression of an 1029 -- N_Parameter_Association node that appears in this list. In either 1030 -- case, the check is against the type of the formal. Note that the 1031 -- flag is relevant only in IN and IN OUT parameters, and will be 1032 -- ignored for OUT parameters, where no check is required in the call, 1033 -- and if a check is required on the return, it is generated explicitly 1034 -- with a type conversion. 1035 1036 -- Initialization expression for the initial value in an object 1037 -- declaration. In this case the Do_Range_Check flag is set on 1038 -- the initialization expression, and the check is against the 1039 -- range of the type of the object being declared. 1040 1041 -- The expression of a type conversion. In this case the range check is 1042 -- against the target type of the conversion. See also the use of 1043 -- Do_Overflow_Check on a type conversion. The distinction is that the 1044 -- overflow check protects against a value that is outside the range of 1045 -- the target base type, whereas a range check checks that the 1046 -- resulting value (which is a value of the base type of the target 1047 -- type), satisfies the range constraint of the target type. 1048 1049 -- Note: when a range check is required in contexts other than those 1050 -- listed above (e.g. in a return statement), an additional type 1051 -- conversion node is introduced to represent the required check. 1052 1053 -- A special case arises for the arguments of the Pred/Succ attributes. 1054 -- Here the range check needed is against First + 1 .. Last (Pred) or 1055 -- First .. Last - 1 (Succ) of the corresponding base type. Essentially 1056 -- these checks are what would be performed within the implicit body of 1057 -- the functions that correspond to these attributes. In these cases, 1058 -- the Do_Range check flag is set on the argument to the attribute 1059 -- function, and the back end must special case the appropriate range 1060 -- to check against. 1061 1062 -- Do_Storage_Check (Flag17-Sem) 1063 -- This flag is set in an N_Allocator node to indicate that a storage 1064 -- check is required for the allocation, or in an N_Subprogram_Body node 1065 -- to indicate that a stack check is required in the subprogram prolog. 1066 -- The N_Allocator case is handled by the routine that expands the call 1067 -- to the runtime routine. The N_Subprogram_Body case is handled by the 1068 -- backend, and all the semantics does is set the flag. 1069 1070 -- Do_Tag_Check (Flag13-Sem) 1071 -- This flag is set on an N_Assignment_Statement, N_Function_Call, 1072 -- N_Procedure_Call_Statement, N_Type_Conversion, 1073 -- N_Simple_Return_Statement, or N_Extended_Return_Statement 1074 -- node to indicate that the tag check can be suppressed. It is not 1075 -- yet decided how this flag is used (TBD ???). 1076 1077 -- Elaborate_Present (Flag4-Sem) 1078 -- This flag is set in the N_With_Clause node to indicate that pragma 1079 -- Elaborate pragma appears for the with'ed units. 1080 1081 -- Elaborate_All_Desirable (Flag9-Sem) 1082 -- This flag is set in the N_With_Clause mode to indicate that the static 1083 -- elaboration processing has determined that an Elaborate_All pragma is 1084 -- desirable for correct elaboration for this unit. 1085 1086 -- Elaborate_All_Present (Flag14-Sem) 1087 -- This flag is set in the N_With_Clause node to indicate that a 1088 -- pragma Elaborate_All pragma appears for the with'ed units. 1089 1090 -- Elaborate_Desirable (Flag11-Sem) 1091 -- This flag is set in the N_With_Clause mode to indicate that the static 1092 -- elaboration processing has determined that an Elaborate pragma is 1093 -- desirable for correct elaboration for this unit. 1094 1095 -- Elaboration_Boolean (Node2-Sem) 1096 -- This field is present in function and procedure specification nodes. 1097 -- If set, it points to the entity for a Boolean flag that must be tested 1098 -- for certain calls to check for access before elaboration. See body of 1099 -- Sem_Elab for further details. This field is Empty if no elaboration 1100 -- boolean is required. 1101 1102 -- Else_Actions (List3-Sem) 1103 -- This field is present in if expression nodes. During code 1104 -- expansion we use the Insert_Actions procedure (in Exp_Util) to insert 1105 -- actions at an appropriate place in the tree to get elaborated at the 1106 -- right time. For if expressions, we have to be sure that the actions 1107 -- for the Else branch are only elaborated if the condition is False. 1108 -- The Else_Actions field is used as a temporary parking place for 1109 -- these actions. The final tree is always rewritten to eliminate the 1110 -- need for this field, so in the tree passed to Gigi, this field is 1111 -- always set to No_List. 1112 1113 -- Enclosing_Variant (Node2-Sem) 1114 -- This field is present in the N_Variant node and identifies the Node_Id 1115 -- corresponding to the immediately enclosing variant when the variant is 1116 -- nested, and N_Empty otherwise. Set during semantic processing of the 1117 -- variant part of a record type. 1118 1119 -- Entity (Node4-Sem) 1120 -- Appears in all direct names (identifiers, character literals, and 1121 -- operator symbols), as well as expanded names, and attributes that 1122 -- denote entities, such as 'Class. Points to entity for corresponding 1123 -- defining occurrence. Set after name resolution. For identifiers in a 1124 -- WITH list, the corresponding defining occurrence is in a separately 1125 -- compiled file, and Entity must be set by the library Load procedure. 1126 -- 1127 -- Note: During name resolution, the value in Entity may be temporarily 1128 -- incorrect (e.g. during overload resolution, Entity is initially set to 1129 -- the first possible correct interpretation, and then later modified if 1130 -- necessary to contain the correct value after resolution). 1131 -- 1132 -- Note: This field overlaps Associated_Node, which is used during 1133 -- generic processing (see Sem_Ch12 for details). Note also that in 1134 -- generic templates, this means that the Entity field does not always 1135 -- point to an Entity. Since the back end is expected to ignore generic 1136 -- templates, this is harmless. 1137 -- 1138 -- Note: This field also appears in N_Attribute_Definition_Clause nodes. 1139 -- It is used only for stream attributes definition clauses. In this 1140 -- case, it denotes a (possibly dummy) subprogram entity that is declared 1141 -- conceptually at the point of the clause. Thus the visibility of the 1142 -- attribute definition clause (in the sense of 8.3(23) as amended by 1143 -- AI-195) can be checked by testing the visibility of that subprogram. 1144 -- 1145 -- Note: Normally the Entity field of an identifier points to the entity 1146 -- for the corresponding defining identifier, and hence the Chars field 1147 -- of an identifier will match the Chars field of the entity. However, 1148 -- there is no requirement that these match, and there are obscure cases 1149 -- of generated code where they do not match. 1150 1151 -- Note: Ada 2012 aspect specifications require additional links between 1152 -- identifiers and various attributes. These attributes can be of 1153 -- arbitrary types, and the entity field of identifiers that denote 1154 -- aspects must be used to store arbitrary expressions for later semantic 1155 -- checks. See section on aspect specifications for details. 1156 1157 -- Entity_Or_Associated_Node (Node4-Sem) 1158 -- A synonym for both Entity and Associated_Node. Used by convention in 1159 -- the code when referencing this field in cases where it is not known 1160 -- whether the field contains an Entity or an Associated_Node. 1161 1162 -- Etype (Node5-Sem) 1163 -- Appears in all expression nodes, all direct names, and all entities. 1164 -- Points to the entity for the related type. Set after type resolution. 1165 -- Normally this is the actual subtype of the expression. However, in 1166 -- certain contexts such as the right side of an assignment, subscripts, 1167 -- arguments to calls, returned value in a function, initial value etc. 1168 -- it is the desired target type. In the event that this is different 1169 -- from the actual type, the Do_Range_Check flag will be set if a range 1170 -- check is required. Note: if the Is_Overloaded flag is set, then Etype 1171 -- points to an essentially arbitrary choice from the possible set of 1172 -- types. 1173 1174 -- Exception_Junk (Flag8-Sem) 1175 -- This flag is set in a various nodes appearing in a statement sequence 1176 -- to indicate that the corresponding node is an artifact of the 1177 -- generated code for exception handling, and should be ignored when 1178 -- analyzing the control flow of the relevant sequence of statements 1179 -- (e.g. to check that it does not end with a bad return statement). 1180 1181 -- Exception_Label (Node5-Sem) 1182 -- Appears in N_Push_xxx_Label nodes. Points to the entity of the label 1183 -- to be used for transforming the corresponding exception into a goto, 1184 -- or contains Empty, if this exception is not to be transformed. Also 1185 -- appears in N_Exception_Handler nodes, where, if set, it indicates 1186 -- that there may be a local raise for the handler, so that expansion 1187 -- to allow a goto is required (and this field contains the label for 1188 -- this goto). See Exp_Ch11.Expand_Local_Exception_Handlers for details. 1189 1190 -- Expansion_Delayed (Flag11-Sem) 1191 -- Set on aggregates and extension aggregates that need a top-down rather 1192 -- than bottom-up expansion. Typically aggregate expansion happens bottom 1193 -- up. For nested aggregates the expansion is delayed until the enclosing 1194 -- aggregate itself is expanded, e.g. in the context of a declaration. To 1195 -- delay it we set this flag. This is done to avoid creating a temporary 1196 -- for each level of a nested aggregates, and also to prevent the 1197 -- premature generation of constraint checks. This is also a requirement 1198 -- if we want to generate the proper attachment to the internal 1199 -- finalization lists (for record with controlled components). Top down 1200 -- expansion of aggregates is also used for in-place array aggregate 1201 -- assignment or initialization. When the full context is known, the 1202 -- target of the assignment or initialization is used to generate the 1203 -- left-hand side of individual assignment to each sub-component. 1204 1205 -- First_Inlined_Subprogram (Node3-Sem) 1206 -- Present in the N_Compilation_Unit node for the main program. Points 1207 -- to a chain of entities for subprograms that are to be inlined. The 1208 -- Next_Inlined_Subprogram field of these entities is used as a link 1209 -- pointer with Empty marking the end of the list. This field is Empty 1210 -- if there are no inlined subprograms or inlining is not active. 1211 1212 -- First_Named_Actual (Node4-Sem) 1213 -- Present in procedure call statement and function call nodes, and also 1214 -- in Intrinsic nodes. Set during semantic analysis to point to the first 1215 -- named parameter where parameters are ordered by declaration order (as 1216 -- opposed to the actual order in the call which may be different due to 1217 -- named associations). Note: this field points to the explicit actual 1218 -- parameter itself, not the N_Parameter_Association node (its parent). 1219 1220 -- First_Real_Statement (Node2-Sem) 1221 -- Present in N_Handled_Sequence_Of_Statements node. Normally set to 1222 -- Empty. Used only when declarations are moved into the statement part 1223 -- of a construct as a result of wrapping an AT END handler that is 1224 -- required to cover the declarations. In this case, this field is used 1225 -- to remember the location in the statements list of the first real 1226 -- statement, i.e. the statement that used to be first in the statement 1227 -- list before the declarations were prepended. 1228 1229 -- First_Subtype_Link (Node5-Sem) 1230 -- Present in N_Freeze_Entity node for an anonymous base type that is 1231 -- implicitly created by the declaration of a first subtype. It points 1232 -- to the entity for the first subtype. 1233 1234 -- Float_Truncate (Flag11-Sem) 1235 -- A flag present in type conversion nodes. This is used for float to 1236 -- integer conversions where truncation is required rather than rounding. 1237 -- Note that Gigi does not handle type conversions from real to integer 1238 -- with rounding (see Expand_N_Type_Conversion). 1239 1240 -- Forwards_OK (Flag5-Sem) 1241 -- A flag present in the N_Assignment_Statement node. It is used only 1242 -- if the type being assigned is an array type, and is set if analysis 1243 -- determines that it is definitely safe to do the copy forwards, i.e. 1244 -- starting at the lowest addressed element. This is the case if either 1245 -- the operands do not overlap, or they may overlap, but if they do, 1246 -- then the left operand is at a lower address than the right operand. 1247 -- 1248 -- Note: If neither of the flags Forwards_OK or Backwards_OK is set, it 1249 -- means that the front end could not determine that either direction is 1250 -- definitely safe, and a runtime check may be required if the backend 1251 -- cannot figure it out. If both flags Forwards_OK and Backwards_OK are 1252 -- set, it means that the front end can assure no overlap of operands. 1253 1254 -- From_Aspect_Specification (Flag13-Sem) 1255 -- Processing of aspect specifications typically results in insertion in 1256 -- the tree of corresponding pragma or attribute definition clause nodes. 1257 -- These generated nodes have the From_Aspect_Specification flag set to 1258 -- indicate that they came from aspect specifications originally. 1259 1260 -- From_At_End (Flag4-Sem) 1261 -- This flag is set on an N_Raise_Statement node if it corresponds to 1262 -- the reraise statement generated as the last statement of an AT END 1263 -- handler when SJLJ exception handling is active. It is used to stop 1264 -- a bogus violation of restriction (No_Exception_Propagation), bogus 1265 -- because if the restriction is set, the reraise is not generated. 1266 1267 -- From_At_Mod (Flag4-Sem) 1268 -- This flag is set on the attribute definition clause node that is 1269 -- generated by a transformation of an at mod phrase in a record 1270 -- representation clause. This is used to give slightly different (Ada 83 1271 -- compatible) semantics to such a clause, namely it is used to specify a 1272 -- minimum acceptable alignment for the base type and all subtypes. In 1273 -- Ada 95 terms, the actual alignment of the base type and all subtypes 1274 -- must be a multiple of the given value, and the representation clause 1275 -- is considered to be type specific instead of subtype specific. 1276 1277 -- From_Default (Flag6-Sem) 1278 -- This flag is set on the subprogram renaming declaration created in an 1279 -- instance for a formal subprogram, when the formal is declared with a 1280 -- box, and there is no explicit actual. If the flag is present, the 1281 -- declaration is treated as an implicit reference to the formal in the 1282 -- ali file. 1283 1284 -- Generalized_Indexing (Node4-Sem) 1285 -- Present in N_Indexed_Component nodes. Set for Indexed_Component nodes 1286 -- that are Ada 2012 container indexing operations. The value of the 1287 -- attribute is a function call (possibly dereferenced) that corresponds 1288 -- to the proper expansion of the source indexing operation. Before 1289 -- expansion, the source node is rewritten as the resolved generalized 1290 -- indexing. In ASIS mode, the expansion does not take place, so that 1291 -- the source is preserved and properly annotated with types. 1292 1293 -- Generic_Parent (Node5-Sem) 1294 -- Generic_Parent is defined on declaration nodes that are instances. The 1295 -- value of Generic_Parent is the generic entity from which the instance 1296 -- is obtained. Generic_Parent is also defined for the renaming 1297 -- declarations and object declarations created for the actuals in an 1298 -- instantiation. The generic parent of such a declaration is the 1299 -- corresponding generic association in the Instantiation node. 1300 1301 -- Generic_Parent_Type (Node4-Sem) 1302 -- Generic_Parent_Type is defined on Subtype_Declaration nodes for the 1303 -- actuals of formal private and derived types. Within the instance, the 1304 -- operations on the actual are those inherited from the parent. For a 1305 -- formal private type, the parent type is the generic type itself. The 1306 -- Generic_Parent_Type is also used in an instance to determine whether a 1307 -- private operation overrides an inherited one. 1308 1309 -- Handler_List_Entry (Node2-Sem) 1310 -- This field is present in N_Object_Declaration nodes. It is set only 1311 -- for the Handler_Record entry generated for an exception in zero cost 1312 -- exception handling mode. It references the corresponding item in the 1313 -- handler list, and is used to delete this entry if the corresponding 1314 -- handler is deleted during optimization. For further details on why 1315 -- this is required, see Exp_Ch11.Remove_Handler_Entries. 1316 1317 -- Has_Dereference_Action (Flag13-Sem) 1318 -- This flag is present in N_Explicit_Dereference nodes. It is set to 1319 -- indicate that the expansion has aready produced a call to primitive 1320 -- Dereference of a System.Checked_Pools.Checked_Pool implementation. 1321 -- Such dereference actions are produced for debugging purposes. 1322 1323 -- Has_Dynamic_Length_Check (Flag10-Sem) 1324 -- This flag is present in all expression nodes. It is set to indicate 1325 -- that one of the routines in unit Checks has generated a length check 1326 -- action which has been inserted at the flagged node. This is used to 1327 -- avoid the generation of duplicate checks. 1328 1329 -- Has_Dynamic_Range_Check (Flag12-Sem) 1330 -- This flag is present in N_Subtype_Declaration nodes and on all 1331 -- expression nodes. It is set to indicate that one of the routines in 1332 -- unit Checks has generated a range check action which has been inserted 1333 -- at the flagged node. This is used to avoid the generation of duplicate 1334 -- checks. Why does this occur on N_Subtype_Declaration nodes, what does 1335 -- it mean in that context??? 1336 1337 -- Has_Local_Raise (Flag8-Sem) 1338 -- Present in exception handler nodes. Set if the handler can be entered 1339 -- via a local raise that gets transformed to a goto statement. This will 1340 -- always be set if Local_Raise_Statements is non-empty, but can also be 1341 -- set as a result of generation of N_Raise_xxx nodes, or flags set in 1342 -- nodes requiring generation of back end checks. 1343 1344 -- Has_No_Elaboration_Code (Flag17-Sem) 1345 -- A flag that appears in the N_Compilation_Unit node to indicate whether 1346 -- or not elaboration code is present for this unit. It is initially set 1347 -- true for subprogram specs and bodies and for all generic units and 1348 -- false for non-generic package specs and bodies. Gigi may set the flag 1349 -- in the non-generic package case if it determines that no elaboration 1350 -- code is generated. Note that this flag is not related to the 1351 -- Is_Preelaborated status, there can be preelaborated packages that 1352 -- generate elaboration code, and non-preelaborated packages which do 1353 -- not generate elaboration code. 1354 1355 -- Has_Pragma_Suppress_All (Flag14-Sem) 1356 -- This flag is set in an N_Compilation_Unit node if the Suppress_All 1357 -- pragma appears anywhere in the unit. This accommodates the rather 1358 -- strange placement rules of other compilers (DEC permits it at the 1359 -- end of a unit, and Rational allows it as a program unit pragma). We 1360 -- allow it anywhere at all, and consider it equivalent to a pragma 1361 -- Suppress (All_Checks) appearing at the start of the configuration 1362 -- pragmas for the unit. 1363 1364 -- Has_Private_View (Flag11-Sem) 1365 -- A flag present in generic nodes that have an entity, to indicate that 1366 -- the node has a private type. Used to exchange private and full 1367 -- declarations if the visibility at instantiation is different from the 1368 -- visibility at generic definition. 1369 1370 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 1371 -- A flag present in N_Subprogram_Body and N_Task_Definition nodes to 1372 -- flag the presence of a pragma Relative_Deadline. 1373 1374 -- Has_Self_Reference (Flag13-Sem) 1375 -- Present in N_Aggregate and N_Extension_Aggregate. Indicates that one 1376 -- of the expressions contains an access attribute reference to the 1377 -- enclosing type. Such a self-reference can only appear in default- 1378 -- initialized aggregate for a record type. 1379 1380 -- Has_SP_Choice (Flag15-Sem) 1381 -- Present in all nodes containing a Discrete_Choices field (N_Variant, 1382 -- N_Case_Expression_Alternative, N_Case_Statement_Alternative). Set to 1383 -- True if the Discrete_Choices list has at least one occurrence of a 1384 -- statically predicated subtype. 1385 1386 -- Has_Storage_Size_Pragma (Flag5-Sem) 1387 -- A flag present in an N_Task_Definition node to flag the presence of a 1388 -- Storage_Size pragma. 1389 1390 -- Has_Wide_Character (Flag11-Sem) 1391 -- Present in string literals, set if any wide character (i.e. character 1392 -- code outside the Character range but within Wide_Character range) 1393 -- appears in the string. Used to implement pragma preference rules. 1394 1395 -- Has_Wide_Wide_Character (Flag13-Sem) 1396 -- Present in string literals, set if any wide character (i.e. character 1397 -- code outside the Wide_Character range) appears in the string. Used to 1398 -- implement pragma preference rules. 1399 1400 -- Header_Size_Added (Flag11-Sem) 1401 -- Present in N_Attribute_Reference nodes, set only for attribute 1402 -- Max_Size_In_Storage_Elements. The flag indicates that the size of the 1403 -- hidden list header used by the runtime finalization support has been 1404 -- added to the size of the prefix. The flag also prevents the infinite 1405 -- expansion of the same attribute in the said context. 1406 1407 -- Hidden_By_Use_Clause (Elist4-Sem) 1408 -- An entity list present in use clauses that appear within 1409 -- instantiations. For the resolution of local entities, entities 1410 -- introduced by these use clauses have priority over global ones, and 1411 -- outer entities must be explicitly hidden/restored on exit. 1412 1413 -- Implicit_With (Flag16-Sem) 1414 -- This flag is set in the N_With_Clause node that is implicitly 1415 -- generated for runtime units that are loaded by the expander, and also 1416 -- for package System, if it is loaded implicitly by a use of the 1417 -- 'Address or 'Tag attribute. ???There are other implicit with clauses 1418 -- as well. 1419 1420 -- Implicit_With_From_Instantiation (Flag12-Sem) 1421 -- Set in N_With_Clause nodes from generic instantiations. 1422 1423 -- Import_Interface_Present (Flag16-Sem) 1424 -- This flag is set in an Interface or Import pragma if a matching 1425 -- pragma of the other kind is also present. This is used to avoid 1426 -- generating some unwanted error messages. 1427 1428 -- Includes_Infinities (Flag11-Sem) 1429 -- This flag is present in N_Range nodes. It is set for the range of 1430 -- unconstrained float types defined in Standard, which include not only 1431 -- the given range of values, but also legitimately can include infinite 1432 -- values. This flag is false for any float type for which an explicit 1433 -- range is given by the programmer, even if that range is identical to 1434 -- the range for Float. 1435 1436 -- Inherited_Discriminant (Flag13-Sem) 1437 -- This flag is present in N_Component_Association nodes. It indicates 1438 -- that a given component association in an extension aggregate is the 1439 -- value obtained from a constraint on an ancestor. Used to prevent 1440 -- double expansion when the aggregate has expansion delayed. 1441 1442 -- Instance_Spec (Node5-Sem) 1443 -- This field is present in generic instantiation nodes, and also in 1444 -- formal package declaration nodes (formal package declarations are 1445 -- treated in a manner very similar to package instantiations). It points 1446 -- to the node for the spec of the instance, inserted as part of the 1447 -- semantic processing for instantiations in Sem_Ch12. 1448 1449 -- Is_Accessibility_Actual (Flag13-Sem) 1450 -- Present in N_Parameter_Association nodes. True if the parameter is 1451 -- an extra actual that carries the accessibility level of the actual 1452 -- for an access parameter, in a function that dispatches on result and 1453 -- is called in a dispatching context. Used to prevent a formal/actual 1454 -- mismatch when the call is rewritten as a dispatching call. 1455 1456 -- Is_Asynchronous_Call_Block (Flag7-Sem) 1457 -- A flag set in a Block_Statement node to indicate that it is the 1458 -- expansion of an asynchronous entry call. Such a block needs cleanup 1459 -- handler to assure that the call is cancelled. 1460 1461 -- Is_Boolean_Aspect (Flag16-Sem) 1462 -- Present in N_Aspect_Specification node. Set if the aspect is for a 1463 -- boolean aspect (i.e. Aspect_Id is in Boolean_Aspect subtype). 1464 1465 -- Is_Checked (Flag11-Sem) 1466 -- Present in N_Aspect_Specification and N_Pragma nodes. Set for an 1467 -- assertion aspect or pragma, or check pragma for an assertion, that 1468 -- is to be checked at run time. If either Is_Checked or Is_Ignored 1469 -- is set (they cannot both be set), then this means that the status of 1470 -- the pragma has been checked at the appropriate point and should not 1471 -- be further modified (in some cases these flags are copied when a 1472 -- pragma is rewritten). 1473 1474 -- Is_Component_Left_Opnd (Flag13-Sem) 1475 -- Is_Component_Right_Opnd (Flag14-Sem) 1476 -- Present in concatenation nodes, to indicate that the corresponding 1477 -- operand is of the component type of the result. Used in resolving 1478 -- concatenation nodes in instances. 1479 1480 -- Is_Delayed_Aspect (Flag14-Sem) 1481 -- Present in N_Pragma and N_Attribute_Definition_Clause nodes which 1482 -- come from aspect specifications, where the evaluation of the aspect 1483 -- must be delayed to the freeze point. This flag is also set True in 1484 -- the corresponding N_Aspect_Specification node. 1485 1486 -- Is_Controlling_Actual (Flag16-Sem) 1487 -- This flag is set on in an expression that is a controlling argument in 1488 -- a dispatching call. It is off in all other cases. See Sem_Disp for 1489 -- details of its use. 1490 1491 -- Is_Disabled (Flag15-Sem) 1492 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1493 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1494 -- a Debug_Policy pragma that resulted in totally disabling the flagged 1495 -- aspect or policy as a result of using the GNAT-defined policy DISABLE. 1496 -- If this flag is set, the aspect or policy is not analyzed for semantic 1497 -- correctness, so any expressions etc will not be marked as analyzed. 1498 1499 -- Is_Dynamic_Coextension (Flag18-Sem) 1500 -- Present in allocator nodes, to indicate that this is an allocator 1501 -- for an access discriminant of a dynamically allocated object. The 1502 -- coextension must be deallocated and finalized at the same time as 1503 -- the enclosing object. 1504 1505 -- Is_Entry_Barrier_Function (Flag8-Sem) 1506 -- This flag is set in an N_Subprogram_Body node which is the expansion 1507 -- of an entry barrier from a protected entry body. It is used for the 1508 -- circuitry checking for incorrect use of Current_Task. 1509 1510 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 1511 -- This flag is set in an N_Function_Call node to indicate that the extra 1512 -- actuals to support a build-in-place style of call have been added to 1513 -- the call. 1514 1515 -- Is_Finalization_Wrapper (Flag9-Sem); 1516 -- This flag is present in N_Block_Statement nodes. It is set when the 1517 -- block acts as a wrapper of a handled construct which has controlled 1518 -- objects. The wrapper prevents interference between exception handlers 1519 -- and At_End handlers. 1520 1521 -- Is_Ignored (Flag9-Sem) 1522 -- A flag set in an N_Aspect_Specification or N_Pragma node if there was 1523 -- a Check_Policy or Assertion_Policy (or in the case of a Debug_Pragma) 1524 -- a Debug_Policy pragma that specified a policy of IGNORE, DISABLE, or 1525 -- OFF, for the pragma/aspect. If there was a Policy pragma specifying 1526 -- a Policy of ON or CHECK, then this flag is reset. If no Policy pragma 1527 -- gives a policy for the aspect or pragma, then there are two cases. For 1528 -- an assertion aspect or pragma (one of the assertion kinds allowed in 1529 -- an Assertion_Policy pragma), then Is_Ignored is set if assertions are 1530 -- ignored because of the absence of a -gnata switch. For any other 1531 -- aspects or pragmas, the flag is off. If this flag is set, the 1532 -- aspect/pragma is fully analyzed and checked for other syntactic 1533 -- and semantic errors, but it does not have any semantic effect. 1534 1535 -- Is_In_Discriminant_Check (Flag11-Sem) 1536 -- This flag is present in a selected component, and is used to indicate 1537 -- that the reference occurs within a discriminant check. The 1538 -- significance is that optimizations based on assuming that the 1539 -- discriminant check has a correct value cannot be performed in this 1540 -- case (or the discriminant check may be optimized away). 1541 1542 -- Is_Machine_Number (Flag11-Sem) 1543 -- This flag is set in an N_Real_Literal node to indicate that the value 1544 -- is a machine number. This avoids some unnecessary cases of converting 1545 -- real literals to machine numbers. 1546 1547 -- Is_Null_Loop (Flag16-Sem) 1548 -- This flag is set in an N_Loop_Statement node if the corresponding loop 1549 -- can be determined to be null at compile time. This is used to remove 1550 -- the loop entirely at expansion time. 1551 1552 -- Is_Overloaded (Flag5-Sem) 1553 -- A flag present in all expression nodes. Used temporarily during 1554 -- overloading determination. The setting of this flag is not relevant 1555 -- once overloading analysis is complete. 1556 1557 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 1558 -- A flag present only in N_Op_Expon nodes. It is set when the 1559 -- exponentiation is of the form 2 ** N, where the type of N is an 1560 -- unsigned integral subtype whose size does not exceed the size of 1561 -- Standard_Integer (i.e. a type that can be safely converted to 1562 -- Natural), and the exponentiation appears as the right operand of an 1563 -- integer multiplication or an integer division where the dividend is 1564 -- unsigned. It is also required that overflow checking is off for both 1565 -- the exponentiation and the multiply/divide node. If this set of 1566 -- conditions holds, and the flag is set, then the division or 1567 -- multiplication can be (and is) converted to a shift. 1568 1569 -- Is_Prefixed_Call (Flag17-Sem) 1570 -- This flag is set in a selected component within a generic unit, if 1571 -- it resolves to a prefixed call to a primitive operation. The flag 1572 -- is used to prevent accidental overloadings in an instance, when a 1573 -- primitive operation and a private record component may be homographs. 1574 1575 -- Is_Protected_Subprogram_Body (Flag7-Sem) 1576 -- A flag set in a Subprogram_Body block to indicate that it is the 1577 -- implementation of a protected subprogram. Such a body needs cleanup 1578 -- handler to make sure that the associated protected object is unlocked 1579 -- when the subprogram completes. 1580 1581 -- Is_Static_Coextension (Flag14-Sem) 1582 -- Present in N_Allocator nodes. Set if the allocator is a coextension 1583 -- of an object allocated on the stack rather than the heap. 1584 1585 -- Is_Static_Expression (Flag6-Sem) 1586 -- Indicates that an expression is a static expression (RM 4.9). See spec 1587 -- of package Sem_Eval for full details on the use of this flag. 1588 1589 -- Is_Subprogram_Descriptor (Flag16-Sem) 1590 -- Present in N_Object_Declaration, and set only for the object 1591 -- declaration generated for a subprogram descriptor in fast exception 1592 -- mode. See Exp_Ch11 for details of use. 1593 1594 -- Is_Task_Allocation_Block (Flag6-Sem) 1595 -- A flag set in a Block_Statement node to indicate that it is the 1596 -- expansion of a task allocator, or the allocator of an object 1597 -- containing tasks. Such a block requires a cleanup handler to call 1598 -- Expunge_Unactivated_Tasks to complete any tasks that have been 1599 -- allocated but not activated when the allocator completes abnormally. 1600 1601 -- Is_Task_Master (Flag5-Sem) 1602 -- A flag set in a Subprogram_Body, Block_Statement or Task_Body node to 1603 -- indicate that the construct is a task master (i.e. has declared tasks 1604 -- or declares an access to a task type). 1605 1606 -- Itype (Node1-Sem) 1607 -- Used in N_Itype_Reference node to reference an itype for which it is 1608 -- important to ensure that it is defined. See description of this node 1609 -- for further details. 1610 1611 -- Kill_Range_Check (Flag11-Sem) 1612 -- Used in an N_Unchecked_Type_Conversion node to indicate that the 1613 -- result should not be subjected to range checks. This is used for the 1614 -- implementation of Normalize_Scalars. 1615 1616 -- Label_Construct (Node2-Sem) 1617 -- Used in an N_Implicit_Label_Declaration node. Refers to an N_Label, 1618 -- N_Block_Statement or N_Loop_Statement node to which the label 1619 -- declaration applies. This attribute is used both in the compiler and 1620 -- in the implementation of ASIS queries. The field is left empty for the 1621 -- special labels generated as part of expanding raise statements with a 1622 -- local exception handler. 1623 1624 -- Library_Unit (Node4-Sem) 1625 -- In a stub node, Library_Unit points to the compilation unit node of 1626 -- the corresponding subunit. 1627 -- 1628 -- In a with clause node, Library_Unit points to the spec of the with'ed 1629 -- unit. 1630 -- 1631 -- In a compilation unit node, the usage depends on the unit type: 1632 -- 1633 -- For a library unit body, Library_Unit points to the compilation unit 1634 -- node of the corresponding spec, unless it's a subprogram body with 1635 -- Acts_As_Spec set, in which case it points to itself. 1636 -- 1637 -- For a spec, Library_Unit points to the compilation unit node of the 1638 -- corresponding body, if present. The body will be present if the spec 1639 -- is or contains generics that we needed to instantiate. Similarly, the 1640 -- body will be present if we needed it for inlining purposes. Thus, if 1641 -- we have a spec/body pair, both of which are present, they point to 1642 -- each other via Library_Unit. 1643 -- 1644 -- For a subunit, Library_Unit points to the compilation unit node of 1645 -- the parent body. 1646 -- 1647 -- Note that this field is not used to hold the parent pointer for child 1648 -- unit (which might in any case need to use it for some other purpose as 1649 -- described above). Instead for a child unit, implicit with's are 1650 -- generated for all parents. 1651 1652 -- Local_Raise_Statements (Elist1) 1653 -- This field is present in exception handler nodes. It is set to 1654 -- No_Elist in the normal case. If there is at least one raise statement 1655 -- which can potentially be handled as a local raise, then this field 1656 -- points to a list of raise nodes, which are calls to a routine to raise 1657 -- an exception. These are raise nodes which can be optimized into gotos 1658 -- if the handler turns out to meet the conditions which permit this 1659 -- transformation. Note that this does NOT include instances of the 1660 -- N_Raise_xxx_Error nodes since the transformation of these nodes is 1661 -- handled by the back end (using the N_Push/N_Pop mechanism). 1662 1663 -- Loop_Actions (List2-Sem) 1664 -- A list present in Component_Association nodes in array aggregates. 1665 -- Used to collect actions that must be executed within the loop because 1666 -- they may need to be evaluated anew each time through. 1667 1668 -- Limited_View_Installed (Flag18-Sem) 1669 -- Present in With_Clauses and in package specifications. If set on 1670 -- with_clause, it indicates that this clause has created the current 1671 -- limited view of the designated package. On a package specification, it 1672 -- indicates that the limited view has already been created because the 1673 -- package is mentioned in a limited_with_clause in the closure of the 1674 -- unit being compiled. 1675 1676 -- Local_Raise_Not_OK (Flag7-Sem) 1677 -- Present in N_Exception_Handler nodes. Set if the handler contains 1678 -- a construct (reraise statement, or call to subprogram in package 1679 -- GNAT.Current_Exception) that makes the handler unsuitable as a target 1680 -- for a local raise (one that could otherwise be converted to a goto). 1681 1682 -- Must_Be_Byte_Aligned (Flag14-Sem) 1683 -- This flag is present in N_Attribute_Reference nodes. It can be set 1684 -- only for the Address and Unrestricted_Access attributes. If set it 1685 -- means that the object for which the address/access is given must be on 1686 -- a byte (more accurately a storage unit) boundary. If necessary, a copy 1687 -- of the object is to be made before taking the address (this copy is in 1688 -- the current scope on the stack frame). This is used for certain cases 1689 -- of code generated by the expander that passes parameters by address. 1690 -- 1691 -- The reason the copy is not made by the front end is that the back end 1692 -- has more information about type layout and may be able to (but is not 1693 -- guaranteed to) prevent making unnecessary copies. 1694 1695 -- Must_Not_Freeze (Flag8-Sem) 1696 -- A flag present in all expression nodes. Normally expressions cause 1697 -- freezing as described in the RM. If this flag is set, then this is 1698 -- inhibited. This is used by the analyzer and expander to label nodes 1699 -- that are created by semantic analysis or expansion and which must not 1700 -- cause freezing even though they normally would. This flag is also 1701 -- present in an N_Subtype_Indication node, since we also use these in 1702 -- calls to Freeze_Expression. 1703 1704 -- Next_Entity (Node2-Sem) 1705 -- Present in defining identifiers, defining character literals and 1706 -- defining operator symbols (i.e. in all entities). The entities of a 1707 -- scope are chained, and this field is used as the forward pointer for 1708 -- this list. See Einfo for further details. 1709 1710 -- Next_Exit_Statement (Node3-Sem) 1711 -- Present in N_Exit_Statement nodes. The exit statements for a loop are 1712 -- chained (in reverse order of appearance) from the First_Exit_Statement 1713 -- field of the E_Loop entity for the loop. Next_Exit_Statement points to 1714 -- the next entry on this chain (Empty = end of list). 1715 1716 -- Next_Implicit_With (Node3-Sem) 1717 -- Present in N_With_Clause. Part of a chain of with_clauses generated 1718 -- in rtsfind to indicate implicit dependencies on predefined units. Used 1719 -- to prevent multiple with_clauses for the same unit in a given context. 1720 -- A postorder traversal of the tree whose nodes are units and whose 1721 -- links are with_clauses defines the order in which CodePeer must 1722 -- examine a compiled unit and its full context. This ordering ensures 1723 -- that any subprogram call is examined after the subprogram declaration 1724 -- has been seen. 1725 1726 -- Next_Named_Actual (Node4-Sem) 1727 -- Present in parameter association nodes. Set during semantic analysis 1728 -- to point to the next named parameter, where parameters are ordered by 1729 -- declaration order (as opposed to the actual order in the call, which 1730 -- may be different due to named associations). Not that this field 1731 -- points to the explicit actual parameter itself, not to the 1732 -- N_Parameter_Association node (its parent). 1733 1734 -- Next_Pragma (Node1-Sem) 1735 -- Present in N_Pragma nodes. Used to create a linked list of pragma 1736 -- nodes. Currently used for two purposes: 1737 -- 1738 -- Create a list of linked Check_Policy pragmas. The head of this list 1739 -- is stored in Opt.Check_Policy_List (which has further details). 1740 -- 1741 -- Used by processing for Pre/Postcondition pragmas to store a list of 1742 -- pragmas associated with the spec of a subprogram (see Sem_Prag for 1743 -- details). 1744 -- 1745 -- Used by processing for pragma SPARK_Mode to store multiple pragmas 1746 -- the apply to the same construct. These are visible/private mode for 1747 -- a package spec and declarative/statement mode for package body. 1748 1749 -- Next_Rep_Item (Node5-Sem) 1750 -- Present in pragma nodes, attribute definition nodes, enumeration rep 1751 -- clauses, record rep clauses, aspect specification nodes. Used to link 1752 -- representation items that apply to an entity. See full description of 1753 -- First_Rep_Item field in Einfo for further details. 1754 1755 -- Next_Use_Clause (Node3-Sem) 1756 -- While use clauses are active during semantic processing, they are 1757 -- chained from the scope stack entry, using Next_Use_Clause as a link 1758 -- pointer, with Empty marking the end of the list. The head pointer is 1759 -- in the scope stack entry (First_Use_Clause). At the end of semantic 1760 -- processing (i.e. when Gigi sees the tree, the contents of this field 1761 -- is undefined and should not be read). 1762 1763 -- No_Ctrl_Actions (Flag7-Sem) 1764 -- Present in N_Assignment_Statement to indicate that no Finalize nor 1765 -- Adjust should take place on this assignment even though the RHS is 1766 -- controlled. Also indicates that the primitive _assign should not be 1767 -- used for a tagged assignment. This is used in init procs and aggregate 1768 -- expansions where the generated assignments are initializations, not 1769 -- real assignments. 1770 1771 -- No_Elaboration_Check (Flag14-Sem) 1772 -- Present in N_Function_Call and N_Procedure_Call_Statement. Indicates 1773 -- that no elaboration check is needed on the call, because it appears in 1774 -- the context of a local Suppress pragma. This is used on calls within 1775 -- task bodies, where the actual elaboration checks are applied after 1776 -- analysis, when the local scope stack is not present. 1777 1778 -- No_Entities_Ref_In_Spec (Flag8-Sem) 1779 -- Present in N_With_Clause nodes. Set if the with clause is on the 1780 -- package or subprogram spec where the main unit is the corresponding 1781 -- body, and no entities of the with'ed unit are referenced by the spec 1782 -- (an entity may still be referenced in the body, so this flag is used 1783 -- to generate the proper message (see Sem_Util.Check_Unused_Withs for 1784 -- full details) 1785 1786 -- No_Initialization (Flag13-Sem) 1787 -- Present in N_Object_Declaration and N_Allocator to indicate that the 1788 -- object must not be initialized (by Initialize or call to an init 1789 -- proc). This is needed for controlled aggregates. When the Object 1790 -- declaration has an expression, this flag means that this expression 1791 -- should not be taken into account (needed for in place initialization 1792 -- with aggregates, and for object with an address clause, which are 1793 -- initialized with an assignment at freeze time). 1794 1795 -- No_Minimize_Eliminate (Flag17-Sem) 1796 -- This flag is present in membership operator nodes (N_In/N_Not_In). 1797 -- It is used to indicate that processing for extended overflow checking 1798 -- modes is not required (this is used to prevent infinite recursion). 1799 1800 -- No_Truncation (Flag17-Sem) 1801 -- Present in N_Unchecked_Type_Conversion node. This flag has an effect 1802 -- only if the RM_Size of the source is greater than the RM_Size of the 1803 -- target for scalar operands. Normally in such a case we truncate some 1804 -- higher order bits of the source, and then sign/zero extend the result 1805 -- to form the output value. But if this flag is set, then we do not do 1806 -- any truncation, so for example, if an 8 bit input is converted to 5 1807 -- bit result which is in fact stored in 8 bits, then the high order 1808 -- three bits of the target result will be copied from the source. This 1809 -- is used for properly setting out of range values for use by pragmas 1810 -- Initialize_Scalars and Normalize_Scalars. 1811 1812 -- Original_Discriminant (Node2-Sem) 1813 -- Present in identifiers. Used in references to discriminants that 1814 -- appear in generic units. Because the names of the discriminants may be 1815 -- different in an instance, we use this field to recover the position of 1816 -- the discriminant in the original type, and replace it with the 1817 -- discriminant at the same position in the instantiated type. 1818 1819 -- Original_Entity (Node2-Sem) 1820 -- Present in numeric literals. Used to denote the named number that has 1821 -- been constant-folded into the given literal. If literal is from 1822 -- source, or the result of some other constant-folding operation, then 1823 -- Original_Entity is empty. This field is needed to handle properly 1824 -- named numbers in generic units, where the Associated_Node field 1825 -- interferes with the Entity field, making it impossible to preserve the 1826 -- original entity at the point of instantiation (ASIS problem). 1827 1828 -- Others_Discrete_Choices (List1-Sem) 1829 -- When a case statement or variant is analyzed, the semantic checks 1830 -- determine the actual list of choices that correspond to an others 1831 -- choice. This list is materialized for later use by the expander and 1832 -- the Others_Discrete_Choices field of an N_Others_Choice node points to 1833 -- this materialized list of choices, which is in standard format for a 1834 -- list of discrete choices, except that of course it cannot contain an 1835 -- N_Others_Choice entry. 1836 1837 -- Parameter_List_Truncated (Flag17-Sem) 1838 -- Present in N_Function_Call and N_Procedure_Call_Statement nodes. Set 1839 -- (for OpenVMS ports of GNAT only) if the parameter list is truncated as 1840 -- a result of a First_Optional_Parameter specification in an 1841 -- Import_Function, Import_Procedure, or Import_Valued_Procedure pragma. 1842 -- The truncation is done by the expander by removing trailing parameters 1843 -- from the argument list, in accordance with the set of rules allowing 1844 -- such parameter removal. In particular, parameters can be removed 1845 -- working from the end of the parameter list backwards up to and 1846 -- including the entry designated by First_Optional_Parameter in the 1847 -- Import pragma. Parameters can be removed if they are implicit and the 1848 -- default value is a known-at-compile-time value, including the use of 1849 -- the Null_Parameter attribute, or if explicit parameter values are 1850 -- present that match the corresponding defaults. 1851 1852 -- Parent_Spec (Node4-Sem) 1853 -- For a library unit that is a child unit spec (package or subprogram 1854 -- declaration, generic declaration or instantiation, or library level 1855 -- rename, this field points to the compilation unit node for the parent 1856 -- package specification. This field is Empty for library bodies (the 1857 -- parent spec in this case can be found from the corresponding spec). 1858 1859 -- Premature_Use (Node5-Sem) 1860 -- Present in N_Incomplete_Type_Declaration node. Used for improved 1861 -- error diagnostics: if there is a premature usage of an incomplete 1862 -- type, a subsequently generated error message indicates the position 1863 -- of its full declaration. 1864 1865 -- Present_Expr (Uint3-Sem) 1866 -- Present in an N_Variant node. This has a meaningful value only after 1867 -- Gigi has back annotated the tree with representation information. At 1868 -- this point, it contains a reference to a gcc expression that depends 1869 -- on the values of one or more discriminants. Give a set of discriminant 1870 -- values, this expression evaluates to False (zero) if variant is not 1871 -- present, and True (non-zero) if it is present. See unit Repinfo for 1872 -- further details on gigi back annotation. This field is used during 1873 -- ASIS processing (data decomposition annex) to determine if a field is 1874 -- present or not. 1875 1876 -- Print_In_Hex (Flag13-Sem) 1877 -- Set on an N_Integer_Literal node to indicate that the value should be 1878 -- printed in hexadecimal in the sprint listing. Has no effect on 1879 -- legality or semantics of program, only on the displayed output. This 1880 -- is used to clarify output from the packed array cases. 1881 1882 -- Procedure_To_Call (Node2-Sem) 1883 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 1884 -- and N_Extended_Return_Statement nodes. References the entity for the 1885 -- declaration of the procedure to be called to accomplish the required 1886 -- operation (i.e. for the Allocate procedure in the case of N_Allocator 1887 -- and N_Simple_Return_Statement and N_Extended_Return_Statement (for 1888 -- allocating the return value), and for the Deallocate procedure in the 1889 -- case of N_Free_Statement. 1890 1891 -- Raises_Constraint_Error (Flag7-Sem) 1892 -- Set on an expression whose evaluation will definitely fail constraint 1893 -- error check. In the case of static expressions, this flag must be set 1894 -- accurately (and if it is set, the expression is typically illegal 1895 -- unless it appears as a non-elaborated branch of a short-circuit form). 1896 -- For a non-static expression, this flag may be set whenever an 1897 -- expression (e.g. an aggregate) is known to raise constraint error. If 1898 -- set, the expression definitely will raise CE if elaborated at runtime. 1899 -- If not set, the expression may or may not raise CE. In other words, on 1900 -- static expressions, the flag is set accurately, on non-static 1901 -- expressions it is set conservatively. 1902 1903 -- Redundant_Use (Flag13-Sem) 1904 -- Present in nodes that can appear as an operand in a use clause or use 1905 -- type clause (identifiers, expanded names, attribute references). Set 1906 -- to indicate that a use is redundant (and therefore need not be undone 1907 -- on scope exit). 1908 1909 -- Renaming_Exception (Node2-Sem) 1910 -- Present in N_Exception_Declaration node. Used to point back to the 1911 -- exception renaming for an exception declared within a subprogram. 1912 -- What happens is that an exception declared in a subprogram is moved 1913 -- to the library level with a unique name, and the original exception 1914 -- becomes a renaming. This link from the library level exception to the 1915 -- renaming declaration allows registering of the proper exception name. 1916 1917 -- Return_Statement_Entity (Node5-Sem) 1918 -- Present in N_Simple_Return_Statement and N_Extended_Return_Statement. 1919 -- Points to an E_Return_Statement representing the return statement. 1920 1921 -- Return_Object_Declarations (List3) 1922 -- Present in N_Extended_Return_Statement. Points to a list initially 1923 -- containing a single N_Object_Declaration representing the return 1924 -- object. We use a list (instead of just a pointer to the object decl) 1925 -- because Analyze wants to insert extra actions on this list. 1926 1927 -- Rounded_Result (Flag18-Sem) 1928 -- Present in N_Type_Conversion, N_Op_Divide and N_Op_Multiply nodes. 1929 -- Used in the fixed-point cases to indicate that the result must be 1930 -- rounded as a result of the use of the 'Round attribute. Also used for 1931 -- integer N_Op_Divide nodes to indicate that the result should be 1932 -- rounded to the nearest integer (breaking ties away from zero), rather 1933 -- than truncated towards zero as usual. These rounded integer operations 1934 -- are the result of expansion of rounded fixed-point divide, conversion 1935 -- and multiplication operations. 1936 1937 -- SCIL_Entity (Node4-Sem) 1938 -- Present in SCIL nodes. Used to reference the tagged type associated 1939 -- with the SCIL node. 1940 1941 -- SCIL_Controlling_Tag (Node5-Sem) 1942 -- Present in N_SCIL_Dispatching_Call nodes. Used to reference the 1943 -- controlling tag of a dispatching call. 1944 1945 -- SCIL_Tag_Value (Node5-Sem) 1946 -- Present in N_SCIL_Membership_Test nodes. Used to reference the tag 1947 -- value that is being tested. 1948 1949 -- SCIL_Target_Prim (Node2-Sem) 1950 -- Present in N_SCIL_Dispatching_Call nodes. Used to reference the tagged 1951 -- type primitive associated with the SCIL node. 1952 1953 -- Scope (Node3-Sem) 1954 -- Present in defining identifiers, defining character literals and 1955 -- defining operator symbols (i.e. in all entities). The entities of a 1956 -- scope all use this field to reference the corresponding scope entity. 1957 -- See Einfo for further details. 1958 1959 -- Shift_Count_OK (Flag4-Sem) 1960 -- A flag present in shift nodes to indicate that the shift count is 1961 -- known to be in range, i.e. is in the range from zero to word length 1962 -- minus one. If this flag is not set, then the shift count may be 1963 -- outside this range, i.e. larger than the word length, and the code 1964 -- must ensure that such shift counts give the appropriate result. 1965 1966 -- Source_Type (Node1-Sem) 1967 -- Used in an N_Validate_Unchecked_Conversion node to point to the 1968 -- source type entity for the unchecked conversion instantiation 1969 -- which gigi must do size validation for. 1970 1971 -- Split_PPC (Flag17) 1972 -- When a Pre or Post aspect specification is processed, it is broken 1973 -- into AND THEN sections. The left most section has Split_PPC set to 1974 -- False, indicating that it is the original specification (e.g. for 1975 -- posting errors). For other sections, Split_PPC is set to True. 1976 -- This flag is set in both the N_Aspect_Specification node itself, 1977 -- and in the pragma which is generated from this node. 1978 1979 -- Storage_Pool (Node1-Sem) 1980 -- Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement, 1981 -- and N_Extended_Return_Statement nodes. References the entity for the 1982 -- storage pool to be used for the allocate or free call or for the 1983 -- allocation of the returned value from function. Empty indicates that 1984 -- the global default pool is to be used. Note that in the case 1985 -- of a return statement, this field is set only if the function returns 1986 -- value of a type whose size is not known at compile time on the 1987 -- secondary stack. 1988 1989 -- Suppress_Assignment_Checks (Flag18-Sem) 1990 -- Used in generated N_Assignment_Statement nodes to suppress predicate 1991 -- and range checks in cases where the generated code knows that the 1992 -- value being assigned is in range and satisfies any predicate. Also 1993 -- can be set in N_Object_Declaration nodes, to similarly suppress any 1994 -- checks on the initializing value. 1995 1996 -- Suppress_Loop_Warnings (Flag17-Sem) 1997 -- Used in N_Loop_Statement node to indicate that warnings within the 1998 -- body of the loop should be suppressed. This is set when the range 1999 -- of a FOR loop is known to be null, or is probably null (loop would 2000 -- only execute if invalid values are present). 2001 2002 -- Target_Type (Node2-Sem) 2003 -- Used in an N_Validate_Unchecked_Conversion node to point to the target 2004 -- type entity for the unchecked conversion instantiation which gigi must 2005 -- do size validation for. 2006 2007 -- Then_Actions (List3-Sem) 2008 -- This field is present in if expression nodes. During code expansion 2009 -- we use the Insert_Actions procedure (in Exp_Util) to insert actions 2010 -- at an appropriate place in the tree to get elaborated at the right 2011 -- time. For if expressions, we have to be sure that the actions for 2012 -- for the Then branch are only elaborated if the condition is True. 2013 -- The Then_Actions field is used as a temporary parking place for 2014 -- these actions. The final tree is always rewritten to eliminate the 2015 -- need for this field, so in the tree passed to Gigi, this field is 2016 -- always set to No_List. 2017 2018 -- Treat_Fixed_As_Integer (Flag14-Sem) 2019 -- This flag appears in operator nodes for divide, multiply, mod and rem 2020 -- on fixed-point operands. It indicates that the operands are to be 2021 -- treated as integer values, ignoring small values. This flag is only 2022 -- set as a result of expansion of fixed-point operations. Typically a 2023 -- fixed-point multiplication in the source generates subsidiary 2024 -- multiplication and division operations that work with the underlying 2025 -- integer values and have this flag set. Note that this flag is not 2026 -- needed on other arithmetic operations (add, neg, subtract etc.) since 2027 -- in these cases it is always the case that fixed is treated as integer. 2028 -- The Etype field MUST be set if this flag is set. The analyzer knows to 2029 -- leave such nodes alone, and whoever makes them must set the correct 2030 -- Etype value. 2031 2032 -- TSS_Elist (Elist3-Sem) 2033 -- Present in N_Freeze_Entity nodes. Holds an element list containing 2034 -- entries for each TSS (type support subprogram) associated with the 2035 -- frozen type. The elements of the list are the entities for the 2036 -- subprograms (see package Exp_TSS for further details). Set to No_Elist 2037 -- if there are no type support subprograms for the type or if the freeze 2038 -- node is not for a type. 2039 2040 -- Unreferenced_In_Spec (Flag7-Sem) 2041 -- Present in N_With_Clause nodes. Set if the with clause is on the 2042 -- package or subprogram spec where the main unit is the corresponding 2043 -- body, and is not referenced by the spec (it may still be referenced by 2044 -- the body, so this flag is used to generate the proper message (see 2045 -- Sem_Util.Check_Unused_Withs for details) 2046 2047 -- Used_Operations (Elist5-Sem) 2048 -- Present in N_Use_Type_Clause nodes. Holds the list of operations that 2049 -- are made potentially use-visible by the clause. Simplifies processing 2050 -- on exit from the scope of the use_type_clause, in particular in the 2051 -- case of Use_All_Type, when those operations several scopes. 2052 2053 -- Was_Originally_Stub (Flag13-Sem) 2054 -- This flag is set in the node for a proper body that replaces stub. 2055 -- During the analysis procedure, stubs in some situations get rewritten 2056 -- by the corresponding bodies, and we set this flag to remember that 2057 -- this happened. Note that it is not good enough to rely on the use of 2058 -- Original_Node here because of the case of nested instantiations where 2059 -- the substituted node can be copied. 2060 2061 -- Withed_Body (Node1-Sem) 2062 -- Present in N_With_Clause nodes. Set if the unit in whose context 2063 -- the with_clause appears instantiates a generic contained in the 2064 -- library unit of the with_clause and as a result loads its body. 2065 -- Used for a more precise unit traversal for CodePeer. 2066 2067 -------------------------------------------------- 2068 -- Note on Use of End_Label and End_Span Fields -- 2069 -------------------------------------------------- 2070 2071 -- Several constructs have end lines: 2072 2073 -- Loop Statement end loop [loop_IDENTIFIER]; 2074 -- Package Specification end [[PARENT_UNIT_NAME .] IDENTIFIER] 2075 -- Task Definition end [task_IDENTIFIER] 2076 -- Protected Definition end [protected_IDENTIFIER] 2077 -- Protected Body end [protected_IDENTIFIER] 2078 2079 -- Block Statement end [block_IDENTIFIER]; 2080 -- Subprogram Body end [DESIGNATOR]; 2081 -- Package Body end [[PARENT_UNIT_NAME .] IDENTIFIER]; 2082 -- Task Body end [task_IDENTIFIER]; 2083 -- Accept Statement end [entry_IDENTIFIER]]; 2084 -- Entry Body end [entry_IDENTIFIER]; 2085 2086 -- If Statement end if; 2087 -- Case Statement end case; 2088 2089 -- Record Definition end record; 2090 -- Enumeration Definition ); 2091 2092 -- The End_Label and End_Span fields are used to mark the locations of 2093 -- these lines, and also keep track of the label in the case where a label 2094 -- is present. 2095 2096 -- For the first group above, the End_Label field of the corresponding node 2097 -- is used to point to the label identifier. In the case where there is no 2098 -- label in the source, the parser supplies a dummy identifier (with 2099 -- Comes_From_Source set to False), and the Sloc of this dummy identifier 2100 -- marks the location of the token following the END token. 2101 2102 -- For the second group, the use of End_Label is similar, but the End_Label 2103 -- is found in the N_Handled_Sequence_Of_Statements node. This is done 2104 -- simply because in some cases there is no room in the parent node. 2105 2106 -- For the third group, there is never any label, and instead of using 2107 -- End_Label, we use the End_Span field which gives the location of the 2108 -- token following END, relative to the starting Sloc of the construct, 2109 -- i.e. add Sloc (Node) + End_Span (Node) to get the Sloc of the IF or CASE 2110 -- following the End_Label. 2111 2112 -- The record definition case is handled specially, we treat it as though 2113 -- it required an optional label which is never present, and so the parser 2114 -- always builds a dummy identifier with Comes From Source set False. The 2115 -- reason we do this, rather than using End_Span in this case, is that we 2116 -- want to generate a cross-ref entry for the end of a record, since it 2117 -- represents a scope for name declaration purposes. 2118 2119 -- The enumeration definition case is handled in an exactly similar manner, 2120 -- building a dummy identifier to get a cross-reference. 2121 2122 -- Note: the reason we store the difference as a Uint, instead of storing 2123 -- the Source_Ptr value directly, is that Source_Ptr values cannot be 2124 -- distinguished from other types of values, and we count on all general 2125 -- use fields being self describing. To make things easier for clients, 2126 -- note that we provide function End_Location, and procedure 2127 -- Set_End_Location to allow access to the logical value (which is the 2128 -- Source_Ptr value for the end token). 2129 2130 --------------------- 2131 -- Syntactic Nodes -- 2132 --------------------- 2133 2134 --------------------- 2135 -- 2.3 Identifier -- 2136 --------------------- 2137 2138 -- IDENTIFIER ::= IDENTIFIER_LETTER {[UNDERLINE] LETTER_OR_DIGIT} 2139 -- LETTER_OR_DIGIT ::= IDENTIFIER_LETTER | DIGIT 2140 2141 -- An IDENTIFIER shall not be a reserved word 2142 2143 -- In the Ada grammar identifiers are the bottom level tokens which have 2144 -- very few semantics. Actual program identifiers are direct names. If 2145 -- we were being 100% honest with the grammar, then we would have a node 2146 -- called N_Direct_Name which would point to an identifier. However, 2147 -- that's too many extra nodes, so we just use the N_Identifier node 2148 -- directly as a direct name, and it contains the expression fields and 2149 -- Entity field that correspond to its use as a direct name. In those 2150 -- few cases where identifiers appear in contexts where they are not 2151 -- direct names (pragmas, pragma argument associations, attribute 2152 -- references and attribute definition clauses), the Chars field of the 2153 -- node contains the Name_Id for the identifier name. 2154 2155 -- Note: in GNAT, a reserved word can be treated as an identifier in two 2156 -- cases. First, an incorrect use of a reserved word as an identifier is 2157 -- diagnosed and then treated as a normal identifier. Second, an 2158 -- attribute designator of the form of a reserved word (access, delta, 2159 -- digits, range) is treated as an identifier. 2160 2161 -- Note: The set of letters that is permitted in an identifier depends 2162 -- on the character set in use. See package Csets for full details. 2163 2164 -- N_Identifier 2165 -- Sloc points to identifier 2166 -- Chars (Name1) contains the Name_Id for the identifier 2167 -- Entity (Node4-Sem) 2168 -- Associated_Node (Node4-Sem) 2169 -- Original_Discriminant (Node2-Sem) 2170 -- Redundant_Use (Flag13-Sem) 2171 -- Atomic_Sync_Required (Flag14-Sem) 2172 -- Has_Private_View (Flag11-Sem) (set in generic units) 2173 -- plus fields for expression 2174 2175 -------------------------- 2176 -- 2.4 Numeric Literal -- 2177 -------------------------- 2178 2179 -- NUMERIC_LITERAL ::= DECIMAL_LITERAL | BASED_LITERAL 2180 2181 ---------------------------- 2182 -- 2.4.1 Decimal Literal -- 2183 ---------------------------- 2184 2185 -- DECIMAL_LITERAL ::= NUMERAL [.NUMERAL] [EXPONENT] 2186 2187 -- NUMERAL ::= DIGIT {[UNDERLINE] DIGIT} 2188 2189 -- EXPONENT ::= E [+] NUMERAL | E - NUMERAL 2190 2191 -- Decimal literals appear in the tree as either integer literal nodes 2192 -- or real literal nodes, depending on whether a period is present. 2193 2194 -- Note: literal nodes appear as a result of direct use of literals 2195 -- in the source program, and also as the result of evaluating 2196 -- expressions at compile time. In the latter case, it is possible 2197 -- to construct real literals that have no syntactic representation 2198 -- using the standard literal format. Such literals are listed by 2199 -- Sprint using the notation [numerator / denominator]. 2200 2201 -- Note: the value of an integer literal node created by the front end 2202 -- is never outside the range of values of the base type. However, it 2203 -- can be the case that the created value is outside the range of the 2204 -- particular subtype. This happens in the case of integer overflows 2205 -- with checks suppressed. 2206 2207 -- N_Integer_Literal 2208 -- Sloc points to literal 2209 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2210 -- has been constant-folded into its literal value. 2211 -- Intval (Uint3) contains integer value of literal 2212 -- plus fields for expression 2213 -- Print_In_Hex (Flag13-Sem) 2214 2215 -- N_Real_Literal 2216 -- Sloc points to literal 2217 -- Original_Entity (Node2-Sem) If not Empty, holds Named_Number that 2218 -- has been constant-folded into its literal value. 2219 -- Realval (Ureal3) contains real value of literal 2220 -- Corresponding_Integer_Value (Uint4-Sem) 2221 -- Is_Machine_Number (Flag11-Sem) 2222 -- plus fields for expression 2223 2224 -------------------------- 2225 -- 2.4.2 Based Literal -- 2226 -------------------------- 2227 2228 -- BASED_LITERAL ::= 2229 -- BASE # BASED_NUMERAL [.BASED_NUMERAL] # [EXPONENT] 2230 2231 -- BASE ::= NUMERAL 2232 2233 -- BASED_NUMERAL ::= 2234 -- EXTENDED_DIGIT {[UNDERLINE] EXTENDED_DIGIT} 2235 2236 -- EXTENDED_DIGIT ::= DIGIT | A | B | C | D | E | F 2237 2238 -- Based literals appear in the tree as either integer literal nodes 2239 -- or real literal nodes, depending on whether a period is present. 2240 2241 ---------------------------- 2242 -- 2.5 Character Literal -- 2243 ---------------------------- 2244 2245 -- CHARACTER_LITERAL ::= ' GRAPHIC_CHARACTER ' 2246 2247 -- N_Character_Literal 2248 -- Sloc points to literal 2249 -- Chars (Name1) contains the Name_Id for the identifier 2250 -- Char_Literal_Value (Uint2) contains the literal value 2251 -- Entity (Node4-Sem) 2252 -- Associated_Node (Node4-Sem) 2253 -- Has_Private_View (Flag11-Sem) set in generic units. 2254 -- plus fields for expression 2255 2256 -- Note: the Entity field will be missing (set to Empty) for character 2257 -- literals whose type is Standard.Wide_Character or Standard.Character 2258 -- or a type derived from one of these two. In this case the character 2259 -- literal stands for its own coding. The reason we take this irregular 2260 -- short cut is to avoid the need to build lots of junk defining 2261 -- character literal nodes. 2262 2263 ------------------------- 2264 -- 2.6 String Literal -- 2265 ------------------------- 2266 2267 -- STRING LITERAL ::= "{STRING_ELEMENT}" 2268 2269 -- A STRING_ELEMENT is either a pair of quotation marks ("), or a 2270 -- single GRAPHIC_CHARACTER other than a quotation mark. 2271 -- 2272 -- Is_Folded_In_Parser is True if the parser created this literal by 2273 -- folding a sequence of "&" operators. For example, if the source code 2274 -- says "aaa" & "bbb" & "ccc", and this produces "aaabbbccc", the flag 2275 -- is set. This flag is needed because the parser doesn't know about 2276 -- visibility, so the folded result might be wrong, and semantic 2277 -- analysis needs to check for that. 2278 2279 -- N_String_Literal 2280 -- Sloc points to literal 2281 -- Strval (Str3) contains Id of string value 2282 -- Has_Wide_Character (Flag11-Sem) 2283 -- Has_Wide_Wide_Character (Flag13-Sem) 2284 -- Is_Folded_In_Parser (Flag4) 2285 -- plus fields for expression 2286 2287 ------------------ 2288 -- 2.7 Comment -- 2289 ------------------ 2290 2291 -- A COMMENT starts with two adjacent hyphens and extends up to the 2292 -- end of the line. A COMMENT may appear on any line of a program. 2293 2294 -- Comments are skipped by the scanner and do not appear in the tree. 2295 -- It is possible to reconstruct the position of comments with respect 2296 -- to the elements of the tree by using the source position (Sloc) 2297 -- pointers that appear in every tree node. 2298 2299 ----------------- 2300 -- 2.8 Pragma -- 2301 ----------------- 2302 2303 -- PRAGMA ::= pragma IDENTIFIER 2304 -- [(PRAGMA_ARGUMENT_ASSOCIATION {, PRAGMA_ARGUMENT_ASSOCIATION})]; 2305 2306 -- Note that a pragma may appear in the tree anywhere a declaration 2307 -- or a statement may appear, as well as in some other situations 2308 -- which are explicitly documented. 2309 2310 -- N_Pragma 2311 -- Sloc points to PRAGMA 2312 -- Next_Pragma (Node1-Sem) 2313 -- Pragma_Argument_Associations (List2) (set to No_List if none) 2314 -- Corresponding_Aspect (Node3-Sem) (set to Empty if not present) 2315 -- Pragma_Identifier (Node4) 2316 -- Next_Rep_Item (Node5-Sem) 2317 -- Class_Present (Flag6) set if from Aspect with 'Class 2318 -- From_Aspect_Specification (Flag13-Sem) 2319 -- Is_Delayed_Aspect (Flag14-Sem) 2320 -- Is_Disabled (Flag15-Sem) 2321 -- Is_Ignored (Flag9-Sem) 2322 -- Is_Checked (Flag11-Sem) 2323 -- Import_Interface_Present (Flag16-Sem) 2324 -- Split_PPC (Flag17) set if corresponding aspect had Split_PPC set 2325 2326 -- Note: we should have a section on what pragmas are passed on to 2327 -- the back end to be processed. This section should note that pragma 2328 -- Psect_Object is always converted to Common_Object, but there are 2329 -- undoubtedly many other similar notes required ??? 2330 2331 -- Note: a utility function Pragma_Name may be applied to pragma nodes 2332 -- to conveniently obtain the Chars field of the Pragma_Identifier. 2333 2334 -- Note: if From_Aspect_Specification is set, then Sloc points to the 2335 -- aspect name, as does the Pragma_Identifier. In this case if the 2336 -- pragma has a local name argument (such as pragma Inline), it is 2337 -- resolved to point to the specific entity affected by the pragma. 2338 2339 -------------------------------------- 2340 -- 2.8 Pragma Argument Association -- 2341 -------------------------------------- 2342 2343 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2344 -- [pragma_argument_IDENTIFIER =>] NAME 2345 -- | [pragma_argument_IDENTIFIER =>] EXPRESSION 2346 2347 -- In Ada 2012, there are two more possibilities: 2348 2349 -- PRAGMA_ARGUMENT_ASSOCIATION ::= 2350 -- [pragma_argument_ASPECT_MARK =>] NAME 2351 -- | [pragma_argument_ASPECT_MARK =>] EXPRESSION 2352 2353 -- where the interesting allowed cases (which do not fit the syntax of 2354 -- the first alternative above) are 2355 2356 -- ASPECT_MARK => Pre'Class | 2357 -- Post'Class | 2358 -- Type_Invariant'Class | 2359 -- Invariant'Class 2360 2361 -- We allow this special usage in all Ada modes, but it would be a 2362 -- pain to allow these aspects to pervade the pragma syntax, and the 2363 -- representation of pragma nodes internally. So what we do is to 2364 -- replace these ASPECT_MARK forms with identifiers whose name is one 2365 -- of the special internal names _Pre, _Post or _Type_Invariant. 2366 2367 -- We do a similar replacement of these Aspect_Mark forms in the 2368 -- Expression of a pragma argument association for the cases of 2369 -- the first arguments of any Check pragmas and Check_Policy pragmas 2370 2371 -- N_Pragma_Argument_Association 2372 -- Sloc points to first token in association 2373 -- Chars (Name1) (set to No_Name if no pragma argument identifier) 2374 -- Expression (Node3) 2375 2376 ------------------------ 2377 -- 2.9 Reserved Word -- 2378 ------------------------ 2379 2380 -- Reserved words are parsed by the scanner, and returned as the 2381 -- corresponding token types (e.g. PACKAGE is returned as Tok_Package) 2382 2383 ---------------------------- 2384 -- 3.1 Basic Declaration -- 2385 ---------------------------- 2386 2387 -- BASIC_DECLARATION ::= 2388 -- TYPE_DECLARATION | SUBTYPE_DECLARATION 2389 -- | OBJECT_DECLARATION | NUMBER_DECLARATION 2390 -- | SUBPROGRAM_DECLARATION | ABSTRACT_SUBPROGRAM_DECLARATION 2391 -- | PACKAGE_DECLARATION | RENAMING_DECLARATION 2392 -- | EXCEPTION_DECLARATION | GENERIC_DECLARATION 2393 -- | GENERIC_INSTANTIATION 2394 2395 -- Basic declaration also includes IMPLICIT_LABEL_DECLARATION 2396 -- see further description in section on semantic nodes. 2397 2398 -- Also, in the tree that is constructed, a pragma may appear 2399 -- anywhere that a declaration may appear. 2400 2401 ------------------------------ 2402 -- 3.1 Defining Identifier -- 2403 ------------------------------ 2404 2405 -- DEFINING_IDENTIFIER ::= IDENTIFIER 2406 2407 -- A defining identifier is an entity, which has additional fields 2408 -- depending on the setting of the Ekind field. These additional 2409 -- fields are defined (and access subprograms declared) in package 2410 -- Einfo. 2411 2412 -- Note: N_Defining_Identifier is an extended node whose fields are 2413 -- deliberate layed out to match the layout of fields in an ordinary 2414 -- N_Identifier node allowing for easy alteration of an identifier 2415 -- node into a defining identifier node. For details, see procedure 2416 -- Sinfo.CN.Change_Identifier_To_Defining_Identifier. 2417 2418 -- N_Defining_Identifier 2419 -- Sloc points to identifier 2420 -- Chars (Name1) contains the Name_Id for the identifier 2421 -- Next_Entity (Node2-Sem) 2422 -- Scope (Node3-Sem) 2423 -- Etype (Node5-Sem) 2424 2425 ----------------------------- 2426 -- 3.2.1 Type Declaration -- 2427 ----------------------------- 2428 2429 -- TYPE_DECLARATION ::= 2430 -- FULL_TYPE_DECLARATION 2431 -- | INCOMPLETE_TYPE_DECLARATION 2432 -- | PRIVATE_TYPE_DECLARATION 2433 -- | PRIVATE_EXTENSION_DECLARATION 2434 2435 ---------------------------------- 2436 -- 3.2.1 Full Type Declaration -- 2437 ---------------------------------- 2438 2439 -- FULL_TYPE_DECLARATION ::= 2440 -- type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 2441 -- is TYPE_DEFINITION 2442 -- [ASPECT_SPECIFICATIONS]; 2443 -- | TASK_TYPE_DECLARATION 2444 -- | PROTECTED_TYPE_DECLARATION 2445 2446 -- The full type declaration node is used only for the first case. The 2447 -- second case (concurrent type declaration), is represented directly 2448 -- by a task type declaration or a protected type declaration. 2449 2450 -- N_Full_Type_Declaration 2451 -- Sloc points to TYPE 2452 -- Defining_Identifier (Node1) 2453 -- Discriminant_Specifications (List4) (set to No_List if none) 2454 -- Type_Definition (Node3) 2455 -- Discr_Check_Funcs_Built (Flag11-Sem) 2456 2457 ---------------------------- 2458 -- 3.2.1 Type Definition -- 2459 ---------------------------- 2460 2461 -- TYPE_DEFINITION ::= 2462 -- ENUMERATION_TYPE_DEFINITION | INTEGER_TYPE_DEFINITION 2463 -- | REAL_TYPE_DEFINITION | ARRAY_TYPE_DEFINITION 2464 -- | RECORD_TYPE_DEFINITION | ACCESS_TYPE_DEFINITION 2465 -- | DERIVED_TYPE_DEFINITION | INTERFACE_TYPE_DEFINITION 2466 2467 -------------------------------- 2468 -- 3.2.2 Subtype Declaration -- 2469 -------------------------------- 2470 2471 -- SUBTYPE_DECLARATION ::= 2472 -- subtype DEFINING_IDENTIFIER is [NULL_EXCLUSION] SUBTYPE_INDICATION 2473 -- [ASPECT_SPECIFICATIONS]; 2474 2475 -- The subtype indication field is set to Empty for subtypes 2476 -- declared in package Standard (Positive, Natural). 2477 2478 -- N_Subtype_Declaration 2479 -- Sloc points to SUBTYPE 2480 -- Defining_Identifier (Node1) 2481 -- Null_Exclusion_Present (Flag11) 2482 -- Subtype_Indication (Node5) 2483 -- Generic_Parent_Type (Node4-Sem) (set for an actual derived type). 2484 -- Exception_Junk (Flag8-Sem) 2485 -- Has_Dynamic_Range_Check (Flag12-Sem) 2486 2487 ------------------------------- 2488 -- 3.2.2 Subtype Indication -- 2489 ------------------------------- 2490 2491 -- SUBTYPE_INDICATION ::= SUBTYPE_MARK [CONSTRAINT] 2492 2493 -- Note: if no constraint is present, the subtype indication appears 2494 -- directly in the tree as a subtype mark. The N_Subtype_Indication 2495 -- node is used only if a constraint is present. 2496 2497 -- Note: [For Ada 2005 (AI-231)]: Because Ada 2005 extends this rule 2498 -- with the null-exclusion part (see AI-231), we had to introduce a new 2499 -- attribute in all the parents of subtype_indication nodes to indicate 2500 -- if the null-exclusion is present. 2501 2502 -- Note: the reason that this node has expression fields is that a 2503 -- subtype indication can appear as an operand of a membership test. 2504 2505 -- N_Subtype_Indication 2506 -- Sloc points to first token of subtype mark 2507 -- Subtype_Mark (Node4) 2508 -- Constraint (Node3) 2509 -- Etype (Node5-Sem) 2510 -- Must_Not_Freeze (Flag8-Sem) 2511 2512 -- Note: Depending on context, the Etype is either the entity of the 2513 -- Subtype_Mark field, or it is an itype constructed to reify the 2514 -- subtype indication. In particular, such itypes are created for a 2515 -- subtype indication that appears in an array type declaration. This 2516 -- simplifies constraint checking in indexed components. 2517 2518 -- For subtype indications that appear in scalar type and subtype 2519 -- declarations, the Etype is the entity of the subtype mark. 2520 2521 ------------------------- 2522 -- 3.2.2 Subtype Mark -- 2523 ------------------------- 2524 2525 -- SUBTYPE_MARK ::= subtype_NAME 2526 2527 ----------------------- 2528 -- 3.2.2 Constraint -- 2529 ----------------------- 2530 2531 -- CONSTRAINT ::= SCALAR_CONSTRAINT | COMPOSITE_CONSTRAINT 2532 2533 ------------------------------ 2534 -- 3.2.2 Scalar Constraint -- 2535 ------------------------------ 2536 2537 -- SCALAR_CONSTRAINT ::= 2538 -- RANGE_CONSTRAINT | DIGITS_CONSTRAINT | DELTA_CONSTRAINT 2539 2540 --------------------------------- 2541 -- 3.2.2 Composite Constraint -- 2542 --------------------------------- 2543 2544 -- COMPOSITE_CONSTRAINT ::= 2545 -- INDEX_CONSTRAINT | DISCRIMINANT_CONSTRAINT 2546 2547 ------------------------------- 2548 -- 3.3.1 Object Declaration -- 2549 ------------------------------- 2550 2551 -- OBJECT_DECLARATION ::= 2552 -- DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2553 -- [NULL_EXCLUSION] SUBTYPE_INDICATION [:= EXPRESSION] 2554 -- [ASPECT_SPECIFICATIONS]; 2555 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2556 -- ACCESS_DEFINITION [:= EXPRESSION] 2557 -- [ASPECT_SPECIFICATIONS]; 2558 -- | DEFINING_IDENTIFIER_LIST : [aliased] [constant] 2559 -- ARRAY_TYPE_DEFINITION [:= EXPRESSION] 2560 -- [ASPECT_SPECIFICATIONS]; 2561 -- | SINGLE_TASK_DECLARATION 2562 -- | SINGLE_PROTECTED_DECLARATION 2563 2564 -- Note: aliased is not permitted in Ada 83 mode 2565 2566 -- The N_Object_Declaration node is only for the first two cases. 2567 -- Single task declaration is handled by P_Task (9.1) 2568 -- Single protected declaration is handled by P_protected (9.5) 2569 2570 -- Although the syntax allows multiple identifiers in the list, the 2571 -- semantics is as though successive declarations were given with 2572 -- identical type definition and expression components. To simplify 2573 -- semantic processing, the parser represents a multiple declaration 2574 -- case as a sequence of single declarations, using the More_Ids and 2575 -- Prev_Ids flags to preserve the original source form as described 2576 -- in the section on "Handling of Defining Identifier Lists". 2577 2578 -- The flag Has_Init_Expression is set if an initializing expression 2579 -- is present. Normally it is set if and only if Expression contains 2580 -- a non-empty value, but there is an exception to this. When the 2581 -- initializing expression is an aggregate which requires explicit 2582 -- assignments, the Expression field gets set to Empty, but this flag 2583 -- is still set, so we don't forget we had an initializing expression. 2584 2585 -- Note: if a range check is required for the initialization 2586 -- expression then the Do_Range_Check flag is set in the Expression, 2587 -- with the check being done against the type given by the object 2588 -- definition, which is also the Etype of the defining identifier. 2589 2590 -- Note: the contents of the Expression field must be ignored (i.e. 2591 -- treated as though it were Empty) if No_Initialization is set True. 2592 2593 -- Note: the back end places some restrictions on the form of the 2594 -- Expression field. If the object being declared is Atomic, then 2595 -- the Expression may not have the form of an aggregate (since this 2596 -- might cause the back end to generate separate assignments). In this 2597 -- case the front end must generate an extra temporary and initialize 2598 -- this temporary as required (the temporary itself is not atomic). 2599 2600 -- Note: there is not node kind for object definition. Instead, the 2601 -- corresponding field holds a subtype indication, an array type 2602 -- definition, or (Ada 2005, AI-406) an access definition. 2603 2604 -- N_Object_Declaration 2605 -- Sloc points to first identifier 2606 -- Defining_Identifier (Node1) 2607 -- Aliased_Present (Flag4) 2608 -- Constant_Present (Flag17) set if CONSTANT appears 2609 -- Null_Exclusion_Present (Flag11) 2610 -- Object_Definition (Node4) subtype indic./array type def./access def. 2611 -- Expression (Node3) (set to Empty if not present) 2612 -- Handler_List_Entry (Node2-Sem) 2613 -- Corresponding_Generic_Association (Node5-Sem) 2614 -- More_Ids (Flag5) (set to False if no more identifiers in list) 2615 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 2616 -- No_Initialization (Flag13-Sem) 2617 -- Assignment_OK (Flag15-Sem) 2618 -- Exception_Junk (Flag8-Sem) 2619 -- Is_Subprogram_Descriptor (Flag16-Sem) 2620 -- Has_Init_Expression (Flag14) 2621 -- Suppress_Assignment_Checks (Flag18-Sem) 2622 2623 ------------------------------------- 2624 -- 3.3.1 Defining Identifier List -- 2625 ------------------------------------- 2626 2627 -- DEFINING_IDENTIFIER_LIST ::= 2628 -- DEFINING_IDENTIFIER {, DEFINING_IDENTIFIER} 2629 2630 ------------------------------- 2631 -- 3.3.2 Number Declaration -- 2632 ------------------------------- 2633 2634 -- NUMBER_DECLARATION ::= 2635 -- DEFINING_IDENTIFIER_LIST : constant := static_EXPRESSION; 2636 2637 -- Although the syntax allows multiple identifiers in the list, the 2638 -- semantics is as though successive declarations were given with 2639 -- identical expressions. To simplify semantic processing, the parser 2640 -- represents a multiple declaration case as a sequence of single 2641 -- declarations, using the More_Ids and Prev_Ids flags to preserve 2642 -- the original source form as described in the section on "Handling 2643 -- of Defining Identifier Lists". 2644 2645 -- N_Number_Declaration 2646 -- Sloc points to first identifier 2647 -- Defining_Identifier (Node1) 2648 -- Expression (Node3) 2649 -- More_Ids (Flag5) (set to False if no more identifiers in list) 2650 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 2651 2652 ---------------------------------- 2653 -- 3.4 Derived Type Definition -- 2654 ---------------------------------- 2655 2656 -- DERIVED_TYPE_DEFINITION ::= 2657 -- [abstract] [limited] new [NULL_EXCLUSION] parent_SUBTYPE_INDICATION 2658 -- [[and INTERFACE_LIST] RECORD_EXTENSION_PART] 2659 2660 -- Note: ABSTRACT, LIMITED and record extension part are not permitted 2661 -- in Ada 83 mode 2662 2663 -- Note: a record extension part is required if ABSTRACT is present 2664 2665 -- N_Derived_Type_Definition 2666 -- Sloc points to NEW 2667 -- Abstract_Present (Flag4) 2668 -- Null_Exclusion_Present (Flag11) (set to False if not present) 2669 -- Subtype_Indication (Node5) 2670 -- Record_Extension_Part (Node3) (set to Empty if not present) 2671 -- Limited_Present (Flag17) 2672 -- Task_Present (Flag5) set in task interfaces 2673 -- Protected_Present (Flag6) set in protected interfaces 2674 -- Synchronized_Present (Flag7) set in interfaces 2675 -- Interface_List (List2) (set to No_List if none) 2676 -- Interface_Present (Flag16) set in abstract interfaces 2677 2678 -- Note: Task_Present, Protected_Present, Synchronized_Present, 2679 -- Interface_List, and Interface_Present are used for abstract 2680 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 2681 2682 --------------------------- 2683 -- 3.5 Range Constraint -- 2684 --------------------------- 2685 2686 -- RANGE_CONSTRAINT ::= range RANGE 2687 2688 -- N_Range_Constraint 2689 -- Sloc points to RANGE 2690 -- Range_Expression (Node4) 2691 2692 ---------------- 2693 -- 3.5 Range -- 2694 ---------------- 2695 2696 -- RANGE ::= 2697 -- RANGE_ATTRIBUTE_REFERENCE 2698 -- | SIMPLE_EXPRESSION .. SIMPLE_EXPRESSION 2699 2700 -- Note: the case of a range given as a range attribute reference 2701 -- appears directly in the tree as an attribute reference. 2702 2703 -- Note: the field name for a reference to a range is Range_Expression 2704 -- rather than Range, because range is a reserved keyword in Ada. 2705 2706 -- Note: the reason that this node has expression fields is that a 2707 -- range can appear as an operand of a membership test. The Etype 2708 -- field is the type of the range (we do NOT construct an implicit 2709 -- subtype to represent the range exactly). 2710 2711 -- N_Range 2712 -- Sloc points to .. 2713 -- Low_Bound (Node1) 2714 -- High_Bound (Node2) 2715 -- Includes_Infinities (Flag11) 2716 -- plus fields for expression 2717 2718 -- Note: if the range appears in a context, such as a subtype 2719 -- declaration, where range checks are required on one or both of 2720 -- the expression fields, then type conversion nodes are inserted 2721 -- to represent the required checks. 2722 2723 ---------------------------------------- 2724 -- 3.5.1 Enumeration Type Definition -- 2725 ---------------------------------------- 2726 2727 -- ENUMERATION_TYPE_DEFINITION ::= 2728 -- (ENUMERATION_LITERAL_SPECIFICATION 2729 -- {, ENUMERATION_LITERAL_SPECIFICATION}) 2730 2731 -- Note: the Literals field in the node described below is null for 2732 -- the case of the standard types CHARACTER and WIDE_CHARACTER, for 2733 -- which special processing handles these types as special cases. 2734 2735 -- N_Enumeration_Type_Definition 2736 -- Sloc points to left parenthesis 2737 -- Literals (List1) (Empty for CHARACTER or WIDE_CHARACTER) 2738 -- End_Label (Node4) (set to Empty if internally generated record) 2739 2740 ---------------------------------------------- 2741 -- 3.5.1 Enumeration Literal Specification -- 2742 ---------------------------------------------- 2743 2744 -- ENUMERATION_LITERAL_SPECIFICATION ::= 2745 -- DEFINING_IDENTIFIER | DEFINING_CHARACTER_LITERAL 2746 2747 --------------------------------------- 2748 -- 3.5.1 Defining Character Literal -- 2749 --------------------------------------- 2750 2751 -- DEFINING_CHARACTER_LITERAL ::= CHARACTER_LITERAL 2752 2753 -- A defining character literal is an entity, which has additional 2754 -- fields depending on the setting of the Ekind field. These 2755 -- additional fields are defined (and access subprograms declared) 2756 -- in package Einfo. 2757 2758 -- Note: N_Defining_Character_Literal is an extended node whose fields 2759 -- are deliberate layed out to match the layout of fields in an ordinary 2760 -- N_Character_Literal node allowing for easy alteration of a character 2761 -- literal node into a defining character literal node. For details, see 2762 -- Sinfo.CN.Change_Character_Literal_To_Defining_Character_Literal. 2763 2764 -- N_Defining_Character_Literal 2765 -- Sloc points to literal 2766 -- Chars (Name1) contains the Name_Id for the identifier 2767 -- Next_Entity (Node2-Sem) 2768 -- Scope (Node3-Sem) 2769 -- Etype (Node5-Sem) 2770 2771 ------------------------------------ 2772 -- 3.5.4 Integer Type Definition -- 2773 ------------------------------------ 2774 2775 -- Note: there is an error in this rule in the latest version of the 2776 -- grammar, so we have retained the old rule pending clarification. 2777 2778 -- INTEGER_TYPE_DEFINITION ::= 2779 -- SIGNED_INTEGER_TYPE_DEFINITION 2780 -- | MODULAR_TYPE_DEFINITION 2781 2782 ------------------------------------------- 2783 -- 3.5.4 Signed Integer Type Definition -- 2784 ------------------------------------------- 2785 2786 -- SIGNED_INTEGER_TYPE_DEFINITION ::= 2787 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 2788 2789 -- Note: the Low_Bound and High_Bound fields are set to Empty 2790 -- for integer types defined in package Standard. 2791 2792 -- N_Signed_Integer_Type_Definition 2793 -- Sloc points to RANGE 2794 -- Low_Bound (Node1) 2795 -- High_Bound (Node2) 2796 2797 ------------------------------------ 2798 -- 3.5.4 Modular Type Definition -- 2799 ------------------------------------ 2800 2801 -- MODULAR_TYPE_DEFINITION ::= mod static_EXPRESSION 2802 2803 -- N_Modular_Type_Definition 2804 -- Sloc points to MOD 2805 -- Expression (Node3) 2806 2807 --------------------------------- 2808 -- 3.5.6 Real Type Definition -- 2809 --------------------------------- 2810 2811 -- REAL_TYPE_DEFINITION ::= 2812 -- FLOATING_POINT_DEFINITION | FIXED_POINT_DEFINITION 2813 2814 -------------------------------------- 2815 -- 3.5.7 Floating Point Definition -- 2816 -------------------------------------- 2817 2818 -- FLOATING_POINT_DEFINITION ::= 2819 -- digits static_SIMPLE_EXPRESSION [REAL_RANGE_SPECIFICATION] 2820 2821 -- Note: The Digits_Expression and Real_Range_Specifications fields 2822 -- are set to Empty for floating-point types declared in Standard. 2823 2824 -- N_Floating_Point_Definition 2825 -- Sloc points to DIGITS 2826 -- Digits_Expression (Node2) 2827 -- Real_Range_Specification (Node4) (set to Empty if not present) 2828 2829 ------------------------------------- 2830 -- 3.5.7 Real Range Specification -- 2831 ------------------------------------- 2832 2833 -- REAL_RANGE_SPECIFICATION ::= 2834 -- range static_SIMPLE_EXPRESSION .. static_SIMPLE_EXPRESSION 2835 2836 -- N_Real_Range_Specification 2837 -- Sloc points to RANGE 2838 -- Low_Bound (Node1) 2839 -- High_Bound (Node2) 2840 2841 ----------------------------------- 2842 -- 3.5.9 Fixed Point Definition -- 2843 ----------------------------------- 2844 2845 -- FIXED_POINT_DEFINITION ::= 2846 -- ORDINARY_FIXED_POINT_DEFINITION | DECIMAL_FIXED_POINT_DEFINITION 2847 2848 -------------------------------------------- 2849 -- 3.5.9 Ordinary Fixed Point Definition -- 2850 -------------------------------------------- 2851 2852 -- ORDINARY_FIXED_POINT_DEFINITION ::= 2853 -- delta static_EXPRESSION REAL_RANGE_SPECIFICATION 2854 2855 -- Note: In Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 2856 2857 -- N_Ordinary_Fixed_Point_Definition 2858 -- Sloc points to DELTA 2859 -- Delta_Expression (Node3) 2860 -- Real_Range_Specification (Node4) 2861 2862 ------------------------------------------- 2863 -- 3.5.9 Decimal Fixed Point Definition -- 2864 ------------------------------------------- 2865 2866 -- DECIMAL_FIXED_POINT_DEFINITION ::= 2867 -- delta static_EXPRESSION 2868 -- digits static_EXPRESSION [REAL_RANGE_SPECIFICATION] 2869 2870 -- Note: decimal types are not permitted in Ada 83 mode 2871 2872 -- N_Decimal_Fixed_Point_Definition 2873 -- Sloc points to DELTA 2874 -- Delta_Expression (Node3) 2875 -- Digits_Expression (Node2) 2876 -- Real_Range_Specification (Node4) (set to Empty if not present) 2877 2878 ------------------------------ 2879 -- 3.5.9 Digits Constraint -- 2880 ------------------------------ 2881 2882 -- DIGITS_CONSTRAINT ::= 2883 -- digits static_EXPRESSION [RANGE_CONSTRAINT] 2884 2885 -- Note: in Ada 83, the EXPRESSION must be a SIMPLE_EXPRESSION 2886 -- Note: in Ada 95, reduced accuracy subtypes are obsolescent 2887 2888 -- N_Digits_Constraint 2889 -- Sloc points to DIGITS 2890 -- Digits_Expression (Node2) 2891 -- Range_Constraint (Node4) (set to Empty if not present) 2892 2893 -------------------------------- 2894 -- 3.6 Array Type Definition -- 2895 -------------------------------- 2896 2897 -- ARRAY_TYPE_DEFINITION ::= 2898 -- UNCONSTRAINED_ARRAY_DEFINITION | CONSTRAINED_ARRAY_DEFINITION 2899 2900 ----------------------------------------- 2901 -- 3.6 Unconstrained Array Definition -- 2902 ----------------------------------------- 2903 2904 -- UNCONSTRAINED_ARRAY_DEFINITION ::= 2905 -- array (INDEX_SUBTYPE_DEFINITION {, INDEX_SUBTYPE_DEFINITION}) of 2906 -- COMPONENT_DEFINITION 2907 2908 -- Note: dimensionality of array is indicated by number of entries in 2909 -- the Subtype_Marks list, which has one entry for each dimension. 2910 2911 -- N_Unconstrained_Array_Definition 2912 -- Sloc points to ARRAY 2913 -- Subtype_Marks (List2) 2914 -- Component_Definition (Node4) 2915 2916 ----------------------------------- 2917 -- 3.6 Index Subtype Definition -- 2918 ----------------------------------- 2919 2920 -- INDEX_SUBTYPE_DEFINITION ::= SUBTYPE_MARK range <> 2921 2922 -- There is no explicit node in the tree for an index subtype 2923 -- definition since the N_Unconstrained_Array_Definition node 2924 -- incorporates the type marks which appear in this context. 2925 2926 --------------------------------------- 2927 -- 3.6 Constrained Array Definition -- 2928 --------------------------------------- 2929 2930 -- CONSTRAINED_ARRAY_DEFINITION ::= 2931 -- array (DISCRETE_SUBTYPE_DEFINITION 2932 -- {, DISCRETE_SUBTYPE_DEFINITION}) 2933 -- of COMPONENT_DEFINITION 2934 2935 -- Note: dimensionality of array is indicated by number of entries 2936 -- in the Discrete_Subtype_Definitions list, which has one entry 2937 -- for each dimension. 2938 2939 -- N_Constrained_Array_Definition 2940 -- Sloc points to ARRAY 2941 -- Discrete_Subtype_Definitions (List2) 2942 -- Component_Definition (Node4) 2943 2944 -- Note: although the language allows the full syntax for discrete 2945 -- subtype definitions (i.e. a discrete subtype indication or a range), 2946 -- in the generated tree, we always rewrite these as N_Range nodes. 2947 2948 -------------------------------------- 2949 -- 3.6 Discrete Subtype Definition -- 2950 -------------------------------------- 2951 2952 -- DISCRETE_SUBTYPE_DEFINITION ::= 2953 -- discrete_SUBTYPE_INDICATION | RANGE 2954 2955 ------------------------------- 2956 -- 3.6 Component Definition -- 2957 ------------------------------- 2958 2959 -- COMPONENT_DEFINITION ::= 2960 -- [aliased] [NULL_EXCLUSION] SUBTYPE_INDICATION | ACCESS_DEFINITION 2961 2962 -- Note: although the syntax does not permit a component definition to 2963 -- be an anonymous array (and the parser will diagnose such an attempt 2964 -- with an appropriate message), it is possible for anonymous arrays 2965 -- to appear as component definitions. The semantics and back end handle 2966 -- this case properly, and the expander in fact generates such cases. 2967 -- Access_Definition is an optional field that gives support to 2968 -- Ada 2005 (AI-230). The parser generates nodes that have either the 2969 -- Subtype_Indication field or else the Access_Definition field. 2970 2971 -- N_Component_Definition 2972 -- Sloc points to ALIASED, ACCESS or to first token of subtype mark 2973 -- Aliased_Present (Flag4) 2974 -- Null_Exclusion_Present (Flag11) 2975 -- Subtype_Indication (Node5) (set to Empty if not present) 2976 -- Access_Definition (Node3) (set to Empty if not present) 2977 2978 ----------------------------- 2979 -- 3.6.1 Index Constraint -- 2980 ----------------------------- 2981 2982 -- INDEX_CONSTRAINT ::= (DISCRETE_RANGE {, DISCRETE_RANGE}) 2983 2984 -- It is not in general possible to distinguish between discriminant 2985 -- constraints and index constraints at parse time, since a simple 2986 -- name could be either the subtype mark of a discrete range, or an 2987 -- expression in a discriminant association with no name. Either 2988 -- entry appears simply as the name, and the semantic parse must 2989 -- distinguish between the two cases. Thus we use a common tree 2990 -- node format for both of these constraint types. 2991 2992 -- See Discriminant_Constraint for format of node 2993 2994 --------------------------- 2995 -- 3.6.1 Discrete Range -- 2996 --------------------------- 2997 2998 -- DISCRETE_RANGE ::= discrete_SUBTYPE_INDICATION | RANGE 2999 3000 ---------------------------- 3001 -- 3.7 Discriminant Part -- 3002 ---------------------------- 3003 3004 -- DISCRIMINANT_PART ::= 3005 -- UNKNOWN_DISCRIMINANT_PART | KNOWN_DISCRIMINANT_PART 3006 3007 ------------------------------------ 3008 -- 3.7 Unknown Discriminant Part -- 3009 ------------------------------------ 3010 3011 -- UNKNOWN_DISCRIMINANT_PART ::= (<>) 3012 3013 -- Note: unknown discriminant parts are not permitted in Ada 83 mode 3014 3015 -- There is no explicit node in the tree for an unknown discriminant 3016 -- part. Instead the Unknown_Discriminants_Present flag is set in the 3017 -- parent node. 3018 3019 ---------------------------------- 3020 -- 3.7 Known Discriminant Part -- 3021 ---------------------------------- 3022 3023 -- KNOWN_DISCRIMINANT_PART ::= 3024 -- (DISCRIMINANT_SPECIFICATION {; DISCRIMINANT_SPECIFICATION}) 3025 3026 ------------------------------------- 3027 -- 3.7 Discriminant Specification -- 3028 ------------------------------------- 3029 3030 -- DISCRIMINANT_SPECIFICATION ::= 3031 -- DEFINING_IDENTIFIER_LIST : [NULL_EXCLUSION] SUBTYPE_MARK 3032 -- [:= DEFAULT_EXPRESSION] 3033 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 3034 -- [:= DEFAULT_EXPRESSION] 3035 3036 -- Although the syntax allows multiple identifiers in the list, the 3037 -- semantics is as though successive specifications were given with 3038 -- identical type definition and expression components. To simplify 3039 -- semantic processing, the parser represents a multiple declaration 3040 -- case as a sequence of single specifications, using the More_Ids and 3041 -- Prev_Ids flags to preserve the original source form as described 3042 -- in the section on "Handling of Defining Identifier Lists". 3043 3044 -- N_Discriminant_Specification 3045 -- Sloc points to first identifier 3046 -- Defining_Identifier (Node1) 3047 -- Null_Exclusion_Present (Flag11) 3048 -- Discriminant_Type (Node5) subtype mark or access parameter definition 3049 -- Expression (Node3) (set to Empty if no default expression) 3050 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3051 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3052 3053 ----------------------------- 3054 -- 3.7 Default Expression -- 3055 ----------------------------- 3056 3057 -- DEFAULT_EXPRESSION ::= EXPRESSION 3058 3059 ------------------------------------ 3060 -- 3.7.1 Discriminant Constraint -- 3061 ------------------------------------ 3062 3063 -- DISCRIMINANT_CONSTRAINT ::= 3064 -- (DISCRIMINANT_ASSOCIATION {, DISCRIMINANT_ASSOCIATION}) 3065 3066 -- It is not in general possible to distinguish between discriminant 3067 -- constraints and index constraints at parse time, since a simple 3068 -- name could be either the subtype mark of a discrete range, or an 3069 -- expression in a discriminant association with no name. Either 3070 -- entry appears simply as the name, and the semantic parse must 3071 -- distinguish between the two cases. Thus we use a common tree 3072 -- node format for both of these constraint types. 3073 3074 -- N_Index_Or_Discriminant_Constraint 3075 -- Sloc points to left paren 3076 -- Constraints (List1) points to list of discrete ranges or 3077 -- discriminant associations 3078 3079 ------------------------------------- 3080 -- 3.7.1 Discriminant Association -- 3081 ------------------------------------- 3082 3083 -- DISCRIMINANT_ASSOCIATION ::= 3084 -- [discriminant_SELECTOR_NAME 3085 -- {| discriminant_SELECTOR_NAME} =>] EXPRESSION 3086 3087 -- Note: a discriminant association that has no selector name list 3088 -- appears directly as an expression in the tree. 3089 3090 -- N_Discriminant_Association 3091 -- Sloc points to first token of discriminant association 3092 -- Selector_Names (List1) (always non-empty, since if no selector 3093 -- names are present, this node is not used, see comment above) 3094 -- Expression (Node3) 3095 3096 --------------------------------- 3097 -- 3.8 Record Type Definition -- 3098 --------------------------------- 3099 3100 -- RECORD_TYPE_DEFINITION ::= 3101 -- [[abstract] tagged] [limited] RECORD_DEFINITION 3102 3103 -- Note: ABSTRACT, TAGGED, LIMITED are not permitted in Ada 83 mode 3104 3105 -- There is no explicit node in the tree for a record type definition. 3106 -- Instead the flags for Tagged_Present and Limited_Present appear in 3107 -- the N_Record_Definition node for a record definition appearing in 3108 -- the context of a record type definition. 3109 3110 ---------------------------- 3111 -- 3.8 Record Definition -- 3112 ---------------------------- 3113 3114 -- RECORD_DEFINITION ::= 3115 -- record 3116 -- COMPONENT_LIST 3117 -- end record 3118 -- | null record 3119 3120 -- Note: the Abstract_Present, Tagged_Present and Limited_Present 3121 -- flags appear only for a record definition appearing in a record 3122 -- type definition. 3123 3124 -- Note: the NULL RECORD case is not permitted in Ada 83 3125 3126 -- N_Record_Definition 3127 -- Sloc points to RECORD or NULL 3128 -- End_Label (Node4) (set to Empty if internally generated record) 3129 -- Abstract_Present (Flag4) 3130 -- Tagged_Present (Flag15) 3131 -- Limited_Present (Flag17) 3132 -- Component_List (Node1) empty in null record case 3133 -- Null_Present (Flag13) set in null record case 3134 -- Task_Present (Flag5) set in task interfaces 3135 -- Protected_Present (Flag6) set in protected interfaces 3136 -- Synchronized_Present (Flag7) set in interfaces 3137 -- Interface_Present (Flag16) set in abstract interfaces 3138 -- Interface_List (List2) (set to No_List if none) 3139 3140 -- Note: Task_Present, Protected_Present, Synchronized _Present, 3141 -- Interface_List and Interface_Present are used for abstract 3142 -- interfaces (see comments for INTERFACE_TYPE_DEFINITION). 3143 3144 ------------------------- 3145 -- 3.8 Component List -- 3146 ------------------------- 3147 3148 -- COMPONENT_LIST ::= 3149 -- COMPONENT_ITEM {COMPONENT_ITEM} 3150 -- | {COMPONENT_ITEM} VARIANT_PART 3151 -- | null; 3152 3153 -- N_Component_List 3154 -- Sloc points to first token of component list 3155 -- Component_Items (List3) 3156 -- Variant_Part (Node4) (set to Empty if no variant part) 3157 -- Null_Present (Flag13) 3158 3159 ------------------------- 3160 -- 3.8 Component Item -- 3161 ------------------------- 3162 3163 -- COMPONENT_ITEM ::= COMPONENT_DECLARATION | REPRESENTATION_CLAUSE 3164 3165 -- Note: A component item can also be a pragma, and in the tree 3166 -- that is obtained after semantic processing, a component item 3167 -- can be an N_Null node resulting from a non-recognized pragma. 3168 3169 -------------------------------- 3170 -- 3.8 Component Declaration -- 3171 -------------------------------- 3172 3173 -- COMPONENT_DECLARATION ::= 3174 -- DEFINING_IDENTIFIER_LIST : COMPONENT_DEFINITION 3175 -- [:= DEFAULT_EXPRESSION] 3176 -- [ASPECT_SPECIFICATIONS]; 3177 3178 -- Note: although the syntax does not permit a component definition to 3179 -- be an anonymous array (and the parser will diagnose such an attempt 3180 -- with an appropriate message), it is possible for anonymous arrays 3181 -- to appear as component definitions. The semantics and back end handle 3182 -- this case properly, and the expander in fact generates such cases. 3183 3184 -- Although the syntax allows multiple identifiers in the list, the 3185 -- semantics is as though successive declarations were given with the 3186 -- same component definition and expression components. To simplify 3187 -- semantic processing, the parser represents a multiple declaration 3188 -- case as a sequence of single declarations, using the More_Ids and 3189 -- Prev_Ids flags to preserve the original source form as described 3190 -- in the section on "Handling of Defining Identifier Lists". 3191 3192 -- N_Component_Declaration 3193 -- Sloc points to first identifier 3194 -- Defining_Identifier (Node1) 3195 -- Component_Definition (Node4) 3196 -- Expression (Node3) (set to Empty if no default expression) 3197 -- More_Ids (Flag5) (set to False if no more identifiers in list) 3198 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 3199 3200 ------------------------- 3201 -- 3.8.1 Variant Part -- 3202 ------------------------- 3203 3204 -- VARIANT_PART ::= 3205 -- case discriminant_DIRECT_NAME is 3206 -- VARIANT {VARIANT} 3207 -- end case; 3208 3209 -- Note: the variants list can contain pragmas as well as variants. 3210 -- In a properly formed program there is at least one variant. 3211 3212 -- N_Variant_Part 3213 -- Sloc points to CASE 3214 -- Name (Node2) 3215 -- Variants (List1) 3216 3217 -------------------- 3218 -- 3.8.1 Variant -- 3219 -------------------- 3220 3221 -- VARIANT ::= 3222 -- when DISCRETE_CHOICE_LIST => 3223 -- COMPONENT_LIST 3224 3225 -- N_Variant 3226 -- Sloc points to WHEN 3227 -- Discrete_Choices (List4) 3228 -- Component_List (Node1) 3229 -- Enclosing_Variant (Node2-Sem) 3230 -- Present_Expr (Uint3-Sem) 3231 -- Dcheck_Function (Node5-Sem) 3232 -- Has_SP_Choice (Flag15-Sem) 3233 3234 -- Note: in the list of Discrete_Choices, the tree passed to the back 3235 -- end does not have choice entries corresponding to names of statically 3236 -- predicated subtypes. Such entries are always expanded out to the list 3237 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 3238 -- mode also has this expansion, but done with a proper Rewrite call on 3239 -- the N_Variant node so that ASIS can properly retrieve the original. 3240 3241 --------------------------------- 3242 -- 3.8.1 Discrete Choice List -- 3243 --------------------------------- 3244 3245 -- DISCRETE_CHOICE_LIST ::= DISCRETE_CHOICE {| DISCRETE_CHOICE} 3246 3247 ---------------------------- 3248 -- 3.8.1 Discrete Choice -- 3249 ---------------------------- 3250 3251 -- DISCRETE_CHOICE ::= EXPRESSION | DISCRETE_RANGE | others 3252 3253 -- Note: in Ada 83 mode, the expression must be a simple expression 3254 3255 -- The only choice that appears explicitly is the OTHERS choice, as 3256 -- defined here. Other cases of discrete choice (expression and 3257 -- discrete range) appear directly. This production is also used 3258 -- for the OTHERS possibility of an exception choice. 3259 3260 -- Note: in accordance with the syntax, the parser does not check that 3261 -- OTHERS appears at the end on its own in a choice list context. This 3262 -- is a semantic check. 3263 3264 -- N_Others_Choice 3265 -- Sloc points to OTHERS 3266 -- Others_Discrete_Choices (List1-Sem) 3267 -- All_Others (Flag11-Sem) 3268 3269 ---------------------------------- 3270 -- 3.9.1 Record Extension Part -- 3271 ---------------------------------- 3272 3273 -- RECORD_EXTENSION_PART ::= with RECORD_DEFINITION 3274 3275 -- Note: record extension parts are not permitted in Ada 83 mode 3276 3277 -------------------------------------- 3278 -- 3.9.4 Interface Type Definition -- 3279 -------------------------------------- 3280 3281 -- INTERFACE_TYPE_DEFINITION ::= 3282 -- [limited | task | protected | synchronized] 3283 -- interface [interface_list] 3284 3285 -- Note: Interfaces are implemented with N_Record_Definition and 3286 -- N_Derived_Type_Definition nodes because most of the support 3287 -- for the analysis of abstract types has been reused to 3288 -- analyze abstract interfaces. 3289 3290 ---------------------------------- 3291 -- 3.10 Access Type Definition -- 3292 ---------------------------------- 3293 3294 -- ACCESS_TYPE_DEFINITION ::= 3295 -- ACCESS_TO_OBJECT_DEFINITION 3296 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3297 3298 -------------------------- 3299 -- 3.10 Null Exclusion -- 3300 -------------------------- 3301 3302 -- NULL_EXCLUSION ::= not null 3303 3304 --------------------------------------- 3305 -- 3.10 Access To Object Definition -- 3306 --------------------------------------- 3307 3308 -- ACCESS_TO_OBJECT_DEFINITION ::= 3309 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] 3310 -- SUBTYPE_INDICATION 3311 3312 -- N_Access_To_Object_Definition 3313 -- Sloc points to ACCESS 3314 -- All_Present (Flag15) 3315 -- Null_Exclusion_Present (Flag11) 3316 -- Subtype_Indication (Node5) 3317 -- Constant_Present (Flag17) 3318 3319 ----------------------------------- 3320 -- 3.10 General Access Modifier -- 3321 ----------------------------------- 3322 3323 -- GENERAL_ACCESS_MODIFIER ::= all | constant 3324 3325 -- Note: general access modifiers are not permitted in Ada 83 mode 3326 3327 -- There is no explicit node in the tree for general access modifier. 3328 -- Instead the All_Present or Constant_Present flags are set in the 3329 -- parent node. 3330 3331 ------------------------------------------- 3332 -- 3.10 Access To Subprogram Definition -- 3333 ------------------------------------------- 3334 3335 -- ACCESS_TO_SUBPROGRAM_DEFINITION 3336 -- [NULL_EXCLUSION] access [protected] procedure PARAMETER_PROFILE 3337 -- | [NULL_EXCLUSION] access [protected] function 3338 -- PARAMETER_AND_RESULT_PROFILE 3339 3340 -- Note: access to subprograms are not permitted in Ada 83 mode 3341 3342 -- N_Access_Function_Definition 3343 -- Sloc points to ACCESS 3344 -- Null_Exclusion_Present (Flag11) 3345 -- Null_Exclusion_In_Return_Present (Flag14) 3346 -- Protected_Present (Flag6) 3347 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3348 -- Result_Definition (Node4) result subtype (subtype mark or access def) 3349 3350 -- N_Access_Procedure_Definition 3351 -- Sloc points to ACCESS 3352 -- Null_Exclusion_Present (Flag11) 3353 -- Protected_Present (Flag6) 3354 -- Parameter_Specifications (List3) (set to No_List if no formal part) 3355 3356 ----------------------------- 3357 -- 3.10 Access Definition -- 3358 ----------------------------- 3359 3360 -- ACCESS_DEFINITION ::= 3361 -- [NULL_EXCLUSION] access [GENERAL_ACCESS_MODIFIER] SUBTYPE_MARK 3362 -- | ACCESS_TO_SUBPROGRAM_DEFINITION 3363 3364 -- Note: access to subprograms are an Ada 2005 (AI-254) extension 3365 3366 -- N_Access_Definition 3367 -- Sloc points to ACCESS 3368 -- Null_Exclusion_Present (Flag11) 3369 -- All_Present (Flag15) 3370 -- Constant_Present (Flag17) 3371 -- Subtype_Mark (Node4) 3372 -- Access_To_Subprogram_Definition (Node3) (set to Empty if not present) 3373 3374 ----------------------------------------- 3375 -- 3.10.1 Incomplete Type Declaration -- 3376 ----------------------------------------- 3377 3378 -- INCOMPLETE_TYPE_DECLARATION ::= 3379 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [IS TAGGED]; 3380 3381 -- N_Incomplete_Type_Declaration 3382 -- Sloc points to TYPE 3383 -- Defining_Identifier (Node1) 3384 -- Discriminant_Specifications (List4) (set to No_List if no 3385 -- discriminant part, or if the discriminant part is an 3386 -- unknown discriminant part) 3387 -- Premature_Use (Node5-Sem) used for improved diagnostics. 3388 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 3389 -- Tagged_Present (Flag15) 3390 3391 ---------------------------- 3392 -- 3.11 Declarative Part -- 3393 ---------------------------- 3394 3395 -- DECLARATIVE_PART ::= {DECLARATIVE_ITEM} 3396 3397 -- Note: although the parser enforces the syntactic requirement that 3398 -- a declarative part can contain only declarations, the semantic 3399 -- processing may add statements to the list of actions in a 3400 -- declarative part, so the code generator should be prepared 3401 -- to accept a statement in this position. 3402 3403 ---------------------------- 3404 -- 3.11 Declarative Item -- 3405 ---------------------------- 3406 3407 -- DECLARATIVE_ITEM ::= BASIC_DECLARATIVE_ITEM | BODY 3408 3409 ---------------------------------- 3410 -- 3.11 Basic Declarative Item -- 3411 ---------------------------------- 3412 3413 -- BASIC_DECLARATIVE_ITEM ::= 3414 -- BASIC_DECLARATION | REPRESENTATION_CLAUSE | USE_CLAUSE 3415 3416 ---------------- 3417 -- 3.11 Body -- 3418 ---------------- 3419 3420 -- BODY ::= PROPER_BODY | BODY_STUB 3421 3422 ----------------------- 3423 -- 3.11 Proper Body -- 3424 ----------------------- 3425 3426 -- PROPER_BODY ::= 3427 -- SUBPROGRAM_BODY | PACKAGE_BODY | TASK_BODY | PROTECTED_BODY 3428 3429 --------------- 3430 -- 4.1 Name -- 3431 --------------- 3432 3433 -- NAME ::= 3434 -- DIRECT_NAME | EXPLICIT_DEREFERENCE 3435 -- | INDEXED_COMPONENT | SLICE 3436 -- | SELECTED_COMPONENT | ATTRIBUTE_REFERENCE 3437 -- | TYPE_CONVERSION | FUNCTION_CALL 3438 -- | CHARACTER_LITERAL 3439 3440 ---------------------- 3441 -- 4.1 Direct Name -- 3442 ---------------------- 3443 3444 -- DIRECT_NAME ::= IDENTIFIER | OPERATOR_SYMBOL 3445 3446 ----------------- 3447 -- 4.1 Prefix -- 3448 ----------------- 3449 3450 -- PREFIX ::= NAME | IMPLICIT_DEREFERENCE 3451 3452 ------------------------------- 3453 -- 4.1 Explicit Dereference -- 3454 ------------------------------- 3455 3456 -- EXPLICIT_DEREFERENCE ::= NAME . all 3457 3458 -- N_Explicit_Dereference 3459 -- Sloc points to ALL 3460 -- Prefix (Node3) 3461 -- Actual_Designated_Subtype (Node4-Sem) 3462 -- Atomic_Sync_Required (Flag14-Sem) 3463 -- Has_Dereference_Action (Flag13-Sem) 3464 -- plus fields for expression 3465 3466 ------------------------------- 3467 -- 4.1 Implicit Dereference -- 3468 ------------------------------- 3469 3470 -- IMPLICIT_DEREFERENCE ::= NAME 3471 3472 ------------------------------ 3473 -- 4.1.1 Indexed Component -- 3474 ------------------------------ 3475 3476 -- INDEXED_COMPONENT ::= PREFIX (EXPRESSION {, EXPRESSION}) 3477 3478 -- Note: the parser may generate this node in some situations where it 3479 -- should be a function call. The semantic pass must correct this 3480 -- misidentification (which is inevitable at the parser level). 3481 3482 -- N_Indexed_Component 3483 -- Sloc contains a copy of the Sloc value of the Prefix 3484 -- Prefix (Node3) 3485 -- Expressions (List1) 3486 -- Generalized_Indexing (Node4-Sem) 3487 -- Atomic_Sync_Required (Flag14-Sem) 3488 -- plus fields for expression 3489 3490 -- Note: if any of the subscripts requires a range check, then the 3491 -- Do_Range_Check flag is set on the corresponding expression, with 3492 -- the index type being determined from the type of the Prefix, which 3493 -- references the array being indexed. 3494 3495 -- Note: in a fully analyzed and expanded indexed component node, and 3496 -- hence in any such node that gigi sees, if the prefix is an access 3497 -- type, then an explicit dereference operation has been inserted. 3498 3499 ------------------ 3500 -- 4.1.2 Slice -- 3501 ------------------ 3502 3503 -- SLICE ::= PREFIX (DISCRETE_RANGE) 3504 3505 -- Note: an implicit subtype is created to describe the resulting 3506 -- type, so that the bounds of this type are the bounds of the slice. 3507 3508 -- N_Slice 3509 -- Sloc points to first token of prefix 3510 -- Prefix (Node3) 3511 -- Discrete_Range (Node4) 3512 -- plus fields for expression 3513 3514 ------------------------------- 3515 -- 4.1.3 Selected Component -- 3516 ------------------------------- 3517 3518 -- SELECTED_COMPONENT ::= PREFIX . SELECTOR_NAME 3519 3520 -- Note: selected components that are semantically expanded names get 3521 -- changed during semantic processing into the separate N_Expanded_Name 3522 -- node. See description of this node in the section on semantic nodes. 3523 3524 -- N_Selected_Component 3525 -- Sloc points to period 3526 -- Prefix (Node3) 3527 -- Selector_Name (Node2) 3528 -- Associated_Node (Node4-Sem) 3529 -- Do_Discriminant_Check (Flag1-Sem) 3530 -- Is_In_Discriminant_Check (Flag11-Sem) 3531 -- Is_Prefixed_Call (Flag17-Sem) 3532 -- Atomic_Sync_Required (Flag14-Sem) 3533 -- plus fields for expression 3534 3535 -------------------------- 3536 -- 4.1.3 Selector Name -- 3537 -------------------------- 3538 3539 -- SELECTOR_NAME ::= IDENTIFIER | CHARACTER_LITERAL | OPERATOR_SYMBOL 3540 3541 -------------------------------- 3542 -- 4.1.4 Attribute Reference -- 3543 -------------------------------- 3544 3545 -- ATTRIBUTE_REFERENCE ::= PREFIX ' ATTRIBUTE_DESIGNATOR 3546 3547 -- Note: the syntax is quite ambiguous at this point. Consider: 3548 3549 -- A'Length (X) X is part of the attribute designator 3550 -- A'Pos (X) X is an explicit actual parameter of function A'Pos 3551 -- A'Class (X) X is the expression of a type conversion 3552 3553 -- It would be possible for the parser to distinguish these cases 3554 -- by looking at the attribute identifier. However, that would mean 3555 -- more work in introducing new implementation defined attributes, 3556 -- and also it would mean that special processing for attributes 3557 -- would be scattered around, instead of being centralized in the 3558 -- semantic routine that handles an N_Attribute_Reference node. 3559 -- Consequently, the parser in all the above cases stores the 3560 -- expression (X in these examples) as a single element list in 3561 -- in the Expressions field of the N_Attribute_Reference node. 3562 3563 -- Similarly, for attributes like Max which take two arguments, 3564 -- we store the two arguments as a two element list in the 3565 -- Expressions field. Of course it is clear at parse time that 3566 -- this case is really a function call with an attribute as the 3567 -- prefix, but it turns out to be convenient to handle the two 3568 -- argument case in a similar manner to the one argument case, 3569 -- and indeed in general the parser will accept any number of 3570 -- expressions in this position and store them as a list in the 3571 -- attribute reference node. This allows for future addition of 3572 -- attributes that take more than two arguments. 3573 3574 -- Note: named associates are not permitted in function calls where 3575 -- the function is an attribute (see RM 6.4(3)) so it is legitimate 3576 -- to skip the normal subprogram argument processing. 3577 3578 -- Note: for the attributes whose designators are technically keywords, 3579 -- i.e. digits, access, delta, range, the Attribute_Name field contains 3580 -- the corresponding name, even though no identifier is involved. 3581 3582 -- Note: the generated code may contain stream attributes applied to 3583 -- limited types for which no stream routines exist officially. In such 3584 -- case, the result is to use the stream attribute for the underlying 3585 -- full type, or in the case of a protected type, the components 3586 -- (including any discriminants) are merely streamed in order. 3587 3588 -- See Exp_Attr for a complete description of which attributes are 3589 -- passed onto Gigi, and which are handled entirely by the front end. 3590 3591 -- Gigi restriction: For the Pos attribute, the prefix cannot be 3592 -- a non-standard enumeration type or a nonzero/zero semantics 3593 -- boolean type, so the value is simply the stored representation. 3594 3595 -- Gigi requirement: For the Mechanism_Code attribute, if the prefix 3596 -- references a subprogram that is a renaming, then the front end must 3597 -- rewrite the attribute to refer directly to the renamed entity. 3598 3599 -- Note: In generated code, the Address and Unrestricted_Access 3600 -- attributes can be applied to any expression, and the meaning is 3601 -- to create an object containing the value (the object is in the 3602 -- current stack frame), and pass the address of this value. If the 3603 -- Must_Be_Byte_Aligned flag is set, then the object whose address 3604 -- is taken must be on a byte (storage unit) boundary, and if it is 3605 -- not (or may not be), then the generated code must create a copy 3606 -- that is byte aligned, and pass the address of this copy. 3607 3608 -- N_Attribute_Reference 3609 -- Sloc points to apostrophe 3610 -- Prefix (Node3) 3611 -- Attribute_Name (Name2) identifier name from attribute designator 3612 -- Expressions (List1) (set to No_List if no associated expressions) 3613 -- Entity (Node4-Sem) used if the attribute yields a type 3614 -- Associated_Node (Node4-Sem) 3615 -- Do_Overflow_Check (Flag17-Sem) 3616 -- Header_Size_Added (Flag11-Sem) 3617 -- Redundant_Use (Flag13-Sem) 3618 -- Must_Be_Byte_Aligned (Flag14) 3619 -- plus fields for expression 3620 3621 -- Note: in Modify_Tree_For_C mode, Max and Min attributes are expanded 3622 -- into equivalent if expressions, properly taking care of side effects. 3623 3624 --------------------------------- 3625 -- 4.1.4 Attribute Designator -- 3626 --------------------------------- 3627 3628 -- ATTRIBUTE_DESIGNATOR ::= 3629 -- IDENTIFIER [(static_EXPRESSION)] 3630 -- | access | delta | digits 3631 3632 -- There is no explicit node in the tree for an attribute designator. 3633 -- Instead the Attribute_Name and Expressions fields of the parent 3634 -- node (N_Attribute_Reference node) hold the information. 3635 3636 -- Note: if ACCESS, DELTA or DIGITS appears in an attribute 3637 -- designator, then they are treated as identifiers internally 3638 -- rather than the keywords of the same name. 3639 3640 -------------------------------------- 3641 -- 4.1.4 Range Attribute Reference -- 3642 -------------------------------------- 3643 3644 -- RANGE_ATTRIBUTE_REFERENCE ::= PREFIX ' RANGE_ATTRIBUTE_DESIGNATOR 3645 3646 -- A range attribute reference is represented in the tree using the 3647 -- normal N_Attribute_Reference node. 3648 3649 --------------------------------------- 3650 -- 4.1.4 Range Attribute Designator -- 3651 --------------------------------------- 3652 3653 -- RANGE_ATTRIBUTE_DESIGNATOR ::= Range [(static_EXPRESSION)] 3654 3655 -- A range attribute designator is represented in the tree using the 3656 -- normal N_Attribute_Reference node. 3657 3658 -------------------- 3659 -- 4.3 Aggregate -- 3660 -------------------- 3661 3662 -- AGGREGATE ::= 3663 -- RECORD_AGGREGATE | EXTENSION_AGGREGATE | ARRAY_AGGREGATE 3664 3665 ----------------------------- 3666 -- 4.3.1 Record Aggregate -- 3667 ----------------------------- 3668 3669 -- RECORD_AGGREGATE ::= (RECORD_COMPONENT_ASSOCIATION_LIST) 3670 3671 -- N_Aggregate 3672 -- Sloc points to left parenthesis 3673 -- Expressions (List1) (set to No_List if none or null record case) 3674 -- Component_Associations (List2) (set to No_List if none) 3675 -- Null_Record_Present (Flag17) 3676 -- Aggregate_Bounds (Node3-Sem) 3677 -- Associated_Node (Node4-Sem) 3678 -- Compile_Time_Known_Aggregate (Flag18-Sem) 3679 -- Expansion_Delayed (Flag11-Sem) 3680 -- Has_Self_Reference (Flag13-Sem) 3681 -- plus fields for expression 3682 3683 -- Note: this structure is used for both record and array aggregates 3684 -- since the two cases are not separable by the parser. The parser 3685 -- makes no attempt to enforce consistency here, so it is up to the 3686 -- semantic phase to make sure that the aggregate is consistent (i.e. 3687 -- that it is not a "half-and-half" case that mixes record and array 3688 -- syntax. In particular, for a record aggregate, the expressions 3689 -- field will be set if there are positional associations. 3690 3691 -- Note: N_Aggregate is not used for all aggregates; in particular, 3692 -- there is a separate node kind for extension aggregates. 3693 3694 -- Note: gigi/gcc can handle array aggregates correctly providing that 3695 -- they are entirely positional, and the array subtype involved has a 3696 -- known at compile time length and is not bit packed, or a convention 3697 -- Fortran array with more than one dimension. If these conditions 3698 -- are not met, then the front end must translate the aggregate into 3699 -- an appropriate set of assignments into a temporary. 3700 3701 -- Note: for the record aggregate case, gigi/gcc can handle all cases of 3702 -- record aggregates, including those for packed, and rep-claused 3703 -- records, and also variant records, providing that there are no 3704 -- variable length fields whose size is not known at compile time, and 3705 -- providing that the aggregate is presented in fully named form. 3706 3707 ---------------------------------------------- 3708 -- 4.3.1 Record Component Association List -- 3709 ---------------------------------------------- 3710 3711 -- RECORD_COMPONENT_ASSOCIATION_LIST ::= 3712 -- RECORD_COMPONENT_ASSOCIATION {, RECORD_COMPONENT_ASSOCIATION} 3713 -- | null record 3714 3715 -- There is no explicit node in the tree for a record component 3716 -- association list. Instead the Null_Record_Present flag is set in 3717 -- the parent node for the NULL RECORD case. 3718 3719 ------------------------------------------------------ 3720 -- 4.3.1 Record Component Association (also 4.3.3) -- 3721 ------------------------------------------------------ 3722 3723 -- RECORD_COMPONENT_ASSOCIATION ::= 3724 -- [COMPONENT_CHOICE_LIST =>] EXPRESSION 3725 3726 -- N_Component_Association 3727 -- Sloc points to first selector name 3728 -- Choices (List1) 3729 -- Loop_Actions (List2-Sem) 3730 -- Expression (Node3) (empty if Box_Present) 3731 -- Box_Present (Flag15) 3732 -- Inherited_Discriminant (Flag13) 3733 3734 -- Note: this structure is used for both record component associations 3735 -- and array component associations, since the two cases aren't always 3736 -- separable by the parser. The choices list may represent either a 3737 -- list of selector names in the record aggregate case, or a list of 3738 -- discrete choices in the array aggregate case or an N_Others_Choice 3739 -- node (which appears as a singleton list). Box_Present gives support 3740 -- to Ada 2005 (AI-287). 3741 3742 ---------------------------------- 3743 -- 4.3.1 Component Choice List -- 3744 ---------------------------------- 3745 3746 -- COMPONENT_CHOICE_LIST ::= 3747 -- component_SELECTOR_NAME {| component_SELECTOR_NAME} 3748 -- | others 3749 3750 -- The entries of a component choice list appear in the Choices list of 3751 -- the associated N_Component_Association, as either selector names, or 3752 -- as an N_Others_Choice node. 3753 3754 -------------------------------- 3755 -- 4.3.2 Extension Aggregate -- 3756 -------------------------------- 3757 3758 -- EXTENSION_AGGREGATE ::= 3759 -- (ANCESTOR_PART with RECORD_COMPONENT_ASSOCIATION_LIST) 3760 3761 -- Note: extension aggregates are not permitted in Ada 83 mode 3762 3763 -- N_Extension_Aggregate 3764 -- Sloc points to left parenthesis 3765 -- Ancestor_Part (Node3) 3766 -- Associated_Node (Node4-Sem) 3767 -- Expressions (List1) (set to No_List if none or null record case) 3768 -- Component_Associations (List2) (set to No_List if none) 3769 -- Null_Record_Present (Flag17) 3770 -- Expansion_Delayed (Flag11-Sem) 3771 -- Has_Self_Reference (Flag13-Sem) 3772 -- plus fields for expression 3773 3774 -------------------------- 3775 -- 4.3.2 Ancestor Part -- 3776 -------------------------- 3777 3778 -- ANCESTOR_PART ::= EXPRESSION | SUBTYPE_MARK 3779 3780 ---------------------------- 3781 -- 4.3.3 Array Aggregate -- 3782 ---------------------------- 3783 3784 -- ARRAY_AGGREGATE ::= 3785 -- POSITIONAL_ARRAY_AGGREGATE | NAMED_ARRAY_AGGREGATE 3786 3787 --------------------------------------- 3788 -- 4.3.3 Positional Array Aggregate -- 3789 --------------------------------------- 3790 3791 -- POSITIONAL_ARRAY_AGGREGATE ::= 3792 -- (EXPRESSION, EXPRESSION {, EXPRESSION}) 3793 -- | (EXPRESSION {, EXPRESSION}, others => EXPRESSION) 3794 3795 -- See Record_Aggregate (4.3.1) for node structure 3796 3797 ---------------------------------- 3798 -- 4.3.3 Named Array Aggregate -- 3799 ---------------------------------- 3800 3801 -- NAMED_ARRAY_AGGREGATE ::= 3802 -- | (ARRAY_COMPONENT_ASSOCIATION {, ARRAY_COMPONENT_ASSOCIATION}) 3803 3804 -- See Record_Aggregate (4.3.1) for node structure 3805 3806 ---------------------------------------- 3807 -- 4.3.3 Array Component Association -- 3808 ---------------------------------------- 3809 3810 -- ARRAY_COMPONENT_ASSOCIATION ::= 3811 -- DISCRETE_CHOICE_LIST => EXPRESSION 3812 3813 -- See Record_Component_Association (4.3.1) for node structure 3814 3815 -------------------------------------------------- 3816 -- 4.4 Expression/Relation/Term/Factor/Primary -- 3817 -------------------------------------------------- 3818 3819 -- EXPRESSION ::= 3820 -- RELATION {LOGICAL_OPERATOR RELATION} 3821 3822 -- CHOICE_EXPRESSION ::= 3823 -- CHOICE_RELATION {LOGICAL_OPERATOR CHOICE_RELATION} 3824 3825 -- CHOICE_RELATION ::= 3826 -- SIMPLE_EXPRESSION [RELATIONAL_OPERATOR SIMPLE_EXPRESSION] 3827 3828 -- RELATION ::= 3829 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 3830 -- | RAISE_EXPRESSION 3831 3832 -- MEMBERSHIP_CHOICE_LIST ::= 3833 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 3834 3835 -- MEMBERSHIP_CHOICE ::= 3836 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 3837 3838 -- LOGICAL_OPERATOR ::= and | and then | or | or else | xor 3839 3840 -- SIMPLE_EXPRESSION ::= 3841 -- [UNARY_ADDING_OPERATOR] TERM {BINARY_ADDING_OPERATOR TERM} 3842 3843 -- TERM ::= FACTOR {MULTIPLYING_OPERATOR FACTOR} 3844 3845 -- FACTOR ::= PRIMARY [** PRIMARY] | abs PRIMARY | not PRIMARY 3846 3847 -- No nodes are generated for any of these constructs. Instead, the 3848 -- node for the operator appears directly. When we refer to an 3849 -- expression in this description, we mean any of the possible 3850 -- constituent components of an expression (e.g. identifier is 3851 -- an example of an expression). 3852 3853 -- Note: the above syntax is that Ada 2012 syntax which restricts 3854 -- choice relations to simple expressions to avoid ambiguities in 3855 -- some contexts with set membership notation. It has been decided 3856 -- that in retrospect, the Ada 95 change allowing general expressions 3857 -- in this context was a mistake, so we have reverted to the above 3858 -- syntax in Ada 95 and Ada 2005 modes (the restriction to simple 3859 -- expressions was there in Ada 83 from the start). 3860 3861 ------------------ 3862 -- 4.4 Primary -- 3863 ------------------ 3864 3865 -- PRIMARY ::= 3866 -- NUMERIC_LITERAL | null 3867 -- | STRING_LITERAL | AGGREGATE 3868 -- | NAME | QUALIFIED_EXPRESSION 3869 -- | ALLOCATOR | (EXPRESSION) 3870 3871 -- Usually there is no explicit node in the tree for primary. Instead 3872 -- the constituent (e.g. AGGREGATE) appears directly. There are two 3873 -- exceptions. First, there is an explicit node for a null primary. 3874 3875 -- N_Null 3876 -- Sloc points to NULL 3877 -- plus fields for expression 3878 3879 -- Second, the case of (EXPRESSION) is handled specially. Ada requires 3880 -- that the parser keep track of which subexpressions are enclosed 3881 -- in parentheses, and how many levels of parentheses are used. This 3882 -- information is required for optimization purposes, and also for 3883 -- some semantic checks (e.g. (((1))) in a procedure spec does not 3884 -- conform with ((((1)))) in the body). 3885 3886 -- The parentheses are recorded by keeping a Paren_Count field in every 3887 -- subexpression node (it is actually present in all nodes, but only 3888 -- used in subexpression nodes). This count records the number of 3889 -- levels of parentheses. If the number of levels in the source exceeds 3890 -- the maximum accommodated by this count, then the count is simply left 3891 -- at the maximum value. This means that there are some pathological 3892 -- cases of failure to detect conformance failures (e.g. an expression 3893 -- with 500 levels of parens will conform with one with 501 levels), 3894 -- but we do not need to lose sleep over this. 3895 3896 -- Historical note: in versions of GNAT prior to 1.75, there was a node 3897 -- type N_Parenthesized_Expression used to accurately record unlimited 3898 -- numbers of levels of parentheses. However, it turned out to be a 3899 -- real nuisance to have to take into account the possible presence of 3900 -- this node during semantic analysis, since basically parentheses have 3901 -- zero relevance to semantic analysis. 3902 3903 -- Note: the level of parentheses always present in things like 3904 -- aggregates does not count, only the parentheses in the primary 3905 -- (EXPRESSION) affect the setting of the Paren_Count field. 3906 3907 -- 2nd Note: the contents of the Expression field must be ignored (i.e. 3908 -- treated as though it were Empty) if No_Initialization is set True. 3909 3910 -------------------------------------- 3911 -- 4.5 Short Circuit Control Forms -- 3912 -------------------------------------- 3913 3914 -- EXPRESSION ::= 3915 -- RELATION {and then RELATION} | RELATION {or else RELATION} 3916 3917 -- Gigi restriction: For both these control forms, the operand and 3918 -- result types are always Standard.Boolean. The expander inserts the 3919 -- required conversion operations where needed to ensure this is the 3920 -- case. 3921 3922 -- N_And_Then 3923 -- Sloc points to AND of AND THEN 3924 -- Left_Opnd (Node2) 3925 -- Right_Opnd (Node3) 3926 -- Actions (List1-Sem) 3927 -- plus fields for expression 3928 3929 -- N_Or_Else 3930 -- Sloc points to OR of OR ELSE 3931 -- Left_Opnd (Node2) 3932 -- Right_Opnd (Node3) 3933 -- Actions (List1-Sem) 3934 -- plus fields for expression 3935 3936 -- Note: The Actions field is used to hold actions associated with 3937 -- the right hand operand. These have to be treated specially since 3938 -- they are not unconditionally executed. See Insert_Actions for a 3939 -- more detailed description of how these actions are handled. 3940 3941 --------------------------- 3942 -- 4.5 Membership Tests -- 3943 --------------------------- 3944 3945 -- RELATION ::= 3946 -- SIMPLE_EXPRESSION [not] in MEMBERSHIP_CHOICE_LIST 3947 3948 -- MEMBERSHIP_CHOICE_LIST ::= 3949 -- MEMBERSHIP_CHOICE {'|' MEMBERSHIP CHOICE} 3950 3951 -- MEMBERSHIP_CHOICE ::= 3952 -- CHOICE_EXPRESSION | RANGE | SUBTYPE_MARK 3953 3954 -- Note: although the grammar above allows only a range or a subtype 3955 -- mark, the parser in fact will accept any simple expression in place 3956 -- of a subtype mark. This means that the semantic analyzer must be able 3957 -- to deal with, and diagnose a simple expression other than a name for 3958 -- the right operand. This simplifies error recovery in the parser. 3959 3960 -- The Alternatives field below is present only if there is more 3961 -- than one Membership_Choice present (which is legitimate only in 3962 -- Ada 2012 mode) in which case Right_Opnd is Empty, and Alternatives 3963 -- contains the list of choices. In the tree passed to the back end, 3964 -- Alternatives is always No_List, and Right_Opnd is set (i.e. the 3965 -- expansion circuitry expands out the complex set membership case 3966 -- using simple membership operations). 3967 3968 -- Should we rename Alternatives here to Membership_Choices ??? 3969 3970 -- N_In 3971 -- Sloc points to IN 3972 -- Left_Opnd (Node2) 3973 -- Right_Opnd (Node3) 3974 -- Alternatives (List4) (set to No_List if only one set alternative) 3975 -- No_Minimize_Eliminate (Flag17) 3976 -- plus fields for expression 3977 3978 -- N_Not_In 3979 -- Sloc points to NOT of NOT IN 3980 -- Left_Opnd (Node2) 3981 -- Right_Opnd (Node3) 3982 -- Alternatives (List4) (set to No_List if only one set alternative) 3983 -- No_Minimize_Eliminate (Flag17) 3984 -- plus fields for expression 3985 3986 -------------------- 3987 -- 4.5 Operators -- 3988 -------------------- 3989 3990 -- LOGICAL_OPERATOR ::= and | or | xor 3991 3992 -- RELATIONAL_OPERATOR ::= = | /= | < | <= | > | >= 3993 3994 -- BINARY_ADDING_OPERATOR ::= + | - | & 3995 3996 -- UNARY_ADDING_OPERATOR ::= + | - 3997 3998 -- MULTIPLYING_OPERATOR ::= * | / | mod | rem 3999 4000 -- HIGHEST_PRECEDENCE_OPERATOR ::= ** | abs | not 4001 4002 -- Sprint syntax if Treat_Fixed_As_Integer is set: 4003 4004 -- x #* y 4005 -- x #/ y 4006 -- x #mod y 4007 -- x #rem y 4008 4009 -- Gigi restriction: For * / mod rem with fixed-point operands, Gigi 4010 -- will only be given nodes with the Treat_Fixed_As_Integer flag set. 4011 -- All handling of smalls for multiplication and division is handled 4012 -- by the front end (mod and rem result only from expansion). Gigi 4013 -- thus never needs to worry about small values (for other operators 4014 -- operating on fixed-point, e.g. addition, the small value does not 4015 -- have any semantic effect anyway, these are always integer operations. 4016 4017 -- Gigi restriction: For all operators taking Boolean operands, the 4018 -- type is always Standard.Boolean. The expander inserts the required 4019 -- conversion operations where needed to ensure this is the case. 4020 4021 -- N_Op_And 4022 -- Sloc points to AND 4023 -- Do_Length_Check (Flag4-Sem) 4024 -- plus fields for binary operator 4025 -- plus fields for expression 4026 4027 -- N_Op_Or 4028 -- Sloc points to OR 4029 -- Do_Length_Check (Flag4-Sem) 4030 -- plus fields for binary operator 4031 -- plus fields for expression 4032 4033 -- N_Op_Xor 4034 -- Sloc points to XOR 4035 -- Do_Length_Check (Flag4-Sem) 4036 -- plus fields for binary operator 4037 -- plus fields for expression 4038 4039 -- N_Op_Eq 4040 -- Sloc points to = 4041 -- plus fields for binary operator 4042 -- plus fields for expression 4043 4044 -- N_Op_Ne 4045 -- Sloc points to /= 4046 -- plus fields for binary operator 4047 -- plus fields for expression 4048 4049 -- N_Op_Lt 4050 -- Sloc points to < 4051 -- plus fields for binary operator 4052 -- plus fields for expression 4053 4054 -- N_Op_Le 4055 -- Sloc points to <= 4056 -- plus fields for binary operator 4057 -- plus fields for expression 4058 4059 -- N_Op_Gt 4060 -- Sloc points to > 4061 -- plus fields for binary operator 4062 -- plus fields for expression 4063 4064 -- N_Op_Ge 4065 -- Sloc points to >= 4066 -- plus fields for binary operator 4067 -- plus fields for expression 4068 4069 -- N_Op_Add 4070 -- Sloc points to + (binary) 4071 -- plus fields for binary operator 4072 -- plus fields for expression 4073 4074 -- N_Op_Subtract 4075 -- Sloc points to - (binary) 4076 -- plus fields for binary operator 4077 -- plus fields for expression 4078 4079 -- N_Op_Concat 4080 -- Sloc points to & 4081 -- Is_Component_Left_Opnd (Flag13-Sem) 4082 -- Is_Component_Right_Opnd (Flag14-Sem) 4083 -- plus fields for binary operator 4084 -- plus fields for expression 4085 4086 -- N_Op_Multiply 4087 -- Sloc points to * 4088 -- Treat_Fixed_As_Integer (Flag14-Sem) 4089 -- Rounded_Result (Flag18-Sem) 4090 -- plus fields for binary operator 4091 -- plus fields for expression 4092 4093 -- N_Op_Divide 4094 -- Sloc points to / 4095 -- Treat_Fixed_As_Integer (Flag14-Sem) 4096 -- Do_Division_Check (Flag13-Sem) 4097 -- Rounded_Result (Flag18-Sem) 4098 -- plus fields for binary operator 4099 -- plus fields for expression 4100 4101 -- N_Op_Mod 4102 -- Sloc points to MOD 4103 -- Treat_Fixed_As_Integer (Flag14-Sem) 4104 -- Do_Division_Check (Flag13-Sem) 4105 -- plus fields for binary operator 4106 -- plus fields for expression 4107 4108 -- N_Op_Rem 4109 -- Sloc points to REM 4110 -- Treat_Fixed_As_Integer (Flag14-Sem) 4111 -- Do_Division_Check (Flag13-Sem) 4112 -- plus fields for binary operator 4113 -- plus fields for expression 4114 4115 -- N_Op_Expon 4116 -- Is_Power_Of_2_For_Shift (Flag13-Sem) 4117 -- Sloc points to ** 4118 -- plus fields for binary operator 4119 -- plus fields for expression 4120 4121 -- N_Op_Plus 4122 -- Sloc points to + (unary) 4123 -- plus fields for unary operator 4124 -- plus fields for expression 4125 4126 -- N_Op_Minus 4127 -- Sloc points to - (unary) 4128 -- plus fields for unary operator 4129 -- plus fields for expression 4130 4131 -- N_Op_Abs 4132 -- Sloc points to ABS 4133 -- plus fields for unary operator 4134 -- plus fields for expression 4135 4136 -- N_Op_Not 4137 -- Sloc points to NOT 4138 -- plus fields for unary operator 4139 -- plus fields for expression 4140 4141 -- See also shift operators in section B.2 4142 4143 -- Note on fixed-point operations passed to Gigi: For adding operators, 4144 -- the semantics is to treat these simply as integer operations, with 4145 -- the small values being ignored (the bounds are already stored in 4146 -- units of small, so that constraint checking works as usual). For the 4147 -- case of multiply/divide/rem/mod operations, Gigi will only see fixed 4148 -- point operands if the Treat_Fixed_As_Integer flag is set and will 4149 -- thus treat these nodes in identical manner, ignoring small values. 4150 4151 -- Note on overflow handling: When the overflow checking mode is set to 4152 -- MINIMIZED or ELIMINATED, nodes for signed arithmetic operations may 4153 -- be modified to use a larger type for the operands and result. In 4154 -- the case where the computed range exceeds that of Long_Long_Integer, 4155 -- and we are running in ELIMINATED mode, the operator node will be 4156 -- changed to be a call to the appropriate routine in System.Bignums. 4157 4158 -- Note: In Modify_Tree_For_C mode, we do not generate an N_Op_Mod node 4159 -- for signed integer types (since there is no equivalent operator in 4160 -- C). Instead we rewrite such an operation in terms of REM (which is 4161 -- % in C) and other C-available operators. 4162 4163 ------------------------------------ 4164 -- 4.5.7 Conditional Expressions -- 4165 ------------------------------------ 4166 4167 -- CONDITIONAL_EXPRESSION ::= IF_EXPRESSION | CASE_EXPRESSION 4168 4169 -------------------------- 4170 -- 4.5.7 If Expression -- 4171 ---------------------------- 4172 4173 -- IF_EXPRESSION ::= 4174 -- if CONDITION then DEPENDENT_EXPRESSION 4175 -- {elsif CONDITION then DEPENDENT_EXPRESSION} 4176 -- [else DEPENDENT_EXPRESSION] 4177 4178 -- DEPENDENT_EXPRESSION ::= EXPRESSION 4179 4180 -- Note: if we have (IF x1 THEN x2 ELSIF x3 THEN x4 ELSE x5) then it 4181 -- is represented as (IF x1 THEN x2 ELSE (IF x3 THEN x4 ELSE x5)) and 4182 -- the Is_Elsif flag is set on the inner if expression. 4183 4184 -- N_If_Expression 4185 -- Sloc points to IF or ELSIF keyword 4186 -- Expressions (List1) 4187 -- Then_Actions (List2-Sem) 4188 -- Else_Actions (List3-Sem) 4189 -- Is_Elsif (Flag13) (set if comes from ELSIF) 4190 -- Do_Overflow_Check (Flag17-Sem) 4191 -- plus fields for expression 4192 4193 -- Expressions here is a three-element list, whose first element is the 4194 -- condition, the second element is the dependent expression after THEN 4195 -- and the third element is the dependent expression after the ELSE 4196 -- (explicitly set to True if missing). 4197 4198 -- Note: the Then_Actions and Else_Actions fields are always set to 4199 -- No_List in the tree passed to Gigi. These fields are used only 4200 -- for temporary processing purposes in the expander. 4201 4202 ---------------------------- 4203 -- 4.5.7 Case Expression -- 4204 ---------------------------- 4205 4206 -- CASE_EXPRESSION ::= 4207 -- case SELECTING_EXPRESSION is 4208 -- CASE_EXPRESSION_ALTERNATIVE 4209 -- {CASE_EXPRESSION_ALTERNATIVE} 4210 4211 -- Note that the Alternatives cannot include pragmas (this contrasts 4212 -- with the situation of case statements where pragmas are allowed). 4213 4214 -- N_Case_Expression 4215 -- Sloc points to CASE 4216 -- Expression (Node3) (the selecting expression) 4217 -- Alternatives (List4) (the case expression alternatives) 4218 -- Do_Overflow_Check (Flag17-Sem) 4219 4220 ---------------------------------------- 4221 -- 4.5.7 Case Expression Alternative -- 4222 ---------------------------------------- 4223 4224 -- CASE_EXPRESSION_ALTERNATIVE ::= 4225 -- when DISCRETE_CHOICE_LIST => 4226 -- DEPENDENT_EXPRESSION 4227 4228 -- N_Case_Expression_Alternative 4229 -- Sloc points to WHEN 4230 -- Actions (List1) 4231 -- Discrete_Choices (List4) 4232 -- Expression (Node3) 4233 -- Has_SP_Choice (Flag15-Sem) 4234 4235 -- Note: The Actions field temporarily holds any actions associated with 4236 -- evaluation of the Expression. During expansion of the case expression 4237 -- these actions are wrapped into an N_Expressions_With_Actions node 4238 -- replacing the original expression. 4239 4240 -- Note: this node never appears in the tree passed to the back end, 4241 -- since the expander converts case expressions into case statements. 4242 4243 --------------------------------- 4244 -- 4.5.9 Quantified Expression -- 4245 --------------------------------- 4246 4247 -- QUANTIFIED_EXPRESSION ::= 4248 -- for QUANTIFIER LOOP_PARAMETER_SPECIFICATION => PREDICATE 4249 -- | for QUANTIFIER ITERATOR_SPECIFICATION => PREDICATE 4250 -- 4251 -- QUANTIFIER ::= all | some 4252 4253 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4254 -- is present at a time, in which case the other one is empty. 4255 4256 -- N_Quantified_Expression 4257 -- Sloc points to FOR 4258 -- Iterator_Specification (Node2) 4259 -- Loop_Parameter_Specification (Node4) 4260 -- Condition (Node1) 4261 -- All_Present (Flag15) 4262 4263 -------------------------- 4264 -- 4.6 Type Conversion -- 4265 -------------------------- 4266 4267 -- TYPE_CONVERSION ::= 4268 -- SUBTYPE_MARK (EXPRESSION) | SUBTYPE_MARK (NAME) 4269 4270 -- In the (NAME) case, the name is stored as the expression 4271 4272 -- Note: the parser never generates a type conversion node, since it 4273 -- looks like an indexed component which is generated by preference. 4274 -- The semantic pass must correct this misidentification. 4275 4276 -- Gigi handles conversions that involve no change in the root type, 4277 -- and also all conversions from integer to floating-point types. 4278 -- Conversions from floating-point to integer are only handled in 4279 -- the case where Float_Truncate flag set. Other conversions from 4280 -- floating-point to integer (involving rounding) and all conversions 4281 -- involving fixed-point types are handled by the expander. 4282 4283 -- Sprint syntax if Float_Truncate set: X^(Y) 4284 -- Sprint syntax if Conversion_OK set X?(Y) 4285 -- Sprint syntax if both flags set X?^(Y) 4286 4287 -- Note: If either the operand or result type is fixed-point, Gigi will 4288 -- only see a type conversion node with Conversion_OK set. The front end 4289 -- takes care of all handling of small's for fixed-point conversions. 4290 4291 -- N_Type_Conversion 4292 -- Sloc points to first token of subtype mark 4293 -- Subtype_Mark (Node4) 4294 -- Expression (Node3) 4295 -- Do_Discriminant_Check (Flag1-Sem) 4296 -- Do_Length_Check (Flag4-Sem) 4297 -- Float_Truncate (Flag11-Sem) 4298 -- Do_Tag_Check (Flag13-Sem) 4299 -- Conversion_OK (Flag14-Sem) 4300 -- Do_Overflow_Check (Flag17-Sem) 4301 -- Rounded_Result (Flag18-Sem) 4302 -- plus fields for expression 4303 4304 -- Note: if a range check is required, then the Do_Range_Check flag 4305 -- is set in the Expression with the check being done against the 4306 -- target type range (after the base type conversion, if any). 4307 4308 ------------------------------- 4309 -- 4.7 Qualified Expression -- 4310 ------------------------------- 4311 4312 -- QUALIFIED_EXPRESSION ::= 4313 -- SUBTYPE_MARK ' (EXPRESSION) | SUBTYPE_MARK ' AGGREGATE 4314 4315 -- Note: the parentheses in the (EXPRESSION) case are deemed to enclose 4316 -- the expression, so the Expression field of this node always points 4317 -- to a parenthesized expression in this case (i.e. Paren_Count will 4318 -- always be non-zero for the referenced expression if it is not an 4319 -- aggregate). 4320 4321 -- N_Qualified_Expression 4322 -- Sloc points to apostrophe 4323 -- Subtype_Mark (Node4) 4324 -- Expression (Node3) expression or aggregate 4325 -- plus fields for expression 4326 4327 -------------------- 4328 -- 4.8 Allocator -- 4329 -------------------- 4330 4331 -- ALLOCATOR ::= 4332 -- new [SUBPOOL_SPECIFICATION] SUBTYPE_INDICATION 4333 -- | new [SUBPOOL_SPECIFICATION] QUALIFIED_EXPRESSION 4334 -- 4335 -- SUBPOOL_SPECIFICATION ::= (subpool_handle_NAME) 4336 4337 -- Sprint syntax (when storage pool present) 4338 -- new xxx (storage_pool = pool) 4339 -- or 4340 -- new (subpool) xxx (storage_pool = pool) 4341 4342 -- N_Allocator 4343 -- Sloc points to NEW 4344 -- Expression (Node3) subtype indication or qualified expression 4345 -- Subpool_Handle_Name (Node4) (set to Empty if not present) 4346 -- Storage_Pool (Node1-Sem) 4347 -- Procedure_To_Call (Node2-Sem) 4348 -- Null_Exclusion_Present (Flag11) 4349 -- No_Initialization (Flag13-Sem) 4350 -- Is_Static_Coextension (Flag14-Sem) 4351 -- Do_Storage_Check (Flag17-Sem) 4352 -- Is_Dynamic_Coextension (Flag18-Sem) 4353 -- plus fields for expression 4354 4355 -- Note: like all nodes, the N_Allocator has the Comes_From_Source flag. 4356 -- This flag has a special function in conjunction with the restriction 4357 -- No_Implicit_Heap_Allocations, which will be triggered if this flag 4358 -- is not set. This means that if a source allocator is replaced with 4359 -- a constructed allocator, the Comes_From_Source flag should be copied 4360 -- to the newly created allocator. 4361 4362 --------------------------------- 4363 -- 5.1 Sequence Of Statements -- 4364 --------------------------------- 4365 4366 -- SEQUENCE_OF_STATEMENTS ::= STATEMENT {STATEMENT} 4367 4368 -- Note: Although the parser will not accept a declaration as a 4369 -- statement, the semantic analyzer may insert declarations (e.g. 4370 -- declarations of implicit types needed for execution of other 4371 -- statements) into a sequence of statements, so the code generator 4372 -- should be prepared to accept a declaration where a statement is 4373 -- expected. Note also that pragmas can appear as statements. 4374 4375 -------------------- 4376 -- 5.1 Statement -- 4377 -------------------- 4378 4379 -- STATEMENT ::= 4380 -- {LABEL} SIMPLE_STATEMENT | {LABEL} COMPOUND_STATEMENT 4381 4382 -- There is no explicit node in the tree for a statement. Instead, the 4383 -- individual statement appears directly. Labels are treated as a 4384 -- kind of statement, i.e. they are linked into a statement list at 4385 -- the point they appear, so the labeled statement appears following 4386 -- the label or labels in the statement list. 4387 4388 --------------------------- 4389 -- 5.1 Simple Statement -- 4390 --------------------------- 4391 4392 -- SIMPLE_STATEMENT ::= NULL_STATEMENT 4393 -- | ASSIGNMENT_STATEMENT | EXIT_STATEMENT 4394 -- | GOTO_STATEMENT | PROCEDURE_CALL_STATEMENT 4395 -- | SIMPLE_RETURN_STATEMENT | ENTRY_CALL_STATEMENT 4396 -- | REQUEUE_STATEMENT | DELAY_STATEMENT 4397 -- | ABORT_STATEMENT | RAISE_STATEMENT 4398 -- | CODE_STATEMENT 4399 4400 ----------------------------- 4401 -- 5.1 Compound Statement -- 4402 ----------------------------- 4403 4404 -- COMPOUND_STATEMENT ::= 4405 -- IF_STATEMENT | CASE_STATEMENT 4406 -- | LOOP_STATEMENT | BLOCK_STATEMENT 4407 -- | EXTENDED_RETURN_STATEMENT 4408 -- | ACCEPT_STATEMENT | SELECT_STATEMENT 4409 4410 ------------------------- 4411 -- 5.1 Null Statement -- 4412 ------------------------- 4413 4414 -- NULL_STATEMENT ::= null; 4415 4416 -- N_Null_Statement 4417 -- Sloc points to NULL 4418 4419 ---------------- 4420 -- 5.1 Label -- 4421 ---------------- 4422 4423 -- LABEL ::= <<label_STATEMENT_IDENTIFIER>> 4424 4425 -- Note that the occurrence of a label is not a defining identifier, 4426 -- but rather a referencing occurrence. The defining occurrence is 4427 -- in the implicit label declaration which occurs in the innermost 4428 -- enclosing block. 4429 4430 -- N_Label 4431 -- Sloc points to << 4432 -- Identifier (Node1) direct name of statement identifier 4433 -- Exception_Junk (Flag8-Sem) 4434 4435 -- Note: Before Ada 2012, a label is always followed by a statement, 4436 -- and this is true in the tree even in Ada 2012 mode (the parser 4437 -- inserts a null statement marked with Comes_From_Source False). 4438 4439 ------------------------------- 4440 -- 5.1 Statement Identifier -- 4441 ------------------------------- 4442 4443 -- STATEMENT_IDENTIFIER ::= DIRECT_NAME 4444 4445 -- The IDENTIFIER of a STATEMENT_IDENTIFIER shall be an identifier 4446 -- (not an OPERATOR_SYMBOL) 4447 4448 ------------------------------- 4449 -- 5.2 Assignment Statement -- 4450 ------------------------------- 4451 4452 -- ASSIGNMENT_STATEMENT ::= 4453 -- variable_NAME := EXPRESSION; 4454 4455 -- N_Assignment_Statement 4456 -- Sloc points to := 4457 -- Name (Node2) 4458 -- Expression (Node3) 4459 -- Do_Discriminant_Check (Flag1-Sem) 4460 -- Do_Tag_Check (Flag13-Sem) 4461 -- Do_Length_Check (Flag4-Sem) 4462 -- Forwards_OK (Flag5-Sem) 4463 -- Backwards_OK (Flag6-Sem) 4464 -- No_Ctrl_Actions (Flag7-Sem) 4465 -- Componentwise_Assignment (Flag14-Sem) 4466 -- Suppress_Assignment_Checks (Flag18-Sem) 4467 4468 -- Note: if a range check is required, then the Do_Range_Check flag 4469 -- is set in the Expression (right hand side), with the check being 4470 -- done against the type of the Name (left hand side). 4471 4472 -- Note: the back end places some restrictions on the form of the 4473 -- Expression field. If the object being assigned to is Atomic, then 4474 -- the Expression may not have the form of an aggregate (since this 4475 -- might cause the back end to generate separate assignments). In this 4476 -- case the front end must generate an extra temporary and initialize 4477 -- this temporary as required (the temporary itself is not atomic). 4478 4479 ----------------------- 4480 -- 5.3 If Statement -- 4481 ----------------------- 4482 4483 -- IF_STATEMENT ::= 4484 -- if CONDITION then 4485 -- SEQUENCE_OF_STATEMENTS 4486 -- {elsif CONDITION then 4487 -- SEQUENCE_OF_STATEMENTS} 4488 -- [else 4489 -- SEQUENCE_OF_STATEMENTS] 4490 -- end if; 4491 4492 -- Gigi restriction: This expander ensures that the type of the 4493 -- Condition fields is always Standard.Boolean, even if the type 4494 -- in the source is some non-standard boolean type. 4495 4496 -- N_If_Statement 4497 -- Sloc points to IF 4498 -- Condition (Node1) 4499 -- Then_Statements (List2) 4500 -- Elsif_Parts (List3) (set to No_List if none present) 4501 -- Else_Statements (List4) (set to No_List if no else part present) 4502 -- End_Span (Uint5) (set to Uint_0 if expander generated) 4503 4504 -- N_Elsif_Part 4505 -- Sloc points to ELSIF 4506 -- Condition (Node1) 4507 -- Then_Statements (List2) 4508 -- Condition_Actions (List3-Sem) 4509 4510 -------------------- 4511 -- 5.3 Condition -- 4512 -------------------- 4513 4514 -- CONDITION ::= boolean_EXPRESSION 4515 4516 ------------------------- 4517 -- 5.4 Case Statement -- 4518 ------------------------- 4519 4520 -- CASE_STATEMENT ::= 4521 -- case EXPRESSION is 4522 -- CASE_STATEMENT_ALTERNATIVE 4523 -- {CASE_STATEMENT_ALTERNATIVE} 4524 -- end case; 4525 4526 -- Note: the Alternatives can contain pragmas. These only occur at 4527 -- the start of the list, since any pragmas occurring after the first 4528 -- alternative are absorbed into the corresponding statement sequence. 4529 4530 -- N_Case_Statement 4531 -- Sloc points to CASE 4532 -- Expression (Node3) 4533 -- Alternatives (List4) 4534 -- End_Span (Uint5) (set to Uint_0 if expander generated) 4535 4536 -- Note: Before Ada 2012, a pragma in a statement sequence is always 4537 -- followed by a statement, and this is true in the tree even in Ada 4538 -- 2012 mode (the parser inserts a null statement marked with the flag 4539 -- Comes_From_Source False). 4540 4541 ------------------------------------- 4542 -- 5.4 Case Statement Alternative -- 4543 ------------------------------------- 4544 4545 -- CASE_STATEMENT_ALTERNATIVE ::= 4546 -- when DISCRETE_CHOICE_LIST => 4547 -- SEQUENCE_OF_STATEMENTS 4548 4549 -- N_Case_Statement_Alternative 4550 -- Sloc points to WHEN 4551 -- Discrete_Choices (List4) 4552 -- Statements (List3) 4553 -- Has_SP_Choice (Flag15-Sem) 4554 4555 -- Note: in the list of Discrete_Choices, the tree passed to the back 4556 -- end does not have choice entries corresponding to names of statically 4557 -- predicated subtypes. Such entries are always expanded out to the list 4558 -- of equivalent values or ranges. The ASIS tree generated in -gnatct 4559 -- mode does not have this expansion, and has the original choices. 4560 4561 ------------------------- 4562 -- 5.5 Loop Statement -- 4563 ------------------------- 4564 4565 -- LOOP_STATEMENT ::= 4566 -- [loop_STATEMENT_IDENTIFIER :] 4567 -- [ITERATION_SCHEME] loop 4568 -- SEQUENCE_OF_STATEMENTS 4569 -- end loop [loop_IDENTIFIER]; 4570 4571 -- Note: The occurrence of a loop label is not a defining identifier 4572 -- but rather a referencing occurrence. The defining occurrence is in 4573 -- the implicit label declaration which occurs in the innermost 4574 -- enclosing block. 4575 4576 -- Note: there is always a loop statement identifier present in the 4577 -- tree, even if none was given in the source. In the case where no loop 4578 -- identifier is given in the source, the parser creates a name of the 4579 -- form _Loop_n, where n is a decimal integer (the two underlines ensure 4580 -- that the loop names created in this manner do not conflict with any 4581 -- user defined identifiers), and the flag Has_Created_Identifier is set 4582 -- to True. The only exception to the rule that all loop statement nodes 4583 -- have identifiers occurs for loops constructed by the expander, and 4584 -- the semantic analyzer will create and supply dummy loop identifiers 4585 -- in these cases. 4586 4587 -- N_Loop_Statement 4588 -- Sloc points to LOOP 4589 -- Identifier (Node1) loop identifier (set to Empty if no identifier) 4590 -- Iteration_Scheme (Node2) (set to Empty if no iteration scheme) 4591 -- Statements (List3) 4592 -- End_Label (Node4) 4593 -- Has_Created_Identifier (Flag15) 4594 -- Is_Null_Loop (Flag16) 4595 -- Suppress_Loop_Warnings (Flag17) 4596 4597 -- Note: the parser fills in the Identifier field if there is an 4598 -- explicit loop identifier. Otherwise the parser leaves this field 4599 -- set to Empty, and then the semantic processing for a loop statement 4600 -- creates an identifier, setting the Has_Created_Identifier flag to 4601 -- True. So after semantic analysis, the Identifier is always set, 4602 -- referencing an identifier whose entity has an Ekind of E_Loop. 4603 4604 --------------------------- 4605 -- 5.5 Iteration Scheme -- 4606 --------------------------- 4607 4608 -- ITERATION_SCHEME ::= 4609 -- while CONDITION 4610 -- | for LOOP_PARAMETER_SPECIFICATION 4611 -- | for ITERATOR_SPECIFICATION 4612 4613 -- At most one of (Iterator_Specification, Loop_Parameter_Specification) 4614 -- is present at a time, in which case the other one is empty. Both are 4615 -- empty in the case of a WHILE loop. 4616 4617 -- Gigi restriction: The expander ensures that the type of the Condition 4618 -- field is always Standard.Boolean, even if the type in the source is 4619 -- some non-standard boolean type. 4620 4621 -- N_Iteration_Scheme 4622 -- Sloc points to WHILE or FOR 4623 -- Condition (Node1) (set to Empty if FOR case) 4624 -- Condition_Actions (List3-Sem) 4625 -- Iterator_Specification (Node2) (set to Empty if WHILE case) 4626 -- Loop_Parameter_Specification (Node4) (set to Empty if WHILE case) 4627 4628 --------------------------------------- 4629 -- 5.5 Loop Parameter Specification -- 4630 --------------------------------------- 4631 4632 -- LOOP_PARAMETER_SPECIFICATION ::= 4633 -- DEFINING_IDENTIFIER in [reverse] DISCRETE_SUBTYPE_DEFINITION 4634 4635 -- N_Loop_Parameter_Specification 4636 -- Sloc points to first identifier 4637 -- Defining_Identifier (Node1) 4638 -- Reverse_Present (Flag15) 4639 -- Discrete_Subtype_Definition (Node4) 4640 4641 ----------------------------------- 4642 -- 5.5.1 Iterator Specification -- 4643 ----------------------------------- 4644 4645 -- ITERATOR_SPECIFICATION ::= 4646 -- DEFINING_IDENTIFIER in [reverse] NAME 4647 -- | DEFINING_IDENTIFIER [: SUBTYPE_INDICATION] of [reverse] NAME 4648 4649 -- N_Iterator_Specification 4650 -- Sloc points to defining identifier 4651 -- Defining_Identifier (Node1) 4652 -- Name (Node2) 4653 -- Reverse_Present (Flag15) 4654 -- Of_Present (Flag16) 4655 -- Subtype_Indication (Node5) 4656 4657 -- Note: The Of_Present flag distinguishes the two forms 4658 4659 -------------------------- 4660 -- 5.6 Block Statement -- 4661 -------------------------- 4662 4663 -- BLOCK_STATEMENT ::= 4664 -- [block_STATEMENT_IDENTIFIER:] 4665 -- [declare 4666 -- DECLARATIVE_PART] 4667 -- begin 4668 -- HANDLED_SEQUENCE_OF_STATEMENTS 4669 -- end [block_IDENTIFIER]; 4670 4671 -- Note that the occurrence of a block identifier is not a defining 4672 -- identifier, but rather a referencing occurrence. The defining 4673 -- occurrence is an E_Block entity declared by the implicit label 4674 -- declaration which occurs in the innermost enclosing block statement 4675 -- or body; the block identifier denotes that E_Block. 4676 4677 -- For block statements that come from source code, there is always a 4678 -- block statement identifier present in the tree, denoting an E_Block. 4679 -- In the case where no block identifier is given in the source, 4680 -- the parser creates a name of the form B_n, where n is a decimal 4681 -- integer, and the flag Has_Created_Identifier is set to True. Blocks 4682 -- constructed by the expander usually have no identifier, and no 4683 -- corresponding entity. 4684 4685 -- Note: the block statement created for an extended return statement 4686 -- has an entity, and this entity is an E_Return_Statement, rather than 4687 -- the usual E_Block. 4688 4689 -- Note: Exception_Junk is set for the wrapping blocks created during 4690 -- local raise optimization (Exp_Ch11.Expand_Local_Exception_Handlers). 4691 4692 -- Note: from a control flow viewpoint, a block statement defines an 4693 -- extended basic block, i.e. the entry of the block dominates every 4694 -- statement in the sequence. When generating new statements with 4695 -- exception handlers in the expander at the end of a sequence that 4696 -- comes from source code, it can be necessary to wrap them all in a 4697 -- block statement in order to expose the implicit control flow to 4698 -- gigi and thus prevent it from issuing bogus control flow warnings. 4699 4700 -- N_Block_Statement 4701 -- Sloc points to DECLARE or BEGIN 4702 -- Identifier (Node1) block direct name (set to Empty if not present) 4703 -- Declarations (List2) (set to No_List if no DECLARE part) 4704 -- Handled_Statement_Sequence (Node4) 4705 -- Is_Task_Master (Flag5-Sem) 4706 -- Activation_Chain_Entity (Node3-Sem) 4707 -- Has_Created_Identifier (Flag15) 4708 -- Is_Task_Allocation_Block (Flag6) 4709 -- Is_Asynchronous_Call_Block (Flag7) 4710 -- Exception_Junk (Flag8-Sem) 4711 -- Is_Finalization_Wrapper (Flag9-Sem) 4712 4713 ------------------------- 4714 -- 5.7 Exit Statement -- 4715 ------------------------- 4716 4717 -- EXIT_STATEMENT ::= exit [loop_NAME] [when CONDITION]; 4718 4719 -- Gigi restriction: The expander ensures that the type of the Condition 4720 -- field is always Standard.Boolean, even if the type in the source is 4721 -- some non-standard boolean type. 4722 4723 -- N_Exit_Statement 4724 -- Sloc points to EXIT 4725 -- Name (Node2) (set to Empty if no loop name present) 4726 -- Condition (Node1) (set to Empty if no WHEN part present) 4727 -- Next_Exit_Statement (Node3-Sem): Next exit on chain 4728 4729 ------------------------- 4730 -- 5.9 Goto Statement -- 4731 ------------------------- 4732 4733 -- GOTO_STATEMENT ::= goto label_NAME; 4734 4735 -- N_Goto_Statement 4736 -- Sloc points to GOTO 4737 -- Name (Node2) 4738 -- Exception_Junk (Flag8-Sem) 4739 4740 --------------------------------- 4741 -- 6.1 Subprogram Declaration -- 4742 --------------------------------- 4743 4744 -- SUBPROGRAM_DECLARATION ::= 4745 -- SUBPROGRAM_SPECIFICATION 4746 -- [ASPECT_SPECIFICATIONS]; 4747 4748 -- N_Subprogram_Declaration 4749 -- Sloc points to FUNCTION or PROCEDURE 4750 -- Specification (Node1) 4751 -- Body_To_Inline (Node3-Sem) 4752 -- Corresponding_Body (Node5-Sem) 4753 -- Parent_Spec (Node4-Sem) 4754 4755 ------------------------------------------ 4756 -- 6.1 Abstract Subprogram Declaration -- 4757 ------------------------------------------ 4758 4759 -- ABSTRACT_SUBPROGRAM_DECLARATION ::= 4760 -- SUBPROGRAM_SPECIFICATION is abstract 4761 -- [ASPECT_SPECIFICATIONS]; 4762 4763 -- N_Abstract_Subprogram_Declaration 4764 -- Sloc points to ABSTRACT 4765 -- Specification (Node1) 4766 4767 ----------------------------------- 4768 -- 6.1 Subprogram Specification -- 4769 ----------------------------------- 4770 4771 -- SUBPROGRAM_SPECIFICATION ::= 4772 -- [[not] overriding] 4773 -- procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE 4774 -- | [[not] overriding] 4775 -- function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE 4776 4777 -- Note: there are no separate nodes for the profiles, instead the 4778 -- information appears directly in the following nodes. 4779 4780 -- N_Function_Specification 4781 -- Sloc points to FUNCTION 4782 -- Defining_Unit_Name (Node1) (the designator) 4783 -- Elaboration_Boolean (Node2-Sem) 4784 -- Parameter_Specifications (List3) (set to No_List if no formal part) 4785 -- Null_Exclusion_Present (Flag11) 4786 -- Result_Definition (Node4) for result subtype 4787 -- Generic_Parent (Node5-Sem) 4788 -- Must_Override (Flag14) set if overriding indicator present 4789 -- Must_Not_Override (Flag15) set if not_overriding indicator present 4790 4791 -- N_Procedure_Specification 4792 -- Sloc points to PROCEDURE 4793 -- Defining_Unit_Name (Node1) 4794 -- Elaboration_Boolean (Node2-Sem) 4795 -- Parameter_Specifications (List3) (set to No_List if no formal part) 4796 -- Generic_Parent (Node5-Sem) 4797 -- Null_Present (Flag13) set for null procedure case (Ada 2005 feature) 4798 -- Must_Override (Flag14) set if overriding indicator present 4799 -- Must_Not_Override (Flag15) set if not_overriding indicator present 4800 4801 -- Note: overriding indicator is an Ada 2005 feature 4802 4803 --------------------- 4804 -- 6.1 Designator -- 4805 --------------------- 4806 4807 -- DESIGNATOR ::= 4808 -- [PARENT_UNIT_NAME .] IDENTIFIER | OPERATOR_SYMBOL 4809 4810 -- Designators that are simply identifiers or operator symbols appear 4811 -- directly in the tree in this form. The following node is used only 4812 -- in the case where the designator has a parent unit name component. 4813 4814 -- N_Designator 4815 -- Sloc points to period 4816 -- Name (Node2) holds the parent unit name 4817 -- Identifier (Node1) 4818 4819 -- Note: Name is always non-Empty, since this node is only used for the 4820 -- case where a parent library unit package name is present. 4821 4822 -- Note that the identifier can also be an operator symbol here 4823 4824 ------------------------------ 4825 -- 6.1 Defining Designator -- 4826 ------------------------------ 4827 4828 -- DEFINING_DESIGNATOR ::= 4829 -- DEFINING_PROGRAM_UNIT_NAME | DEFINING_OPERATOR_SYMBOL 4830 4831 ------------------------------------- 4832 -- 6.1 Defining Program Unit Name -- 4833 ------------------------------------- 4834 4835 -- DEFINING_PROGRAM_UNIT_NAME ::= 4836 -- [PARENT_UNIT_NAME .] DEFINING_IDENTIFIER 4837 4838 -- The parent unit name is present only in the case of a child unit name 4839 -- (permissible only for Ada 95 for a library level unit, i.e. a unit 4840 -- at scope level one). If no such name is present, the defining program 4841 -- unit name is represented simply as the defining identifier. In the 4842 -- child unit case, the following node is used to represent the child 4843 -- unit name. 4844 4845 -- N_Defining_Program_Unit_Name 4846 -- Sloc points to period 4847 -- Name (Node2) holds the parent unit name 4848 -- Defining_Identifier (Node1) 4849 4850 -- Note: Name is always non-Empty, since this node is only used for the 4851 -- case where a parent unit name is present. 4852 4853 -------------------------- 4854 -- 6.1 Operator Symbol -- 4855 -------------------------- 4856 4857 -- OPERATOR_SYMBOL ::= STRING_LITERAL 4858 4859 -- Note: the fields of the N_Operator_Symbol node are laid out to match 4860 -- the corresponding fields of an N_Character_Literal node. This allows 4861 -- easy conversion of the operator symbol node into a character literal 4862 -- node in the case where a string constant of the form of an operator 4863 -- symbol is scanned out as such, but turns out semantically to be a 4864 -- string literal that is not an operator. For details see Sinfo.CN. 4865 -- Change_Operator_Symbol_To_String_Literal. 4866 4867 -- N_Operator_Symbol 4868 -- Sloc points to literal 4869 -- Chars (Name1) contains the Name_Id for the operator symbol 4870 -- Strval (Str3) Id of string value. This is used if the operator 4871 -- symbol turns out to be a normal string after all. 4872 -- Entity (Node4-Sem) 4873 -- Associated_Node (Node4-Sem) 4874 -- Has_Private_View (Flag11-Sem) set in generic units. 4875 -- Etype (Node5-Sem) 4876 4877 -- Note: the Strval field may be set to No_String for generated 4878 -- operator symbols that are known not to be string literals 4879 -- semantically. 4880 4881 ----------------------------------- 4882 -- 6.1 Defining Operator Symbol -- 4883 ----------------------------------- 4884 4885 -- DEFINING_OPERATOR_SYMBOL ::= OPERATOR_SYMBOL 4886 4887 -- A defining operator symbol is an entity, which has additional 4888 -- fields depending on the setting of the Ekind field. These 4889 -- additional fields are defined (and access subprograms declared) 4890 -- in package Einfo. 4891 4892 -- Note: N_Defining_Operator_Symbol is an extended node whose fields 4893 -- are deliberately layed out to match the layout of fields in an 4894 -- ordinary N_Operator_Symbol node allowing for easy alteration of 4895 -- an operator symbol node into a defining operator symbol node. 4896 -- See Sinfo.CN.Change_Operator_Symbol_To_Defining_Operator_Symbol 4897 -- for further details. 4898 4899 -- N_Defining_Operator_Symbol 4900 -- Sloc points to literal 4901 -- Chars (Name1) contains the Name_Id for the operator symbol 4902 -- Next_Entity (Node2-Sem) 4903 -- Scope (Node3-Sem) 4904 -- Etype (Node5-Sem) 4905 4906 ---------------------------- 4907 -- 6.1 Parameter Profile -- 4908 ---------------------------- 4909 4910 -- PARAMETER_PROFILE ::= [FORMAL_PART] 4911 4912 --------------------------------------- 4913 -- 6.1 Parameter and Result Profile -- 4914 --------------------------------------- 4915 4916 -- PARAMETER_AND_RESULT_PROFILE ::= 4917 -- [FORMAL_PART] return [NULL_EXCLUSION] SUBTYPE_MARK 4918 -- | [FORMAL_PART] return ACCESS_DEFINITION 4919 4920 -- There is no explicit node in the tree for a parameter and result 4921 -- profile. Instead the information appears directly in the parent. 4922 4923 ---------------------- 4924 -- 6.1 Formal Part -- 4925 ---------------------- 4926 4927 -- FORMAL_PART ::= 4928 -- (PARAMETER_SPECIFICATION {; PARAMETER_SPECIFICATION}) 4929 4930 ---------------------------------- 4931 -- 6.1 Parameter Specification -- 4932 ---------------------------------- 4933 4934 -- PARAMETER_SPECIFICATION ::= 4935 -- DEFINING_IDENTIFIER_LIST : [ALIASED] MODE [NULL_EXCLUSION] 4936 -- SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 4937 -- | DEFINING_IDENTIFIER_LIST : ACCESS_DEFINITION 4938 -- [:= DEFAULT_EXPRESSION] 4939 4940 -- Although the syntax allows multiple identifiers in the list, the 4941 -- semantics is as though successive specifications were given with 4942 -- identical type definition and expression components. To simplify 4943 -- semantic processing, the parser represents a multiple declaration 4944 -- case as a sequence of single Specifications, using the More_Ids and 4945 -- Prev_Ids flags to preserve the original source form as described 4946 -- in the section on "Handling of Defining Identifier Lists". 4947 4948 -- ALIASED can only be present in Ada 2012 mode 4949 4950 -- N_Parameter_Specification 4951 -- Sloc points to first identifier 4952 -- Defining_Identifier (Node1) 4953 -- Aliased_Present (Flag4) 4954 -- In_Present (Flag15) 4955 -- Out_Present (Flag17) 4956 -- Null_Exclusion_Present (Flag11) 4957 -- Parameter_Type (Node2) subtype mark or access definition 4958 -- Expression (Node3) (set to Empty if no default expression present) 4959 -- Do_Accessibility_Check (Flag13-Sem) 4960 -- More_Ids (Flag5) (set to False if no more identifiers in list) 4961 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 4962 -- Default_Expression (Node5-Sem) 4963 4964 --------------- 4965 -- 6.1 Mode -- 4966 --------------- 4967 4968 -- MODE ::= [in] | in out | out 4969 4970 -- There is no explicit node in the tree for the Mode. Instead the 4971 -- In_Present and Out_Present flags are set in the parent node to 4972 -- record the presence of keywords specifying the mode. 4973 4974 -------------------------- 4975 -- 6.3 Subprogram Body -- 4976 -------------------------- 4977 4978 -- SUBPROGRAM_BODY ::= 4979 -- SUBPROGRAM_SPECIFICATION [ASPECT_SPECIFICATIONS] is 4980 -- DECLARATIVE_PART 4981 -- begin 4982 -- HANDLED_SEQUENCE_OF_STATEMENTS 4983 -- end [DESIGNATOR]; 4984 4985 -- N_Subprogram_Body 4986 -- Sloc points to FUNCTION or PROCEDURE 4987 -- Specification (Node1) 4988 -- Declarations (List2) 4989 -- Handled_Statement_Sequence (Node4) 4990 -- Activation_Chain_Entity (Node3-Sem) 4991 -- Corresponding_Spec (Node5-Sem) 4992 -- Acts_As_Spec (Flag4-Sem) 4993 -- Bad_Is_Detected (Flag15) used only by parser 4994 -- Do_Storage_Check (Flag17-Sem) 4995 -- Is_Protected_Subprogram_Body (Flag7-Sem) 4996 -- Is_Entry_Barrier_Function (Flag8-Sem) 4997 -- Is_Task_Master (Flag5-Sem) 4998 -- Was_Originally_Stub (Flag13-Sem) 4999 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 5000 5001 ------------------------- 5002 -- Expression Function -- 5003 ------------------------- 5004 5005 -- This is an Ada 2012 extension, we put it here for now, to be labeled 5006 -- and put in its proper section when we know exactly where that is. 5007 5008 -- EXPRESSION_FUNCTION ::= 5009 -- FUNCTION SPECIFICATION IS (EXPRESSION) 5010 -- [ASPECT_SPECIFICATIONS]; 5011 5012 -- N_Expression_Function 5013 -- Sloc points to FUNCTION 5014 -- Specification (Node1) 5015 -- Expression (Node3) 5016 -- Corresponding_Spec (Node5-Sem) 5017 5018 ----------------------------------- 5019 -- 6.4 Procedure Call Statement -- 5020 ----------------------------------- 5021 5022 -- PROCEDURE_CALL_STATEMENT ::= 5023 -- procedure_NAME; | procedure_PREFIX ACTUAL_PARAMETER_PART; 5024 5025 -- Note: the reason that a procedure call has expression fields is that 5026 -- it semantically resembles an expression, e.g. overloading is allowed 5027 -- and a type is concocted for semantic processing purposes. Certain of 5028 -- these fields, such as Parens are not relevant, but it is easier to 5029 -- just supply all of them together. 5030 5031 -- N_Procedure_Call_Statement 5032 -- Sloc points to first token of name or prefix 5033 -- Name (Node2) stores name or prefix 5034 -- Parameter_Associations (List3) (set to No_List if no 5035 -- actual parameter part) 5036 -- First_Named_Actual (Node4-Sem) 5037 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5038 -- Do_Tag_Check (Flag13-Sem) 5039 -- No_Elaboration_Check (Flag14-Sem) 5040 -- Parameter_List_Truncated (Flag17-Sem) 5041 -- ABE_Is_Certain (Flag18-Sem) 5042 -- plus fields for expression 5043 5044 -- If any IN parameter requires a range check, then the corresponding 5045 -- argument expression has the Do_Range_Check flag set, and the range 5046 -- check is done against the formal type. Note that this argument 5047 -- expression may appear directly in the Parameter_Associations list, 5048 -- or may be a descendent of an N_Parameter_Association node that 5049 -- appears in this list. 5050 5051 ------------------------ 5052 -- 6.4 Function Call -- 5053 ------------------------ 5054 5055 -- FUNCTION_CALL ::= 5056 -- function_NAME | function_PREFIX ACTUAL_PARAMETER_PART 5057 5058 -- Note: the parser may generate an indexed component node or simply 5059 -- a name node instead of a function call node. The semantic pass must 5060 -- correct this misidentification. 5061 5062 -- N_Function_Call 5063 -- Sloc points to first token of name or prefix 5064 -- Name (Node2) stores name or prefix 5065 -- Parameter_Associations (List3) (set to No_List if no 5066 -- actual parameter part) 5067 -- First_Named_Actual (Node4-Sem) 5068 -- Controlling_Argument (Node1-Sem) (set to Empty if not dispatching) 5069 -- Is_Expanded_Build_In_Place_Call (Flag11-Sem) 5070 -- Do_Tag_Check (Flag13-Sem) 5071 -- No_Elaboration_Check (Flag14-Sem) 5072 -- Parameter_List_Truncated (Flag17-Sem) 5073 -- ABE_Is_Certain (Flag18-Sem) 5074 -- plus fields for expression 5075 5076 -------------------------------- 5077 -- 6.4 Actual Parameter Part -- 5078 -------------------------------- 5079 5080 -- ACTUAL_PARAMETER_PART ::= 5081 -- (PARAMETER_ASSOCIATION {,PARAMETER_ASSOCIATION}) 5082 5083 -------------------------------- 5084 -- 6.4 Parameter Association -- 5085 -------------------------------- 5086 5087 -- PARAMETER_ASSOCIATION ::= 5088 -- [formal_parameter_SELECTOR_NAME =>] EXPLICIT_ACTUAL_PARAMETER 5089 5090 -- Note: the N_Parameter_Association node is built only if a formal 5091 -- parameter selector name is present, otherwise the parameter 5092 -- association appears in the tree simply as the node for the 5093 -- explicit actual parameter. 5094 5095 -- N_Parameter_Association 5096 -- Sloc points to formal parameter 5097 -- Selector_Name (Node2) (always non-Empty) 5098 -- Explicit_Actual_Parameter (Node3) 5099 -- Next_Named_Actual (Node4-Sem) 5100 -- Is_Accessibility_Actual (Flag13-Sem) 5101 5102 --------------------------- 5103 -- 6.4 Actual Parameter -- 5104 --------------------------- 5105 5106 -- EXPLICIT_ACTUAL_PARAMETER ::= EXPRESSION | variable_NAME 5107 5108 --------------------------- 5109 -- 6.5 Return Statement -- 5110 --------------------------- 5111 5112 -- SIMPLE_RETURN_STATEMENT ::= return [EXPRESSION]; 5113 5114 -- EXTENDED_RETURN_STATEMENT ::= 5115 -- return DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5116 -- [:= EXPRESSION] [do 5117 -- HANDLED_SEQUENCE_OF_STATEMENTS 5118 -- end return]; 5119 5120 -- RETURN_SUBTYPE_INDICATION ::= SUBTYPE_INDICATION | ACCESS_DEFINITION 5121 5122 -- The term "return statement" is defined in 6.5 to mean either a 5123 -- SIMPLE_RETURN_STATEMENT or an EXTENDED_RETURN_STATEMENT. We avoid 5124 -- the use of this term, since it used to mean someting else in earlier 5125 -- versions of Ada. 5126 5127 -- N_Simple_Return_Statement 5128 -- Sloc points to RETURN 5129 -- Return_Statement_Entity (Node5-Sem) 5130 -- Expression (Node3) (set to Empty if no expression present) 5131 -- Storage_Pool (Node1-Sem) 5132 -- Procedure_To_Call (Node2-Sem) 5133 -- Do_Tag_Check (Flag13-Sem) 5134 -- By_Ref (Flag5-Sem) 5135 -- Comes_From_Extended_Return_Statement (Flag18-Sem) 5136 5137 -- Note: Return_Statement_Entity points to an E_Return_Statement 5138 5139 -- If a range check is required, then Do_Range_Check is set on the 5140 -- Expression. The check is against the return subtype of the function. 5141 5142 -- N_Extended_Return_Statement 5143 -- Sloc points to RETURN 5144 -- Return_Statement_Entity (Node5-Sem) 5145 -- Return_Object_Declarations (List3) 5146 -- Handled_Statement_Sequence (Node4) (set to Empty if not present) 5147 -- Storage_Pool (Node1-Sem) 5148 -- Procedure_To_Call (Node2-Sem) 5149 -- Do_Tag_Check (Flag13-Sem) 5150 -- By_Ref (Flag5-Sem) 5151 5152 -- Note: Return_Statement_Entity points to an E_Return_Statement. 5153 5154 -- Note that Return_Object_Declarations is a list containing the 5155 -- N_Object_Declaration -- see comment on this field above. 5156 5157 -- The declared object will have Is_Return_Object = True. 5158 5159 -- There is no such syntactic category as return_object_declaration 5160 -- in the RM. Return_Object_Declarations represents this portion of 5161 -- the syntax for EXTENDED_RETURN_STATEMENT: 5162 -- DEFINING_IDENTIFIER : [aliased] RETURN_SUBTYPE_INDICATION 5163 -- [:= EXPRESSION] 5164 5165 -- There are two entities associated with an extended_return_statement: 5166 -- the Return_Statement_Entity represents the statement itself, 5167 -- and the Defining_Identifier of the Object_Declaration in 5168 -- Return_Object_Declarations represents the object being 5169 -- returned. N_Simple_Return_Statement has only the former. 5170 5171 ------------------------------ 5172 -- 7.1 Package Declaration -- 5173 ------------------------------ 5174 5175 -- PACKAGE_DECLARATION ::= 5176 -- PACKAGE_SPECIFICATION; 5177 5178 -- Note: the activation chain entity for a package spec is used for 5179 -- all tasks declared in the package spec, or in the package body. 5180 5181 -- N_Package_Declaration 5182 -- Sloc points to PACKAGE 5183 -- Specification (Node1) 5184 -- Corresponding_Body (Node5-Sem) 5185 -- Parent_Spec (Node4-Sem) 5186 -- Activation_Chain_Entity (Node3-Sem) 5187 5188 -------------------------------- 5189 -- 7.1 Package Specification -- 5190 -------------------------------- 5191 5192 -- PACKAGE_SPECIFICATION ::= 5193 -- package DEFINING_PROGRAM_UNIT_NAME 5194 -- [ASPECT_SPECIFICATIONS] 5195 -- is 5196 -- {BASIC_DECLARATIVE_ITEM} 5197 -- [private 5198 -- {BASIC_DECLARATIVE_ITEM}] 5199 -- end [[PARENT_UNIT_NAME .] IDENTIFIER] 5200 5201 -- N_Package_Specification 5202 -- Sloc points to PACKAGE 5203 -- Defining_Unit_Name (Node1) 5204 -- Visible_Declarations (List2) 5205 -- Private_Declarations (List3) (set to No_List if no private 5206 -- part present) 5207 -- End_Label (Node4) 5208 -- Generic_Parent (Node5-Sem) 5209 -- Limited_View_Installed (Flag18-Sem) 5210 5211 ----------------------- 5212 -- 7.1 Package Body -- 5213 ----------------------- 5214 5215 -- PACKAGE_BODY ::= 5216 -- package body DEFINING_PROGRAM_UNIT_NAME 5217 -- [ASPECT_SPECIFICATIONS] 5218 -- is 5219 -- DECLARATIVE_PART 5220 -- [begin 5221 -- HANDLED_SEQUENCE_OF_STATEMENTS] 5222 -- end [[PARENT_UNIT_NAME .] IDENTIFIER]; 5223 5224 -- N_Package_Body 5225 -- Sloc points to PACKAGE 5226 -- Defining_Unit_Name (Node1) 5227 -- Declarations (List2) 5228 -- Handled_Statement_Sequence (Node4) (set to Empty if no HSS present) 5229 -- Corresponding_Spec (Node5-Sem) 5230 -- Was_Originally_Stub (Flag13-Sem) 5231 5232 -- Note: if a source level package does not contain a handled sequence 5233 -- of statements, then the parser supplies a dummy one with a null 5234 -- sequence of statements. Comes_From_Source will be False in this 5235 -- constructed sequence. The reason we need this is for the End_Label 5236 -- field in the HSS. 5237 5238 ----------------------------------- 5239 -- 7.4 Private Type Declaration -- 5240 ----------------------------------- 5241 5242 -- PRIVATE_TYPE_DECLARATION ::= 5243 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 5244 -- is [[abstract] tagged] [limited] private 5245 -- [ASPECT_SPECIFICATIONS]; 5246 5247 -- Note: TAGGED is not permitted in Ada 83 mode 5248 5249 -- N_Private_Type_Declaration 5250 -- Sloc points to TYPE 5251 -- Defining_Identifier (Node1) 5252 -- Discriminant_Specifications (List4) (set to No_List if no 5253 -- discriminant part) 5254 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5255 -- Abstract_Present (Flag4) 5256 -- Tagged_Present (Flag15) 5257 -- Limited_Present (Flag17) 5258 5259 ---------------------------------------- 5260 -- 7.4 Private Extension Declaration -- 5261 ---------------------------------------- 5262 5263 -- PRIVATE_EXTENSION_DECLARATION ::= 5264 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] is 5265 -- [abstract] [limited | synchronized] 5266 -- new ancestor_SUBTYPE_INDICATION [and INTERFACE_LIST] 5267 -- with private [ASPECT_SPECIFICATIONS]; 5268 5269 -- Note: LIMITED, and private extension declarations are not allowed 5270 -- in Ada 83 mode. 5271 5272 -- N_Private_Extension_Declaration 5273 -- Sloc points to TYPE 5274 -- Defining_Identifier (Node1) 5275 -- Discriminant_Specifications (List4) (set to No_List if no 5276 -- discriminant part) 5277 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 5278 -- Abstract_Present (Flag4) 5279 -- Limited_Present (Flag17) 5280 -- Synchronized_Present (Flag7) 5281 -- Subtype_Indication (Node5) 5282 -- Interface_List (List2) (set to No_List if none) 5283 5284 --------------------- 5285 -- 8.4 Use Clause -- 5286 --------------------- 5287 5288 -- USE_CLAUSE ::= USE_PACKAGE_CLAUSE | USE_TYPE_CLAUSE 5289 5290 ----------------------------- 5291 -- 8.4 Use Package Clause -- 5292 ----------------------------- 5293 5294 -- USE_PACKAGE_CLAUSE ::= use package_NAME {, package_NAME}; 5295 5296 -- N_Use_Package_Clause 5297 -- Sloc points to USE 5298 -- Names (List2) 5299 -- Next_Use_Clause (Node3-Sem) 5300 -- Hidden_By_Use_Clause (Elist4-Sem) 5301 5302 -------------------------- 5303 -- 8.4 Use Type Clause -- 5304 -------------------------- 5305 5306 -- USE_TYPE_CLAUSE ::= use [ALL] type SUBTYPE_MARK {, SUBTYPE_MARK}; 5307 5308 -- Note: use type clause is not permitted in Ada 83 mode 5309 5310 -- Note: the ALL keyword can appear only in Ada 2012 mode 5311 5312 -- N_Use_Type_Clause 5313 -- Sloc points to USE 5314 -- Subtype_Marks (List2) 5315 -- Next_Use_Clause (Node3-Sem) 5316 -- Hidden_By_Use_Clause (Elist4-Sem) 5317 -- Used_Operations (Elist5-Sem) 5318 -- All_Present (Flag15) 5319 5320 ------------------------------- 5321 -- 8.5 Renaming Declaration -- 5322 ------------------------------- 5323 5324 -- RENAMING_DECLARATION ::= 5325 -- OBJECT_RENAMING_DECLARATION 5326 -- | EXCEPTION_RENAMING_DECLARATION 5327 -- | PACKAGE_RENAMING_DECLARATION 5328 -- | SUBPROGRAM_RENAMING_DECLARATION 5329 -- | GENERIC_RENAMING_DECLARATION 5330 5331 -------------------------------------- 5332 -- 8.5 Object Renaming Declaration -- 5333 -------------------------------------- 5334 5335 -- OBJECT_RENAMING_DECLARATION ::= 5336 -- DEFINING_IDENTIFIER : 5337 -- [NULL_EXCLUSION] SUBTYPE_MARK renames object_NAME 5338 -- [ASPECT_SPECIFICATIONS]; 5339 -- | DEFINING_IDENTIFIER : 5340 -- ACCESS_DEFINITION renames object_NAME 5341 -- [ASPECT_SPECIFICATIONS]; 5342 5343 -- Note: Access_Definition is an optional field that gives support to 5344 -- Ada 2005 (AI-230). The parser generates nodes that have either the 5345 -- Subtype_Indication field or else the Access_Definition field. 5346 5347 -- N_Object_Renaming_Declaration 5348 -- Sloc points to first identifier 5349 -- Defining_Identifier (Node1) 5350 -- Null_Exclusion_Present (Flag11) (set to False if not present) 5351 -- Subtype_Mark (Node4) (set to Empty if not present) 5352 -- Access_Definition (Node3) (set to Empty if not present) 5353 -- Name (Node2) 5354 -- Corresponding_Generic_Association (Node5-Sem) 5355 5356 ----------------------------------------- 5357 -- 8.5 Exception Renaming Declaration -- 5358 ----------------------------------------- 5359 5360 -- EXCEPTION_RENAMING_DECLARATION ::= 5361 -- DEFINING_IDENTIFIER : exception renames exception_NAME 5362 -- [ASPECT_SPECIFICATIONS]; 5363 5364 -- N_Exception_Renaming_Declaration 5365 -- Sloc points to first identifier 5366 -- Defining_Identifier (Node1) 5367 -- Name (Node2) 5368 5369 --------------------------------------- 5370 -- 8.5 Package Renaming Declaration -- 5371 --------------------------------------- 5372 5373 -- PACKAGE_RENAMING_DECLARATION ::= 5374 -- package DEFINING_PROGRAM_UNIT_NAME renames package_NAME 5375 -- [ASPECT_SPECIFICATIONS]; 5376 5377 -- N_Package_Renaming_Declaration 5378 -- Sloc points to PACKAGE 5379 -- Defining_Unit_Name (Node1) 5380 -- Name (Node2) 5381 -- Parent_Spec (Node4-Sem) 5382 5383 ------------------------------------------ 5384 -- 8.5 Subprogram Renaming Declaration -- 5385 ------------------------------------------ 5386 5387 -- SUBPROGRAM_RENAMING_DECLARATION ::= 5388 -- SUBPROGRAM_SPECIFICATION renames callable_entity_NAME 5389 -- [ASPECT_SPECIFICATIONS]; 5390 5391 -- N_Subprogram_Renaming_Declaration 5392 -- Sloc points to RENAMES 5393 -- Specification (Node1) 5394 -- Name (Node2) 5395 -- Parent_Spec (Node4-Sem) 5396 -- Corresponding_Spec (Node5-Sem) 5397 -- Corresponding_Formal_Spec (Node3-Sem) 5398 -- From_Default (Flag6-Sem) 5399 5400 ----------------------------------------- 5401 -- 8.5.5 Generic Renaming Declaration -- 5402 ----------------------------------------- 5403 5404 -- GENERIC_RENAMING_DECLARATION ::= 5405 -- generic package DEFINING_PROGRAM_UNIT_NAME 5406 -- renames generic_package_NAME 5407 -- [ASPECT_SPECIFICATIONS]; 5408 -- | generic procedure DEFINING_PROGRAM_UNIT_NAME 5409 -- renames generic_procedure_NAME 5410 -- [ASPECT_SPECIFICATIONS]; 5411 -- | generic function DEFINING_PROGRAM_UNIT_NAME 5412 -- renames generic_function_NAME 5413 -- [ASPECT_SPECIFICATIONS]; 5414 5415 -- N_Generic_Package_Renaming_Declaration 5416 -- Sloc points to GENERIC 5417 -- Defining_Unit_Name (Node1) 5418 -- Name (Node2) 5419 -- Parent_Spec (Node4-Sem) 5420 5421 -- N_Generic_Procedure_Renaming_Declaration 5422 -- Sloc points to GENERIC 5423 -- Defining_Unit_Name (Node1) 5424 -- Name (Node2) 5425 -- Parent_Spec (Node4-Sem) 5426 5427 -- N_Generic_Function_Renaming_Declaration 5428 -- Sloc points to GENERIC 5429 -- Defining_Unit_Name (Node1) 5430 -- Name (Node2) 5431 -- Parent_Spec (Node4-Sem) 5432 5433 -------------------------------- 5434 -- 9.1 Task Type Declaration -- 5435 -------------------------------- 5436 5437 -- TASK_TYPE_DECLARATION ::= 5438 -- task type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 5439 -- [ASPECT_SPECIFICATIONS] 5440 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 5441 5442 -- N_Task_Type_Declaration 5443 -- Sloc points to TASK 5444 -- Defining_Identifier (Node1) 5445 -- Discriminant_Specifications (List4) (set to No_List if no 5446 -- discriminant part) 5447 -- Interface_List (List2) (set to No_List if none) 5448 -- Task_Definition (Node3) (set to Empty if not present) 5449 -- Corresponding_Body (Node5-Sem) 5450 5451 ---------------------------------- 5452 -- 9.1 Single Task Declaration -- 5453 ---------------------------------- 5454 5455 -- SINGLE_TASK_DECLARATION ::= 5456 -- task DEFINING_IDENTIFIER 5457 -- [ASPECT_SPECIFICATIONS] 5458 -- [is [new INTERFACE_LIST with] TASK_DEFINITION]; 5459 5460 -- N_Single_Task_Declaration 5461 -- Sloc points to TASK 5462 -- Defining_Identifier (Node1) 5463 -- Interface_List (List2) (set to No_List if none) 5464 -- Task_Definition (Node3) (set to Empty if not present) 5465 5466 -------------------------- 5467 -- 9.1 Task Definition -- 5468 -------------------------- 5469 5470 -- TASK_DEFINITION ::= 5471 -- {TASK_ITEM} 5472 -- [private 5473 -- {TASK_ITEM}] 5474 -- end [task_IDENTIFIER] 5475 5476 -- Note: as a result of semantic analysis, the list of task items can 5477 -- include implicit type declarations resulting from entry families. 5478 5479 -- N_Task_Definition 5480 -- Sloc points to first token of task definition 5481 -- Visible_Declarations (List2) 5482 -- Private_Declarations (List3) (set to No_List if no private part) 5483 -- End_Label (Node4) 5484 -- Has_Storage_Size_Pragma (Flag5-Sem) 5485 -- Has_Relative_Deadline_Pragma (Flag9-Sem) 5486 5487 -------------------- 5488 -- 9.1 Task Item -- 5489 -------------------- 5490 5491 -- TASK_ITEM ::= ENTRY_DECLARATION | REPRESENTATION_CLAUSE 5492 5493 -------------------- 5494 -- 9.1 Task Body -- 5495 -------------------- 5496 5497 -- TASK_BODY ::= 5498 -- task body task_DEFINING_IDENTIFIER 5499 -- [ASPECT_SPECIFICATIONS] 5500 -- is 5501 -- DECLARATIVE_PART 5502 -- begin 5503 -- HANDLED_SEQUENCE_OF_STATEMENTS 5504 -- end [task_IDENTIFIER]; 5505 5506 -- Gigi restriction: This node never appears 5507 5508 -- N_Task_Body 5509 -- Sloc points to TASK 5510 -- Defining_Identifier (Node1) 5511 -- Declarations (List2) 5512 -- Handled_Statement_Sequence (Node4) 5513 -- Is_Task_Master (Flag5-Sem) 5514 -- Activation_Chain_Entity (Node3-Sem) 5515 -- Corresponding_Spec (Node5-Sem) 5516 -- Was_Originally_Stub (Flag13-Sem) 5517 5518 ------------------------------------- 5519 -- 9.4 Protected Type Declaration -- 5520 ------------------------------------- 5521 5522 -- PROTECTED_TYPE_DECLARATION ::= 5523 -- protected type DEFINING_IDENTIFIER [KNOWN_DISCRIMINANT_PART] 5524 -- [ASPECT_SPECIFICATIONS] 5525 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 5526 5527 -- Note: protected type declarations are not permitted in Ada 83 mode 5528 5529 -- N_Protected_Type_Declaration 5530 -- Sloc points to PROTECTED 5531 -- Defining_Identifier (Node1) 5532 -- Discriminant_Specifications (List4) (set to No_List if no 5533 -- discriminant part) 5534 -- Interface_List (List2) (set to No_List if none) 5535 -- Protected_Definition (Node3) 5536 -- Corresponding_Body (Node5-Sem) 5537 5538 --------------------------------------- 5539 -- 9.4 Single Protected Declaration -- 5540 --------------------------------------- 5541 5542 -- SINGLE_PROTECTED_DECLARATION ::= 5543 -- protected DEFINING_IDENTIFIER 5544 -- [ASPECT_SPECIFICATIONS] 5545 -- is [new INTERFACE_LIST with] PROTECTED_DEFINITION; 5546 5547 -- Note: single protected declarations are not allowed in Ada 83 mode 5548 5549 -- N_Single_Protected_Declaration 5550 -- Sloc points to PROTECTED 5551 -- Defining_Identifier (Node1) 5552 -- Interface_List (List2) (set to No_List if none) 5553 -- Protected_Definition (Node3) 5554 5555 ------------------------------- 5556 -- 9.4 Protected Definition -- 5557 ------------------------------- 5558 5559 -- PROTECTED_DEFINITION ::= 5560 -- {PROTECTED_OPERATION_DECLARATION} 5561 -- [private 5562 -- {PROTECTED_ELEMENT_DECLARATION}] 5563 -- end [protected_IDENTIFIER] 5564 5565 -- N_Protected_Definition 5566 -- Sloc points to first token of protected definition 5567 -- Visible_Declarations (List2) 5568 -- Private_Declarations (List3) (set to No_List if no private part) 5569 -- End_Label (Node4) 5570 5571 ------------------------------------------ 5572 -- 9.4 Protected Operation Declaration -- 5573 ------------------------------------------ 5574 5575 -- PROTECTED_OPERATION_DECLARATION ::= 5576 -- SUBPROGRAM_DECLARATION 5577 -- | ENTRY_DECLARATION 5578 -- | REPRESENTATION_CLAUSE 5579 5580 ---------------------------------------- 5581 -- 9.4 Protected Element Declaration -- 5582 ---------------------------------------- 5583 5584 -- PROTECTED_ELEMENT_DECLARATION ::= 5585 -- PROTECTED_OPERATION_DECLARATION | COMPONENT_DECLARATION 5586 5587 ------------------------- 5588 -- 9.4 Protected Body -- 5589 ------------------------- 5590 5591 -- PROTECTED_BODY ::= 5592 -- protected body DEFINING_IDENTIFIER 5593 -- [ASPECT_SPECIFICATIONS]; 5594 -- is 5595 -- {PROTECTED_OPERATION_ITEM} 5596 -- end [protected_IDENTIFIER]; 5597 5598 -- Note: protected bodies are not allowed in Ada 83 mode 5599 5600 -- Gigi restriction: This node never appears 5601 5602 -- N_Protected_Body 5603 -- Sloc points to PROTECTED 5604 -- Defining_Identifier (Node1) 5605 -- Declarations (List2) protected operation items (and pragmas) 5606 -- End_Label (Node4) 5607 -- Corresponding_Spec (Node5-Sem) 5608 -- Was_Originally_Stub (Flag13-Sem) 5609 5610 ----------------------------------- 5611 -- 9.4 Protected Operation Item -- 5612 ----------------------------------- 5613 5614 -- PROTECTED_OPERATION_ITEM ::= 5615 -- SUBPROGRAM_DECLARATION 5616 -- | SUBPROGRAM_BODY 5617 -- | ENTRY_BODY 5618 -- | REPRESENTATION_CLAUSE 5619 5620 ------------------------------ 5621 -- 9.5.2 Entry Declaration -- 5622 ------------------------------ 5623 5624 -- ENTRY_DECLARATION ::= 5625 -- [[not] overriding] 5626 -- entry DEFINING_IDENTIFIER 5627 -- [(DISCRETE_SUBTYPE_DEFINITION)] PARAMETER_PROFILE 5628 -- [ASPECT_SPECIFICATIONS]; 5629 5630 -- N_Entry_Declaration 5631 -- Sloc points to ENTRY 5632 -- Defining_Identifier (Node1) 5633 -- Discrete_Subtype_Definition (Node4) (set to Empty if not present) 5634 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5635 -- Corresponding_Body (Node5-Sem) 5636 -- Must_Override (Flag14) set if overriding indicator present 5637 -- Must_Not_Override (Flag15) set if not_overriding indicator present 5638 5639 -- Note: overriding indicator is an Ada 2005 feature 5640 5641 ----------------------------- 5642 -- 9.5.2 Accept statement -- 5643 ----------------------------- 5644 5645 -- ACCEPT_STATEMENT ::= 5646 -- accept entry_DIRECT_NAME 5647 -- [(ENTRY_INDEX)] PARAMETER_PROFILE [do 5648 -- HANDLED_SEQUENCE_OF_STATEMENTS 5649 -- end [entry_IDENTIFIER]]; 5650 5651 -- Gigi restriction: This node never appears 5652 5653 -- Note: there are no explicit declarations allowed in an accept 5654 -- statement. However, the implicit declarations for any statement 5655 -- identifiers (labels and block/loop identifiers) are declarations 5656 -- that belong logically to the accept statement, and that is why 5657 -- there is a Declarations field in this node. 5658 5659 -- N_Accept_Statement 5660 -- Sloc points to ACCEPT 5661 -- Entry_Direct_Name (Node1) 5662 -- Entry_Index (Node5) (set to Empty if not present) 5663 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5664 -- Handled_Statement_Sequence (Node4) 5665 -- Declarations (List2) (set to No_List if no declarations) 5666 5667 ------------------------ 5668 -- 9.5.2 Entry Index -- 5669 ------------------------ 5670 5671 -- ENTRY_INDEX ::= EXPRESSION 5672 5673 ----------------------- 5674 -- 9.5.2 Entry Body -- 5675 ----------------------- 5676 5677 -- ENTRY_BODY ::= 5678 -- entry DEFINING_IDENTIFIER ENTRY_BODY_FORMAL_PART ENTRY_BARRIER is 5679 -- DECLARATIVE_PART 5680 -- begin 5681 -- HANDLED_SEQUENCE_OF_STATEMENTS 5682 -- end [entry_IDENTIFIER]; 5683 5684 -- ENTRY_BARRIER ::= when CONDITION 5685 5686 -- Note: we store the CONDITION of the ENTRY_BARRIER in the node for 5687 -- the ENTRY_BODY_FORMAL_PART to avoid the N_Entry_Body node getting 5688 -- too full (it would otherwise have too many fields) 5689 5690 -- Gigi restriction: This node never appears 5691 5692 -- N_Entry_Body 5693 -- Sloc points to ENTRY 5694 -- Defining_Identifier (Node1) 5695 -- Entry_Body_Formal_Part (Node5) 5696 -- Declarations (List2) 5697 -- Handled_Statement_Sequence (Node4) 5698 -- Activation_Chain_Entity (Node3-Sem) 5699 5700 ----------------------------------- 5701 -- 9.5.2 Entry Body Formal Part -- 5702 ----------------------------------- 5703 5704 -- ENTRY_BODY_FORMAL_PART ::= 5705 -- [(ENTRY_INDEX_SPECIFICATION)] PARAMETER_PROFILE 5706 5707 -- Note that an entry body formal part node is present even if it is 5708 -- empty. This reflects the grammar, in which it is the components of 5709 -- the entry body formal part that are optional, not the entry body 5710 -- formal part itself. Also this means that the barrier condition 5711 -- always has somewhere to be stored. 5712 5713 -- Gigi restriction: This node never appears 5714 5715 -- N_Entry_Body_Formal_Part 5716 -- Sloc points to first token 5717 -- Entry_Index_Specification (Node4) (set to Empty if not present) 5718 -- Parameter_Specifications (List3) (set to No_List if no formal part) 5719 -- Condition (Node1) from entry barrier of entry body 5720 5721 -------------------------- 5722 -- 9.5.2 Entry Barrier -- 5723 -------------------------- 5724 5725 -- ENTRY_BARRIER ::= when CONDITION 5726 5727 -------------------------------------- 5728 -- 9.5.2 Entry Index Specification -- 5729 -------------------------------------- 5730 5731 -- ENTRY_INDEX_SPECIFICATION ::= 5732 -- for DEFINING_IDENTIFIER in DISCRETE_SUBTYPE_DEFINITION 5733 5734 -- Gigi restriction: This node never appears 5735 5736 -- N_Entry_Index_Specification 5737 -- Sloc points to FOR 5738 -- Defining_Identifier (Node1) 5739 -- Discrete_Subtype_Definition (Node4) 5740 5741 --------------------------------- 5742 -- 9.5.3 Entry Call Statement -- 5743 --------------------------------- 5744 5745 -- ENTRY_CALL_STATEMENT ::= entry_NAME [ACTUAL_PARAMETER_PART]; 5746 5747 -- The parser may generate a procedure call for this construct. The 5748 -- semantic pass must correct this misidentification where needed. 5749 5750 -- Gigi restriction: This node never appears 5751 5752 -- N_Entry_Call_Statement 5753 -- Sloc points to first token of name 5754 -- Name (Node2) 5755 -- Parameter_Associations (List3) (set to No_List if no 5756 -- actual parameter part) 5757 -- First_Named_Actual (Node4-Sem) 5758 5759 ------------------------------ 5760 -- 9.5.4 Requeue Statement -- 5761 ------------------------------ 5762 5763 -- REQUEUE_STATEMENT ::= requeue entry_NAME [with abort]; 5764 5765 -- Note: requeue statements are not permitted in Ada 83 mode 5766 5767 -- Gigi restriction: This node never appears 5768 5769 -- N_Requeue_Statement 5770 -- Sloc points to REQUEUE 5771 -- Name (Node2) 5772 -- Abort_Present (Flag15) 5773 5774 -------------------------- 5775 -- 9.6 Delay Statement -- 5776 -------------------------- 5777 5778 -- DELAY_STATEMENT ::= 5779 -- DELAY_UNTIL_STATEMENT 5780 -- | DELAY_RELATIVE_STATEMENT 5781 5782 -------------------------------- 5783 -- 9.6 Delay Until Statement -- 5784 -------------------------------- 5785 5786 -- DELAY_UNTIL_STATEMENT ::= delay until delay_EXPRESSION; 5787 5788 -- Note: delay until statements are not permitted in Ada 83 mode 5789 5790 -- Gigi restriction: This node never appears 5791 5792 -- N_Delay_Until_Statement 5793 -- Sloc points to DELAY 5794 -- Expression (Node3) 5795 5796 ----------------------------------- 5797 -- 9.6 Delay Relative Statement -- 5798 ----------------------------------- 5799 5800 -- DELAY_RELATIVE_STATEMENT ::= delay delay_EXPRESSION; 5801 5802 -- Gigi restriction: This node never appears 5803 5804 -- N_Delay_Relative_Statement 5805 -- Sloc points to DELAY 5806 -- Expression (Node3) 5807 5808 --------------------------- 5809 -- 9.7 Select Statement -- 5810 --------------------------- 5811 5812 -- SELECT_STATEMENT ::= 5813 -- SELECTIVE_ACCEPT 5814 -- | TIMED_ENTRY_CALL 5815 -- | CONDITIONAL_ENTRY_CALL 5816 -- | ASYNCHRONOUS_SELECT 5817 5818 ----------------------------- 5819 -- 9.7.1 Selective Accept -- 5820 ----------------------------- 5821 5822 -- SELECTIVE_ACCEPT ::= 5823 -- select 5824 -- [GUARD] 5825 -- SELECT_ALTERNATIVE 5826 -- {or 5827 -- [GUARD] 5828 -- SELECT_ALTERNATIVE} 5829 -- [else 5830 -- SEQUENCE_OF_STATEMENTS] 5831 -- end select; 5832 5833 -- Gigi restriction: This node never appears 5834 5835 -- Note: the guard expression, if present, appears in the node for 5836 -- the select alternative. 5837 5838 -- N_Selective_Accept 5839 -- Sloc points to SELECT 5840 -- Select_Alternatives (List1) 5841 -- Else_Statements (List4) (set to No_List if no else part) 5842 5843 ------------------ 5844 -- 9.7.1 Guard -- 5845 ------------------ 5846 5847 -- GUARD ::= when CONDITION => 5848 5849 -- As noted above, the CONDITION that is part of a GUARD is included 5850 -- in the node for the select alternative for convenience. 5851 5852 ------------------------------- 5853 -- 9.7.1 Select Alternative -- 5854 ------------------------------- 5855 5856 -- SELECT_ALTERNATIVE ::= 5857 -- ACCEPT_ALTERNATIVE 5858 -- | DELAY_ALTERNATIVE 5859 -- | TERMINATE_ALTERNATIVE 5860 5861 ------------------------------- 5862 -- 9.7.1 Accept Alternative -- 5863 ------------------------------- 5864 5865 -- ACCEPT_ALTERNATIVE ::= 5866 -- ACCEPT_STATEMENT [SEQUENCE_OF_STATEMENTS] 5867 5868 -- Gigi restriction: This node never appears 5869 5870 -- N_Accept_Alternative 5871 -- Sloc points to ACCEPT 5872 -- Accept_Statement (Node2) 5873 -- Condition (Node1) from the guard (set to Empty if no guard present) 5874 -- Statements (List3) (set to Empty_List if no statements) 5875 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 5876 -- Accept_Handler_Records (List5-Sem) 5877 5878 ------------------------------ 5879 -- 9.7.1 Delay Alternative -- 5880 ------------------------------ 5881 5882 -- DELAY_ALTERNATIVE ::= 5883 -- DELAY_STATEMENT [SEQUENCE_OF_STATEMENTS] 5884 5885 -- Gigi restriction: This node never appears 5886 5887 -- N_Delay_Alternative 5888 -- Sloc points to DELAY 5889 -- Delay_Statement (Node2) 5890 -- Condition (Node1) from the guard (set to Empty if no guard present) 5891 -- Statements (List3) (set to Empty_List if no statements) 5892 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 5893 5894 ---------------------------------- 5895 -- 9.7.1 Terminate Alternative -- 5896 ---------------------------------- 5897 5898 -- TERMINATE_ALTERNATIVE ::= terminate; 5899 5900 -- Gigi restriction: This node never appears 5901 5902 -- N_Terminate_Alternative 5903 -- Sloc points to TERMINATE 5904 -- Condition (Node1) from the guard (set to Empty if no guard present) 5905 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 5906 -- Pragmas_After (List5) pragmas after alt (set to No_List if none) 5907 5908 ----------------------------- 5909 -- 9.7.2 Timed Entry Call -- 5910 ----------------------------- 5911 5912 -- TIMED_ENTRY_CALL ::= 5913 -- select 5914 -- ENTRY_CALL_ALTERNATIVE 5915 -- or 5916 -- DELAY_ALTERNATIVE 5917 -- end select; 5918 5919 -- Gigi restriction: This node never appears 5920 5921 -- N_Timed_Entry_Call 5922 -- Sloc points to SELECT 5923 -- Entry_Call_Alternative (Node1) 5924 -- Delay_Alternative (Node4) 5925 5926 ----------------------------------- 5927 -- 9.7.2 Entry Call Alternative -- 5928 ----------------------------------- 5929 5930 -- ENTRY_CALL_ALTERNATIVE ::= 5931 -- PROCEDURE_OR_ENTRY_CALL [SEQUENCE_OF_STATEMENTS] 5932 5933 -- PROCEDURE_OR_ENTRY_CALL ::= 5934 -- PROCEDURE_CALL_STATEMENT | ENTRY_CALL_STATEMENT 5935 5936 -- Gigi restriction: This node never appears 5937 5938 -- N_Entry_Call_Alternative 5939 -- Sloc points to first token of entry call statement 5940 -- Entry_Call_Statement (Node1) 5941 -- Statements (List3) (set to Empty_List if no statements) 5942 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 5943 5944 ----------------------------------- 5945 -- 9.7.3 Conditional Entry Call -- 5946 ----------------------------------- 5947 5948 -- CONDITIONAL_ENTRY_CALL ::= 5949 -- select 5950 -- ENTRY_CALL_ALTERNATIVE 5951 -- else 5952 -- SEQUENCE_OF_STATEMENTS 5953 -- end select; 5954 5955 -- Gigi restriction: This node never appears 5956 5957 -- N_Conditional_Entry_Call 5958 -- Sloc points to SELECT 5959 -- Entry_Call_Alternative (Node1) 5960 -- Else_Statements (List4) 5961 5962 -------------------------------- 5963 -- 9.7.4 Asynchronous Select -- 5964 -------------------------------- 5965 5966 -- ASYNCHRONOUS_SELECT ::= 5967 -- select 5968 -- TRIGGERING_ALTERNATIVE 5969 -- then abort 5970 -- ABORTABLE_PART 5971 -- end select; 5972 5973 -- Note: asynchronous select is not permitted in Ada 83 mode 5974 5975 -- Gigi restriction: This node never appears 5976 5977 -- N_Asynchronous_Select 5978 -- Sloc points to SELECT 5979 -- Triggering_Alternative (Node1) 5980 -- Abortable_Part (Node2) 5981 5982 ----------------------------------- 5983 -- 9.7.4 Triggering Alternative -- 5984 ----------------------------------- 5985 5986 -- TRIGGERING_ALTERNATIVE ::= 5987 -- TRIGGERING_STATEMENT [SEQUENCE_OF_STATEMENTS] 5988 5989 -- Gigi restriction: This node never appears 5990 5991 -- N_Triggering_Alternative 5992 -- Sloc points to first token of triggering statement 5993 -- Triggering_Statement (Node1) 5994 -- Statements (List3) (set to Empty_List if no statements) 5995 -- Pragmas_Before (List4) pragmas before alt (set to No_List if none) 5996 5997 --------------------------------- 5998 -- 9.7.4 Triggering Statement -- 5999 --------------------------------- 6000 6001 -- TRIGGERING_STATEMENT ::= PROCEDURE_OR_ENTRY_CALL | DELAY_STATEMENT 6002 6003 --------------------------- 6004 -- 9.7.4 Abortable Part -- 6005 --------------------------- 6006 6007 -- ABORTABLE_PART ::= SEQUENCE_OF_STATEMENTS 6008 6009 -- Gigi restriction: This node never appears 6010 6011 -- N_Abortable_Part 6012 -- Sloc points to ABORT 6013 -- Statements (List3) 6014 6015 -------------------------- 6016 -- 9.8 Abort Statement -- 6017 -------------------------- 6018 6019 -- ABORT_STATEMENT ::= abort task_NAME {, task_NAME}; 6020 6021 -- Gigi restriction: This node never appears 6022 6023 -- N_Abort_Statement 6024 -- Sloc points to ABORT 6025 -- Names (List2) 6026 6027 ------------------------- 6028 -- 10.1.1 Compilation -- 6029 ------------------------- 6030 6031 -- COMPILATION ::= {COMPILATION_UNIT} 6032 6033 -- There is no explicit node in the tree for a compilation, since in 6034 -- general the compiler is processing only a single compilation unit 6035 -- at a time. It is possible to parse multiple units in syntax check 6036 -- only mode, but the trees are discarded in that case. 6037 6038 ------------------------------ 6039 -- 10.1.1 Compilation Unit -- 6040 ------------------------------ 6041 6042 -- COMPILATION_UNIT ::= 6043 -- CONTEXT_CLAUSE LIBRARY_ITEM 6044 -- | CONTEXT_CLAUSE SUBUNIT 6045 6046 -- The N_Compilation_Unit node itself represents the above syntax. 6047 -- However, there are two additional items not reflected in the above 6048 -- syntax. First we have the global declarations that are added by the 6049 -- code generator. These are outer level declarations (so they cannot 6050 -- be represented as being inside the units). An example is the wrapper 6051 -- subprograms that are created to do ABE checking. As always a list of 6052 -- declarations can contain actions as well (i.e. statements), and such 6053 -- statements are executed as part of the elaboration of the unit. Note 6054 -- that all such declarations are elaborated before the library unit. 6055 6056 -- Similarly, certain actions need to be elaborated at the completion 6057 -- of elaboration of the library unit (notably the statement that sets 6058 -- the Boolean flag indicating that elaboration is complete). 6059 6060 -- The third item not reflected in the syntax is pragmas that appear 6061 -- after the compilation unit. As always pragmas are a problem since 6062 -- they are not part of the formal syntax, but can be stuck into the 6063 -- source following a set of ad hoc rules, and we have to find an ad 6064 -- hoc way of sticking them into the tree. For pragmas that appear 6065 -- before the library unit, we just consider them to be part of the 6066 -- context clause, and pragmas can appear in the Context_Items list 6067 -- of the compilation unit. However, pragmas can also appear after 6068 -- the library item. 6069 6070 -- To deal with all these problems, we create an auxiliary node for 6071 -- a compilation unit, referenced from the N_Compilation_Unit node, 6072 -- that contains these items. 6073 6074 -- N_Compilation_Unit 6075 -- Sloc points to first token of defining unit name 6076 -- Library_Unit (Node4-Sem) corresponding/parent spec/body 6077 -- Context_Items (List1) context items and pragmas preceding unit 6078 -- Private_Present (Flag15) set if library unit has private keyword 6079 -- Unit (Node2) library item or subunit 6080 -- Aux_Decls_Node (Node5) points to the N_Compilation_Unit_Aux node 6081 -- Has_No_Elaboration_Code (Flag17-Sem) 6082 -- Body_Required (Flag13-Sem) set for spec if body is required 6083 -- Acts_As_Spec (Flag4-Sem) flag for subprogram body with no spec 6084 -- Context_Pending (Flag16-Sem) 6085 -- First_Inlined_Subprogram (Node3-Sem) 6086 -- Has_Pragma_Suppress_All (Flag14-Sem) 6087 6088 -- N_Compilation_Unit_Aux 6089 -- Sloc is a copy of the Sloc from the N_Compilation_Unit node 6090 -- Declarations (List2) (set to No_List if no global declarations) 6091 -- Actions (List1) (set to No_List if no actions) 6092 -- Pragmas_After (List5) pragmas after unit (set to No_List if none) 6093 -- Config_Pragmas (List4) config pragmas (set to Empty_List if none) 6094 -- Default_Storage_Pool (Node3-Sem) 6095 6096 -------------------------- 6097 -- 10.1.1 Library Item -- 6098 -------------------------- 6099 6100 -- LIBRARY_ITEM ::= 6101 -- [private] LIBRARY_UNIT_DECLARATION 6102 -- | LIBRARY_UNIT_BODY 6103 -- | [private] LIBRARY_UNIT_RENAMING_DECLARATION 6104 6105 -- Note: PRIVATE is not allowed in Ada 83 mode 6106 6107 -- There is no explicit node in the tree for library item, instead 6108 -- the declaration or body, and the flag for private if present, 6109 -- appear in the N_Compilation_Unit node. 6110 6111 -------------------------------------- 6112 -- 10.1.1 Library Unit Declaration -- 6113 -------------------------------------- 6114 6115 -- LIBRARY_UNIT_DECLARATION ::= 6116 -- SUBPROGRAM_DECLARATION | PACKAGE_DECLARATION 6117 -- | GENERIC_DECLARATION | GENERIC_INSTANTIATION 6118 6119 ----------------------------------------------- 6120 -- 10.1.1 Library Unit Renaming Declaration -- 6121 ----------------------------------------------- 6122 6123 -- LIBRARY_UNIT_RENAMING_DECLARATION ::= 6124 -- PACKAGE_RENAMING_DECLARATION 6125 -- | GENERIC_RENAMING_DECLARATION 6126 -- | SUBPROGRAM_RENAMING_DECLARATION 6127 6128 ------------------------------- 6129 -- 10.1.1 Library unit body -- 6130 ------------------------------- 6131 6132 -- LIBRARY_UNIT_BODY ::= SUBPROGRAM_BODY | PACKAGE_BODY 6133 6134 ------------------------------ 6135 -- 10.1.1 Parent Unit Name -- 6136 ------------------------------ 6137 6138 -- PARENT_UNIT_NAME ::= NAME 6139 6140 ---------------------------- 6141 -- 10.1.2 Context clause -- 6142 ---------------------------- 6143 6144 -- CONTEXT_CLAUSE ::= {CONTEXT_ITEM} 6145 6146 -- The context clause can include pragmas, and any pragmas that appear 6147 -- before the context clause proper (i.e. all configuration pragmas, 6148 -- also appear at the front of this list). 6149 6150 -------------------------- 6151 -- 10.1.2 Context_Item -- 6152 -------------------------- 6153 6154 -- CONTEXT_ITEM ::= WITH_CLAUSE | USE_CLAUSE | WITH_TYPE_CLAUSE 6155 6156 ------------------------- 6157 -- 10.1.2 With clause -- 6158 ------------------------- 6159 6160 -- WITH_CLAUSE ::= 6161 -- with library_unit_NAME {,library_unit_NAME}; 6162 6163 -- A separate With clause is built for each name, so that we have 6164 -- a Corresponding_Spec field for each with'ed spec. The flags 6165 -- First_Name and Last_Name are used to reconstruct the exact 6166 -- source form. When a list of names appears in one with clause, 6167 -- the first name in the list has First_Name set, and the last 6168 -- has Last_Name set. If the with clause has only one name, then 6169 -- both of the flags First_Name and Last_Name are set in this name. 6170 6171 -- Note: in the case of implicit with's that are installed by the 6172 -- Rtsfind routine, Implicit_With is set, and the Sloc is typically 6173 -- set to Standard_Location, but it is incorrect to test the Sloc 6174 -- to find out if a with clause is implicit, test the flag instead. 6175 6176 -- N_With_Clause 6177 -- Sloc points to first token of library unit name 6178 -- Withed_Body (Node1-Sem) 6179 -- Name (Node2) 6180 -- Next_Implicit_With (Node3-Sem) 6181 -- Library_Unit (Node4-Sem) 6182 -- Corresponding_Spec (Node5-Sem) 6183 -- First_Name (Flag5) (set to True if first name or only one name) 6184 -- Last_Name (Flag6) (set to True if last name or only one name) 6185 -- Context_Installed (Flag13-Sem) 6186 -- Elaborate_Present (Flag4-Sem) 6187 -- Elaborate_All_Present (Flag14-Sem) 6188 -- Elaborate_All_Desirable (Flag9-Sem) 6189 -- Elaborate_Desirable (Flag11-Sem) 6190 -- Private_Present (Flag15) set if with_clause has private keyword 6191 -- Implicit_With (Flag16-Sem) 6192 -- Implicit_With_From_Instantiation (Flag12-Sem) 6193 -- Limited_Present (Flag17) set if LIMITED is present 6194 -- Limited_View_Installed (Flag18-Sem) 6195 -- Unreferenced_In_Spec (Flag7-Sem) 6196 -- No_Entities_Ref_In_Spec (Flag8-Sem) 6197 6198 -- Note: Limited_Present and Limited_View_Installed are used to support 6199 -- the implementation of Ada 2005 (AI-50217). 6200 6201 -- Similarly, Private_Present is used to support the implementation of 6202 -- Ada 2005 (AI-50262). 6203 6204 ---------------------- 6205 -- With_Type clause -- 6206 ---------------------- 6207 6208 -- This is a GNAT extension, used to implement mutually recursive 6209 -- types declared in different packages. 6210 6211 -- Note: this is now obsolete. The functionality of this construct 6212 -- is now implemented by the Ada 2005 limited_with_clause. 6213 6214 --------------------- 6215 -- 10.2 Body stub -- 6216 --------------------- 6217 6218 -- BODY_STUB ::= 6219 -- SUBPROGRAM_BODY_STUB 6220 -- | PACKAGE_BODY_STUB 6221 -- | TASK_BODY_STUB 6222 -- | PROTECTED_BODY_STUB 6223 6224 ---------------------------------- 6225 -- 10.1.3 Subprogram Body Stub -- 6226 ---------------------------------- 6227 6228 -- SUBPROGRAM_BODY_STUB ::= 6229 -- SUBPROGRAM_SPECIFICATION is separate 6230 -- [ASPECT_SPECIFICATION]; 6231 6232 -- N_Subprogram_Body_Stub 6233 -- Sloc points to FUNCTION or PROCEDURE 6234 -- Specification (Node1) 6235 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6236 -- Library_Unit (Node4-Sem) points to the subunit 6237 -- Corresponding_Body (Node5-Sem) 6238 6239 ------------------------------- 6240 -- 10.1.3 Package Body Stub -- 6241 ------------------------------- 6242 6243 -- PACKAGE_BODY_STUB ::= 6244 -- package body DEFINING_IDENTIFIER is separate 6245 -- [ASPECT_SPECIFICATION]; 6246 6247 -- N_Package_Body_Stub 6248 -- Sloc points to PACKAGE 6249 -- Defining_Identifier (Node1) 6250 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6251 -- Library_Unit (Node4-Sem) points to the subunit 6252 -- Corresponding_Body (Node5-Sem) 6253 6254 ---------------------------- 6255 -- 10.1.3 Task Body Stub -- 6256 ---------------------------- 6257 6258 -- TASK_BODY_STUB ::= 6259 -- task body DEFINING_IDENTIFIER is separate 6260 -- [ASPECT_SPECIFICATION]; 6261 6262 -- N_Task_Body_Stub 6263 -- Sloc points to TASK 6264 -- Defining_Identifier (Node1) 6265 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6266 -- Library_Unit (Node4-Sem) points to the subunit 6267 -- Corresponding_Body (Node5-Sem) 6268 6269 --------------------------------- 6270 -- 10.1.3 Protected Body Stub -- 6271 --------------------------------- 6272 6273 -- PROTECTED_BODY_STUB ::= 6274 -- protected body DEFINING_IDENTIFIER is separate 6275 -- [ASPECT_SPECIFICATION]; 6276 6277 -- Note: protected body stubs are not allowed in Ada 83 mode 6278 6279 -- N_Protected_Body_Stub 6280 -- Sloc points to PROTECTED 6281 -- Defining_Identifier (Node1) 6282 -- Corresponding_Spec_Of_Stub (Node2-Sem) 6283 -- Library_Unit (Node4-Sem) points to the subunit 6284 -- Corresponding_Body (Node5-Sem) 6285 6286 --------------------- 6287 -- 10.1.3 Subunit -- 6288 --------------------- 6289 6290 -- SUBUNIT ::= separate (PARENT_UNIT_NAME) PROPER_BODY 6291 6292 -- N_Subunit 6293 -- Sloc points to SEPARATE 6294 -- Name (Node2) is the name of the parent unit 6295 -- Proper_Body (Node1) is the subunit body 6296 -- Corresponding_Stub (Node3-Sem) is the stub declaration for the unit. 6297 6298 --------------------------------- 6299 -- 11.1 Exception Declaration -- 6300 --------------------------------- 6301 6302 -- EXCEPTION_DECLARATION ::= DEFINING_IDENTIFIER_LIST : exception 6303 -- [ASPECT_SPECIFICATIONS]; 6304 6305 -- For consistency with object declarations etc., the parser converts 6306 -- the case of multiple identifiers being declared to a series of 6307 -- declarations in which the expression is copied, using the More_Ids 6308 -- and Prev_Ids flags to remember the source form as described in the 6309 -- section on "Handling of Defining Identifier Lists". 6310 6311 -- N_Exception_Declaration 6312 -- Sloc points to EXCEPTION 6313 -- Defining_Identifier (Node1) 6314 -- Expression (Node3-Sem) 6315 -- Renaming_Exception (Node2-Sem) 6316 -- More_Ids (Flag5) (set to False if no more identifiers in list) 6317 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 6318 6319 ------------------------------------------ 6320 -- 11.2 Handled Sequence Of Statements -- 6321 ------------------------------------------ 6322 6323 -- HANDLED_SEQUENCE_OF_STATEMENTS ::= 6324 -- SEQUENCE_OF_STATEMENTS 6325 -- [exception 6326 -- EXCEPTION_HANDLER 6327 -- {EXCEPTION_HANDLER}] 6328 -- [at end 6329 -- cleanup_procedure_call (param, param, param, ...);] 6330 6331 -- The AT END phrase is a GNAT extension to provide for cleanups. It is 6332 -- used only internally currently, but is considered to be syntactic. 6333 -- At the moment, the only cleanup action allowed is a single call to 6334 -- a parameterless procedure, and the Identifier field of the node is 6335 -- the procedure to be called. The cleanup action occurs whenever the 6336 -- sequence of statements is left for any reason. The possible reasons 6337 -- are: 6338 -- 1. reaching the end of the sequence 6339 -- 2. exit, return, or goto 6340 -- 3. exception or abort 6341 -- For some back ends, such as gcc with ZCX, "at end" is implemented 6342 -- entirely in the back end. In this case, a handled sequence of 6343 -- statements with an "at end" cannot also have exception handlers. 6344 -- For other back ends, such as gcc with SJLJ and .NET, the 6345 -- implementation is split between the front end and back end; the front 6346 -- end implements 3, and the back end implements 1 and 2. In this case, 6347 -- if there is an "at end", the front end inserts the appropriate 6348 -- exception handler, and this handler takes precedence over "at end" 6349 -- in case of exception. 6350 6351 -- The inserted exception handler is of the form: 6352 6353 -- when all others => 6354 -- cleanup; 6355 -- raise; 6356 6357 -- where cleanup is the procedure to be called. The reason we do this is 6358 -- so that the front end can handle the necessary entries in the 6359 -- exception tables, and other exception handler actions required as 6360 -- part of the normal handling for exception handlers. 6361 6362 -- The AT END cleanup handler protects only the sequence of statements 6363 -- (not the associated declarations of the parent), just like exception 6364 -- handlers. The big difference is that the cleanup procedure is called 6365 -- on either a normal or an abnormal exit from the statement sequence. 6366 6367 -- Note: the list of Exception_Handlers can contain pragmas as well 6368 -- as actual handlers. In practice these pragmas can only occur at 6369 -- the start of the list, since any pragmas occurring later on will 6370 -- be included in the statement list of the corresponding handler. 6371 6372 -- Note: although in the Ada syntax, the sequence of statements in 6373 -- a handled sequence of statements can only contain statements, we 6374 -- allow free mixing of declarations and statements in the resulting 6375 -- expanded tree. This is for example used to deal with the case of 6376 -- a cleanup procedure that must handle declarations as well as the 6377 -- statements of a block. 6378 6379 -- N_Handled_Sequence_Of_Statements 6380 -- Sloc points to first token of first statement 6381 -- Statements (List3) 6382 -- End_Label (Node4) (set to Empty if expander generated) 6383 -- Exception_Handlers (List5) (set to No_List if none present) 6384 -- At_End_Proc (Node1) (set to Empty if no clean up procedure) 6385 -- First_Real_Statement (Node2-Sem) 6386 6387 -- Note: the parent always contains a Declarations field which contains 6388 -- declarations associated with the handled sequence of statements. This 6389 -- is true even in the case of an accept statement (see description of 6390 -- the N_Accept_Statement node). 6391 6392 -- End_Label refers to the containing construct 6393 6394 ----------------------------- 6395 -- 11.2 Exception Handler -- 6396 ----------------------------- 6397 6398 -- EXCEPTION_HANDLER ::= 6399 -- when [CHOICE_PARAMETER_SPECIFICATION :] 6400 -- EXCEPTION_CHOICE {| EXCEPTION_CHOICE} => 6401 -- SEQUENCE_OF_STATEMENTS 6402 6403 -- Note: choice parameter specification is not allowed in Ada 83 mode 6404 6405 -- N_Exception_Handler 6406 -- Sloc points to WHEN 6407 -- Choice_Parameter (Node2) (set to Empty if not present) 6408 -- Exception_Choices (List4) 6409 -- Statements (List3) 6410 -- Exception_Label (Node5-Sem) (set to Empty of not present) 6411 -- Local_Raise_Statements (Elist1-Sem) (set to No_Elist if not present) 6412 -- Local_Raise_Not_OK (Flag7-Sem) 6413 -- Has_Local_Raise (Flag8-Sem) 6414 6415 ------------------------------------------ 6416 -- 11.2 Choice parameter specification -- 6417 ------------------------------------------ 6418 6419 -- CHOICE_PARAMETER_SPECIFICATION ::= DEFINING_IDENTIFIER 6420 6421 ---------------------------- 6422 -- 11.2 Exception Choice -- 6423 ---------------------------- 6424 6425 -- EXCEPTION_CHOICE ::= exception_NAME | others 6426 6427 -- Except in the case of OTHERS, no explicit node appears in the tree 6428 -- for exception choice. Instead the exception name appears directly. 6429 -- An OTHERS choice is represented by a N_Others_Choice node (see 6430 -- section 3.8.1. 6431 6432 -- Note: for the exception choice created for an at end handler, the 6433 -- exception choice is an N_Others_Choice node with All_Others set. 6434 6435 --------------------------- 6436 -- 11.3 Raise Statement -- 6437 --------------------------- 6438 6439 -- RAISE_STATEMENT ::= raise [exception_NAME]; 6440 6441 -- In Ada 2005, we have 6442 6443 -- RAISE_STATEMENT ::= 6444 -- raise; | raise exception_NAME [with string_EXPRESSION]; 6445 6446 -- N_Raise_Statement 6447 -- Sloc points to RAISE 6448 -- Name (Node2) (set to Empty if no exception name present) 6449 -- Expression (Node3) (set to Empty if no expression present) 6450 -- From_At_End (Flag4-Sem) 6451 6452 ---------------------------- 6453 -- 11.3 Raise Expression -- 6454 ---------------------------- 6455 6456 -- RAISE_EXPRESSION ::= raise exception_NAME [with string_EXPRESSION] 6457 6458 -- N_Raise_Expression 6459 -- Sloc points to RAISE 6460 -- Name (Node2) (always present) 6461 -- Expression (Node3) (set to Empty if no expression present) 6462 -- Convert_To_Return_False (Flag13-Sem) 6463 -- plus fields for expression 6464 6465 ------------------------------- 6466 -- 12.1 Generic Declaration -- 6467 ------------------------------- 6468 6469 -- GENERIC_DECLARATION ::= 6470 -- GENERIC_SUBPROGRAM_DECLARATION | GENERIC_PACKAGE_DECLARATION 6471 6472 ------------------------------------------ 6473 -- 12.1 Generic Subprogram Declaration -- 6474 ------------------------------------------ 6475 6476 -- GENERIC_SUBPROGRAM_DECLARATION ::= 6477 -- GENERIC_FORMAL_PART SUBPROGRAM_SPECIFICATION 6478 -- [ASPECT_SPECIFICATIONS]; 6479 6480 -- Note: Generic_Formal_Declarations can include pragmas 6481 6482 -- N_Generic_Subprogram_Declaration 6483 -- Sloc points to GENERIC 6484 -- Specification (Node1) subprogram specification 6485 -- Corresponding_Body (Node5-Sem) 6486 -- Generic_Formal_Declarations (List2) from generic formal part 6487 -- Parent_Spec (Node4-Sem) 6488 6489 --------------------------------------- 6490 -- 12.1 Generic Package Declaration -- 6491 --------------------------------------- 6492 6493 -- GENERIC_PACKAGE_DECLARATION ::= 6494 -- GENERIC_FORMAL_PART PACKAGE_SPECIFICATION 6495 -- [ASPECT_SPECIFICATIONS]; 6496 6497 -- Note: when we do generics right, the Activation_Chain_Entity entry 6498 -- for this node can be removed (since the expander won't see generic 6499 -- units any more)???. 6500 6501 -- Note: Generic_Formal_Declarations can include pragmas 6502 6503 -- N_Generic_Package_Declaration 6504 -- Sloc points to GENERIC 6505 -- Specification (Node1) package specification 6506 -- Corresponding_Body (Node5-Sem) 6507 -- Generic_Formal_Declarations (List2) from generic formal part 6508 -- Parent_Spec (Node4-Sem) 6509 -- Activation_Chain_Entity (Node3-Sem) 6510 6511 ------------------------------- 6512 -- 12.1 Generic Formal Part -- 6513 ------------------------------- 6514 6515 -- GENERIC_FORMAL_PART ::= 6516 -- generic {GENERIC_FORMAL_PARAMETER_DECLARATION | USE_CLAUSE} 6517 6518 ------------------------------------------------ 6519 -- 12.1 Generic Formal Parameter Declaration -- 6520 ------------------------------------------------ 6521 6522 -- GENERIC_FORMAL_PARAMETER_DECLARATION ::= 6523 -- FORMAL_OBJECT_DECLARATION 6524 -- | FORMAL_TYPE_DECLARATION 6525 -- | FORMAL_SUBPROGRAM_DECLARATION 6526 -- | FORMAL_PACKAGE_DECLARATION 6527 6528 --------------------------------- 6529 -- 12.3 Generic Instantiation -- 6530 --------------------------------- 6531 6532 -- GENERIC_INSTANTIATION ::= 6533 -- package DEFINING_PROGRAM_UNIT_NAME is 6534 -- new generic_package_NAME [GENERIC_ACTUAL_PART] 6535 -- [ASPECT_SPECIFICATIONS]; 6536 -- | [[not] overriding] 6537 -- procedure DEFINING_PROGRAM_UNIT_NAME is 6538 -- new generic_procedure_NAME [GENERIC_ACTUAL_PART] 6539 -- [ASPECT_SPECIFICATIONS]; 6540 -- | [[not] overriding] 6541 -- function DEFINING_DESIGNATOR is 6542 -- new generic_function_NAME [GENERIC_ACTUAL_PART] 6543 -- [ASPECT_SPECIFICATIONS]; 6544 6545 -- N_Package_Instantiation 6546 -- Sloc points to PACKAGE 6547 -- Defining_Unit_Name (Node1) 6548 -- Name (Node2) 6549 -- Generic_Associations (List3) (set to No_List if no 6550 -- generic actual part) 6551 -- Parent_Spec (Node4-Sem) 6552 -- Instance_Spec (Node5-Sem) 6553 -- ABE_Is_Certain (Flag18-Sem) 6554 6555 -- N_Procedure_Instantiation 6556 -- Sloc points to PROCEDURE 6557 -- Defining_Unit_Name (Node1) 6558 -- Name (Node2) 6559 -- Parent_Spec (Node4-Sem) 6560 -- Generic_Associations (List3) (set to No_List if no 6561 -- generic actual part) 6562 -- Instance_Spec (Node5-Sem) 6563 -- Must_Override (Flag14) set if overriding indicator present 6564 -- Must_Not_Override (Flag15) set if not_overriding indicator present 6565 -- ABE_Is_Certain (Flag18-Sem) 6566 6567 -- N_Function_Instantiation 6568 -- Sloc points to FUNCTION 6569 -- Defining_Unit_Name (Node1) 6570 -- Name (Node2) 6571 -- Generic_Associations (List3) (set to No_List if no 6572 -- generic actual part) 6573 -- Parent_Spec (Node4-Sem) 6574 -- Instance_Spec (Node5-Sem) 6575 -- Must_Override (Flag14) set if overriding indicator present 6576 -- Must_Not_Override (Flag15) set if not_overriding indicator present 6577 -- ABE_Is_Certain (Flag18-Sem) 6578 6579 -- Note: overriding indicator is an Ada 2005 feature 6580 6581 ------------------------------- 6582 -- 12.3 Generic Actual Part -- 6583 ------------------------------- 6584 6585 -- GENERIC_ACTUAL_PART ::= 6586 -- (GENERIC_ASSOCIATION {, GENERIC_ASSOCIATION}) 6587 6588 ------------------------------- 6589 -- 12.3 Generic Association -- 6590 ------------------------------- 6591 6592 -- GENERIC_ASSOCIATION ::= 6593 -- [generic_formal_parameter_SELECTOR_NAME =>] 6594 6595 -- Note: unlike the procedure call case, a generic association node 6596 -- is generated for every association, even if no formal parameter 6597 -- selector name is present. In this case the parser will leave the 6598 -- Selector_Name field set to Empty, to be filled in later by the 6599 -- semantic pass. 6600 6601 -- In Ada 2005, a formal may be associated with a box, if the 6602 -- association is part of the list of actuals for a formal package. 6603 -- If the association is given by OTHERS => <>, the association is 6604 -- an N_Others_Choice. 6605 6606 -- N_Generic_Association 6607 -- Sloc points to first token of generic association 6608 -- Selector_Name (Node2) (set to Empty if no formal 6609 -- parameter selector name) 6610 -- Explicit_Generic_Actual_Parameter (Node1) (Empty if box present) 6611 -- Box_Present (Flag15) (for formal_package associations with a box) 6612 6613 --------------------------------------------- 6614 -- 12.3 Explicit Generic Actual Parameter -- 6615 --------------------------------------------- 6616 6617 -- EXPLICIT_GENERIC_ACTUAL_PARAMETER ::= 6618 -- EXPRESSION | variable_NAME | subprogram_NAME 6619 -- | entry_NAME | SUBTYPE_MARK | package_instance_NAME 6620 6621 ------------------------------------- 6622 -- 12.4 Formal Object Declaration -- 6623 ------------------------------------- 6624 6625 -- FORMAL_OBJECT_DECLARATION ::= 6626 -- DEFINING_IDENTIFIER_LIST : 6627 -- MODE [NULL_EXCLUSION] SUBTYPE_MARK [:= DEFAULT_EXPRESSION] 6628 -- [ASPECT_SPECIFICATIONS]; 6629 -- | DEFINING_IDENTIFIER_LIST : 6630 -- MODE ACCESS_DEFINITION [:= DEFAULT_EXPRESSION] 6631 -- [ASPECT_SPECIFICATIONS]; 6632 6633 -- Although the syntax allows multiple identifiers in the list, the 6634 -- semantics is as though successive declarations were given with 6635 -- identical type definition and expression components. To simplify 6636 -- semantic processing, the parser represents a multiple declaration 6637 -- case as a sequence of single declarations, using the More_Ids and 6638 -- Prev_Ids flags to preserve the original source form as described 6639 -- in the section on "Handling of Defining Identifier Lists". 6640 6641 -- N_Formal_Object_Declaration 6642 -- Sloc points to first identifier 6643 -- Defining_Identifier (Node1) 6644 -- In_Present (Flag15) 6645 -- Out_Present (Flag17) 6646 -- Null_Exclusion_Present (Flag11) (set to False if not present) 6647 -- Subtype_Mark (Node4) (set to Empty if not present) 6648 -- Access_Definition (Node3) (set to Empty if not present) 6649 -- Default_Expression (Node5) (set to Empty if no default expression) 6650 -- More_Ids (Flag5) (set to False if no more identifiers in list) 6651 -- Prev_Ids (Flag6) (set to False if no previous identifiers in list) 6652 6653 ----------------------------------- 6654 -- 12.5 Formal Type Declaration -- 6655 ----------------------------------- 6656 6657 -- FORMAL_TYPE_DECLARATION ::= 6658 -- type DEFINING_IDENTIFIER [DISCRIMINANT_PART] 6659 -- is FORMAL_TYPE_DEFINITION 6660 -- [ASPECT_SPECIFICATIONS]; 6661 -- | type DEFINING_IDENTIFIER [DISCRIMINANT_PART] [is tagged] 6662 6663 -- N_Formal_Type_Declaration 6664 -- Sloc points to TYPE 6665 -- Defining_Identifier (Node1) 6666 -- Formal_Type_Definition (Node3) 6667 -- Discriminant_Specifications (List4) (set to No_List if no 6668 -- discriminant part) 6669 -- Unknown_Discriminants_Present (Flag13) set if (<>) discriminant 6670 6671 ---------------------------------- 6672 -- 12.5 Formal type definition -- 6673 ---------------------------------- 6674 6675 -- FORMAL_TYPE_DEFINITION ::= 6676 -- FORMAL_PRIVATE_TYPE_DEFINITION 6677 -- | FORMAL_DERIVED_TYPE_DEFINITION 6678 -- | FORMAL_DISCRETE_TYPE_DEFINITION 6679 -- | FORMAL_SIGNED_INTEGER_TYPE_DEFINITION 6680 -- | FORMAL_MODULAR_TYPE_DEFINITION 6681 -- | FORMAL_FLOATING_POINT_DEFINITION 6682 -- | FORMAL_ORDINARY_FIXED_POINT_DEFINITION 6683 -- | FORMAL_DECIMAL_FIXED_POINT_DEFINITION 6684 -- | FORMAL_ARRAY_TYPE_DEFINITION 6685 -- | FORMAL_ACCESS_TYPE_DEFINITION 6686 -- | FORMAL_INTERFACE_TYPE_DEFINITION 6687 -- | FORMAL_INCOMPLETE_TYPE_DEFINITION 6688 6689 -- The Ada 2012 syntax introduces two new non-terminals: 6690 -- Formal_{Complete,Incomplete}_Type_Declaration just to introduce 6691 -- the latter category. Here we introduce an incomplete type definition 6692 -- in order to preserve as much as possible the existing structure. 6693 6694 --------------------------------------------- 6695 -- 12.5.1 Formal Private Type Definition -- 6696 --------------------------------------------- 6697 6698 -- FORMAL_PRIVATE_TYPE_DEFINITION ::= 6699 -- [[abstract] tagged] [limited] private 6700 6701 -- Note: TAGGED is not allowed in Ada 83 mode 6702 6703 -- N_Formal_Private_Type_Definition 6704 -- Sloc points to PRIVATE 6705 -- Abstract_Present (Flag4) 6706 -- Tagged_Present (Flag15) 6707 -- Limited_Present (Flag17) 6708 6709 -------------------------------------------- 6710 -- 12.5.1 Formal Derived Type Definition -- 6711 -------------------------------------------- 6712 6713 -- FORMAL_DERIVED_TYPE_DEFINITION ::= 6714 -- [abstract] [limited | synchronized] 6715 -- new SUBTYPE_MARK [[and INTERFACE_LIST] with private] 6716 -- Note: this construct is not allowed in Ada 83 mode 6717 6718 -- N_Formal_Derived_Type_Definition 6719 -- Sloc points to NEW 6720 -- Subtype_Mark (Node4) 6721 -- Private_Present (Flag15) 6722 -- Abstract_Present (Flag4) 6723 -- Limited_Present (Flag17) 6724 -- Synchronized_Present (Flag7) 6725 -- Interface_List (List2) (set to No_List if none) 6726 6727 ----------------------------------------------- 6728 -- 12.5.1 Formal Incomplete Type Definition -- 6729 ----------------------------------------------- 6730 6731 -- FORMAL_INCOMPLETE_TYPE_DEFINITION ::= [tagged] 6732 6733 -- N_Formal_Incomplete_Type_Definition 6734 -- Sloc points to identifier of parent 6735 -- Tagged_Present (Flag15) 6736 6737 --------------------------------------------- 6738 -- 12.5.2 Formal Discrete Type Definition -- 6739 --------------------------------------------- 6740 6741 -- FORMAL_DISCRETE_TYPE_DEFINITION ::= (<>) 6742 6743 -- N_Formal_Discrete_Type_Definition 6744 -- Sloc points to ( 6745 6746 --------------------------------------------------- 6747 -- 12.5.2 Formal Signed Integer Type Definition -- 6748 --------------------------------------------------- 6749 6750 -- FORMAL_SIGNED_INTEGER_TYPE_DEFINITION ::= range <> 6751 6752 -- N_Formal_Signed_Integer_Type_Definition 6753 -- Sloc points to RANGE 6754 6755 -------------------------------------------- 6756 -- 12.5.2 Formal Modular Type Definition -- 6757 -------------------------------------------- 6758 6759 -- FORMAL_MODULAR_TYPE_DEFINITION ::= mod <> 6760 6761 -- N_Formal_Modular_Type_Definition 6762 -- Sloc points to MOD 6763 6764 ---------------------------------------------- 6765 -- 12.5.2 Formal Floating Point Definition -- 6766 ---------------------------------------------- 6767 6768 -- FORMAL_FLOATING_POINT_DEFINITION ::= digits <> 6769 6770 -- N_Formal_Floating_Point_Definition 6771 -- Sloc points to DIGITS 6772 6773 ---------------------------------------------------- 6774 -- 12.5.2 Formal Ordinary Fixed Point Definition -- 6775 ---------------------------------------------------- 6776 6777 -- FORMAL_ORDINARY_FIXED_POINT_DEFINITION ::= delta <> 6778 6779 -- N_Formal_Ordinary_Fixed_Point_Definition 6780 -- Sloc points to DELTA 6781 6782 --------------------------------------------------- 6783 -- 12.5.2 Formal Decimal Fixed Point Definition -- 6784 --------------------------------------------------- 6785 6786 -- FORMAL_DECIMAL_FIXED_POINT_DEFINITION ::= delta <> digits <> 6787 6788 -- Note: formal decimal fixed point definition not allowed in Ada 83 6789 6790 -- N_Formal_Decimal_Fixed_Point_Definition 6791 -- Sloc points to DELTA 6792 6793 ------------------------------------------ 6794 -- 12.5.3 Formal Array Type Definition -- 6795 ------------------------------------------ 6796 6797 -- FORMAL_ARRAY_TYPE_DEFINITION ::= ARRAY_TYPE_DEFINITION 6798 6799 ------------------------------------------- 6800 -- 12.5.4 Formal Access Type Definition -- 6801 ------------------------------------------- 6802 6803 -- FORMAL_ACCESS_TYPE_DEFINITION ::= ACCESS_TYPE_DEFINITION 6804 6805 ---------------------------------------------- 6806 -- 12.5.5 Formal Interface Type Definition -- 6807 ---------------------------------------------- 6808 6809 -- FORMAL_INTERFACE_TYPE_DEFINITION ::= INTERFACE_TYPE_DEFINITION 6810 6811 ----------------------------------------- 6812 -- 12.6 Formal Subprogram Declaration -- 6813 ----------------------------------------- 6814 6815 -- FORMAL_SUBPROGRAM_DECLARATION ::= 6816 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION 6817 -- | FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION 6818 6819 -------------------------------------------------- 6820 -- 12.6 Formal Concrete Subprogram Declaration -- 6821 -------------------------------------------------- 6822 6823 -- FORMAL_CONCRETE_SUBPROGRAM_DECLARATION ::= 6824 -- with SUBPROGRAM_SPECIFICATION [is SUBPROGRAM_DEFAULT] 6825 -- [ASPECT_SPECIFICATIONS]; 6826 6827 -- N_Formal_Concrete_Subprogram_Declaration 6828 -- Sloc points to WITH 6829 -- Specification (Node1) 6830 -- Default_Name (Node2) (set to Empty if no subprogram default) 6831 -- Box_Present (Flag15) 6832 6833 -- Note: if no subprogram default is present, then Name is set 6834 -- to Empty, and Box_Present is False. 6835 6836 -------------------------------------------------- 6837 -- 12.6 Formal Abstract Subprogram Declaration -- 6838 -------------------------------------------------- 6839 6840 -- FORMAL_ABSTRACT_SUBPROGRAM_DECLARATION ::= 6841 -- with SUBPROGRAM_SPECIFICATION is abstract [SUBPROGRAM_DEFAULT] 6842 -- [ASPECT_SPECIFICATIONS]; 6843 6844 -- N_Formal_Abstract_Subprogram_Declaration 6845 -- Sloc points to WITH 6846 -- Specification (Node1) 6847 -- Default_Name (Node2) (set to Empty if no subprogram default) 6848 -- Box_Present (Flag15) 6849 6850 -- Note: if no subprogram default is present, then Name is set 6851 -- to Empty, and Box_Present is False. 6852 6853 ------------------------------ 6854 -- 12.6 Subprogram Default -- 6855 ------------------------------ 6856 6857 -- SUBPROGRAM_DEFAULT ::= DEFAULT_NAME | <> 6858 6859 -- There is no separate node in the tree for a subprogram default. 6860 -- Instead the parent (N_Formal_Concrete_Subprogram_Declaration 6861 -- or N_Formal_Abstract_Subprogram_Declaration) node contains the 6862 -- default name or box indication, as needed. 6863 6864 ------------------------ 6865 -- 12.6 Default Name -- 6866 ------------------------ 6867 6868 -- DEFAULT_NAME ::= NAME 6869 6870 -------------------------------------- 6871 -- 12.7 Formal Package Declaration -- 6872 -------------------------------------- 6873 6874 -- FORMAL_PACKAGE_DECLARATION ::= 6875 -- with package DEFINING_IDENTIFIER 6876 -- is new generic_package_NAME FORMAL_PACKAGE_ACTUAL_PART 6877 -- [ASPECT_SPECIFICATIONS]; 6878 6879 -- Note: formal package declarations not allowed in Ada 83 mode 6880 6881 -- N_Formal_Package_Declaration 6882 -- Sloc points to WITH 6883 -- Defining_Identifier (Node1) 6884 -- Name (Node2) 6885 -- Generic_Associations (List3) (set to No_List if (<>) case or 6886 -- empty generic actual part) 6887 -- Box_Present (Flag15) 6888 -- Instance_Spec (Node5-Sem) 6889 -- ABE_Is_Certain (Flag18-Sem) 6890 6891 -------------------------------------- 6892 -- 12.7 Formal Package Actual Part -- 6893 -------------------------------------- 6894 6895 -- FORMAL_PACKAGE_ACTUAL_PART ::= 6896 -- ([OTHERS] => <>) 6897 -- | [GENERIC_ACTUAL_PART] 6898 -- (FORMAL_PACKAGE_ASSOCIATION {. FORMAL_PACKAGE_ASSOCIATION} 6899 6900 -- FORMAL_PACKAGE_ASSOCIATION ::= 6901 -- GENERIC_ASSOCIATION 6902 -- | GENERIC_FORMAL_PARAMETER_SELECTOR_NAME => <> 6903 6904 -- There is no explicit node in the tree for a formal package actual 6905 -- part. Instead the information appears in the parent node (i.e. the 6906 -- formal package declaration node itself). 6907 6908 -- There is no explicit node for a formal package association. All of 6909 -- them are represented either by a generic association, possibly with 6910 -- Box_Present, or by an N_Others_Choice. 6911 6912 --------------------------------- 6913 -- 13.1 Representation clause -- 6914 --------------------------------- 6915 6916 -- REPRESENTATION_CLAUSE ::= 6917 -- ATTRIBUTE_DEFINITION_CLAUSE 6918 -- | ENUMERATION_REPRESENTATION_CLAUSE 6919 -- | RECORD_REPRESENTATION_CLAUSE 6920 -- | AT_CLAUSE 6921 6922 ---------------------- 6923 -- 13.1 Local Name -- 6924 ---------------------- 6925 6926 -- LOCAL_NAME := 6927 -- DIRECT_NAME 6928 -- | DIRECT_NAME'ATTRIBUTE_DESIGNATOR 6929 -- | library_unit_NAME 6930 6931 -- The construct DIRECT_NAME'ATTRIBUTE_DESIGNATOR appears in the tree 6932 -- as an attribute reference, which has essentially the same form. 6933 6934 --------------------------------------- 6935 -- 13.3 Attribute definition clause -- 6936 --------------------------------------- 6937 6938 -- ATTRIBUTE_DEFINITION_CLAUSE ::= 6939 -- for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use EXPRESSION; 6940 -- | for LOCAL_NAME'ATTRIBUTE_DESIGNATOR use NAME; 6941 6942 -- In Ada 83, the expression must be a simple expression and the 6943 -- local name must be a direct name. 6944 6945 -- Note: the only attribute definition clause that is processed by 6946 -- gigi is an address clause. For all other cases, the information 6947 -- is extracted by the front end and either results in setting entity 6948 -- information, e.g. Esize for the Size clause, or in appropriate 6949 -- expansion actions (e.g. in the case of Storage_Size). 6950 6951 -- For an address clause, Gigi constructs the appropriate addressing 6952 -- code. It also ensures that no aliasing optimizations are made 6953 -- for the object for which the address clause appears. 6954 6955 -- Note: for an address clause used to achieve an overlay: 6956 6957 -- A : Integer; 6958 -- B : Integer; 6959 -- for B'Address use A'Address; 6960 6961 -- the above rule means that Gigi will ensure that no optimizations 6962 -- will be made for B that would violate the implementation advice 6963 -- of RM 13.3(19). However, this advice applies only to B and not 6964 -- to A, which seems unfortunate. The GNAT front end will mark the 6965 -- object A as volatile to also prevent unwanted optimization 6966 -- assumptions based on no aliasing being made for B. 6967 6968 -- N_Attribute_Definition_Clause 6969 -- Sloc points to FOR 6970 -- Name (Node2) the local name 6971 -- Chars (Name1) the identifier name from the attribute designator 6972 -- Expression (Node3) the expression or name 6973 -- Entity (Node4-Sem) 6974 -- Next_Rep_Item (Node5-Sem) 6975 -- From_At_Mod (Flag4-Sem) 6976 -- Check_Address_Alignment (Flag11-Sem) 6977 -- From_Aspect_Specification (Flag13-Sem) 6978 -- Is_Delayed_Aspect (Flag14-Sem) 6979 -- Address_Warning_Posted (Flag18-Sem) 6980 6981 -- Note: if From_Aspect_Specification is set, then Sloc points to the 6982 -- aspect name, and Entity is resolved already to reference the entity 6983 -- to which the aspect applies. 6984 6985 ----------------------------------- 6986 -- 13.3.1 Aspect Specifications -- 6987 ----------------------------------- 6988 6989 -- We modify the RM grammar here, the RM grammar is: 6990 6991 -- ASPECT_SPECIFICATION ::= 6992 -- with ASPECT_MARK [=> ASPECT_DEFINITION] {, 6993 -- ASPECT_MARK [=> ASPECT_DEFINITION] } 6994 6995 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 6996 6997 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 6998 6999 -- That's inconvenient, since there is no non-terminal name for a single 7000 -- entry in the list of aspects. So we use this grammar instead: 7001 7002 -- ASPECT_SPECIFICATIONS ::= 7003 -- with ASPECT_SPECIFICATION {, ASPECT_SPECIFICATION} 7004 7005 -- ASPECT_SPECIFICATION => 7006 -- ASPECT_MARK [=> ASPECT_DEFINITION] 7007 7008 -- ASPECT_MARK ::= aspect_IDENTIFIER['Class] 7009 7010 -- ASPECT_DEFINITION ::= NAME | EXPRESSION 7011 7012 -- See separate package Aspects for details on the incorporation of 7013 -- these nodes into the tree, and how aspect specifications for a given 7014 -- declaration node are associated with that node. 7015 7016 -- N_Aspect_Specification 7017 -- Sloc points to aspect identifier 7018 -- Identifier (Node1) aspect identifier 7019 -- Aspect_Rep_Item (Node2-Sem) 7020 -- Expression (Node3) Aspect_Definition (set to Empty if none) 7021 -- Entity (Node4-Sem) entity to which the aspect applies 7022 -- Class_Present (Flag6) Set if 'Class present 7023 -- Next_Rep_Item (Node5-Sem) 7024 -- Split_PPC (Flag17) Set if split pre/post attribute 7025 -- Is_Boolean_Aspect (Flag16-Sem) 7026 -- Is_Checked (Flag11-Sem) 7027 -- Is_Delayed_Aspect (Flag14-Sem) 7028 -- Is_Disabled (Flag15-Sem) 7029 -- Is_Ignored (Flag9-Sem) 7030 7031 -- Note: Aspect_Specification is an Ada 2012 feature 7032 7033 -- Note: The Identifier serves to identify the aspect involved (it 7034 -- is the aspect whose name corresponds to the Chars field). This 7035 -- means that the other fields of this identifier are unused, and 7036 -- in particular we use the Entity field of this identifier to save 7037 -- a copy of the expression for visibility analysis, see spec of 7038 -- Sem_Ch13 for full details of this usage. 7039 7040 -- In the case of aspects of the form xxx'Class, the aspect identifier 7041 -- is for xxx, and Class_Present is set to True. 7042 7043 -- Note: When a Pre or Post aspect specification is processed, it is 7044 -- broken into AND THEN sections. The left most section has Split_PPC 7045 -- set to False, indicating that it is the original specification (e.g. 7046 -- for posting errors). For the other sections, Split_PPC is set True. 7047 7048 --------------------------------------------- 7049 -- 13.4 Enumeration representation clause -- 7050 --------------------------------------------- 7051 7052 -- ENUMERATION_REPRESENTATION_CLAUSE ::= 7053 -- for first_subtype_LOCAL_NAME use ENUMERATION_AGGREGATE; 7054 7055 -- In Ada 83, the name must be a direct name 7056 7057 -- N_Enumeration_Representation_Clause 7058 -- Sloc points to FOR 7059 -- Identifier (Node1) direct name 7060 -- Array_Aggregate (Node3) 7061 -- Next_Rep_Item (Node5-Sem) 7062 7063 --------------------------------- 7064 -- 13.4 Enumeration aggregate -- 7065 --------------------------------- 7066 7067 -- ENUMERATION_AGGREGATE ::= ARRAY_AGGREGATE 7068 7069 ------------------------------------------ 7070 -- 13.5.1 Record representation clause -- 7071 ------------------------------------------ 7072 7073 -- RECORD_REPRESENTATION_CLAUSE ::= 7074 -- for first_subtype_LOCAL_NAME use 7075 -- record [MOD_CLAUSE] 7076 -- {COMPONENT_CLAUSE} 7077 -- end record; 7078 7079 -- Gigi restriction: Mod_Clause is always Empty (if present it is 7080 -- replaced by a corresponding Alignment attribute definition clause). 7081 7082 -- Note: Component_Clauses can include pragmas 7083 7084 -- N_Record_Representation_Clause 7085 -- Sloc points to FOR 7086 -- Identifier (Node1) direct name 7087 -- Mod_Clause (Node2) (set to Empty if no mod clause present) 7088 -- Component_Clauses (List3) 7089 -- Next_Rep_Item (Node5-Sem) 7090 7091 ------------------------------ 7092 -- 13.5.1 Component clause -- 7093 ------------------------------ 7094 7095 -- COMPONENT_CLAUSE ::= 7096 -- component_LOCAL_NAME at POSITION 7097 -- range FIRST_BIT .. LAST_BIT; 7098 7099 -- N_Component_Clause 7100 -- Sloc points to AT 7101 -- Component_Name (Node1) points to Name or Attribute_Reference 7102 -- Position (Node2) 7103 -- First_Bit (Node3) 7104 -- Last_Bit (Node4) 7105 7106 ---------------------- 7107 -- 13.5.1 Position -- 7108 ---------------------- 7109 7110 -- POSITION ::= static_EXPRESSION 7111 7112 ----------------------- 7113 -- 13.5.1 First_Bit -- 7114 ----------------------- 7115 7116 -- FIRST_BIT ::= static_SIMPLE_EXPRESSION 7117 7118 ---------------------- 7119 -- 13.5.1 Last_Bit -- 7120 ---------------------- 7121 7122 -- LAST_BIT ::= static_SIMPLE_EXPRESSION 7123 7124 -------------------------- 7125 -- 13.8 Code statement -- 7126 -------------------------- 7127 7128 -- CODE_STATEMENT ::= QUALIFIED_EXPRESSION; 7129 7130 -- Note: in GNAT, the qualified expression has the form 7131 7132 -- Asm_Insn'(Asm (...)); 7133 7134 -- See package System.Machine_Code in file s-maccod.ads for details on 7135 -- the allowed parameters to Asm. There are two ways this node can 7136 -- arise, as a code statement, in which case the expression is the 7137 -- qualified expression, or as a result of the expansion of an intrinsic 7138 -- call to the Asm or Asm_Input procedure. 7139 7140 -- N_Code_Statement 7141 -- Sloc points to first token of the expression 7142 -- Expression (Node3) 7143 7144 -- Note: package Exp_Code contains an abstract functional interface 7145 -- for use by Gigi in accessing the data from N_Code_Statement nodes. 7146 7147 ------------------------ 7148 -- 13.12 Restriction -- 7149 ------------------------ 7150 7151 -- RESTRICTION ::= 7152 -- restriction_IDENTIFIER 7153 -- | restriction_parameter_IDENTIFIER => EXPRESSION 7154 7155 -- There is no explicit node for restrictions. Instead the restriction 7156 -- appears in normal pragma syntax as a pragma argument association, 7157 -- which has the same syntactic form. 7158 7159 -------------------------- 7160 -- B.2 Shift Operators -- 7161 -------------------------- 7162 7163 -- Calls to the intrinsic shift functions are converted to one of 7164 -- the following shift nodes, which have the form of normal binary 7165 -- operator names. Note that for a given shift operation, one node 7166 -- covers all possible types, as for normal operators. 7167 7168 -- Note: it is perfectly permissible for the expander to generate 7169 -- shift operation nodes directly, in which case they will be analyzed 7170 -- and parsed in the usual manner. 7171 7172 -- Sprint syntax: shift-function-name!(expr, count) 7173 7174 -- Note: the Left_Opnd field holds the first argument (the value to 7175 -- be shifted). The Right_Opnd field holds the second argument (the 7176 -- shift count). The Chars field is the name of the intrinsic function. 7177 7178 -- N_Op_Rotate_Left 7179 -- Sloc points to the function name 7180 -- plus fields for binary operator 7181 -- plus fields for expression 7182 -- Shift_Count_OK (Flag4-Sem) 7183 7184 -- N_Op_Rotate_Right 7185 -- Sloc points to the function name 7186 -- plus fields for binary operator 7187 -- plus fields for expression 7188 -- Shift_Count_OK (Flag4-Sem) 7189 7190 -- N_Op_Shift_Left 7191 -- Sloc points to the function name 7192 -- plus fields for binary operator 7193 -- plus fields for expression 7194 -- Shift_Count_OK (Flag4-Sem) 7195 7196 -- N_Op_Shift_Right_Arithmetic 7197 -- Sloc points to the function name 7198 -- plus fields for binary operator 7199 -- plus fields for expression 7200 -- Shift_Count_OK (Flag4-Sem) 7201 7202 -- N_Op_Shift_Right 7203 -- Sloc points to the function name 7204 -- plus fields for binary operator 7205 -- plus fields for expression 7206 -- Shift_Count_OK (Flag4-Sem) 7207 7208 -- Note: N_Op_Rotate_Left, N_Op_Rotate_Right, N_Shift_Right_Arithmetic 7209 -- never appear in the expanded tree if Modify_Tree_For_C mode is set. 7210 7211 -- Note: For N_Op_Shift_Left and N_Op_Shift_Right, the right operand is 7212 -- always less than the word size if Modify_Tree_For_C mode is set. 7213 7214 -------------------------- 7215 -- Obsolescent Features -- 7216 -------------------------- 7217 7218 -- The syntax descriptions and tree nodes for obsolescent features are 7219 -- grouped together, corresponding to their location in appendix I in 7220 -- the RM. However, parsing and semantic analysis for these constructs 7221 -- is located in an appropriate chapter (see individual notes). 7222 7223 --------------------------- 7224 -- J.3 Delta Constraint -- 7225 --------------------------- 7226 7227 -- Note: the parse routine for this construct is located in section 7228 -- 3.5.9 of Par-Ch3, and semantic analysis is in Sem_Ch3, which is 7229 -- where delta constraint logically belongs. 7230 7231 -- DELTA_CONSTRAINT ::= DELTA static_EXPRESSION [RANGE_CONSTRAINT] 7232 7233 -- N_Delta_Constraint 7234 -- Sloc points to DELTA 7235 -- Delta_Expression (Node3) 7236 -- Range_Constraint (Node4) (set to Empty if not present) 7237 7238 -------------------- 7239 -- J.7 At Clause -- 7240 -------------------- 7241 7242 -- AT_CLAUSE ::= for DIRECT_NAME use at EXPRESSION; 7243 7244 -- Note: the parse routine for this construct is located in Par-Ch13, 7245 -- and the semantic analysis is in Sem_Ch13, where at clause logically 7246 -- belongs if it were not obsolescent. 7247 7248 -- Note: in Ada 83 the expression must be a simple expression 7249 7250 -- Gigi restriction: This node never appears, it is rewritten as an 7251 -- address attribute definition clause. 7252 7253 -- N_At_Clause 7254 -- Sloc points to FOR 7255 -- Identifier (Node1) 7256 -- Expression (Node3) 7257 7258 --------------------- 7259 -- J.8 Mod clause -- 7260 --------------------- 7261 7262 -- MOD_CLAUSE ::= at mod static_EXPRESSION; 7263 7264 -- Note: the parse routine for this construct is located in Par-Ch13, 7265 -- and the semantic analysis is in Sem_Ch13, where mod clause logically 7266 -- belongs if it were not obsolescent. 7267 7268 -- Note: in Ada 83, the expression must be a simple expression 7269 7270 -- Gigi restriction: this node never appears. It is replaced 7271 -- by a corresponding Alignment attribute definition clause. 7272 7273 -- Note: pragmas can appear before and after the MOD_CLAUSE since 7274 -- its name has "clause" in it. This is rather strange, but is quite 7275 -- definitely specified. The pragmas before are collected in the 7276 -- Pragmas_Before field of the mod clause node itself, and pragmas 7277 -- after are simply swallowed up in the list of component clauses. 7278 7279 -- N_Mod_Clause 7280 -- Sloc points to AT 7281 -- Expression (Node3) 7282 -- Pragmas_Before (List4) Pragmas before mod clause (No_List if none) 7283 7284 -------------------- 7285 -- Semantic Nodes -- 7286 -------------------- 7287 7288 -- These semantic nodes are used to hold additional semantic information. 7289 -- They are inserted into the tree as a result of semantic processing. 7290 -- Although there are no legitimate source syntax constructions that 7291 -- correspond directly to these nodes, we need a source syntax for the 7292 -- reconstructed tree printed by Sprint, and the node descriptions here 7293 -- show this syntax. 7294 7295 -------------- 7296 -- Contract -- 7297 -------------- 7298 7299 -- This node is used to hold the various parts of an entry, subprogram 7300 -- [body] or package [body] contract, in particular: 7301 -- Abstract states declared by a package declaration 7302 -- Contract cases that apply to a subprogram 7303 -- Dependency relations of inputs and output of a subprogram 7304 -- Global annotations classifying data as input or output 7305 -- Initialization sequences for a package declaration 7306 -- Pre- and postconditions that apply to a subprogram 7307 7308 -- The node appears in an entry and [generic] subprogram [body] entity. 7309 7310 -- Sprint syntax: <none> as the node should not appear in the tree, but 7311 -- only attached to an entry or [generic] subprogram 7312 -- entity. 7313 7314 -- N_Contract 7315 -- Sloc points to the subprogram's name 7316 -- Pre_Post_Conditions (Node1) (set to Empty if none) 7317 -- Contract_Test_Cases (Node2) (set to Empty if none) 7318 -- Classifications (Node3) (set to Empty if none) 7319 7320 -- Pre_Post_Conditions contains a collection of pragmas that correspond 7321 -- to pre- and postconditions associated with an entry or a subprogram 7322 -- [body or stub]. The pragmas can either come from source or be the 7323 -- byproduct of aspect expansion. Currently the following pragmas appear 7324 -- in this list: 7325 -- Post 7326 -- Postcondition 7327 -- Pre 7328 -- Precondition 7329 -- Refined_Post 7330 -- The ordering in the list is in LIFO fashion. 7331 7332 -- Note that there might be multiple preconditions or postconditions 7333 -- in this list, either because they come from separate pragmas in the 7334 -- source, or because a Pre (resp. Post) aspect specification has been 7335 -- broken into AND THEN sections. See Split_PPC for details. 7336 7337 -- Contract_Test_Cases contains a collection of pragmas that correspond 7338 -- to aspects/pragmas Contract_Cases and Test_Case. The ordering in the 7339 -- list is in LIFO fashion. 7340 7341 -- Classifications contains pragmas that either declare, categorize or 7342 -- establish dependencies between subprogram or package inputs and 7343 -- outputs. Currently the following pragmas appear in this list: 7344 -- Abstract_States 7345 -- Async_Readers 7346 -- Async_Writers 7347 -- Depends 7348 -- Effective_Reads 7349 -- Effective_Writes 7350 -- Global 7351 -- Initial_Condition 7352 -- Initializes 7353 -- Part_Of 7354 -- Refined_Depends 7355 -- Refined_Global 7356 -- Refined_States 7357 -- The ordering is in LIFO fashion. 7358 7359 ------------------- 7360 -- Expanded_Name -- 7361 ------------------- 7362 7363 -- The N_Expanded_Name node is used to represent a selected component 7364 -- name that has been resolved to an expanded name. The semantic phase 7365 -- replaces N_Selected_Component nodes that represent names by the use 7366 -- of this node, leaving the N_Selected_Component node used only when 7367 -- the prefix is a record or protected type. 7368 7369 -- The fields of the N_Expanded_Name node are layed out identically 7370 -- to those of the N_Selected_Component node, allowing conversion of 7371 -- an expanded name node to a selected component node to be done 7372 -- easily, see Sinfo.CN.Change_Selected_Component_To_Expanded_Name. 7373 7374 -- There is no special sprint syntax for an expanded name 7375 7376 -- N_Expanded_Name 7377 -- Sloc points to the period 7378 -- Chars (Name1) copy of Chars field of selector name 7379 -- Prefix (Node3) 7380 -- Selector_Name (Node2) 7381 -- Entity (Node4-Sem) 7382 -- Associated_Node (Node4-Sem) 7383 -- Has_Private_View (Flag11-Sem) set in generic units. 7384 -- Redundant_Use (Flag13-Sem) 7385 -- Atomic_Sync_Required (Flag14-Sem) 7386 -- plus fields for expression 7387 7388 ----------------------------- 7389 -- Expression with Actions -- 7390 ----------------------------- 7391 7392 -- This node is created by the analyzer/expander to handle some 7393 -- expansion cases, notably short circuit forms where there are 7394 -- actions associated with the right-hand side operand. 7395 7396 -- The N_Expression_With_Actions node represents an expression with 7397 -- an associated set of actions (which are executable statements and 7398 -- declarations, as might occur in a handled statement sequence). 7399 7400 -- The required semantics is that the set of actions is executed in 7401 -- the order in which it appears just before the expression is 7402 -- evaluated (and these actions must only be executed if the value 7403 -- of the expression is evaluated). The node is considered to be 7404 -- a subexpression, whose value is the value of the Expression after 7405 -- executing all the actions. 7406 7407 -- If the actions contain declarations, then these declarations may 7408 -- be referenced within the expression. However note that there is 7409 -- no proper scope associated with the expression-with-action, so the 7410 -- back-end will elaborate them in the context of the enclosing scope. 7411 7412 -- Sprint syntax: do 7413 -- action; 7414 -- action; 7415 -- ... 7416 -- action; 7417 -- in expression end 7418 7419 -- N_Expression_With_Actions 7420 -- Actions (List1) 7421 -- Expression (Node3) 7422 -- plus fields for expression 7423 7424 -- Note: In the final generated tree presented to the code generator, 7425 -- the actions list is always non-null, since there is no point in this 7426 -- node if the actions are Empty. During semantic analysis there are 7427 -- cases where it is convenient to temporarily generate an empty actions 7428 -- list. This arises in cases where we create such an empty actions 7429 -- list, and it may or may not end up being a place where additional 7430 -- actions are inserted. The expander removes such empty cases after 7431 -- the expression of the node is fully analyzed and expanded, at which 7432 -- point it is safe to remove it, since no more actions can be inserted. 7433 7434 -- Note: Expression may be a Null_Statement, in which case the 7435 -- N_Expression_With_Actions has type Standard_Void_Type. However some 7436 -- backends do not support such expression-with-actions occurring 7437 -- outside of a proper (non-void) expression, so this should just be 7438 -- used as an intermediate representation within the front end. Also 7439 -- note that this is really an irregularity (expressions and statements 7440 -- are not interchangeable, and in particular an N_Null_Statement is 7441 -- not a proper expression), and in the long term all cases of this 7442 -- idiom should instead use a new node kind N_Compound_Statement. 7443 7444 -- Note: In Modify_Tree_For_C, we never generate any declarations in 7445 -- the action list, which can contain only non-declarative statements. 7446 7447 -------------------- 7448 -- Free Statement -- 7449 -------------------- 7450 7451 -- The N_Free_Statement node is generated as a result of a call to an 7452 -- instantiation of Unchecked_Deallocation. The instantiation of this 7453 -- generic is handled specially and generates this node directly. 7454 7455 -- Sprint syntax: free expression 7456 7457 -- N_Free_Statement 7458 -- Sloc is copied from the unchecked deallocation call 7459 -- Expression (Node3) argument to unchecked deallocation call 7460 -- Storage_Pool (Node1-Sem) 7461 -- Procedure_To_Call (Node2-Sem) 7462 -- Actual_Designated_Subtype (Node4-Sem) 7463 7464 -- Note: in the case where a debug source file is generated, the Sloc 7465 -- for this node points to the FREE keyword in the Sprint file output. 7466 7467 ------------------- 7468 -- Freeze Entity -- 7469 ------------------- 7470 7471 -- This node marks the point in a declarative part at which an entity 7472 -- declared therein becomes frozen. The expander places initialization 7473 -- procedures for types at those points. Gigi uses the freezing point 7474 -- to elaborate entities that may depend on previous private types. 7475 7476 -- See the section in Einfo "Delayed Freezing and Elaboration" for 7477 -- a full description of the use of this node. 7478 7479 -- The Entity field points back to the entity for the type (whose 7480 -- Freeze_Node field points back to this freeze node). 7481 7482 -- The Actions field contains a list of declarations and statements 7483 -- generated by the expander which are associated with the freeze 7484 -- node, and are elaborated as though the freeze node were replaced 7485 -- by this sequence of actions. 7486 7487 -- Note: the Sloc field in the freeze node references a construct 7488 -- associated with the freezing point. This is used for posting 7489 -- messages in some error/warning situations, e.g. the case where 7490 -- a primitive operation of a tagged type is declared too late. 7491 7492 -- Sprint syntax: freeze entity-name [ 7493 -- freeze actions 7494 -- ] 7495 7496 -- N_Freeze_Entity 7497 -- Sloc points near freeze point (see above special note) 7498 -- Entity (Node4-Sem) 7499 -- Access_Types_To_Process (Elist2-Sem) (set to No_Elist if none) 7500 -- TSS_Elist (Elist3-Sem) (set to No_Elist if no associated TSS's) 7501 -- Actions (List1) (set to No_List if no freeze actions) 7502 -- First_Subtype_Link (Node5-Sem) (set to Empty if no link) 7503 7504 -- The Actions field holds actions associated with the freeze. These 7505 -- actions are elaborated at the point where the type is frozen. 7506 7507 -- Note: in the case where a debug source file is generated, the Sloc 7508 -- for this node points to the FREEZE keyword in the Sprint file output. 7509 7510 --------------------------- 7511 -- Freeze_Generic_Entity -- 7512 --------------------------- 7513 7514 -- The freeze point of an entity indicates the point at which the 7515 -- information needed to generate code for the entity is complete. 7516 -- The freeze node for an entity triggers expander activities, such as 7517 -- build initialization procedures, and backend activities, such as 7518 -- completing the elaboration of packages. 7519 7520 -- For entities declared within a generic unit, for which no code is 7521 -- generated, the freeze point is not equally meaningful. However, in 7522 -- Ada 2012 several semantic checks on declarations must be delayed to 7523 -- the freeze point, and we need to include such a mark in the tree to 7524 -- trigger these checks. The Freeze_Generic_Entity node plays no other 7525 -- role, and is ignored by the expander and the back-end. 7526 7527 -- Sprint syntax: freeze_generic entity-name 7528 7529 -- N_Freeze_Generic_Entity 7530 -- Sloc points near freeze point 7531 -- Entity (Node4-Sem) 7532 7533 -------------------------------- 7534 -- Implicit Label Declaration -- 7535 -------------------------------- 7536 7537 -- An implicit label declaration is created for every occurrence of a 7538 -- label on a statement or a label on a block or loop. It is chained 7539 -- in the declarations of the innermost enclosing block as specified 7540 -- in RM section 5.1 (3). 7541 7542 -- The Defining_Identifier is the actual identifier for the statement 7543 -- identifier. Note that the occurrence of the label is a reference, NOT 7544 -- the defining occurrence. The defining occurrence occurs at the head 7545 -- of the innermost enclosing block, and is represented by this node. 7546 7547 -- Note: from the grammar, this might better be called an implicit 7548 -- statement identifier declaration, but the term we choose seems 7549 -- friendlier, since at least informally statement identifiers are 7550 -- called labels in both cases (i.e. when used in labels, and when 7551 -- used as the identifiers of blocks and loops). 7552 7553 -- Note: although this is logically a semantic node, since it does not 7554 -- correspond directly to a source syntax construction, these nodes are 7555 -- actually created by the parser in a post pass done just after parsing 7556 -- is complete, before semantic analysis is started (see Par.Labl). 7557 7558 -- Sprint syntax: labelname : label; 7559 7560 -- N_Implicit_Label_Declaration 7561 -- Sloc points to the << token for a statement identifier, or to the 7562 -- LOOP, DECLARE, or BEGIN token for a loop or block identifier 7563 -- Defining_Identifier (Node1) 7564 -- Label_Construct (Node2-Sem) 7565 7566 -- Note: in the case where a debug source file is generated, the Sloc 7567 -- for this node points to the label name in the generated declaration. 7568 7569 --------------------- 7570 -- Itype_Reference -- 7571 --------------------- 7572 7573 -- This node is used to create a reference to an Itype. The only purpose 7574 -- is to make sure the Itype is defined if this is the first reference. 7575 7576 -- A typical use of this node is when an Itype is to be referenced in 7577 -- two branches of an IF statement. In this case it is important that 7578 -- the first use of the Itype not be inside the conditional, since then 7579 -- it might not be defined if the other branch of the IF is taken, in 7580 -- the case where the definition generates elaboration code. 7581 7582 -- The Itype field points to the referenced Itype 7583 7584 -- Sprint syntax: reference itype-name 7585 7586 -- N_Itype_Reference 7587 -- Sloc points to the node generating the reference 7588 -- Itype (Node1-Sem) 7589 7590 -- Note: in the case where a debug source file is generated, the Sloc 7591 -- for this node points to the REFERENCE keyword in the file output. 7592 7593 --------------------- 7594 -- Raise_xxx_Error -- 7595 --------------------- 7596 7597 -- One of these nodes is created during semantic analysis to replace 7598 -- a node for an expression that is determined to definitely raise 7599 -- the corresponding exception. 7600 7601 -- The N_Raise_xxx_Error node may also stand alone in place 7602 -- of a declaration or statement, in which case it simply causes 7603 -- the exception to be raised (i.e. it is equivalent to a raise 7604 -- statement that raises the corresponding exception). This use 7605 -- is distinguished by the fact that the Etype in this case is 7606 -- Standard_Void_Type; in the subexpression case, the Etype is the 7607 -- same as the type of the subexpression which it replaces. 7608 7609 -- If Condition is empty, then the raise is unconditional. If the 7610 -- Condition field is non-empty, it is a boolean expression which 7611 -- is first evaluated, and the exception is raised only if the 7612 -- value of the expression is True. In the unconditional case, the 7613 -- creation of this node is usually accompanied by a warning message 7614 -- error. The creation of this node will usually be accompanied by a 7615 -- message (unless it appears within the right operand of a short 7616 -- circuit form whose left argument is static and decisively 7617 -- eliminates elaboration of the raise operation. The condition field 7618 -- can ONLY be present when the node is used as a statement form, it 7619 -- may NOT be present in the case where the node appears within an 7620 -- expression. 7621 7622 -- The exception is generated with a message that contains the 7623 -- file name and line number, and then appended text. The Reason 7624 -- code shows the text to be added. The Reason code is an element 7625 -- of the type Types.RT_Exception_Code, and indicates both the 7626 -- message to be added, and the exception to be raised (which must 7627 -- match the node type). The value is stored by storing a Uint which 7628 -- is the Pos value of the enumeration element in this type. 7629 7630 -- Gigi restriction: This expander ensures that the type of the 7631 -- Condition field is always Standard.Boolean, even if the type 7632 -- in the source is some non-standard boolean type. 7633 7634 -- Sprint syntax: [xxx_error "msg"] 7635 -- or: [xxx_error when condition "msg"] 7636 7637 -- N_Raise_Constraint_Error 7638 -- Sloc references related construct 7639 -- Condition (Node1) (set to Empty if no condition) 7640 -- Reason (Uint3) 7641 -- plus fields for expression 7642 7643 -- N_Raise_Program_Error 7644 -- Sloc references related construct 7645 -- Condition (Node1) (set to Empty if no condition) 7646 -- Reason (Uint3) 7647 -- plus fields for expression 7648 7649 -- N_Raise_Storage_Error 7650 -- Sloc references related construct 7651 -- Condition (Node1) (set to Empty if no condition) 7652 -- Reason (Uint3) 7653 -- plus fields for expression 7654 7655 -- Note: Sloc is copied from the expression generating the exception. 7656 -- In the case where a debug source file is generated, the Sloc for 7657 -- this node points to the left bracket in the Sprint file output. 7658 7659 -- Note: the back end may be required to translate these nodes into 7660 -- appropriate goto statements. See description of N_Push/Pop_xxx_Label. 7661 7662 --------------------------------------------- 7663 -- Optimization of Exception Raise to Goto -- 7664 --------------------------------------------- 7665 7666 -- In some cases, the front end will determine that any exception raised 7667 -- by the back end for a certain exception should be transformed into a 7668 -- goto statement. 7669 7670 -- There are three kinds of exceptions raised by the back end (note that 7671 -- for this purpose we consider gigi to be part of the back end in the 7672 -- gcc case): 7673 7674 -- 1. Exceptions resulting from N_Raise_xxx_Error nodes 7675 -- 2. Exceptions from checks triggered by Do_xxx_Check flags 7676 -- 3. Other cases not specifically marked by the front end 7677 7678 -- Normally all such exceptions are translated into calls to the proper 7679 -- Rcheck_xx procedure, where xx encodes both the exception to be raised 7680 -- and the exception message. 7681 7682 -- The front end may determine that for a particular sequence of code, 7683 -- exceptions in any of these three categories for a particular builtin 7684 -- exception should result in a goto, rather than a call to Rcheck_xx. 7685 -- The exact sequence to be generated is: 7686 7687 -- Local_Raise (exception'Identity); 7688 -- goto Label 7689 7690 -- The front end marks such a sequence of code by bracketing it with 7691 -- push and pop nodes: 7692 7693 -- N_Push_xxx_Label (referencing the label) 7694 -- ... 7695 -- (code where transformation is expected for exception xxx) 7696 -- ... 7697 -- N_Pop_xxx_Label 7698 7699 -- The use of push/pop reflects the fact that such regions can properly 7700 -- nest, and one special case is a subregion in which no transformation 7701 -- is allowed. Such a region is marked by a N_Push_xxx_Label node whose 7702 -- Exception_Label field is Empty. 7703 7704 -- N_Push_Constraint_Error_Label 7705 -- Sloc references first statement in region covered 7706 -- Exception_Label (Node5-Sem) 7707 7708 -- N_Push_Program_Error_Label 7709 -- Sloc references first statement in region covered 7710 -- Exception_Label (Node5-Sem) 7711 7712 -- N_Push_Storage_Error_Label 7713 -- Sloc references first statement in region covered 7714 -- Exception_Label (Node5-Sem) 7715 7716 -- N_Pop_Constraint_Error_Label 7717 -- Sloc references last statement in region covered 7718 7719 -- N_Pop_Program_Error_Label 7720 -- Sloc references last statement in region covered 7721 7722 -- N_Pop_Storage_Error_Label 7723 -- Sloc references last statement in region covered 7724 7725 --------------- 7726 -- Reference -- 7727 --------------- 7728 7729 -- For a number of purposes, we need to construct references to objects. 7730 -- These references are subsequently treated as normal access values. 7731 -- An example is the construction of the parameter block passed to a 7732 -- task entry. The N_Reference node is provided for this purpose. It is 7733 -- similar in effect to the use of the Unrestricted_Access attribute, 7734 -- and like Unrestricted_Access can be applied to objects which would 7735 -- not be valid prefixes for the Unchecked_Access attribute (e.g. 7736 -- objects which are not aliased, and slices). In addition it can be 7737 -- applied to composite type values as well as objects, including string 7738 -- values and aggregates. 7739 7740 -- Note: we use the Prefix field for this expression so that the 7741 -- resulting node can be treated using common code with the attribute 7742 -- nodes for the 'Access and related attributes. Logically it would make 7743 -- more sense to call it an Expression field, but then we would have to 7744 -- special case the treatment of the N_Reference node. 7745 7746 -- Note: evaluating a N_Reference node is guaranteed to yield a non-null 7747 -- value at run time. Therefore, it is valid to set Is_Known_Non_Null on 7748 -- a temporary initialized to a N_Reference node in order to eliminate 7749 -- superfluous access checks. 7750 7751 -- Sprint syntax: prefix'reference 7752 7753 -- N_Reference 7754 -- Sloc is copied from the expression 7755 -- Prefix (Node3) 7756 -- plus fields for expression 7757 7758 -- Note: in the case where a debug source file is generated, the Sloc 7759 -- for this node points to the quote in the Sprint file output. 7760 7761 ----------------- 7762 -- SCIL Nodes -- 7763 ----------------- 7764 7765 -- SCIL nodes are special nodes added to the tree when the CodePeer 7766 -- mode is active. They help the CodePeer backend to locate nodes that 7767 -- require special processing. They are only generated if SCIL 7768 -- generation is enabled. A standard tree-walk will not encounter 7769 -- these nodes even if they are present; these nodes are only 7770 -- accessible via the function SCIL_LL.Get_SCIL_Node. 7771 7772 -- N_SCIL_Dispatch_Table_Tag_Init 7773 -- Sloc references a node for a tag initialization 7774 -- SCIL_Entity (Node4-Sem) 7775 -- 7776 -- An N_SCIL_Dispatch_Table_Tag_Init node may be associated (via 7777 -- Get_SCIL_Node) with the N_Object_Declaration node corresponding to 7778 -- the declaration of the dispatch table for a tagged type. 7779 7780 -- N_SCIL_Dispatching_Call 7781 -- Sloc references the node of a dispatching call 7782 -- SCIL_Target_Prim (Node2-Sem) 7783 -- SCIL_Entity (Node4-Sem) 7784 -- SCIL_Controlling_Tag (Node5-Sem) 7785 -- 7786 -- An N_Scil_Dispatching call node may be associated (via Get_SCIL_Node) 7787 -- with the N_Procedure_Call or N_Function_Call node (or a rewriting 7788 -- thereof) corresponding to a dispatching call. 7789 7790 -- N_SCIL_Membership_Test 7791 -- Sloc references the node of a membership test 7792 -- SCIL_Tag_Value (Node5-Sem) 7793 -- SCIL_Entity (Node4-Sem) 7794 -- 7795 -- An N_Scil_Membership_Test node may be associated (via Get_SCIL_Node) 7796 -- with the N_In node (or a rewriting thereof) corresponding to a 7797 -- classwide membership test. 7798 7799 -------------------------- 7800 -- Unchecked Expression -- 7801 -------------------------- 7802 7803 -- An unchecked expression is one that must be analyzed and resolved 7804 -- with all checks off, regardless of the current setting of scope 7805 -- suppress flags. 7806 7807 -- Sprint syntax: `(expression) 7808 7809 -- Note: this node is always removed from the tree (and replaced by 7810 -- its constituent expression) on completion of analysis, so it only 7811 -- appears in intermediate trees, and will never be seen by Gigi. 7812 7813 -- N_Unchecked_Expression 7814 -- Sloc is a copy of the Sloc of the expression 7815 -- Expression (Node3) 7816 -- plus fields for expression 7817 7818 -- Note: in the case where a debug source file is generated, the Sloc 7819 -- for this node points to the back quote in the Sprint file output. 7820 7821 ------------------------------- 7822 -- Unchecked Type Conversion -- 7823 ------------------------------- 7824 7825 -- An unchecked type conversion node represents the semantic action 7826 -- corresponding to a call to an instantiation of Unchecked_Conversion. 7827 -- It is generated as a result of actual use of Unchecked_Conversion 7828 -- and also the expander generates unchecked type conversion nodes 7829 -- directly for expansion of complex semantic actions. 7830 7831 -- Note: an unchecked type conversion is a variable as far as the 7832 -- semantics are concerned, which is convenient for the expander. 7833 -- This does not change what Ada source programs are legal, since 7834 -- clearly a function call to an instantiation of Unchecked_Conversion 7835 -- is not a variable in any case. 7836 7837 -- Sprint syntax: subtype-mark!(expression) 7838 7839 -- N_Unchecked_Type_Conversion 7840 -- Sloc points to related node in source 7841 -- Subtype_Mark (Node4) 7842 -- Expression (Node3) 7843 -- Kill_Range_Check (Flag11-Sem) 7844 -- No_Truncation (Flag17-Sem) 7845 -- plus fields for expression 7846 7847 -- Note: in the case where a debug source file is generated, the Sloc 7848 -- for this node points to the exclamation in the Sprint file output. 7849 7850 ----------------------------------- 7851 -- Validate_Unchecked_Conversion -- 7852 ----------------------------------- 7853 7854 -- The front end does most of the validation of unchecked conversion, 7855 -- including checking sizes (this is done after the back end is called 7856 -- to take advantage of back-annotation of calculated sizes). 7857 7858 -- The front end also deals with specific cases that are not allowed 7859 -- e.g. involving unconstrained array types. 7860 7861 -- For the case of the standard gigi backend, this means that all 7862 -- checks are done in the front end. 7863 7864 -- However, in the case of specialized back-ends, notably the JVM 7865 -- backend for JGNAT, additional requirements and restrictions apply 7866 -- to unchecked conversion, and these are most conveniently performed 7867 -- in the specialized back-end. 7868 7869 -- To accommodate this requirement, for such back ends, the following 7870 -- special node is generated recording an unchecked conversion that 7871 -- needs to be validated. The back end should post an appropriate 7872 -- error message if the unchecked conversion is invalid or warrants 7873 -- a special warning message. 7874 7875 -- Source_Type and Target_Type point to the entities for the two 7876 -- types involved in the unchecked conversion instantiation that 7877 -- is to be validated. 7878 7879 -- Sprint syntax: validate Unchecked_Conversion (source, target); 7880 7881 -- N_Validate_Unchecked_Conversion 7882 -- Sloc points to instantiation (location for warning message) 7883 -- Source_Type (Node1-Sem) 7884 -- Target_Type (Node2-Sem) 7885 7886 -- Note: in the case where a debug source file is generated, the Sloc 7887 -- for this node points to the VALIDATE keyword in the file output. 7888 7889 ----------- 7890 -- Empty -- 7891 ----------- 7892 7893 -- Used as the contents of the Nkind field of the dummy Empty node 7894 -- and in some other situations to indicate an uninitialized value. 7895 7896 -- N_Empty 7897 -- Chars (Name1) is set to No_Name 7898 7899 ----------- 7900 -- Error -- 7901 ----------- 7902 7903 -- Used as the contents of the Nkind field of the dummy Error node. 7904 -- Has an Etype field, which gets set to Any_Type later on, to help 7905 -- error recovery (Error_Posted is also set in the Error node). 7906 7907 -- N_Error 7908 -- Chars (Name1) is set to Error_Name 7909 -- Etype (Node5-Sem) 7910 7911 -------------------------- 7912 -- Node Type Definition -- 7913 -------------------------- 7914 7915 -- The following is the definition of the Node_Kind type. As previously 7916 -- discussed, this is separated off to allow rearrangement of the order to 7917 -- facilitate definition of subtype ranges. The comments show the subtype 7918 -- classes which apply to each set of node kinds. The first entry in the 7919 -- comment characterizes the following list of nodes. 7920 7921 type Node_Kind is ( 7922 N_Unused_At_Start, 7923 7924 -- N_Representation_Clause 7925 7926 N_At_Clause, 7927 N_Component_Clause, 7928 N_Enumeration_Representation_Clause, 7929 N_Mod_Clause, 7930 N_Record_Representation_Clause, 7931 7932 -- N_Representation_Clause, N_Has_Chars 7933 7934 N_Attribute_Definition_Clause, 7935 7936 -- N_Has_Chars 7937 7938 N_Empty, 7939 N_Pragma_Argument_Association, 7940 7941 -- N_Has_Etype, N_Has_Chars 7942 7943 -- Note: of course N_Error does not really have Etype or Chars fields, 7944 -- and any attempt to access these fields in N_Error will cause an 7945 -- error, but historically this always has been positioned so that an 7946 -- "in N_Has_Chars" or "in N_Has_Etype" test yields true for N_Error. 7947 -- Most likely this makes coding easier somewhere but still seems 7948 -- undesirable. To be investigated some time ??? 7949 7950 N_Error, 7951 7952 -- N_Entity, N_Has_Etype, N_Has_Chars 7953 7954 N_Defining_Character_Literal, 7955 N_Defining_Identifier, 7956 N_Defining_Operator_Symbol, 7957 7958 -- N_Subexpr, N_Has_Etype, N_Has_Chars, N_Has_Entity 7959 7960 N_Expanded_Name, 7961 7962 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 7963 -- N_Has_Chars, N_Has_Entity 7964 7965 N_Identifier, 7966 N_Operator_Symbol, 7967 7968 -- N_Direct_Name, N_Subexpr, N_Has_Etype, 7969 -- N_Has_Chars, N_Has_Entity 7970 7971 N_Character_Literal, 7972 7973 -- N_Binary_Op, N_Op, N_Subexpr, 7974 -- N_Has_Etype, N_Has_Chars, N_Has_Entity 7975 7976 N_Op_Add, 7977 N_Op_Concat, 7978 N_Op_Expon, 7979 N_Op_Subtract, 7980 7981 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Treat_Fixed_As_Integer 7982 -- N_Has_Etype, N_Has_Chars, N_Has_Entity, N_Multiplying_Operator 7983 7984 N_Op_Divide, 7985 N_Op_Mod, 7986 N_Op_Multiply, 7987 N_Op_Rem, 7988 7989 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 7990 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 7991 7992 N_Op_And, 7993 7994 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 7995 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean, N_Op_Compare 7996 7997 N_Op_Eq, 7998 N_Op_Ge, 7999 N_Op_Gt, 8000 N_Op_Le, 8001 N_Op_Lt, 8002 N_Op_Ne, 8003 8004 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype 8005 -- N_Has_Entity, N_Has_Chars, N_Op_Boolean 8006 8007 N_Op_Or, 8008 N_Op_Xor, 8009 8010 -- N_Binary_Op, N_Op, N_Subexpr, N_Has_Etype, 8011 -- N_Op_Shift, N_Has_Chars, N_Has_Entity 8012 8013 N_Op_Rotate_Left, 8014 N_Op_Rotate_Right, 8015 N_Op_Shift_Left, 8016 N_Op_Shift_Right, 8017 N_Op_Shift_Right_Arithmetic, 8018 8019 -- N_Unary_Op, N_Op, N_Subexpr, N_Has_Etype, 8020 -- N_Has_Chars, N_Has_Entity 8021 8022 N_Op_Abs, 8023 N_Op_Minus, 8024 N_Op_Not, 8025 N_Op_Plus, 8026 8027 -- N_Subexpr, N_Has_Etype, N_Has_Entity 8028 8029 N_Attribute_Reference, 8030 8031 -- N_Subexpr, N_Has_Etype, N_Membership_Test 8032 8033 N_In, 8034 N_Not_In, 8035 8036 -- N_Subexpr, N_Has_Etype, N_Short_Circuit 8037 8038 N_And_Then, 8039 N_Or_Else, 8040 8041 -- N_Subexpr, N_Has_Etype, N_Subprogram_Call 8042 8043 N_Function_Call, 8044 N_Procedure_Call_Statement, 8045 8046 -- N_Subexpr, N_Has_Etype, N_Raise_xxx_Error 8047 8048 N_Raise_Constraint_Error, 8049 N_Raise_Program_Error, 8050 N_Raise_Storage_Error, 8051 8052 -- N_Subexpr, N_Has_Etype, N_Numeric_Or_String_Literal 8053 8054 N_Integer_Literal, 8055 N_Real_Literal, 8056 N_String_Literal, 8057 8058 -- N_Subexpr, N_Has_Etype 8059 8060 N_Explicit_Dereference, 8061 N_Expression_With_Actions, 8062 N_If_Expression, 8063 N_Indexed_Component, 8064 N_Null, 8065 N_Qualified_Expression, 8066 N_Quantified_Expression, 8067 N_Aggregate, 8068 N_Allocator, 8069 N_Case_Expression, 8070 N_Extension_Aggregate, 8071 N_Raise_Expression, 8072 N_Range, 8073 N_Reference, 8074 N_Selected_Component, 8075 N_Slice, 8076 N_Type_Conversion, 8077 N_Unchecked_Expression, 8078 N_Unchecked_Type_Conversion, 8079 8080 -- N_Has_Etype 8081 8082 N_Subtype_Indication, 8083 8084 -- N_Declaration 8085 8086 N_Component_Declaration, 8087 N_Entry_Declaration, 8088 N_Expression_Function, 8089 N_Formal_Object_Declaration, 8090 N_Formal_Type_Declaration, 8091 N_Full_Type_Declaration, 8092 N_Incomplete_Type_Declaration, 8093 N_Iterator_Specification, 8094 N_Loop_Parameter_Specification, 8095 N_Object_Declaration, 8096 N_Protected_Type_Declaration, 8097 N_Private_Extension_Declaration, 8098 N_Private_Type_Declaration, 8099 N_Subtype_Declaration, 8100 8101 -- N_Subprogram_Specification, N_Declaration 8102 8103 N_Function_Specification, 8104 N_Procedure_Specification, 8105 8106 -- N_Access_To_Subprogram_Definition 8107 8108 N_Access_Function_Definition, 8109 N_Access_Procedure_Definition, 8110 8111 -- N_Later_Decl_Item 8112 8113 N_Task_Type_Declaration, 8114 8115 -- N_Body_Stub, N_Later_Decl_Item 8116 8117 N_Package_Body_Stub, 8118 N_Protected_Body_Stub, 8119 N_Subprogram_Body_Stub, 8120 N_Task_Body_Stub, 8121 8122 -- N_Generic_Instantiation, N_Later_Decl_Item 8123 -- N_Subprogram_Instantiation 8124 8125 N_Function_Instantiation, 8126 N_Procedure_Instantiation, 8127 8128 -- N_Generic_Instantiation, N_Later_Decl_Item 8129 8130 N_Package_Instantiation, 8131 8132 -- N_Unit_Body, N_Later_Decl_Item, N_Proper_Body 8133 8134 N_Package_Body, 8135 N_Subprogram_Body, 8136 8137 -- N_Later_Decl_Item, N_Proper_Body 8138 8139 N_Protected_Body, 8140 N_Task_Body, 8141 8142 -- N_Later_Decl_Item 8143 8144 N_Implicit_Label_Declaration, 8145 N_Package_Declaration, 8146 N_Single_Task_Declaration, 8147 N_Subprogram_Declaration, 8148 N_Use_Package_Clause, 8149 8150 -- N_Generic_Declaration, N_Later_Decl_Item 8151 8152 N_Generic_Package_Declaration, 8153 N_Generic_Subprogram_Declaration, 8154 8155 -- N_Array_Type_Definition 8156 8157 N_Constrained_Array_Definition, 8158 N_Unconstrained_Array_Definition, 8159 8160 -- N_Renaming_Declaration 8161 8162 N_Exception_Renaming_Declaration, 8163 N_Object_Renaming_Declaration, 8164 N_Package_Renaming_Declaration, 8165 N_Subprogram_Renaming_Declaration, 8166 8167 -- N_Generic_Renaming_Declaration, N_Renaming_Declaration 8168 8169 N_Generic_Function_Renaming_Declaration, 8170 N_Generic_Package_Renaming_Declaration, 8171 N_Generic_Procedure_Renaming_Declaration, 8172 8173 -- N_Statement_Other_Than_Procedure_Call 8174 8175 N_Abort_Statement, 8176 N_Accept_Statement, 8177 N_Assignment_Statement, 8178 N_Asynchronous_Select, 8179 N_Block_Statement, 8180 N_Case_Statement, 8181 N_Code_Statement, 8182 N_Conditional_Entry_Call, 8183 8184 -- N_Statement_Other_Than_Procedure_Call, N_Delay_Statement 8185 8186 N_Delay_Relative_Statement, 8187 N_Delay_Until_Statement, 8188 8189 -- N_Statement_Other_Than_Procedure_Call 8190 8191 N_Entry_Call_Statement, 8192 N_Free_Statement, 8193 N_Goto_Statement, 8194 N_Loop_Statement, 8195 N_Null_Statement, 8196 N_Raise_Statement, 8197 N_Requeue_Statement, 8198 N_Simple_Return_Statement, 8199 N_Extended_Return_Statement, 8200 N_Selective_Accept, 8201 N_Timed_Entry_Call, 8202 8203 -- N_Statement_Other_Than_Procedure_Call, N_Has_Condition 8204 8205 N_Exit_Statement, 8206 N_If_Statement, 8207 8208 -- N_Has_Condition 8209 8210 N_Accept_Alternative, 8211 N_Delay_Alternative, 8212 N_Elsif_Part, 8213 N_Entry_Body_Formal_Part, 8214 N_Iteration_Scheme, 8215 N_Terminate_Alternative, 8216 8217 -- N_Formal_Subprogram_Declaration 8218 8219 N_Formal_Abstract_Subprogram_Declaration, 8220 N_Formal_Concrete_Subprogram_Declaration, 8221 8222 -- N_Push_xxx_Label, N_Push_Pop_xxx_Label 8223 8224 N_Push_Constraint_Error_Label, 8225 N_Push_Program_Error_Label, 8226 N_Push_Storage_Error_Label, 8227 8228 -- N_Pop_xxx_Label, N_Push_Pop_xxx_Label 8229 8230 N_Pop_Constraint_Error_Label, 8231 N_Pop_Program_Error_Label, 8232 N_Pop_Storage_Error_Label, 8233 8234 -- SCIL nodes 8235 8236 N_SCIL_Dispatch_Table_Tag_Init, 8237 N_SCIL_Dispatching_Call, 8238 N_SCIL_Membership_Test, 8239 8240 -- Other nodes (not part of any subtype class) 8241 8242 N_Abortable_Part, 8243 N_Abstract_Subprogram_Declaration, 8244 N_Access_Definition, 8245 N_Access_To_Object_Definition, 8246 N_Aspect_Specification, 8247 N_Case_Expression_Alternative, 8248 N_Case_Statement_Alternative, 8249 N_Compilation_Unit, 8250 N_Compilation_Unit_Aux, 8251 N_Component_Association, 8252 N_Component_Definition, 8253 N_Component_List, 8254 N_Contract, 8255 N_Derived_Type_Definition, 8256 N_Decimal_Fixed_Point_Definition, 8257 N_Defining_Program_Unit_Name, 8258 N_Delta_Constraint, 8259 N_Designator, 8260 N_Digits_Constraint, 8261 N_Discriminant_Association, 8262 N_Discriminant_Specification, 8263 N_Enumeration_Type_Definition, 8264 N_Entry_Body, 8265 N_Entry_Call_Alternative, 8266 N_Entry_Index_Specification, 8267 N_Exception_Declaration, 8268 N_Exception_Handler, 8269 N_Floating_Point_Definition, 8270 N_Formal_Decimal_Fixed_Point_Definition, 8271 N_Formal_Derived_Type_Definition, 8272 N_Formal_Discrete_Type_Definition, 8273 N_Formal_Floating_Point_Definition, 8274 N_Formal_Modular_Type_Definition, 8275 N_Formal_Ordinary_Fixed_Point_Definition, 8276 N_Formal_Package_Declaration, 8277 N_Formal_Private_Type_Definition, 8278 N_Formal_Incomplete_Type_Definition, 8279 N_Formal_Signed_Integer_Type_Definition, 8280 N_Freeze_Entity, 8281 N_Freeze_Generic_Entity, 8282 N_Generic_Association, 8283 N_Handled_Sequence_Of_Statements, 8284 N_Index_Or_Discriminant_Constraint, 8285 N_Itype_Reference, 8286 N_Label, 8287 N_Modular_Type_Definition, 8288 N_Number_Declaration, 8289 N_Ordinary_Fixed_Point_Definition, 8290 N_Others_Choice, 8291 N_Package_Specification, 8292 N_Parameter_Association, 8293 N_Parameter_Specification, 8294 N_Pragma, 8295 N_Protected_Definition, 8296 N_Range_Constraint, 8297 N_Real_Range_Specification, 8298 N_Record_Definition, 8299 N_Signed_Integer_Type_Definition, 8300 N_Single_Protected_Declaration, 8301 N_Subunit, 8302 N_Task_Definition, 8303 N_Triggering_Alternative, 8304 N_Use_Type_Clause, 8305 N_Validate_Unchecked_Conversion, 8306 N_Variant, 8307 N_Variant_Part, 8308 N_With_Clause, 8309 N_Unused_At_End); 8310 8311 for Node_Kind'Size use 8; 8312 -- The data structures in Atree assume this 8313 8314 ---------------------------- 8315 -- Node Class Definitions -- 8316 ---------------------------- 8317 8318 subtype N_Access_To_Subprogram_Definition is Node_Kind range 8319 N_Access_Function_Definition .. 8320 N_Access_Procedure_Definition; 8321 8322 subtype N_Array_Type_Definition is Node_Kind range 8323 N_Constrained_Array_Definition .. 8324 N_Unconstrained_Array_Definition; 8325 8326 subtype N_Binary_Op is Node_Kind range 8327 N_Op_Add .. 8328 N_Op_Shift_Right_Arithmetic; 8329 8330 subtype N_Body_Stub is Node_Kind range 8331 N_Package_Body_Stub .. 8332 N_Task_Body_Stub; 8333 8334 subtype N_Declaration is Node_Kind range 8335 N_Component_Declaration .. 8336 N_Procedure_Specification; 8337 -- Note: this includes all constructs normally thought of as declarations 8338 -- except those which are separately grouped as later declarations. 8339 8340 subtype N_Delay_Statement is Node_Kind range 8341 N_Delay_Relative_Statement .. 8342 N_Delay_Until_Statement; 8343 8344 subtype N_Direct_Name is Node_Kind range 8345 N_Identifier .. 8346 N_Character_Literal; 8347 8348 subtype N_Entity is Node_Kind range 8349 N_Defining_Character_Literal .. 8350 N_Defining_Operator_Symbol; 8351 8352 subtype N_Formal_Subprogram_Declaration is Node_Kind range 8353 N_Formal_Abstract_Subprogram_Declaration .. 8354 N_Formal_Concrete_Subprogram_Declaration; 8355 8356 subtype N_Generic_Declaration is Node_Kind range 8357 N_Generic_Package_Declaration .. 8358 N_Generic_Subprogram_Declaration; 8359 8360 subtype N_Generic_Instantiation is Node_Kind range 8361 N_Function_Instantiation .. 8362 N_Package_Instantiation; 8363 8364 subtype N_Generic_Renaming_Declaration is Node_Kind range 8365 N_Generic_Function_Renaming_Declaration .. 8366 N_Generic_Procedure_Renaming_Declaration; 8367 8368 subtype N_Has_Chars is Node_Kind range 8369 N_Attribute_Definition_Clause .. 8370 N_Op_Plus; 8371 8372 subtype N_Has_Entity is Node_Kind range 8373 N_Expanded_Name .. 8374 N_Attribute_Reference; 8375 -- Nodes that have Entity fields 8376 -- Warning: DOES NOT INCLUDE N_Freeze_Entity, N_Freeze_Generic_Entity, 8377 -- N_Aspect_Specification, or N_Attribute_Definition_Clause. 8378 8379 subtype N_Has_Etype is Node_Kind range 8380 N_Error .. 8381 N_Subtype_Indication; 8382 8383 subtype N_Has_Treat_Fixed_As_Integer is Node_Kind range 8384 N_Op_Divide .. 8385 N_Op_Rem; 8386 8387 subtype N_Multiplying_Operator is Node_Kind range 8388 N_Op_Divide .. 8389 N_Op_Rem; 8390 8391 subtype N_Later_Decl_Item is Node_Kind range 8392 N_Task_Type_Declaration .. 8393 N_Generic_Subprogram_Declaration; 8394 -- Note: this is Ada 83 relevant only (see Ada 83 RM 3.9 (2)) and includes 8395 -- only those items which can appear as later declarative items. This also 8396 -- includes N_Implicit_Label_Declaration which is not specifically in the 8397 -- grammar but may appear as a valid later declarative items. It does NOT 8398 -- include N_Pragma which can also appear among later declarative items. 8399 -- It does however include N_Protected_Body, which is a bit peculiar, but 8400 -- harmless since this cannot appear in Ada 83 mode anyway. 8401 8402 subtype N_Membership_Test is Node_Kind range 8403 N_In .. 8404 N_Not_In; 8405 8406 subtype N_Numeric_Or_String_Literal is Node_Kind range 8407 N_Integer_Literal .. 8408 N_String_Literal; 8409 8410 subtype N_Op is Node_Kind range 8411 N_Op_Add .. 8412 N_Op_Plus; 8413 8414 subtype N_Op_Boolean is Node_Kind range 8415 N_Op_And .. 8416 N_Op_Xor; 8417 -- Binary operators which take operands of a boolean type, and yield 8418 -- a result of a boolean type. 8419 8420 subtype N_Op_Compare is Node_Kind range 8421 N_Op_Eq .. 8422 N_Op_Ne; 8423 8424 subtype N_Op_Shift is Node_Kind range 8425 N_Op_Rotate_Left .. 8426 N_Op_Shift_Right_Arithmetic; 8427 8428 subtype N_Proper_Body is Node_Kind range 8429 N_Package_Body .. 8430 N_Task_Body; 8431 8432 subtype N_Push_xxx_Label is Node_Kind range 8433 N_Push_Constraint_Error_Label .. 8434 N_Push_Storage_Error_Label; 8435 8436 subtype N_Pop_xxx_Label is Node_Kind range 8437 N_Pop_Constraint_Error_Label .. 8438 N_Pop_Storage_Error_Label; 8439 8440 subtype N_Push_Pop_xxx_Label is Node_Kind range 8441 N_Push_Constraint_Error_Label .. 8442 N_Pop_Storage_Error_Label; 8443 8444 subtype N_Raise_xxx_Error is Node_Kind range 8445 N_Raise_Constraint_Error .. 8446 N_Raise_Storage_Error; 8447 8448 subtype N_Renaming_Declaration is Node_Kind range 8449 N_Exception_Renaming_Declaration .. 8450 N_Generic_Procedure_Renaming_Declaration; 8451 8452 subtype N_Representation_Clause is Node_Kind range 8453 N_At_Clause .. 8454 N_Attribute_Definition_Clause; 8455 8456 subtype N_Short_Circuit is Node_Kind range 8457 N_And_Then .. 8458 N_Or_Else; 8459 8460 subtype N_SCIL_Node is Node_Kind range 8461 N_SCIL_Dispatch_Table_Tag_Init .. 8462 N_SCIL_Membership_Test; 8463 8464 subtype N_Statement_Other_Than_Procedure_Call is Node_Kind range 8465 N_Abort_Statement .. 8466 N_If_Statement; 8467 -- Note that this includes all statement types except for the cases of the 8468 -- N_Procedure_Call_Statement which is considered to be a subexpression 8469 -- (since overloading is possible, so it needs to go through the normal 8470 -- overloading resolution for expressions). 8471 8472 subtype N_Subprogram_Call is Node_Kind range 8473 N_Function_Call .. 8474 N_Procedure_Call_Statement; 8475 8476 subtype N_Subprogram_Instantiation is Node_Kind range 8477 N_Function_Instantiation .. 8478 N_Procedure_Instantiation; 8479 8480 subtype N_Has_Condition is Node_Kind range 8481 N_Exit_Statement .. 8482 N_Terminate_Alternative; 8483 -- Nodes with condition fields (does not include N_Raise_xxx_Error) 8484 8485 subtype N_Subexpr is Node_Kind range 8486 N_Expanded_Name .. 8487 N_Unchecked_Type_Conversion; 8488 -- Nodes with expression fields 8489 8490 subtype N_Subprogram_Specification is Node_Kind range 8491 N_Function_Specification .. 8492 N_Procedure_Specification; 8493 8494 subtype N_Unary_Op is Node_Kind range 8495 N_Op_Abs .. 8496 N_Op_Plus; 8497 8498 subtype N_Unit_Body is Node_Kind range 8499 N_Package_Body .. 8500 N_Subprogram_Body; 8501 8502 --------------------------- 8503 -- Node Access Functions -- 8504 --------------------------- 8505 8506 -- The following functions return the contents of the indicated field of 8507 -- the node referenced by the argument, which is a Node_Id. They provide 8508 -- logical access to fields in the node which could be accessed using the 8509 -- Atree.Unchecked_Access package, but the idea is always to use these 8510 -- higher level routines which preserve strong typing. In debug mode, 8511 -- these routines check that they are being applied to an appropriate 8512 -- node, as well as checking that the node is in range. 8513 8514 function ABE_Is_Certain 8515 (N : Node_Id) return Boolean; -- Flag18 8516 8517 function Abort_Present 8518 (N : Node_Id) return Boolean; -- Flag15 8519 8520 function Abortable_Part 8521 (N : Node_Id) return Node_Id; -- Node2 8522 8523 function Abstract_Present 8524 (N : Node_Id) return Boolean; -- Flag4 8525 8526 function Accept_Handler_Records 8527 (N : Node_Id) return List_Id; -- List5 8528 8529 function Accept_Statement 8530 (N : Node_Id) return Node_Id; -- Node2 8531 8532 function Access_Definition 8533 (N : Node_Id) return Node_Id; -- Node3 8534 8535 function Access_To_Subprogram_Definition 8536 (N : Node_Id) return Node_Id; -- Node3 8537 8538 function Access_Types_To_Process 8539 (N : Node_Id) return Elist_Id; -- Elist2 8540 8541 function Actions 8542 (N : Node_Id) return List_Id; -- List1 8543 8544 function Activation_Chain_Entity 8545 (N : Node_Id) return Node_Id; -- Node3 8546 8547 function Acts_As_Spec 8548 (N : Node_Id) return Boolean; -- Flag4 8549 8550 function Actual_Designated_Subtype 8551 (N : Node_Id) return Node_Id; -- Node4 8552 8553 function Address_Warning_Posted 8554 (N : Node_Id) return Boolean; -- Flag18 8555 8556 function Aggregate_Bounds 8557 (N : Node_Id) return Node_Id; -- Node3 8558 8559 function Aliased_Present 8560 (N : Node_Id) return Boolean; -- Flag4 8561 8562 function All_Others 8563 (N : Node_Id) return Boolean; -- Flag11 8564 8565 function All_Present 8566 (N : Node_Id) return Boolean; -- Flag15 8567 8568 function Alternatives 8569 (N : Node_Id) return List_Id; -- List4 8570 8571 function Ancestor_Part 8572 (N : Node_Id) return Node_Id; -- Node3 8573 8574 function Atomic_Sync_Required 8575 (N : Node_Id) return Boolean; -- Flag14 8576 8577 function Array_Aggregate 8578 (N : Node_Id) return Node_Id; -- Node3 8579 8580 function Aspect_Rep_Item 8581 (N : Node_Id) return Node_Id; -- Node2 8582 8583 function Assignment_OK 8584 (N : Node_Id) return Boolean; -- Flag15 8585 8586 function Associated_Node 8587 (N : Node_Id) return Node_Id; -- Node4 8588 8589 function At_End_Proc 8590 (N : Node_Id) return Node_Id; -- Node1 8591 8592 function Attribute_Name 8593 (N : Node_Id) return Name_Id; -- Name2 8594 8595 function Aux_Decls_Node 8596 (N : Node_Id) return Node_Id; -- Node5 8597 8598 function Backwards_OK 8599 (N : Node_Id) return Boolean; -- Flag6 8600 8601 function Bad_Is_Detected 8602 (N : Node_Id) return Boolean; -- Flag15 8603 8604 function By_Ref 8605 (N : Node_Id) return Boolean; -- Flag5 8606 8607 function Body_Required 8608 (N : Node_Id) return Boolean; -- Flag13 8609 8610 function Body_To_Inline 8611 (N : Node_Id) return Node_Id; -- Node3 8612 8613 function Box_Present 8614 (N : Node_Id) return Boolean; -- Flag15 8615 8616 function Char_Literal_Value 8617 (N : Node_Id) return Uint; -- Uint2 8618 8619 function Chars 8620 (N : Node_Id) return Name_Id; -- Name1 8621 8622 function Check_Address_Alignment 8623 (N : Node_Id) return Boolean; -- Flag11 8624 8625 function Choice_Parameter 8626 (N : Node_Id) return Node_Id; -- Node2 8627 8628 function Choices 8629 (N : Node_Id) return List_Id; -- List1 8630 8631 function Class_Present 8632 (N : Node_Id) return Boolean; -- Flag6 8633 8634 function Classifications 8635 (N : Node_Id) return Node_Id; -- Node3 8636 8637 function Comes_From_Extended_Return_Statement 8638 (N : Node_Id) return Boolean; -- Flag18 8639 8640 function Compile_Time_Known_Aggregate 8641 (N : Node_Id) return Boolean; -- Flag18 8642 8643 function Component_Associations 8644 (N : Node_Id) return List_Id; -- List2 8645 8646 function Component_Clauses 8647 (N : Node_Id) return List_Id; -- List3 8648 8649 function Component_Definition 8650 (N : Node_Id) return Node_Id; -- Node4 8651 8652 function Component_Items 8653 (N : Node_Id) return List_Id; -- List3 8654 8655 function Component_List 8656 (N : Node_Id) return Node_Id; -- Node1 8657 8658 function Component_Name 8659 (N : Node_Id) return Node_Id; -- Node1 8660 8661 function Componentwise_Assignment 8662 (N : Node_Id) return Boolean; -- Flag14 8663 8664 function Condition 8665 (N : Node_Id) return Node_Id; -- Node1 8666 8667 function Condition_Actions 8668 (N : Node_Id) return List_Id; -- List3 8669 8670 function Config_Pragmas 8671 (N : Node_Id) return List_Id; -- List4 8672 8673 function Constant_Present 8674 (N : Node_Id) return Boolean; -- Flag17 8675 8676 function Constraint 8677 (N : Node_Id) return Node_Id; -- Node3 8678 8679 function Constraints 8680 (N : Node_Id) return List_Id; -- List1 8681 8682 function Context_Installed 8683 (N : Node_Id) return Boolean; -- Flag13 8684 8685 function Context_Pending 8686 (N : Node_Id) return Boolean; -- Flag16 8687 8688 function Context_Items 8689 (N : Node_Id) return List_Id; -- List1 8690 8691 function Contract_Test_Cases 8692 (N : Node_Id) return Node_Id; -- Node2 8693 8694 function Controlling_Argument 8695 (N : Node_Id) return Node_Id; -- Node1 8696 8697 function Conversion_OK 8698 (N : Node_Id) return Boolean; -- Flag14 8699 8700 function Convert_To_Return_False 8701 (N : Node_Id) return Boolean; -- Flag13 8702 8703 function Corresponding_Aspect 8704 (N : Node_Id) return Node_Id; -- Node3 8705 8706 function Corresponding_Body 8707 (N : Node_Id) return Node_Id; -- Node5 8708 8709 function Corresponding_Formal_Spec 8710 (N : Node_Id) return Node_Id; -- Node3 8711 8712 function Corresponding_Generic_Association 8713 (N : Node_Id) return Node_Id; -- Node5 8714 8715 function Corresponding_Integer_Value 8716 (N : Node_Id) return Uint; -- Uint4 8717 8718 function Corresponding_Spec 8719 (N : Node_Id) return Node_Id; -- Node5 8720 8721 function Corresponding_Spec_Of_Stub 8722 (N : Node_Id) return Node_Id; -- Node2 8723 8724 function Corresponding_Stub 8725 (N : Node_Id) return Node_Id; -- Node3 8726 8727 function Dcheck_Function 8728 (N : Node_Id) return Entity_Id; -- Node5 8729 8730 function Declarations 8731 (N : Node_Id) return List_Id; -- List2 8732 8733 function Default_Expression 8734 (N : Node_Id) return Node_Id; -- Node5 8735 8736 function Default_Storage_Pool 8737 (N : Node_Id) return Node_Id; -- Node3 8738 8739 function Default_Name 8740 (N : Node_Id) return Node_Id; -- Node2 8741 8742 function Defining_Identifier 8743 (N : Node_Id) return Entity_Id; -- Node1 8744 8745 function Defining_Unit_Name 8746 (N : Node_Id) return Node_Id; -- Node1 8747 8748 function Delay_Alternative 8749 (N : Node_Id) return Node_Id; -- Node4 8750 8751 function Delay_Statement 8752 (N : Node_Id) return Node_Id; -- Node2 8753 8754 function Delta_Expression 8755 (N : Node_Id) return Node_Id; -- Node3 8756 8757 function Digits_Expression 8758 (N : Node_Id) return Node_Id; -- Node2 8759 8760 function Discr_Check_Funcs_Built 8761 (N : Node_Id) return Boolean; -- Flag11 8762 8763 function Discrete_Choices 8764 (N : Node_Id) return List_Id; -- List4 8765 8766 function Discrete_Range 8767 (N : Node_Id) return Node_Id; -- Node4 8768 8769 function Discrete_Subtype_Definition 8770 (N : Node_Id) return Node_Id; -- Node4 8771 8772 function Discrete_Subtype_Definitions 8773 (N : Node_Id) return List_Id; -- List2 8774 8775 function Discriminant_Specifications 8776 (N : Node_Id) return List_Id; -- List4 8777 8778 function Discriminant_Type 8779 (N : Node_Id) return Node_Id; -- Node5 8780 8781 function Do_Accessibility_Check 8782 (N : Node_Id) return Boolean; -- Flag13 8783 8784 function Do_Discriminant_Check 8785 (N : Node_Id) return Boolean; -- Flag1 8786 8787 function Do_Division_Check 8788 (N : Node_Id) return Boolean; -- Flag13 8789 8790 function Do_Length_Check 8791 (N : Node_Id) return Boolean; -- Flag4 8792 8793 function Do_Overflow_Check 8794 (N : Node_Id) return Boolean; -- Flag17 8795 8796 function Do_Range_Check 8797 (N : Node_Id) return Boolean; -- Flag9 8798 8799 function Do_Storage_Check 8800 (N : Node_Id) return Boolean; -- Flag17 8801 8802 function Do_Tag_Check 8803 (N : Node_Id) return Boolean; -- Flag13 8804 8805 function Elaborate_All_Desirable 8806 (N : Node_Id) return Boolean; -- Flag9 8807 8808 function Elaborate_All_Present 8809 (N : Node_Id) return Boolean; -- Flag14 8810 8811 function Elaborate_Desirable 8812 (N : Node_Id) return Boolean; -- Flag11 8813 8814 function Elaborate_Present 8815 (N : Node_Id) return Boolean; -- Flag4 8816 8817 function Elaboration_Boolean 8818 (N : Node_Id) return Node_Id; -- Node2 8819 8820 function Else_Actions 8821 (N : Node_Id) return List_Id; -- List3 8822 8823 function Else_Statements 8824 (N : Node_Id) return List_Id; -- List4 8825 8826 function Elsif_Parts 8827 (N : Node_Id) return List_Id; -- List3 8828 8829 function Enclosing_Variant 8830 (N : Node_Id) return Node_Id; -- Node2 8831 8832 function End_Label 8833 (N : Node_Id) return Node_Id; -- Node4 8834 8835 function End_Span 8836 (N : Node_Id) return Uint; -- Uint5 8837 8838 function Entity 8839 (N : Node_Id) return Node_Id; -- Node4 8840 8841 function Entity_Or_Associated_Node 8842 (N : Node_Id) return Node_Id; -- Node4 8843 8844 function Entry_Body_Formal_Part 8845 (N : Node_Id) return Node_Id; -- Node5 8846 8847 function Entry_Call_Alternative 8848 (N : Node_Id) return Node_Id; -- Node1 8849 8850 function Entry_Call_Statement 8851 (N : Node_Id) return Node_Id; -- Node1 8852 8853 function Entry_Direct_Name 8854 (N : Node_Id) return Node_Id; -- Node1 8855 8856 function Entry_Index 8857 (N : Node_Id) return Node_Id; -- Node5 8858 8859 function Entry_Index_Specification 8860 (N : Node_Id) return Node_Id; -- Node4 8861 8862 function Etype 8863 (N : Node_Id) return Node_Id; -- Node5 8864 8865 function Exception_Choices 8866 (N : Node_Id) return List_Id; -- List4 8867 8868 function Exception_Handlers 8869 (N : Node_Id) return List_Id; -- List5 8870 8871 function Exception_Junk 8872 (N : Node_Id) return Boolean; -- Flag8 8873 8874 function Exception_Label 8875 (N : Node_Id) return Node_Id; -- Node5 8876 8877 function Explicit_Actual_Parameter 8878 (N : Node_Id) return Node_Id; -- Node3 8879 8880 function Expansion_Delayed 8881 (N : Node_Id) return Boolean; -- Flag11 8882 8883 function Explicit_Generic_Actual_Parameter 8884 (N : Node_Id) return Node_Id; -- Node1 8885 8886 function Expression 8887 (N : Node_Id) return Node_Id; -- Node3 8888 8889 function Expressions 8890 (N : Node_Id) return List_Id; -- List1 8891 8892 function First_Bit 8893 (N : Node_Id) return Node_Id; -- Node3 8894 8895 function First_Inlined_Subprogram 8896 (N : Node_Id) return Entity_Id; -- Node3 8897 8898 function First_Name 8899 (N : Node_Id) return Boolean; -- Flag5 8900 8901 function First_Named_Actual 8902 (N : Node_Id) return Node_Id; -- Node4 8903 8904 function First_Real_Statement 8905 (N : Node_Id) return Node_Id; -- Node2 8906 8907 function First_Subtype_Link 8908 (N : Node_Id) return Entity_Id; -- Node5 8909 8910 function Float_Truncate 8911 (N : Node_Id) return Boolean; -- Flag11 8912 8913 function Formal_Type_Definition 8914 (N : Node_Id) return Node_Id; -- Node3 8915 8916 function Forwards_OK 8917 (N : Node_Id) return Boolean; -- Flag5 8918 8919 function From_Aspect_Specification 8920 (N : Node_Id) return Boolean; -- Flag13 8921 8922 function From_At_End 8923 (N : Node_Id) return Boolean; -- Flag4 8924 8925 function From_At_Mod 8926 (N : Node_Id) return Boolean; -- Flag4 8927 8928 function From_Default 8929 (N : Node_Id) return Boolean; -- Flag6 8930 8931 function Generalized_Indexing 8932 (N : Node_Id) return Node_Id; -- Node4 8933 8934 function Generic_Associations 8935 (N : Node_Id) return List_Id; -- List3 8936 8937 function Generic_Formal_Declarations 8938 (N : Node_Id) return List_Id; -- List2 8939 8940 function Generic_Parent 8941 (N : Node_Id) return Node_Id; -- Node5 8942 8943 function Generic_Parent_Type 8944 (N : Node_Id) return Node_Id; -- Node4 8945 8946 function Handled_Statement_Sequence 8947 (N : Node_Id) return Node_Id; -- Node4 8948 8949 function Handler_List_Entry 8950 (N : Node_Id) return Node_Id; -- Node2 8951 8952 function Has_Created_Identifier 8953 (N : Node_Id) return Boolean; -- Flag15 8954 8955 function Has_Dereference_Action 8956 (N : Node_Id) return Boolean; -- Flag13 8957 8958 function Has_Dynamic_Length_Check 8959 (N : Node_Id) return Boolean; -- Flag10 8960 8961 function Has_Dynamic_Range_Check 8962 (N : Node_Id) return Boolean; -- Flag12 8963 8964 function Has_Init_Expression 8965 (N : Node_Id) return Boolean; -- Flag14 8966 8967 function Has_Local_Raise 8968 (N : Node_Id) return Boolean; -- Flag8 8969 8970 function Has_No_Elaboration_Code 8971 (N : Node_Id) return Boolean; -- Flag17 8972 8973 function Has_Pragma_Suppress_All 8974 (N : Node_Id) return Boolean; -- Flag14 8975 8976 function Has_Private_View 8977 (N : Node_Id) return Boolean; -- Flag11 8978 8979 function Has_Relative_Deadline_Pragma 8980 (N : Node_Id) return Boolean; -- Flag9 8981 8982 function Has_Self_Reference 8983 (N : Node_Id) return Boolean; -- Flag13 8984 8985 function Has_SP_Choice 8986 (N : Node_Id) return Boolean; -- Flag15 8987 8988 function Has_Storage_Size_Pragma 8989 (N : Node_Id) return Boolean; -- Flag5 8990 8991 function Has_Wide_Character 8992 (N : Node_Id) return Boolean; -- Flag11 8993 8994 function Has_Wide_Wide_Character 8995 (N : Node_Id) return Boolean; -- Flag13 8996 8997 function Header_Size_Added 8998 (N : Node_Id) return Boolean; -- Flag11 8999 9000 function Hidden_By_Use_Clause 9001 (N : Node_Id) return Elist_Id; -- Elist4 9002 9003 function High_Bound 9004 (N : Node_Id) return Node_Id; -- Node2 9005 9006 function Identifier 9007 (N : Node_Id) return Node_Id; -- Node1 9008 9009 function Interface_List 9010 (N : Node_Id) return List_Id; -- List2 9011 9012 function Interface_Present 9013 (N : Node_Id) return Boolean; -- Flag16 9014 9015 function Implicit_With 9016 (N : Node_Id) return Boolean; -- Flag16 9017 9018 function Implicit_With_From_Instantiation 9019 (N : Node_Id) return Boolean; -- Flag12 9020 9021 function Import_Interface_Present 9022 (N : Node_Id) return Boolean; -- Flag16 9023 9024 function In_Present 9025 (N : Node_Id) return Boolean; -- Flag15 9026 9027 function Includes_Infinities 9028 (N : Node_Id) return Boolean; -- Flag11 9029 9030 function Inherited_Discriminant 9031 (N : Node_Id) return Boolean; -- Flag13 9032 9033 function Instance_Spec 9034 (N : Node_Id) return Node_Id; -- Node5 9035 9036 function Intval 9037 (N : Node_Id) return Uint; -- Uint3 9038 9039 function Is_Accessibility_Actual 9040 (N : Node_Id) return Boolean; -- Flag13 9041 9042 function Is_Asynchronous_Call_Block 9043 (N : Node_Id) return Boolean; -- Flag7 9044 9045 function Is_Boolean_Aspect 9046 (N : Node_Id) return Boolean; -- Flag16 9047 9048 function Is_Checked 9049 (N : Node_Id) return Boolean; -- Flag11 9050 9051 function Is_Component_Left_Opnd 9052 (N : Node_Id) return Boolean; -- Flag13 9053 9054 function Is_Component_Right_Opnd 9055 (N : Node_Id) return Boolean; -- Flag14 9056 9057 function Is_Controlling_Actual 9058 (N : Node_Id) return Boolean; -- Flag16 9059 9060 function Is_Delayed_Aspect 9061 (N : Node_Id) return Boolean; -- Flag14 9062 9063 function Is_Disabled 9064 (N : Node_Id) return Boolean; -- Flag15 9065 9066 function Is_Dynamic_Coextension 9067 (N : Node_Id) return Boolean; -- Flag18 9068 9069 function Is_Elsif 9070 (N : Node_Id) return Boolean; -- Flag13 9071 9072 function Is_Entry_Barrier_Function 9073 (N : Node_Id) return Boolean; -- Flag8 9074 9075 function Is_Expanded_Build_In_Place_Call 9076 (N : Node_Id) return Boolean; -- Flag11 9077 9078 function Is_Finalization_Wrapper 9079 (N : Node_Id) return Boolean; -- Flag9 9080 9081 function Is_Folded_In_Parser 9082 (N : Node_Id) return Boolean; -- Flag4 9083 9084 function Is_Ignored 9085 (N : Node_Id) return Boolean; -- Flag9 9086 9087 function Is_In_Discriminant_Check 9088 (N : Node_Id) return Boolean; -- Flag11 9089 9090 function Is_Machine_Number 9091 (N : Node_Id) return Boolean; -- Flag11 9092 9093 function Is_Null_Loop 9094 (N : Node_Id) return Boolean; -- Flag16 9095 9096 function Is_Overloaded 9097 (N : Node_Id) return Boolean; -- Flag5 9098 9099 function Is_Power_Of_2_For_Shift 9100 (N : Node_Id) return Boolean; -- Flag13 9101 9102 function Is_Prefixed_Call 9103 (N : Node_Id) return Boolean; -- Flag17 9104 9105 function Is_Protected_Subprogram_Body 9106 (N : Node_Id) return Boolean; -- Flag7 9107 9108 function Is_Static_Coextension 9109 (N : Node_Id) return Boolean; -- Flag14 9110 9111 function Is_Static_Expression 9112 (N : Node_Id) return Boolean; -- Flag6 9113 9114 function Is_Subprogram_Descriptor 9115 (N : Node_Id) return Boolean; -- Flag16 9116 9117 function Is_Task_Allocation_Block 9118 (N : Node_Id) return Boolean; -- Flag6 9119 9120 function Is_Task_Master 9121 (N : Node_Id) return Boolean; -- Flag5 9122 9123 function Iteration_Scheme 9124 (N : Node_Id) return Node_Id; -- Node2 9125 9126 function Iterator_Specification 9127 (N : Node_Id) return Node_Id; -- Node2 9128 9129 function Itype 9130 (N : Node_Id) return Entity_Id; -- Node1 9131 9132 function Kill_Range_Check 9133 (N : Node_Id) return Boolean; -- Flag11 9134 9135 function Label_Construct 9136 (N : Node_Id) return Node_Id; -- Node2 9137 9138 function Left_Opnd 9139 (N : Node_Id) return Node_Id; -- Node2 9140 9141 function Last_Bit 9142 (N : Node_Id) return Node_Id; -- Node4 9143 9144 function Last_Name 9145 (N : Node_Id) return Boolean; -- Flag6 9146 9147 function Library_Unit 9148 (N : Node_Id) return Node_Id; -- Node4 9149 9150 function Limited_View_Installed 9151 (N : Node_Id) return Boolean; -- Flag18 9152 9153 function Limited_Present 9154 (N : Node_Id) return Boolean; -- Flag17 9155 9156 function Literals 9157 (N : Node_Id) return List_Id; -- List1 9158 9159 function Local_Raise_Not_OK 9160 (N : Node_Id) return Boolean; -- Flag7 9161 9162 function Local_Raise_Statements 9163 (N : Node_Id) return Elist_Id; -- Elist1 9164 9165 function Loop_Actions 9166 (N : Node_Id) return List_Id; -- List2 9167 9168 function Loop_Parameter_Specification 9169 (N : Node_Id) return Node_Id; -- Node4 9170 9171 function Low_Bound 9172 (N : Node_Id) return Node_Id; -- Node1 9173 9174 function Mod_Clause 9175 (N : Node_Id) return Node_Id; -- Node2 9176 9177 function More_Ids 9178 (N : Node_Id) return Boolean; -- Flag5 9179 9180 function Must_Be_Byte_Aligned 9181 (N : Node_Id) return Boolean; -- Flag14 9182 9183 function Must_Not_Freeze 9184 (N : Node_Id) return Boolean; -- Flag8 9185 9186 function Must_Not_Override 9187 (N : Node_Id) return Boolean; -- Flag15 9188 9189 function Must_Override 9190 (N : Node_Id) return Boolean; -- Flag14 9191 9192 function Name 9193 (N : Node_Id) return Node_Id; -- Node2 9194 9195 function Names 9196 (N : Node_Id) return List_Id; -- List2 9197 9198 function Next_Entity 9199 (N : Node_Id) return Node_Id; -- Node2 9200 9201 function Next_Exit_Statement 9202 (N : Node_Id) return Node_Id; -- Node3 9203 9204 function Next_Implicit_With 9205 (N : Node_Id) return Node_Id; -- Node3 9206 9207 function Next_Named_Actual 9208 (N : Node_Id) return Node_Id; -- Node4 9209 9210 function Next_Pragma 9211 (N : Node_Id) return Node_Id; -- Node1 9212 9213 function Next_Rep_Item 9214 (N : Node_Id) return Node_Id; -- Node5 9215 9216 function Next_Use_Clause 9217 (N : Node_Id) return Node_Id; -- Node3 9218 9219 function No_Ctrl_Actions 9220 (N : Node_Id) return Boolean; -- Flag7 9221 9222 function No_Elaboration_Check 9223 (N : Node_Id) return Boolean; -- Flag14 9224 9225 function No_Entities_Ref_In_Spec 9226 (N : Node_Id) return Boolean; -- Flag8 9227 9228 function No_Initialization 9229 (N : Node_Id) return Boolean; -- Flag13 9230 9231 function No_Minimize_Eliminate 9232 (N : Node_Id) return Boolean; -- Flag17 9233 9234 function No_Truncation 9235 (N : Node_Id) return Boolean; -- Flag17 9236 9237 function Null_Present 9238 (N : Node_Id) return Boolean; -- Flag13 9239 9240 function Null_Exclusion_Present 9241 (N : Node_Id) return Boolean; -- Flag11 9242 9243 function Null_Exclusion_In_Return_Present 9244 (N : Node_Id) return Boolean; -- Flag14 9245 9246 function Null_Record_Present 9247 (N : Node_Id) return Boolean; -- Flag17 9248 9249 function Object_Definition 9250 (N : Node_Id) return Node_Id; -- Node4 9251 9252 function Of_Present 9253 (N : Node_Id) return Boolean; -- Flag16 9254 9255 function Original_Discriminant 9256 (N : Node_Id) return Node_Id; -- Node2 9257 9258 function Original_Entity 9259 (N : Node_Id) return Entity_Id; -- Node2 9260 9261 function Others_Discrete_Choices 9262 (N : Node_Id) return List_Id; -- List1 9263 9264 function Out_Present 9265 (N : Node_Id) return Boolean; -- Flag17 9266 9267 function Parameter_Associations 9268 (N : Node_Id) return List_Id; -- List3 9269 9270 function Parameter_List_Truncated 9271 (N : Node_Id) return Boolean; -- Flag17 9272 9273 function Parameter_Specifications 9274 (N : Node_Id) return List_Id; -- List3 9275 9276 function Parameter_Type 9277 (N : Node_Id) return Node_Id; -- Node2 9278 9279 function Parent_Spec 9280 (N : Node_Id) return Node_Id; -- Node4 9281 9282 function Position 9283 (N : Node_Id) return Node_Id; -- Node2 9284 9285 function Pragma_Argument_Associations 9286 (N : Node_Id) return List_Id; -- List2 9287 9288 function Pragma_Identifier 9289 (N : Node_Id) return Node_Id; -- Node4 9290 9291 function Pragmas_After 9292 (N : Node_Id) return List_Id; -- List5 9293 9294 function Pragmas_Before 9295 (N : Node_Id) return List_Id; -- List4 9296 9297 function Pre_Post_Conditions 9298 (N : Node_Id) return Node_Id; -- Node1 9299 9300 function Prefix 9301 (N : Node_Id) return Node_Id; -- Node3 9302 9303 function Premature_Use 9304 (N : Node_Id) return Node_Id; -- Node5 9305 9306 function Present_Expr 9307 (N : Node_Id) return Uint; -- Uint3 9308 9309 function Prev_Ids 9310 (N : Node_Id) return Boolean; -- Flag6 9311 9312 function Print_In_Hex 9313 (N : Node_Id) return Boolean; -- Flag13 9314 9315 function Private_Declarations 9316 (N : Node_Id) return List_Id; -- List3 9317 9318 function Private_Present 9319 (N : Node_Id) return Boolean; -- Flag15 9320 9321 function Procedure_To_Call 9322 (N : Node_Id) return Node_Id; -- Node2 9323 9324 function Proper_Body 9325 (N : Node_Id) return Node_Id; -- Node1 9326 9327 function Protected_Definition 9328 (N : Node_Id) return Node_Id; -- Node3 9329 9330 function Protected_Present 9331 (N : Node_Id) return Boolean; -- Flag6 9332 9333 function Raises_Constraint_Error 9334 (N : Node_Id) return Boolean; -- Flag7 9335 9336 function Range_Constraint 9337 (N : Node_Id) return Node_Id; -- Node4 9338 9339 function Range_Expression 9340 (N : Node_Id) return Node_Id; -- Node4 9341 9342 function Real_Range_Specification 9343 (N : Node_Id) return Node_Id; -- Node4 9344 9345 function Realval 9346 (N : Node_Id) return Ureal; -- Ureal3 9347 9348 function Reason 9349 (N : Node_Id) return Uint; -- Uint3 9350 9351 function Record_Extension_Part 9352 (N : Node_Id) return Node_Id; -- Node3 9353 9354 function Redundant_Use 9355 (N : Node_Id) return Boolean; -- Flag13 9356 9357 function Renaming_Exception 9358 (N : Node_Id) return Node_Id; -- Node2 9359 9360 function Result_Definition 9361 (N : Node_Id) return Node_Id; -- Node4 9362 9363 function Return_Object_Declarations 9364 (N : Node_Id) return List_Id; -- List3 9365 9366 function Return_Statement_Entity 9367 (N : Node_Id) return Node_Id; -- Node5 9368 9369 function Reverse_Present 9370 (N : Node_Id) return Boolean; -- Flag15 9371 9372 function Right_Opnd 9373 (N : Node_Id) return Node_Id; -- Node3 9374 9375 function Rounded_Result 9376 (N : Node_Id) return Boolean; -- Flag18 9377 9378 function SCIL_Controlling_Tag 9379 (N : Node_Id) return Node_Id; -- Node5 9380 9381 function SCIL_Entity 9382 (N : Node_Id) return Node_Id; -- Node4 9383 9384 function SCIL_Tag_Value 9385 (N : Node_Id) return Node_Id; -- Node5 9386 9387 function SCIL_Target_Prim 9388 (N : Node_Id) return Node_Id; -- Node2 9389 9390 function Scope 9391 (N : Node_Id) return Node_Id; -- Node3 9392 9393 function Select_Alternatives 9394 (N : Node_Id) return List_Id; -- List1 9395 9396 function Selector_Name 9397 (N : Node_Id) return Node_Id; -- Node2 9398 9399 function Selector_Names 9400 (N : Node_Id) return List_Id; -- List1 9401 9402 function Shift_Count_OK 9403 (N : Node_Id) return Boolean; -- Flag4 9404 9405 function Source_Type 9406 (N : Node_Id) return Entity_Id; -- Node1 9407 9408 function Specification 9409 (N : Node_Id) return Node_Id; -- Node1 9410 9411 function Split_PPC 9412 (N : Node_Id) return Boolean; -- Flag17 9413 9414 function Statements 9415 (N : Node_Id) return List_Id; -- List3 9416 9417 function Storage_Pool 9418 (N : Node_Id) return Node_Id; -- Node1 9419 9420 function Subpool_Handle_Name 9421 (N : Node_Id) return Node_Id; -- Node4 9422 9423 function Strval 9424 (N : Node_Id) return String_Id; -- Str3 9425 9426 function Subtype_Indication 9427 (N : Node_Id) return Node_Id; -- Node5 9428 9429 function Subtype_Mark 9430 (N : Node_Id) return Node_Id; -- Node4 9431 9432 function Subtype_Marks 9433 (N : Node_Id) return List_Id; -- List2 9434 9435 function Suppress_Assignment_Checks 9436 (N : Node_Id) return Boolean; -- Flag18 9437 9438 function Suppress_Loop_Warnings 9439 (N : Node_Id) return Boolean; -- Flag17 9440 9441 function Synchronized_Present 9442 (N : Node_Id) return Boolean; -- Flag7 9443 9444 function Tagged_Present 9445 (N : Node_Id) return Boolean; -- Flag15 9446 9447 function Target_Type 9448 (N : Node_Id) return Entity_Id; -- Node2 9449 9450 function Task_Definition 9451 (N : Node_Id) return Node_Id; -- Node3 9452 9453 function Task_Present 9454 (N : Node_Id) return Boolean; -- Flag5 9455 9456 function Then_Actions 9457 (N : Node_Id) return List_Id; -- List2 9458 9459 function Then_Statements 9460 (N : Node_Id) return List_Id; -- List2 9461 9462 function Treat_Fixed_As_Integer 9463 (N : Node_Id) return Boolean; -- Flag14 9464 9465 function Triggering_Alternative 9466 (N : Node_Id) return Node_Id; -- Node1 9467 9468 function Triggering_Statement 9469 (N : Node_Id) return Node_Id; -- Node1 9470 9471 function TSS_Elist 9472 (N : Node_Id) return Elist_Id; -- Elist3 9473 9474 function Type_Definition 9475 (N : Node_Id) return Node_Id; -- Node3 9476 9477 function Unit 9478 (N : Node_Id) return Node_Id; -- Node2 9479 9480 function Unknown_Discriminants_Present 9481 (N : Node_Id) return Boolean; -- Flag13 9482 9483 function Unreferenced_In_Spec 9484 (N : Node_Id) return Boolean; -- Flag7 9485 9486 function Variant_Part 9487 (N : Node_Id) return Node_Id; -- Node4 9488 9489 function Variants 9490 (N : Node_Id) return List_Id; -- List1 9491 9492 function Visible_Declarations 9493 (N : Node_Id) return List_Id; -- List2 9494 9495 function Used_Operations 9496 (N : Node_Id) return Elist_Id; -- Elist5 9497 9498 function Was_Originally_Stub 9499 (N : Node_Id) return Boolean; -- Flag13 9500 9501 function Withed_Body 9502 (N : Node_Id) return Node_Id; -- Node1 9503 9504 -- End functions (note used by xsinfo utility program to end processing) 9505 9506 ---------------------------- 9507 -- Node Update Procedures -- 9508 ---------------------------- 9509 9510 -- These are the corresponding node update routines, which again provide 9511 -- a high level logical access with type checking. In addition to setting 9512 -- the indicated field of the node N to the given Val, in the case of 9513 -- tree pointers (List1-4), the parent pointer of the Val node is set to 9514 -- point back to node N. This automates the setting of the parent pointer. 9515 9516 procedure Set_ABE_Is_Certain 9517 (N : Node_Id; Val : Boolean := True); -- Flag18 9518 9519 procedure Set_Abort_Present 9520 (N : Node_Id; Val : Boolean := True); -- Flag15 9521 9522 procedure Set_Abortable_Part 9523 (N : Node_Id; Val : Node_Id); -- Node2 9524 9525 procedure Set_Abstract_Present 9526 (N : Node_Id; Val : Boolean := True); -- Flag4 9527 9528 procedure Set_Accept_Handler_Records 9529 (N : Node_Id; Val : List_Id); -- List5 9530 9531 procedure Set_Accept_Statement 9532 (N : Node_Id; Val : Node_Id); -- Node2 9533 9534 procedure Set_Access_Definition 9535 (N : Node_Id; Val : Node_Id); -- Node3 9536 9537 procedure Set_Access_To_Subprogram_Definition 9538 (N : Node_Id; Val : Node_Id); -- Node3 9539 9540 procedure Set_Access_Types_To_Process 9541 (N : Node_Id; Val : Elist_Id); -- Elist2 9542 9543 procedure Set_Actions 9544 (N : Node_Id; Val : List_Id); -- List1 9545 9546 procedure Set_Activation_Chain_Entity 9547 (N : Node_Id; Val : Node_Id); -- Node3 9548 9549 procedure Set_Acts_As_Spec 9550 (N : Node_Id; Val : Boolean := True); -- Flag4 9551 9552 procedure Set_Actual_Designated_Subtype 9553 (N : Node_Id; Val : Node_Id); -- Node4 9554 9555 procedure Set_Address_Warning_Posted 9556 (N : Node_Id; Val : Boolean := True); -- Flag18 9557 9558 procedure Set_Aggregate_Bounds 9559 (N : Node_Id; Val : Node_Id); -- Node3 9560 9561 procedure Set_Aliased_Present 9562 (N : Node_Id; Val : Boolean := True); -- Flag4 9563 9564 procedure Set_All_Others 9565 (N : Node_Id; Val : Boolean := True); -- Flag11 9566 9567 procedure Set_All_Present 9568 (N : Node_Id; Val : Boolean := True); -- Flag15 9569 9570 procedure Set_Alternatives 9571 (N : Node_Id; Val : List_Id); -- List4 9572 9573 procedure Set_Ancestor_Part 9574 (N : Node_Id; Val : Node_Id); -- Node3 9575 9576 procedure Set_Atomic_Sync_Required 9577 (N : Node_Id; Val : Boolean := True); -- Flag14 9578 9579 procedure Set_Array_Aggregate 9580 (N : Node_Id; Val : Node_Id); -- Node3 9581 9582 procedure Set_Aspect_Rep_Item 9583 (N : Node_Id; Val : Node_Id); -- Node2 9584 9585 procedure Set_Assignment_OK 9586 (N : Node_Id; Val : Boolean := True); -- Flag15 9587 9588 procedure Set_Associated_Node 9589 (N : Node_Id; Val : Node_Id); -- Node4 9590 9591 procedure Set_Attribute_Name 9592 (N : Node_Id; Val : Name_Id); -- Name2 9593 9594 procedure Set_At_End_Proc 9595 (N : Node_Id; Val : Node_Id); -- Node1 9596 9597 procedure Set_Aux_Decls_Node 9598 (N : Node_Id; Val : Node_Id); -- Node5 9599 9600 procedure Set_Backwards_OK 9601 (N : Node_Id; Val : Boolean := True); -- Flag6 9602 9603 procedure Set_Bad_Is_Detected 9604 (N : Node_Id; Val : Boolean := True); -- Flag15 9605 9606 procedure Set_Body_Required 9607 (N : Node_Id; Val : Boolean := True); -- Flag13 9608 9609 procedure Set_Body_To_Inline 9610 (N : Node_Id; Val : Node_Id); -- Node3 9611 9612 procedure Set_Box_Present 9613 (N : Node_Id; Val : Boolean := True); -- Flag15 9614 9615 procedure Set_By_Ref 9616 (N : Node_Id; Val : Boolean := True); -- Flag5 9617 9618 procedure Set_Char_Literal_Value 9619 (N : Node_Id; Val : Uint); -- Uint2 9620 9621 procedure Set_Chars 9622 (N : Node_Id; Val : Name_Id); -- Name1 9623 9624 procedure Set_Check_Address_Alignment 9625 (N : Node_Id; Val : Boolean := True); -- Flag11 9626 9627 procedure Set_Choice_Parameter 9628 (N : Node_Id; Val : Node_Id); -- Node2 9629 9630 procedure Set_Choices 9631 (N : Node_Id; Val : List_Id); -- List1 9632 9633 procedure Set_Class_Present 9634 (N : Node_Id; Val : Boolean := True); -- Flag6 9635 9636 procedure Set_Classifications 9637 (N : Node_Id; Val : Node_Id); -- Node3 9638 9639 procedure Set_Comes_From_Extended_Return_Statement 9640 (N : Node_Id; Val : Boolean := True); -- Flag18 9641 9642 procedure Set_Compile_Time_Known_Aggregate 9643 (N : Node_Id; Val : Boolean := True); -- Flag18 9644 9645 procedure Set_Component_Associations 9646 (N : Node_Id; Val : List_Id); -- List2 9647 9648 procedure Set_Component_Clauses 9649 (N : Node_Id; Val : List_Id); -- List3 9650 9651 procedure Set_Component_Definition 9652 (N : Node_Id; Val : Node_Id); -- Node4 9653 9654 procedure Set_Component_Items 9655 (N : Node_Id; Val : List_Id); -- List3 9656 9657 procedure Set_Component_List 9658 (N : Node_Id; Val : Node_Id); -- Node1 9659 9660 procedure Set_Component_Name 9661 (N : Node_Id; Val : Node_Id); -- Node1 9662 9663 procedure Set_Componentwise_Assignment 9664 (N : Node_Id; Val : Boolean := True); -- Flag14 9665 9666 procedure Set_Condition 9667 (N : Node_Id; Val : Node_Id); -- Node1 9668 9669 procedure Set_Condition_Actions 9670 (N : Node_Id; Val : List_Id); -- List3 9671 9672 procedure Set_Config_Pragmas 9673 (N : Node_Id; Val : List_Id); -- List4 9674 9675 procedure Set_Constant_Present 9676 (N : Node_Id; Val : Boolean := True); -- Flag17 9677 9678 procedure Set_Constraint 9679 (N : Node_Id; Val : Node_Id); -- Node3 9680 9681 procedure Set_Constraints 9682 (N : Node_Id; Val : List_Id); -- List1 9683 9684 procedure Set_Context_Installed 9685 (N : Node_Id; Val : Boolean := True); -- Flag13 9686 9687 procedure Set_Context_Items 9688 (N : Node_Id; Val : List_Id); -- List1 9689 9690 procedure Set_Context_Pending 9691 (N : Node_Id; Val : Boolean := True); -- Flag16 9692 9693 procedure Set_Contract_Test_Cases 9694 (N : Node_Id; Val : Node_Id); -- Node2 9695 9696 procedure Set_Controlling_Argument 9697 (N : Node_Id; Val : Node_Id); -- Node1 9698 9699 procedure Set_Conversion_OK 9700 (N : Node_Id; Val : Boolean := True); -- Flag14 9701 9702 procedure Set_Convert_To_Return_False 9703 (N : Node_Id; Val : Boolean := True); -- Flag13 9704 9705 procedure Set_Corresponding_Aspect 9706 (N : Node_Id; Val : Node_Id); -- Node3 9707 9708 procedure Set_Corresponding_Body 9709 (N : Node_Id; Val : Node_Id); -- Node5 9710 9711 procedure Set_Corresponding_Formal_Spec 9712 (N : Node_Id; Val : Node_Id); -- Node3 9713 9714 procedure Set_Corresponding_Generic_Association 9715 (N : Node_Id; Val : Node_Id); -- Node5 9716 9717 procedure Set_Corresponding_Integer_Value 9718 (N : Node_Id; Val : Uint); -- Uint4 9719 9720 procedure Set_Corresponding_Spec 9721 (N : Node_Id; Val : Node_Id); -- Node5 9722 9723 procedure Set_Corresponding_Spec_Of_Stub 9724 (N : Node_Id; Val : Node_Id); -- Node2 9725 9726 procedure Set_Corresponding_Stub 9727 (N : Node_Id; Val : Node_Id); -- Node3 9728 9729 procedure Set_Dcheck_Function 9730 (N : Node_Id; Val : Entity_Id); -- Node5 9731 9732 procedure Set_Declarations 9733 (N : Node_Id; Val : List_Id); -- List2 9734 9735 procedure Set_Default_Expression 9736 (N : Node_Id; Val : Node_Id); -- Node5 9737 9738 procedure Set_Default_Storage_Pool 9739 (N : Node_Id; Val : Node_Id); -- Node3 9740 9741 procedure Set_Default_Name 9742 (N : Node_Id; Val : Node_Id); -- Node2 9743 9744 procedure Set_Defining_Identifier 9745 (N : Node_Id; Val : Entity_Id); -- Node1 9746 9747 procedure Set_Defining_Unit_Name 9748 (N : Node_Id; Val : Node_Id); -- Node1 9749 9750 procedure Set_Delay_Alternative 9751 (N : Node_Id; Val : Node_Id); -- Node4 9752 9753 procedure Set_Delay_Statement 9754 (N : Node_Id; Val : Node_Id); -- Node2 9755 9756 procedure Set_Delta_Expression 9757 (N : Node_Id; Val : Node_Id); -- Node3 9758 9759 procedure Set_Digits_Expression 9760 (N : Node_Id; Val : Node_Id); -- Node2 9761 9762 procedure Set_Discr_Check_Funcs_Built 9763 (N : Node_Id; Val : Boolean := True); -- Flag11 9764 9765 procedure Set_Discrete_Choices 9766 (N : Node_Id; Val : List_Id); -- List4 9767 9768 procedure Set_Discrete_Range 9769 (N : Node_Id; Val : Node_Id); -- Node4 9770 9771 procedure Set_Discrete_Subtype_Definition 9772 (N : Node_Id; Val : Node_Id); -- Node4 9773 9774 procedure Set_Discrete_Subtype_Definitions 9775 (N : Node_Id; Val : List_Id); -- List2 9776 9777 procedure Set_Discriminant_Specifications 9778 (N : Node_Id; Val : List_Id); -- List4 9779 9780 procedure Set_Discriminant_Type 9781 (N : Node_Id; Val : Node_Id); -- Node5 9782 9783 procedure Set_Do_Accessibility_Check 9784 (N : Node_Id; Val : Boolean := True); -- Flag13 9785 9786 procedure Set_Do_Discriminant_Check 9787 (N : Node_Id; Val : Boolean := True); -- Flag1 9788 9789 procedure Set_Do_Division_Check 9790 (N : Node_Id; Val : Boolean := True); -- Flag13 9791 9792 procedure Set_Do_Length_Check 9793 (N : Node_Id; Val : Boolean := True); -- Flag4 9794 9795 procedure Set_Do_Overflow_Check 9796 (N : Node_Id; Val : Boolean := True); -- Flag17 9797 9798 procedure Set_Do_Range_Check 9799 (N : Node_Id; Val : Boolean := True); -- Flag9 9800 9801 procedure Set_Do_Storage_Check 9802 (N : Node_Id; Val : Boolean := True); -- Flag17 9803 9804 procedure Set_Do_Tag_Check 9805 (N : Node_Id; Val : Boolean := True); -- Flag13 9806 9807 procedure Set_Elaborate_All_Desirable 9808 (N : Node_Id; Val : Boolean := True); -- Flag9 9809 9810 procedure Set_Elaborate_All_Present 9811 (N : Node_Id; Val : Boolean := True); -- Flag14 9812 9813 procedure Set_Elaborate_Desirable 9814 (N : Node_Id; Val : Boolean := True); -- Flag11 9815 9816 procedure Set_Elaborate_Present 9817 (N : Node_Id; Val : Boolean := True); -- Flag4 9818 9819 procedure Set_Elaboration_Boolean 9820 (N : Node_Id; Val : Node_Id); -- Node2 9821 9822 procedure Set_Else_Actions 9823 (N : Node_Id; Val : List_Id); -- List3 9824 9825 procedure Set_Else_Statements 9826 (N : Node_Id; Val : List_Id); -- List4 9827 9828 procedure Set_Elsif_Parts 9829 (N : Node_Id; Val : List_Id); -- List3 9830 9831 procedure Set_Enclosing_Variant 9832 (N : Node_Id; Val : Node_Id); -- Node2 9833 9834 procedure Set_End_Label 9835 (N : Node_Id; Val : Node_Id); -- Node4 9836 9837 procedure Set_End_Span 9838 (N : Node_Id; Val : Uint); -- Uint5 9839 9840 procedure Set_Entity 9841 (N : Node_Id; Val : Node_Id); -- Node4 9842 9843 procedure Set_Entry_Body_Formal_Part 9844 (N : Node_Id; Val : Node_Id); -- Node5 9845 9846 procedure Set_Entry_Call_Alternative 9847 (N : Node_Id; Val : Node_Id); -- Node1 9848 9849 procedure Set_Entry_Call_Statement 9850 (N : Node_Id; Val : Node_Id); -- Node1 9851 9852 procedure Set_Entry_Direct_Name 9853 (N : Node_Id; Val : Node_Id); -- Node1 9854 9855 procedure Set_Entry_Index 9856 (N : Node_Id; Val : Node_Id); -- Node5 9857 9858 procedure Set_Entry_Index_Specification 9859 (N : Node_Id; Val : Node_Id); -- Node4 9860 9861 procedure Set_Etype 9862 (N : Node_Id; Val : Node_Id); -- Node5 9863 9864 procedure Set_Exception_Choices 9865 (N : Node_Id; Val : List_Id); -- List4 9866 9867 procedure Set_Exception_Handlers 9868 (N : Node_Id; Val : List_Id); -- List5 9869 9870 procedure Set_Exception_Junk 9871 (N : Node_Id; Val : Boolean := True); -- Flag8 9872 9873 procedure Set_Exception_Label 9874 (N : Node_Id; Val : Node_Id); -- Node5 9875 9876 procedure Set_Expansion_Delayed 9877 (N : Node_Id; Val : Boolean := True); -- Flag11 9878 9879 procedure Set_Explicit_Actual_Parameter 9880 (N : Node_Id; Val : Node_Id); -- Node3 9881 9882 procedure Set_Explicit_Generic_Actual_Parameter 9883 (N : Node_Id; Val : Node_Id); -- Node1 9884 9885 procedure Set_Expression 9886 (N : Node_Id; Val : Node_Id); -- Node3 9887 9888 procedure Set_Expressions 9889 (N : Node_Id; Val : List_Id); -- List1 9890 9891 procedure Set_First_Bit 9892 (N : Node_Id; Val : Node_Id); -- Node3 9893 9894 procedure Set_First_Inlined_Subprogram 9895 (N : Node_Id; Val : Entity_Id); -- Node3 9896 9897 procedure Set_First_Name 9898 (N : Node_Id; Val : Boolean := True); -- Flag5 9899 9900 procedure Set_First_Named_Actual 9901 (N : Node_Id; Val : Node_Id); -- Node4 9902 9903 procedure Set_First_Real_Statement 9904 (N : Node_Id; Val : Node_Id); -- Node2 9905 9906 procedure Set_First_Subtype_Link 9907 (N : Node_Id; Val : Entity_Id); -- Node5 9908 9909 procedure Set_Float_Truncate 9910 (N : Node_Id; Val : Boolean := True); -- Flag11 9911 9912 procedure Set_Formal_Type_Definition 9913 (N : Node_Id; Val : Node_Id); -- Node3 9914 9915 procedure Set_Forwards_OK 9916 (N : Node_Id; Val : Boolean := True); -- Flag5 9917 9918 procedure Set_From_At_Mod 9919 (N : Node_Id; Val : Boolean := True); -- Flag4 9920 9921 procedure Set_From_Aspect_Specification 9922 (N : Node_Id; Val : Boolean := True); -- Flag13 9923 9924 procedure Set_From_At_End 9925 (N : Node_Id; Val : Boolean := True); -- Flag4 9926 9927 procedure Set_From_Default 9928 (N : Node_Id; Val : Boolean := True); -- Flag6 9929 9930 procedure Set_Generalized_Indexing 9931 (N : Node_Id; Val : Node_Id); -- Node4 9932 9933 procedure Set_Generic_Associations 9934 (N : Node_Id; Val : List_Id); -- List3 9935 9936 procedure Set_Generic_Formal_Declarations 9937 (N : Node_Id; Val : List_Id); -- List2 9938 9939 procedure Set_Generic_Parent 9940 (N : Node_Id; Val : Node_Id); -- Node5 9941 9942 procedure Set_Generic_Parent_Type 9943 (N : Node_Id; Val : Node_Id); -- Node4 9944 9945 procedure Set_Handled_Statement_Sequence 9946 (N : Node_Id; Val : Node_Id); -- Node4 9947 9948 procedure Set_Handler_List_Entry 9949 (N : Node_Id; Val : Node_Id); -- Node2 9950 9951 procedure Set_Has_Created_Identifier 9952 (N : Node_Id; Val : Boolean := True); -- Flag15 9953 9954 procedure Set_Has_Dereference_Action 9955 (N : Node_Id; Val : Boolean := True); -- Flag13 9956 9957 procedure Set_Has_Dynamic_Length_Check 9958 (N : Node_Id; Val : Boolean := True); -- Flag10 9959 9960 procedure Set_Has_Dynamic_Range_Check 9961 (N : Node_Id; Val : Boolean := True); -- Flag12 9962 9963 procedure Set_Has_Init_Expression 9964 (N : Node_Id; Val : Boolean := True); -- Flag14 9965 9966 procedure Set_Has_Local_Raise 9967 (N : Node_Id; Val : Boolean := True); -- Flag8 9968 9969 procedure Set_Has_No_Elaboration_Code 9970 (N : Node_Id; Val : Boolean := True); -- Flag17 9971 9972 procedure Set_Has_Pragma_Suppress_All 9973 (N : Node_Id; Val : Boolean := True); -- Flag14 9974 9975 procedure Set_Has_Private_View 9976 (N : Node_Id; Val : Boolean := True); -- Flag11 9977 9978 procedure Set_Has_Relative_Deadline_Pragma 9979 (N : Node_Id; Val : Boolean := True); -- Flag9 9980 9981 procedure Set_Has_Self_Reference 9982 (N : Node_Id; Val : Boolean := True); -- Flag13 9983 9984 procedure Set_Has_SP_Choice 9985 (N : Node_Id; Val : Boolean := True); -- Flag15 9986 9987 procedure Set_Has_Storage_Size_Pragma 9988 (N : Node_Id; Val : Boolean := True); -- Flag5 9989 9990 procedure Set_Has_Wide_Character 9991 (N : Node_Id; Val : Boolean := True); -- Flag11 9992 9993 procedure Set_Has_Wide_Wide_Character 9994 (N : Node_Id; Val : Boolean := True); -- Flag13 9995 9996 procedure Set_Header_Size_Added 9997 (N : Node_Id; Val : Boolean := True); -- Flag11 9998 9999 procedure Set_Hidden_By_Use_Clause 10000 (N : Node_Id; Val : Elist_Id); -- Elist4 10001 10002 procedure Set_High_Bound 10003 (N : Node_Id; Val : Node_Id); -- Node2 10004 10005 procedure Set_Identifier 10006 (N : Node_Id; Val : Node_Id); -- Node1 10007 10008 procedure Set_Interface_List 10009 (N : Node_Id; Val : List_Id); -- List2 10010 10011 procedure Set_Interface_Present 10012 (N : Node_Id; Val : Boolean := True); -- Flag16 10013 10014 procedure Set_Implicit_With 10015 (N : Node_Id; Val : Boolean := True); -- Flag16 10016 10017 procedure Set_Implicit_With_From_Instantiation 10018 (N : Node_Id; Val : Boolean := True); -- Flag12 10019 10020 procedure Set_Import_Interface_Present 10021 (N : Node_Id; Val : Boolean := True); -- Flag16 10022 10023 procedure Set_In_Present 10024 (N : Node_Id; Val : Boolean := True); -- Flag15 10025 10026 procedure Set_Includes_Infinities 10027 (N : Node_Id; Val : Boolean := True); -- Flag11 10028 10029 procedure Set_Inherited_Discriminant 10030 (N : Node_Id; Val : Boolean := True); -- Flag13 10031 10032 procedure Set_Instance_Spec 10033 (N : Node_Id; Val : Node_Id); -- Node5 10034 10035 procedure Set_Intval 10036 (N : Node_Id; Val : Uint); -- Uint3 10037 10038 procedure Set_Is_Accessibility_Actual 10039 (N : Node_Id; Val : Boolean := True); -- Flag13 10040 10041 procedure Set_Is_Asynchronous_Call_Block 10042 (N : Node_Id; Val : Boolean := True); -- Flag7 10043 10044 procedure Set_Is_Boolean_Aspect 10045 (N : Node_Id; Val : Boolean := True); -- Flag16 10046 10047 procedure Set_Is_Checked 10048 (N : Node_Id; Val : Boolean := True); -- Flag11 10049 10050 procedure Set_Is_Component_Left_Opnd 10051 (N : Node_Id; Val : Boolean := True); -- Flag13 10052 10053 procedure Set_Is_Component_Right_Opnd 10054 (N : Node_Id; Val : Boolean := True); -- Flag14 10055 10056 procedure Set_Is_Controlling_Actual 10057 (N : Node_Id; Val : Boolean := True); -- Flag16 10058 10059 procedure Set_Is_Delayed_Aspect 10060 (N : Node_Id; Val : Boolean := True); -- Flag14 10061 10062 procedure Set_Is_Disabled 10063 (N : Node_Id; Val : Boolean := True); -- Flag15 10064 10065 procedure Set_Is_Ignored 10066 (N : Node_Id; Val : Boolean := True); -- Flag9 10067 10068 procedure Set_Is_Dynamic_Coextension 10069 (N : Node_Id; Val : Boolean := True); -- Flag18 10070 10071 procedure Set_Is_Elsif 10072 (N : Node_Id; Val : Boolean := True); -- Flag13 10073 10074 procedure Set_Is_Entry_Barrier_Function 10075 (N : Node_Id; Val : Boolean := True); -- Flag8 10076 10077 procedure Set_Is_Expanded_Build_In_Place_Call 10078 (N : Node_Id; Val : Boolean := True); -- Flag11 10079 10080 procedure Set_Is_Finalization_Wrapper 10081 (N : Node_Id; Val : Boolean := True); -- Flag9 10082 10083 procedure Set_Is_Folded_In_Parser 10084 (N : Node_Id; Val : Boolean := True); -- Flag4 10085 10086 procedure Set_Is_In_Discriminant_Check 10087 (N : Node_Id; Val : Boolean := True); -- Flag11 10088 10089 procedure Set_Is_Machine_Number 10090 (N : Node_Id; Val : Boolean := True); -- Flag11 10091 10092 procedure Set_Is_Null_Loop 10093 (N : Node_Id; Val : Boolean := True); -- Flag16 10094 10095 procedure Set_Is_Overloaded 10096 (N : Node_Id; Val : Boolean := True); -- Flag5 10097 10098 procedure Set_Is_Power_Of_2_For_Shift 10099 (N : Node_Id; Val : Boolean := True); -- Flag13 10100 10101 procedure Set_Is_Prefixed_Call 10102 (N : Node_Id; Val : Boolean := True); -- Flag17 10103 10104 procedure Set_Is_Protected_Subprogram_Body 10105 (N : Node_Id; Val : Boolean := True); -- Flag7 10106 10107 procedure Set_Is_Static_Coextension 10108 (N : Node_Id; Val : Boolean := True); -- Flag14 10109 10110 procedure Set_Is_Static_Expression 10111 (N : Node_Id; Val : Boolean := True); -- Flag6 10112 10113 procedure Set_Is_Subprogram_Descriptor 10114 (N : Node_Id; Val : Boolean := True); -- Flag16 10115 10116 procedure Set_Is_Task_Allocation_Block 10117 (N : Node_Id; Val : Boolean := True); -- Flag6 10118 10119 procedure Set_Is_Task_Master 10120 (N : Node_Id; Val : Boolean := True); -- Flag5 10121 10122 procedure Set_Iteration_Scheme 10123 (N : Node_Id; Val : Node_Id); -- Node2 10124 10125 procedure Set_Iterator_Specification 10126 (N : Node_Id; Val : Node_Id); -- Node2 10127 10128 procedure Set_Itype 10129 (N : Node_Id; Val : Entity_Id); -- Node1 10130 10131 procedure Set_Kill_Range_Check 10132 (N : Node_Id; Val : Boolean := True); -- Flag11 10133 10134 procedure Set_Last_Bit 10135 (N : Node_Id; Val : Node_Id); -- Node4 10136 10137 procedure Set_Last_Name 10138 (N : Node_Id; Val : Boolean := True); -- Flag6 10139 10140 procedure Set_Library_Unit 10141 (N : Node_Id; Val : Node_Id); -- Node4 10142 10143 procedure Set_Label_Construct 10144 (N : Node_Id; Val : Node_Id); -- Node2 10145 10146 procedure Set_Left_Opnd 10147 (N : Node_Id; Val : Node_Id); -- Node2 10148 10149 procedure Set_Limited_View_Installed 10150 (N : Node_Id; Val : Boolean := True); -- Flag18 10151 10152 procedure Set_Limited_Present 10153 (N : Node_Id; Val : Boolean := True); -- Flag17 10154 10155 procedure Set_Literals 10156 (N : Node_Id; Val : List_Id); -- List1 10157 10158 procedure Set_Local_Raise_Not_OK 10159 (N : Node_Id; Val : Boolean := True); -- Flag7 10160 10161 procedure Set_Local_Raise_Statements 10162 (N : Node_Id; Val : Elist_Id); -- Elist1 10163 10164 procedure Set_Loop_Actions 10165 (N : Node_Id; Val : List_Id); -- List2 10166 10167 procedure Set_Loop_Parameter_Specification 10168 (N : Node_Id; Val : Node_Id); -- Node4 10169 10170 procedure Set_Low_Bound 10171 (N : Node_Id; Val : Node_Id); -- Node1 10172 10173 procedure Set_Mod_Clause 10174 (N : Node_Id; Val : Node_Id); -- Node2 10175 10176 procedure Set_More_Ids 10177 (N : Node_Id; Val : Boolean := True); -- Flag5 10178 10179 procedure Set_Must_Be_Byte_Aligned 10180 (N : Node_Id; Val : Boolean := True); -- Flag14 10181 10182 procedure Set_Must_Not_Freeze 10183 (N : Node_Id; Val : Boolean := True); -- Flag8 10184 10185 procedure Set_Must_Not_Override 10186 (N : Node_Id; Val : Boolean := True); -- Flag15 10187 10188 procedure Set_Must_Override 10189 (N : Node_Id; Val : Boolean := True); -- Flag14 10190 10191 procedure Set_Name 10192 (N : Node_Id; Val : Node_Id); -- Node2 10193 10194 procedure Set_Names 10195 (N : Node_Id; Val : List_Id); -- List2 10196 10197 procedure Set_Next_Entity 10198 (N : Node_Id; Val : Node_Id); -- Node2 10199 10200 procedure Set_Next_Exit_Statement 10201 (N : Node_Id; Val : Node_Id); -- Node3 10202 10203 procedure Set_Next_Implicit_With 10204 (N : Node_Id; Val : Node_Id); -- Node3 10205 10206 procedure Set_Next_Named_Actual 10207 (N : Node_Id; Val : Node_Id); -- Node4 10208 10209 procedure Set_Next_Pragma 10210 (N : Node_Id; Val : Node_Id); -- Node1 10211 10212 procedure Set_Next_Rep_Item 10213 (N : Node_Id; Val : Node_Id); -- Node5 10214 10215 procedure Set_Next_Use_Clause 10216 (N : Node_Id; Val : Node_Id); -- Node3 10217 10218 procedure Set_No_Ctrl_Actions 10219 (N : Node_Id; Val : Boolean := True); -- Flag7 10220 10221 procedure Set_No_Elaboration_Check 10222 (N : Node_Id; Val : Boolean := True); -- Flag14 10223 10224 procedure Set_No_Entities_Ref_In_Spec 10225 (N : Node_Id; Val : Boolean := True); -- Flag8 10226 10227 procedure Set_No_Initialization 10228 (N : Node_Id; Val : Boolean := True); -- Flag13 10229 10230 procedure Set_No_Minimize_Eliminate 10231 (N : Node_Id; Val : Boolean := True); -- Flag17 10232 10233 procedure Set_No_Truncation 10234 (N : Node_Id; Val : Boolean := True); -- Flag17 10235 10236 procedure Set_Null_Present 10237 (N : Node_Id; Val : Boolean := True); -- Flag13 10238 10239 procedure Set_Null_Exclusion_Present 10240 (N : Node_Id; Val : Boolean := True); -- Flag11 10241 10242 procedure Set_Null_Exclusion_In_Return_Present 10243 (N : Node_Id; Val : Boolean := True); -- Flag14 10244 10245 procedure Set_Null_Record_Present 10246 (N : Node_Id; Val : Boolean := True); -- Flag17 10247 10248 procedure Set_Object_Definition 10249 (N : Node_Id; Val : Node_Id); -- Node4 10250 10251 procedure Set_Of_Present 10252 (N : Node_Id; Val : Boolean := True); -- Flag16 10253 10254 procedure Set_Original_Discriminant 10255 (N : Node_Id; Val : Node_Id); -- Node2 10256 10257 procedure Set_Original_Entity 10258 (N : Node_Id; Val : Entity_Id); -- Node2 10259 10260 procedure Set_Others_Discrete_Choices 10261 (N : Node_Id; Val : List_Id); -- List1 10262 10263 procedure Set_Out_Present 10264 (N : Node_Id; Val : Boolean := True); -- Flag17 10265 10266 procedure Set_Parameter_Associations 10267 (N : Node_Id; Val : List_Id); -- List3 10268 10269 procedure Set_Parameter_List_Truncated 10270 (N : Node_Id; Val : Boolean := True); -- Flag17 10271 10272 procedure Set_Parameter_Specifications 10273 (N : Node_Id; Val : List_Id); -- List3 10274 10275 procedure Set_Parameter_Type 10276 (N : Node_Id; Val : Node_Id); -- Node2 10277 10278 procedure Set_Parent_Spec 10279 (N : Node_Id; Val : Node_Id); -- Node4 10280 10281 procedure Set_Position 10282 (N : Node_Id; Val : Node_Id); -- Node2 10283 10284 procedure Set_Pragma_Argument_Associations 10285 (N : Node_Id; Val : List_Id); -- List2 10286 10287 procedure Set_Pragma_Identifier 10288 (N : Node_Id; Val : Node_Id); -- Node4 10289 10290 procedure Set_Pragmas_After 10291 (N : Node_Id; Val : List_Id); -- List5 10292 10293 procedure Set_Pragmas_Before 10294 (N : Node_Id; Val : List_Id); -- List4 10295 10296 procedure Set_Pre_Post_Conditions 10297 (N : Node_Id; Val : Node_Id); -- Node1 10298 10299 procedure Set_Prefix 10300 (N : Node_Id; Val : Node_Id); -- Node3 10301 10302 procedure Set_Premature_Use 10303 (N : Node_Id; Val : Node_Id); -- Node5 10304 10305 procedure Set_Present_Expr 10306 (N : Node_Id; Val : Uint); -- Uint3 10307 10308 procedure Set_Prev_Ids 10309 (N : Node_Id; Val : Boolean := True); -- Flag6 10310 10311 procedure Set_Print_In_Hex 10312 (N : Node_Id; Val : Boolean := True); -- Flag13 10313 10314 procedure Set_Private_Declarations 10315 (N : Node_Id; Val : List_Id); -- List3 10316 10317 procedure Set_Private_Present 10318 (N : Node_Id; Val : Boolean := True); -- Flag15 10319 10320 procedure Set_Procedure_To_Call 10321 (N : Node_Id; Val : Node_Id); -- Node2 10322 10323 procedure Set_Proper_Body 10324 (N : Node_Id; Val : Node_Id); -- Node1 10325 10326 procedure Set_Protected_Definition 10327 (N : Node_Id; Val : Node_Id); -- Node3 10328 10329 procedure Set_Protected_Present 10330 (N : Node_Id; Val : Boolean := True); -- Flag6 10331 10332 procedure Set_Raises_Constraint_Error 10333 (N : Node_Id; Val : Boolean := True); -- Flag7 10334 10335 procedure Set_Range_Constraint 10336 (N : Node_Id; Val : Node_Id); -- Node4 10337 10338 procedure Set_Range_Expression 10339 (N : Node_Id; Val : Node_Id); -- Node4 10340 10341 procedure Set_Real_Range_Specification 10342 (N : Node_Id; Val : Node_Id); -- Node4 10343 10344 procedure Set_Realval 10345 (N : Node_Id; Val : Ureal); -- Ureal3 10346 10347 procedure Set_Reason 10348 (N : Node_Id; Val : Uint); -- Uint3 10349 10350 procedure Set_Record_Extension_Part 10351 (N : Node_Id; Val : Node_Id); -- Node3 10352 10353 procedure Set_Redundant_Use 10354 (N : Node_Id; Val : Boolean := True); -- Flag13 10355 10356 procedure Set_Renaming_Exception 10357 (N : Node_Id; Val : Node_Id); -- Node2 10358 10359 procedure Set_Result_Definition 10360 (N : Node_Id; Val : Node_Id); -- Node4 10361 10362 procedure Set_Return_Object_Declarations 10363 (N : Node_Id; Val : List_Id); -- List3 10364 10365 procedure Set_Return_Statement_Entity 10366 (N : Node_Id; Val : Node_Id); -- Node5 10367 10368 procedure Set_Reverse_Present 10369 (N : Node_Id; Val : Boolean := True); -- Flag15 10370 10371 procedure Set_Right_Opnd 10372 (N : Node_Id; Val : Node_Id); -- Node3 10373 10374 procedure Set_Rounded_Result 10375 (N : Node_Id; Val : Boolean := True); -- Flag18 10376 10377 procedure Set_SCIL_Controlling_Tag 10378 (N : Node_Id; Val : Node_Id); -- Node5 10379 10380 procedure Set_SCIL_Entity 10381 (N : Node_Id; Val : Node_Id); -- Node4 10382 10383 procedure Set_SCIL_Tag_Value 10384 (N : Node_Id; Val : Node_Id); -- Node5 10385 10386 procedure Set_SCIL_Target_Prim 10387 (N : Node_Id; Val : Node_Id); -- Node2 10388 10389 procedure Set_Scope 10390 (N : Node_Id; Val : Node_Id); -- Node3 10391 10392 procedure Set_Select_Alternatives 10393 (N : Node_Id; Val : List_Id); -- List1 10394 10395 procedure Set_Selector_Name 10396 (N : Node_Id; Val : Node_Id); -- Node2 10397 10398 procedure Set_Selector_Names 10399 (N : Node_Id; Val : List_Id); -- List1 10400 10401 procedure Set_Shift_Count_OK 10402 (N : Node_Id; Val : Boolean := True); -- Flag4 10403 10404 procedure Set_Source_Type 10405 (N : Node_Id; Val : Entity_Id); -- Node1 10406 10407 procedure Set_Specification 10408 (N : Node_Id; Val : Node_Id); -- Node1 10409 10410 procedure Set_Split_PPC 10411 (N : Node_Id; Val : Boolean); -- Flag17 10412 10413 procedure Set_Statements 10414 (N : Node_Id; Val : List_Id); -- List3 10415 10416 procedure Set_Storage_Pool 10417 (N : Node_Id; Val : Node_Id); -- Node1 10418 10419 procedure Set_Subpool_Handle_Name 10420 (N : Node_Id; Val : Node_Id); -- Node4 10421 10422 procedure Set_Strval 10423 (N : Node_Id; Val : String_Id); -- Str3 10424 10425 procedure Set_Subtype_Indication 10426 (N : Node_Id; Val : Node_Id); -- Node5 10427 10428 procedure Set_Subtype_Mark 10429 (N : Node_Id; Val : Node_Id); -- Node4 10430 10431 procedure Set_Subtype_Marks 10432 (N : Node_Id; Val : List_Id); -- List2 10433 10434 procedure Set_Suppress_Assignment_Checks 10435 (N : Node_Id; Val : Boolean := True); -- Flag18 10436 10437 procedure Set_Suppress_Loop_Warnings 10438 (N : Node_Id; Val : Boolean := True); -- Flag17 10439 10440 procedure Set_Synchronized_Present 10441 (N : Node_Id; Val : Boolean := True); -- Flag7 10442 10443 procedure Set_Tagged_Present 10444 (N : Node_Id; Val : Boolean := True); -- Flag15 10445 10446 procedure Set_Target_Type 10447 (N : Node_Id; Val : Entity_Id); -- Node2 10448 10449 procedure Set_Task_Definition 10450 (N : Node_Id; Val : Node_Id); -- Node3 10451 10452 procedure Set_Task_Present 10453 (N : Node_Id; Val : Boolean := True); -- Flag5 10454 10455 procedure Set_Then_Actions 10456 (N : Node_Id; Val : List_Id); -- List2 10457 10458 procedure Set_Then_Statements 10459 (N : Node_Id; Val : List_Id); -- List2 10460 10461 procedure Set_Treat_Fixed_As_Integer 10462 (N : Node_Id; Val : Boolean := True); -- Flag14 10463 10464 procedure Set_Triggering_Alternative 10465 (N : Node_Id; Val : Node_Id); -- Node1 10466 10467 procedure Set_Triggering_Statement 10468 (N : Node_Id; Val : Node_Id); -- Node1 10469 10470 procedure Set_TSS_Elist 10471 (N : Node_Id; Val : Elist_Id); -- Elist3 10472 10473 procedure Set_Type_Definition 10474 (N : Node_Id; Val : Node_Id); -- Node3 10475 10476 procedure Set_Unit 10477 (N : Node_Id; Val : Node_Id); -- Node2 10478 10479 procedure Set_Unknown_Discriminants_Present 10480 (N : Node_Id; Val : Boolean := True); -- Flag13 10481 10482 procedure Set_Unreferenced_In_Spec 10483 (N : Node_Id; Val : Boolean := True); -- Flag7 10484 10485 procedure Set_Variant_Part 10486 (N : Node_Id; Val : Node_Id); -- Node4 10487 10488 procedure Set_Variants 10489 (N : Node_Id; Val : List_Id); -- List1 10490 10491 procedure Set_Visible_Declarations 10492 (N : Node_Id; Val : List_Id); -- List2 10493 10494 procedure Set_Used_Operations 10495 (N : Node_Id; Val : Elist_Id); -- Elist5 10496 10497 procedure Set_Was_Originally_Stub 10498 (N : Node_Id; Val : Boolean := True); -- Flag13 10499 10500 procedure Set_Withed_Body 10501 (N : Node_Id; Val : Node_Id); -- Node1 10502 10503 ------------------------- 10504 -- Iterator Procedures -- 10505 ------------------------- 10506 10507 -- The call to Next_xxx (N) is equivalent to N := Next_xxx (N) 10508 10509 procedure Next_Entity (N : in out Node_Id); 10510 procedure Next_Named_Actual (N : in out Node_Id); 10511 procedure Next_Rep_Item (N : in out Node_Id); 10512 procedure Next_Use_Clause (N : in out Node_Id); 10513 10514 ------------------------------------------- 10515 -- Miscellaneous Tree Access Subprograms -- 10516 ------------------------------------------- 10517 10518 function End_Location (N : Node_Id) return Source_Ptr; 10519 -- N is an N_If_Statement or N_Case_Statement node, and this function 10520 -- returns the location of the IF token in the END IF sequence by 10521 -- translating the value of the End_Span field. 10522 10523 procedure Set_End_Location (N : Node_Id; S : Source_Ptr); 10524 -- N is an N_If_Statement or N_Case_Statement node. This procedure sets 10525 -- the End_Span field to correspond to the given value S. In other words, 10526 -- End_Span is set to the difference between S and Sloc (N), the starting 10527 -- location. 10528 10529 function Get_Pragma_Arg (Arg : Node_Id) return Node_Id; 10530 -- Given an argument to a pragma Arg, this function returns the expression 10531 -- for the argument. This is Arg itself, or, in the case where Arg is a 10532 -- pragma argument association node, the expression from this node. 10533 10534 -------------------------------- 10535 -- Node_Kind Membership Tests -- 10536 -------------------------------- 10537 10538 -- The following functions allow a convenient notation for testing whether 10539 -- a Node_Kind value matches any one of a list of possible values. In each 10540 -- case True is returned if the given T argument is equal to any of the V 10541 -- arguments. Note that there is a similar set of functions defined in 10542 -- Atree where the first argument is a Node_Id whose Nkind field is tested. 10543 10544 function Nkind_In 10545 (T : Node_Kind; 10546 V1 : Node_Kind; 10547 V2 : Node_Kind) return Boolean; 10548 10549 function Nkind_In 10550 (T : Node_Kind; 10551 V1 : Node_Kind; 10552 V2 : Node_Kind; 10553 V3 : Node_Kind) return Boolean; 10554 10555 function Nkind_In 10556 (T : Node_Kind; 10557 V1 : Node_Kind; 10558 V2 : Node_Kind; 10559 V3 : Node_Kind; 10560 V4 : Node_Kind) return Boolean; 10561 10562 function Nkind_In 10563 (T : Node_Kind; 10564 V1 : Node_Kind; 10565 V2 : Node_Kind; 10566 V3 : Node_Kind; 10567 V4 : Node_Kind; 10568 V5 : Node_Kind) return Boolean; 10569 10570 function Nkind_In 10571 (T : Node_Kind; 10572 V1 : Node_Kind; 10573 V2 : Node_Kind; 10574 V3 : Node_Kind; 10575 V4 : Node_Kind; 10576 V5 : Node_Kind; 10577 V6 : Node_Kind) return Boolean; 10578 10579 function Nkind_In 10580 (T : Node_Kind; 10581 V1 : Node_Kind; 10582 V2 : Node_Kind; 10583 V3 : Node_Kind; 10584 V4 : Node_Kind; 10585 V5 : Node_Kind; 10586 V6 : Node_Kind; 10587 V7 : Node_Kind) return Boolean; 10588 10589 function Nkind_In 10590 (T : Node_Kind; 10591 V1 : Node_Kind; 10592 V2 : Node_Kind; 10593 V3 : Node_Kind; 10594 V4 : Node_Kind; 10595 V5 : Node_Kind; 10596 V6 : Node_Kind; 10597 V7 : Node_Kind; 10598 V8 : Node_Kind) return Boolean; 10599 10600 function Nkind_In 10601 (T : Node_Kind; 10602 V1 : Node_Kind; 10603 V2 : Node_Kind; 10604 V3 : Node_Kind; 10605 V4 : Node_Kind; 10606 V5 : Node_Kind; 10607 V6 : Node_Kind; 10608 V7 : Node_Kind; 10609 V8 : Node_Kind; 10610 V9 : Node_Kind) return Boolean; 10611 10612 pragma Inline (Nkind_In); 10613 -- Inline all above functions 10614 10615 ----------------------- 10616 -- Utility Functions -- 10617 ----------------------- 10618 10619 function Pragma_Name (N : Node_Id) return Name_Id; 10620 pragma Inline (Pragma_Name); 10621 -- Convenient function to obtain Chars field of Pragma_Identifier 10622 10623 ----------------------------- 10624 -- Syntactic Parent Tables -- 10625 ----------------------------- 10626 10627 -- These tables show for each node, and for each of the five fields, 10628 -- whether the corresponding field is syntactic (True) or semantic (False). 10629 -- Unused entries are also set to False. 10630 10631 subtype Field_Num is Natural range 1 .. 5; 10632 10633 Is_Syntactic_Field : constant array (Node_Kind, Field_Num) of Boolean := ( 10634 10635 -- Following entries can be built automatically from the sinfo sources 10636 -- using the makeisf utility (currently this program is in spitbol). 10637 10638 N_Identifier => 10639 (1 => True, -- Chars (Name1) 10640 2 => False, -- Original_Discriminant (Node2-Sem) 10641 3 => False, -- unused 10642 4 => False, -- Entity (Node4-Sem) 10643 5 => False), -- Etype (Node5-Sem) 10644 10645 N_Integer_Literal => 10646 (1 => False, -- unused 10647 2 => False, -- Original_Entity (Node2-Sem) 10648 3 => True, -- Intval (Uint3) 10649 4 => False, -- unused 10650 5 => False), -- Etype (Node5-Sem) 10651 10652 N_Real_Literal => 10653 (1 => False, -- unused 10654 2 => False, -- Original_Entity (Node2-Sem) 10655 3 => True, -- Realval (Ureal3) 10656 4 => False, -- Corresponding_Integer_Value (Uint4-Sem) 10657 5 => False), -- Etype (Node5-Sem) 10658 10659 N_Character_Literal => 10660 (1 => True, -- Chars (Name1) 10661 2 => True, -- Char_Literal_Value (Uint2) 10662 3 => False, -- unused 10663 4 => False, -- Entity (Node4-Sem) 10664 5 => False), -- Etype (Node5-Sem) 10665 10666 N_String_Literal => 10667 (1 => False, -- unused 10668 2 => False, -- unused 10669 3 => True, -- Strval (Str3) 10670 4 => False, -- unused 10671 5 => False), -- Etype (Node5-Sem) 10672 10673 N_Pragma => 10674 (1 => False, -- Next_Pragma (Node1-Sem) 10675 2 => True, -- Pragma_Argument_Associations (List2) 10676 3 => False, -- unused 10677 4 => True, -- Pragma_Identifier (Node4) 10678 5 => False), -- Next_Rep_Item (Node5-Sem) 10679 10680 N_Pragma_Argument_Association => 10681 (1 => True, -- Chars (Name1) 10682 2 => False, -- unused 10683 3 => True, -- Expression (Node3) 10684 4 => False, -- unused 10685 5 => False), -- unused 10686 10687 N_Defining_Identifier => 10688 (1 => True, -- Chars (Name1) 10689 2 => False, -- Next_Entity (Node2-Sem) 10690 3 => False, -- Scope (Node3-Sem) 10691 4 => False, -- unused 10692 5 => False), -- Etype (Node5-Sem) 10693 10694 N_Full_Type_Declaration => 10695 (1 => True, -- Defining_Identifier (Node1) 10696 2 => False, -- unused 10697 3 => True, -- Type_Definition (Node3) 10698 4 => True, -- Discriminant_Specifications (List4) 10699 5 => False), -- unused 10700 10701 N_Subtype_Declaration => 10702 (1 => True, -- Defining_Identifier (Node1) 10703 2 => False, -- unused 10704 3 => False, -- unused 10705 4 => False, -- Generic_Parent_Type (Node4-Sem) 10706 5 => True), -- Subtype_Indication (Node5) 10707 10708 N_Subtype_Indication => 10709 (1 => False, -- unused 10710 2 => False, -- unused 10711 3 => True, -- Constraint (Node3) 10712 4 => True, -- Subtype_Mark (Node4) 10713 5 => False), -- Etype (Node5-Sem) 10714 10715 N_Object_Declaration => 10716 (1 => True, -- Defining_Identifier (Node1) 10717 2 => False, -- Handler_List_Entry (Node2-Sem) 10718 3 => True, -- Expression (Node3) 10719 4 => True, -- Object_Definition (Node4) 10720 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 10721 10722 N_Number_Declaration => 10723 (1 => True, -- Defining_Identifier (Node1) 10724 2 => False, -- unused 10725 3 => True, -- Expression (Node3) 10726 4 => False, -- unused 10727 5 => False), -- unused 10728 10729 N_Derived_Type_Definition => 10730 (1 => False, -- unused 10731 2 => True, -- Interface_List (List2) 10732 3 => True, -- Record_Extension_Part (Node3) 10733 4 => False, -- unused 10734 5 => True), -- Subtype_Indication (Node5) 10735 10736 N_Range_Constraint => 10737 (1 => False, -- unused 10738 2 => False, -- unused 10739 3 => False, -- unused 10740 4 => True, -- Range_Expression (Node4) 10741 5 => False), -- unused 10742 10743 N_Range => 10744 (1 => True, -- Low_Bound (Node1) 10745 2 => True, -- High_Bound (Node2) 10746 3 => False, -- unused 10747 4 => False, -- unused 10748 5 => False), -- Etype (Node5-Sem) 10749 10750 N_Enumeration_Type_Definition => 10751 (1 => True, -- Literals (List1) 10752 2 => False, -- unused 10753 3 => False, -- unused 10754 4 => True, -- End_Label (Node4) 10755 5 => False), -- unused 10756 10757 N_Defining_Character_Literal => 10758 (1 => True, -- Chars (Name1) 10759 2 => False, -- Next_Entity (Node2-Sem) 10760 3 => False, -- Scope (Node3-Sem) 10761 4 => False, -- unused 10762 5 => False), -- Etype (Node5-Sem) 10763 10764 N_Signed_Integer_Type_Definition => 10765 (1 => True, -- Low_Bound (Node1) 10766 2 => True, -- High_Bound (Node2) 10767 3 => False, -- unused 10768 4 => False, -- unused 10769 5 => False), -- unused 10770 10771 N_Modular_Type_Definition => 10772 (1 => False, -- unused 10773 2 => False, -- unused 10774 3 => True, -- Expression (Node3) 10775 4 => False, -- unused 10776 5 => False), -- unused 10777 10778 N_Floating_Point_Definition => 10779 (1 => False, -- unused 10780 2 => True, -- Digits_Expression (Node2) 10781 3 => False, -- unused 10782 4 => True, -- Real_Range_Specification (Node4) 10783 5 => False), -- unused 10784 10785 N_Real_Range_Specification => 10786 (1 => True, -- Low_Bound (Node1) 10787 2 => True, -- High_Bound (Node2) 10788 3 => False, -- unused 10789 4 => False, -- unused 10790 5 => False), -- unused 10791 10792 N_Ordinary_Fixed_Point_Definition => 10793 (1 => False, -- unused 10794 2 => False, -- unused 10795 3 => True, -- Delta_Expression (Node3) 10796 4 => True, -- Real_Range_Specification (Node4) 10797 5 => False), -- unused 10798 10799 N_Decimal_Fixed_Point_Definition => 10800 (1 => False, -- unused 10801 2 => True, -- Digits_Expression (Node2) 10802 3 => True, -- Delta_Expression (Node3) 10803 4 => True, -- Real_Range_Specification (Node4) 10804 5 => False), -- unused 10805 10806 N_Digits_Constraint => 10807 (1 => False, -- unused 10808 2 => True, -- Digits_Expression (Node2) 10809 3 => False, -- unused 10810 4 => True, -- Range_Constraint (Node4) 10811 5 => False), -- unused 10812 10813 N_Unconstrained_Array_Definition => 10814 (1 => False, -- unused 10815 2 => True, -- Subtype_Marks (List2) 10816 3 => False, -- unused 10817 4 => True, -- Component_Definition (Node4) 10818 5 => False), -- unused 10819 10820 N_Constrained_Array_Definition => 10821 (1 => False, -- unused 10822 2 => True, -- Discrete_Subtype_Definitions (List2) 10823 3 => False, -- unused 10824 4 => True, -- Component_Definition (Node4) 10825 5 => False), -- unused 10826 10827 N_Component_Definition => 10828 (1 => False, -- unused 10829 2 => False, -- unused 10830 3 => True, -- Access_Definition (Node3) 10831 4 => False, -- unused 10832 5 => True), -- Subtype_Indication (Node5) 10833 10834 N_Discriminant_Specification => 10835 (1 => True, -- Defining_Identifier (Node1) 10836 2 => False, -- unused 10837 3 => True, -- Expression (Node3) 10838 4 => False, -- unused 10839 5 => True), -- Discriminant_Type (Node5) 10840 10841 N_Index_Or_Discriminant_Constraint => 10842 (1 => True, -- Constraints (List1) 10843 2 => False, -- unused 10844 3 => False, -- unused 10845 4 => False, -- unused 10846 5 => False), -- unused 10847 10848 N_Discriminant_Association => 10849 (1 => True, -- Selector_Names (List1) 10850 2 => False, -- unused 10851 3 => True, -- Expression (Node3) 10852 4 => False, -- unused 10853 5 => False), -- unused 10854 10855 N_Record_Definition => 10856 (1 => True, -- Component_List (Node1) 10857 2 => True, -- Interface_List (List2) 10858 3 => False, -- unused 10859 4 => True, -- End_Label (Node4) 10860 5 => False), -- unused 10861 10862 N_Component_List => 10863 (1 => False, -- unused 10864 2 => False, -- unused 10865 3 => True, -- Component_Items (List3) 10866 4 => True, -- Variant_Part (Node4) 10867 5 => False), -- unused 10868 10869 N_Component_Declaration => 10870 (1 => True, -- Defining_Identifier (Node1) 10871 2 => False, -- unused 10872 3 => True, -- Expression (Node3) 10873 4 => True, -- Component_Definition (Node4) 10874 5 => False), -- unused 10875 10876 N_Variant_Part => 10877 (1 => True, -- Variants (List1) 10878 2 => True, -- Name (Node2) 10879 3 => False, -- unused 10880 4 => False, -- unused 10881 5 => False), -- unused 10882 10883 N_Variant => 10884 (1 => True, -- Component_List (Node1) 10885 2 => False, -- Enclosing_Variant (Node2-Sem) 10886 3 => False, -- Present_Expr (Uint3-Sem) 10887 4 => True, -- Discrete_Choices (List4) 10888 5 => False), -- Dcheck_Function (Node5-Sem) 10889 10890 N_Others_Choice => 10891 (1 => False, -- Others_Discrete_Choices (List1-Sem) 10892 2 => False, -- unused 10893 3 => False, -- unused 10894 4 => False, -- unused 10895 5 => False), -- unused 10896 10897 N_Access_To_Object_Definition => 10898 (1 => False, -- unused 10899 2 => False, -- unused 10900 3 => False, -- unused 10901 4 => False, -- unused 10902 5 => True), -- Subtype_Indication (Node5) 10903 10904 N_Access_Function_Definition => 10905 (1 => False, -- unused 10906 2 => False, -- unused 10907 3 => True, -- Parameter_Specifications (List3) 10908 4 => True, -- Result_Definition (Node4) 10909 5 => False), -- unused 10910 10911 N_Access_Procedure_Definition => 10912 (1 => False, -- unused 10913 2 => False, -- unused 10914 3 => True, -- Parameter_Specifications (List3) 10915 4 => False, -- unused 10916 5 => False), -- unused 10917 10918 N_Access_Definition => 10919 (1 => False, -- unused 10920 2 => False, -- unused 10921 3 => True, -- Access_To_Subprogram_Definition (Node3) 10922 4 => True, -- Subtype_Mark (Node4) 10923 5 => False), -- unused 10924 10925 N_Incomplete_Type_Declaration => 10926 (1 => True, -- Defining_Identifier (Node1) 10927 2 => False, -- unused 10928 3 => False, -- unused 10929 4 => True, -- Discriminant_Specifications (List4) 10930 5 => False), -- Premature_Use 10931 10932 N_Explicit_Dereference => 10933 (1 => False, -- unused 10934 2 => False, -- unused 10935 3 => True, -- Prefix (Node3) 10936 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 10937 5 => False), -- Etype (Node5-Sem) 10938 10939 N_Indexed_Component => 10940 (1 => True, -- Expressions (List1) 10941 2 => False, -- unused 10942 3 => True, -- Prefix (Node3) 10943 4 => False, -- Generalized_Indexing (Node4-Sem) 10944 5 => False), -- Etype (Node5-Sem) 10945 10946 N_Slice => 10947 (1 => False, -- unused 10948 2 => False, -- unused 10949 3 => True, -- Prefix (Node3) 10950 4 => True, -- Discrete_Range (Node4) 10951 5 => False), -- Etype (Node5-Sem) 10952 10953 N_Selected_Component => 10954 (1 => False, -- unused 10955 2 => True, -- Selector_Name (Node2) 10956 3 => True, -- Prefix (Node3) 10957 4 => False, -- unused 10958 5 => False), -- Etype (Node5-Sem) 10959 10960 N_Attribute_Reference => 10961 (1 => True, -- Expressions (List1) 10962 2 => True, -- Attribute_Name (Name2) 10963 3 => True, -- Prefix (Node3) 10964 4 => False, -- Entity (Node4-Sem) 10965 5 => False), -- Etype (Node5-Sem) 10966 10967 N_Aggregate => 10968 (1 => True, -- Expressions (List1) 10969 2 => True, -- Component_Associations (List2) 10970 3 => False, -- Aggregate_Bounds (Node3-Sem) 10971 4 => False, -- unused 10972 5 => False), -- Etype (Node5-Sem) 10973 10974 N_Component_Association => 10975 (1 => True, -- Choices (List1) 10976 2 => False, -- Loop_Actions (List2-Sem) 10977 3 => True, -- Expression (Node3) 10978 4 => False, -- unused 10979 5 => False), -- unused 10980 10981 N_Extension_Aggregate => 10982 (1 => True, -- Expressions (List1) 10983 2 => True, -- Component_Associations (List2) 10984 3 => True, -- Ancestor_Part (Node3) 10985 4 => False, -- unused 10986 5 => False), -- Etype (Node5-Sem) 10987 10988 N_Null => 10989 (1 => False, -- unused 10990 2 => False, -- unused 10991 3 => False, -- unused 10992 4 => False, -- unused 10993 5 => False), -- Etype (Node5-Sem) 10994 10995 N_And_Then => 10996 (1 => False, -- Actions (List1-Sem) 10997 2 => True, -- Left_Opnd (Node2) 10998 3 => True, -- Right_Opnd (Node3) 10999 4 => False, -- unused 11000 5 => False), -- Etype (Node5-Sem) 11001 11002 N_Or_Else => 11003 (1 => False, -- Actions (List1-Sem) 11004 2 => True, -- Left_Opnd (Node2) 11005 3 => True, -- Right_Opnd (Node3) 11006 4 => False, -- unused 11007 5 => False), -- Etype (Node5-Sem) 11008 11009 N_In => 11010 (1 => False, -- unused 11011 2 => True, -- Left_Opnd (Node2) 11012 3 => True, -- Right_Opnd (Node3) 11013 4 => True, -- Alternatives (List4) 11014 5 => False), -- Etype (Node5-Sem) 11015 11016 N_Not_In => 11017 (1 => False, -- unused 11018 2 => True, -- Left_Opnd (Node2) 11019 3 => True, -- Right_Opnd (Node3) 11020 4 => True, -- Alternatives (List4) 11021 5 => False), -- Etype (Node5-Sem) 11022 11023 N_Op_And => 11024 (1 => True, -- Chars (Name1) 11025 2 => True, -- Left_Opnd (Node2) 11026 3 => True, -- Right_Opnd (Node3) 11027 4 => False, -- Entity (Node4-Sem) 11028 5 => False), -- Etype (Node5-Sem) 11029 11030 N_Op_Or => 11031 (1 => True, -- Chars (Name1) 11032 2 => True, -- Left_Opnd (Node2) 11033 3 => True, -- Right_Opnd (Node3) 11034 4 => False, -- Entity (Node4-Sem) 11035 5 => False), -- Etype (Node5-Sem) 11036 11037 N_Op_Xor => 11038 (1 => True, -- Chars (Name1) 11039 2 => True, -- Left_Opnd (Node2) 11040 3 => True, -- Right_Opnd (Node3) 11041 4 => False, -- Entity (Node4-Sem) 11042 5 => False), -- Etype (Node5-Sem) 11043 11044 N_Op_Eq => 11045 (1 => True, -- Chars (Name1) 11046 2 => True, -- Left_Opnd (Node2) 11047 3 => True, -- Right_Opnd (Node3) 11048 4 => False, -- Entity (Node4-Sem) 11049 5 => False), -- Etype (Node5-Sem) 11050 11051 N_Op_Ne => 11052 (1 => True, -- Chars (Name1) 11053 2 => True, -- Left_Opnd (Node2) 11054 3 => True, -- Right_Opnd (Node3) 11055 4 => False, -- Entity (Node4-Sem) 11056 5 => False), -- Etype (Node5-Sem) 11057 11058 N_Op_Lt => 11059 (1 => True, -- Chars (Name1) 11060 2 => True, -- Left_Opnd (Node2) 11061 3 => True, -- Right_Opnd (Node3) 11062 4 => False, -- Entity (Node4-Sem) 11063 5 => False), -- Etype (Node5-Sem) 11064 11065 N_Op_Le => 11066 (1 => True, -- Chars (Name1) 11067 2 => True, -- Left_Opnd (Node2) 11068 3 => True, -- Right_Opnd (Node3) 11069 4 => False, -- Entity (Node4-Sem) 11070 5 => False), -- Etype (Node5-Sem) 11071 11072 N_Op_Gt => 11073 (1 => True, -- Chars (Name1) 11074 2 => True, -- Left_Opnd (Node2) 11075 3 => True, -- Right_Opnd (Node3) 11076 4 => False, -- Entity (Node4-Sem) 11077 5 => False), -- Etype (Node5-Sem) 11078 11079 N_Op_Ge => 11080 (1 => True, -- Chars (Name1) 11081 2 => True, -- Left_Opnd (Node2) 11082 3 => True, -- Right_Opnd (Node3) 11083 4 => False, -- Entity (Node4-Sem) 11084 5 => False), -- Etype (Node5-Sem) 11085 11086 N_Op_Add => 11087 (1 => True, -- Chars (Name1) 11088 2 => True, -- Left_Opnd (Node2) 11089 3 => True, -- Right_Opnd (Node3) 11090 4 => False, -- Entity (Node4-Sem) 11091 5 => False), -- Etype (Node5-Sem) 11092 11093 N_Op_Subtract => 11094 (1 => True, -- Chars (Name1) 11095 2 => True, -- Left_Opnd (Node2) 11096 3 => True, -- Right_Opnd (Node3) 11097 4 => False, -- Entity (Node4-Sem) 11098 5 => False), -- Etype (Node5-Sem) 11099 11100 N_Op_Concat => 11101 (1 => True, -- Chars (Name1) 11102 2 => True, -- Left_Opnd (Node2) 11103 3 => True, -- Right_Opnd (Node3) 11104 4 => False, -- Entity (Node4-Sem) 11105 5 => False), -- Etype (Node5-Sem) 11106 11107 N_Op_Multiply => 11108 (1 => True, -- Chars (Name1) 11109 2 => True, -- Left_Opnd (Node2) 11110 3 => True, -- Right_Opnd (Node3) 11111 4 => False, -- Entity (Node4-Sem) 11112 5 => False), -- Etype (Node5-Sem) 11113 11114 N_Op_Divide => 11115 (1 => True, -- Chars (Name1) 11116 2 => True, -- Left_Opnd (Node2) 11117 3 => True, -- Right_Opnd (Node3) 11118 4 => False, -- Entity (Node4-Sem) 11119 5 => False), -- Etype (Node5-Sem) 11120 11121 N_Op_Mod => 11122 (1 => True, -- Chars (Name1) 11123 2 => True, -- Left_Opnd (Node2) 11124 3 => True, -- Right_Opnd (Node3) 11125 4 => False, -- Entity (Node4-Sem) 11126 5 => False), -- Etype (Node5-Sem) 11127 11128 N_Op_Rem => 11129 (1 => True, -- Chars (Name1) 11130 2 => True, -- Left_Opnd (Node2) 11131 3 => True, -- Right_Opnd (Node3) 11132 4 => False, -- Entity (Node4-Sem) 11133 5 => False), -- Etype (Node5-Sem) 11134 11135 N_Op_Expon => 11136 (1 => True, -- Chars (Name1) 11137 2 => True, -- Left_Opnd (Node2) 11138 3 => True, -- Right_Opnd (Node3) 11139 4 => False, -- Entity (Node4-Sem) 11140 5 => False), -- Etype (Node5-Sem) 11141 11142 N_Op_Plus => 11143 (1 => True, -- Chars (Name1) 11144 2 => False, -- unused 11145 3 => True, -- Right_Opnd (Node3) 11146 4 => False, -- Entity (Node4-Sem) 11147 5 => False), -- Etype (Node5-Sem) 11148 11149 N_Op_Minus => 11150 (1 => True, -- Chars (Name1) 11151 2 => False, -- unused 11152 3 => True, -- Right_Opnd (Node3) 11153 4 => False, -- Entity (Node4-Sem) 11154 5 => False), -- Etype (Node5-Sem) 11155 11156 N_Op_Abs => 11157 (1 => True, -- Chars (Name1) 11158 2 => False, -- unused 11159 3 => True, -- Right_Opnd (Node3) 11160 4 => False, -- Entity (Node4-Sem) 11161 5 => False), -- Etype (Node5-Sem) 11162 11163 N_Op_Not => 11164 (1 => True, -- Chars (Name1) 11165 2 => False, -- unused 11166 3 => True, -- Right_Opnd (Node3) 11167 4 => False, -- Entity (Node4-Sem) 11168 5 => False), -- Etype (Node5-Sem) 11169 11170 N_Type_Conversion => 11171 (1 => False, -- unused 11172 2 => False, -- unused 11173 3 => True, -- Expression (Node3) 11174 4 => True, -- Subtype_Mark (Node4) 11175 5 => False), -- Etype (Node5-Sem) 11176 11177 N_Qualified_Expression => 11178 (1 => False, -- unused 11179 2 => False, -- unused 11180 3 => True, -- Expression (Node3) 11181 4 => True, -- Subtype_Mark (Node4) 11182 5 => False), -- Etype (Node5-Sem) 11183 11184 N_Quantified_Expression => 11185 (1 => True, -- Condition (Node1) 11186 2 => True, -- Iterator_Specification 11187 3 => False, -- unused 11188 4 => True, -- Loop_Parameter_Specification (Node4) 11189 5 => False), -- Etype (Node5-Sem) 11190 11191 N_Allocator => 11192 (1 => False, -- Storage_Pool (Node1-Sem) 11193 2 => False, -- Procedure_To_Call (Node2-Sem) 11194 3 => True, -- Expression (Node3) 11195 4 => True, -- Subpool_Handle_Name (Node4) 11196 5 => False), -- Etype (Node5-Sem) 11197 11198 N_Null_Statement => 11199 (1 => False, -- unused 11200 2 => False, -- unused 11201 3 => False, -- unused 11202 4 => False, -- unused 11203 5 => False), -- unused 11204 11205 N_Label => 11206 (1 => True, -- Identifier (Node1) 11207 2 => False, -- unused 11208 3 => False, -- unused 11209 4 => False, -- unused 11210 5 => False), -- unused 11211 11212 N_Assignment_Statement => 11213 (1 => False, -- unused 11214 2 => True, -- Name (Node2) 11215 3 => True, -- Expression (Node3) 11216 4 => False, -- unused 11217 5 => False), -- unused 11218 11219 N_If_Statement => 11220 (1 => True, -- Condition (Node1) 11221 2 => True, -- Then_Statements (List2) 11222 3 => True, -- Elsif_Parts (List3) 11223 4 => True, -- Else_Statements (List4) 11224 5 => True), -- End_Span (Uint5) 11225 11226 N_Elsif_Part => 11227 (1 => True, -- Condition (Node1) 11228 2 => True, -- Then_Statements (List2) 11229 3 => False, -- Condition_Actions (List3-Sem) 11230 4 => False, -- unused 11231 5 => False), -- unused 11232 11233 N_Case_Expression => 11234 (1 => False, -- unused 11235 2 => False, -- unused 11236 3 => True, -- Expression (Node3) 11237 4 => True, -- Alternatives (List4) 11238 5 => False), -- unused 11239 11240 N_Case_Expression_Alternative => 11241 (1 => False, -- Actions (List1-Sem) 11242 2 => False, -- unused 11243 3 => True, -- Statements (List3) 11244 4 => True, -- Expression (Node4) 11245 5 => False), -- unused 11246 11247 N_Case_Statement => 11248 (1 => False, -- unused 11249 2 => False, -- unused 11250 3 => True, -- Expression (Node3) 11251 4 => True, -- Alternatives (List4) 11252 5 => True), -- End_Span (Uint5) 11253 11254 N_Case_Statement_Alternative => 11255 (1 => False, -- unused 11256 2 => False, -- unused 11257 3 => True, -- Statements (List3) 11258 4 => True, -- Discrete_Choices (List4) 11259 5 => False), -- unused 11260 11261 N_Loop_Statement => 11262 (1 => True, -- Identifier (Node1) 11263 2 => True, -- Iteration_Scheme (Node2) 11264 3 => True, -- Statements (List3) 11265 4 => True, -- End_Label (Node4) 11266 5 => False), -- unused 11267 11268 N_Iteration_Scheme => 11269 (1 => True, -- Condition (Node1) 11270 2 => True, -- Iterator_Specification (Node2) 11271 3 => False, -- Condition_Actions (List3-Sem) 11272 4 => True, -- Loop_Parameter_Specification (Node4) 11273 5 => False), -- unused 11274 11275 N_Loop_Parameter_Specification => 11276 (1 => True, -- Defining_Identifier (Node1) 11277 2 => False, -- unused 11278 3 => False, -- unused 11279 4 => True, -- Discrete_Subtype_Definition (Node4) 11280 5 => False), -- unused 11281 11282 N_Iterator_Specification => 11283 (1 => True, -- Defining_Identifier (Node1) 11284 2 => True, -- Name (Node2) 11285 3 => False, -- Unused 11286 4 => False, -- Unused 11287 5 => True), -- Subtype_Indication (Node5) 11288 11289 N_Block_Statement => 11290 (1 => True, -- Identifier (Node1) 11291 2 => True, -- Declarations (List2) 11292 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11293 4 => True, -- Handled_Statement_Sequence (Node4) 11294 5 => False), -- unused 11295 11296 N_Exit_Statement => 11297 (1 => True, -- Condition (Node1) 11298 2 => True, -- Name (Node2) 11299 3 => False, -- unused 11300 4 => False, -- unused 11301 5 => False), -- unused 11302 11303 N_Goto_Statement => 11304 (1 => False, -- unused 11305 2 => True, -- Name (Node2) 11306 3 => False, -- unused 11307 4 => False, -- unused 11308 5 => False), -- unused 11309 11310 N_Subprogram_Declaration => 11311 (1 => True, -- Specification (Node1) 11312 2 => False, -- unused 11313 3 => False, -- Body_To_Inline (Node3-Sem) 11314 4 => False, -- Parent_Spec (Node4-Sem) 11315 5 => False), -- Corresponding_Body (Node5-Sem) 11316 11317 N_Abstract_Subprogram_Declaration => 11318 (1 => True, -- Specification (Node1) 11319 2 => False, -- unused 11320 3 => False, -- unused 11321 4 => False, -- unused 11322 5 => False), -- unused 11323 11324 N_Function_Specification => 11325 (1 => True, -- Defining_Unit_Name (Node1) 11326 2 => False, -- Elaboration_Boolean (Node2-Sem) 11327 3 => True, -- Parameter_Specifications (List3) 11328 4 => True, -- Result_Definition (Node4) 11329 5 => False), -- Generic_Parent (Node5-Sem) 11330 11331 N_Procedure_Specification => 11332 (1 => True, -- Defining_Unit_Name (Node1) 11333 2 => False, -- Elaboration_Boolean (Node2-Sem) 11334 3 => True, -- Parameter_Specifications (List3) 11335 4 => False, -- unused 11336 5 => False), -- Generic_Parent (Node5-Sem) 11337 11338 N_Designator => 11339 (1 => True, -- Identifier (Node1) 11340 2 => True, -- Name (Node2) 11341 3 => False, -- unused 11342 4 => False, -- unused 11343 5 => False), -- unused 11344 11345 N_Defining_Program_Unit_Name => 11346 (1 => True, -- Defining_Identifier (Node1) 11347 2 => True, -- Name (Node2) 11348 3 => False, -- unused 11349 4 => False, -- unused 11350 5 => False), -- unused 11351 11352 N_Operator_Symbol => 11353 (1 => True, -- Chars (Name1) 11354 2 => False, -- unused 11355 3 => True, -- Strval (Str3) 11356 4 => False, -- Entity (Node4-Sem) 11357 5 => False), -- Etype (Node5-Sem) 11358 11359 N_Defining_Operator_Symbol => 11360 (1 => True, -- Chars (Name1) 11361 2 => False, -- Next_Entity (Node2-Sem) 11362 3 => False, -- Scope (Node3-Sem) 11363 4 => False, -- unused 11364 5 => False), -- Etype (Node5-Sem) 11365 11366 N_Parameter_Specification => 11367 (1 => True, -- Defining_Identifier (Node1) 11368 2 => True, -- Parameter_Type (Node2) 11369 3 => True, -- Expression (Node3) 11370 4 => False, -- unused 11371 5 => False), -- Default_Expression (Node5-Sem) 11372 11373 N_Subprogram_Body => 11374 (1 => True, -- Specification (Node1) 11375 2 => True, -- Declarations (List2) 11376 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11377 4 => True, -- Handled_Statement_Sequence (Node4) 11378 5 => False), -- Corresponding_Spec (Node5-Sem) 11379 11380 N_Expression_Function => 11381 (1 => True, -- Specification (Node1) 11382 2 => False, -- unused 11383 3 => True, -- Expression (Node3) 11384 4 => False, -- unused 11385 5 => False), -- unused 11386 11387 N_Procedure_Call_Statement => 11388 (1 => False, -- Controlling_Argument (Node1-Sem) 11389 2 => True, -- Name (Node2) 11390 3 => True, -- Parameter_Associations (List3) 11391 4 => False, -- First_Named_Actual (Node4-Sem) 11392 5 => False), -- Etype (Node5-Sem) 11393 11394 N_Function_Call => 11395 (1 => False, -- Controlling_Argument (Node1-Sem) 11396 2 => True, -- Name (Node2) 11397 3 => True, -- Parameter_Associations (List3) 11398 4 => False, -- First_Named_Actual (Node4-Sem) 11399 5 => False), -- Etype (Node5-Sem) 11400 11401 N_Parameter_Association => 11402 (1 => False, -- unused 11403 2 => True, -- Selector_Name (Node2) 11404 3 => True, -- Explicit_Actual_Parameter (Node3) 11405 4 => False, -- Next_Named_Actual (Node4-Sem) 11406 5 => False), -- unused 11407 11408 N_Simple_Return_Statement => 11409 (1 => False, -- Storage_Pool (Node1-Sem) 11410 2 => False, -- Procedure_To_Call (Node2-Sem) 11411 3 => True, -- Expression (Node3) 11412 4 => False, -- unused 11413 5 => False), -- Return_Statement_Entity (Node5-Sem) 11414 11415 N_Extended_Return_Statement => 11416 (1 => False, -- Storage_Pool (Node1-Sem) 11417 2 => False, -- Procedure_To_Call (Node2-Sem) 11418 3 => True, -- Return_Object_Declarations (List3) 11419 4 => True, -- Handled_Statement_Sequence (Node4) 11420 5 => False), -- Return_Statement_Entity (Node5-Sem) 11421 11422 N_Package_Declaration => 11423 (1 => True, -- Specification (Node1) 11424 2 => False, -- unused 11425 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11426 4 => False, -- Parent_Spec (Node4-Sem) 11427 5 => False), -- Corresponding_Body (Node5-Sem) 11428 11429 N_Package_Specification => 11430 (1 => True, -- Defining_Unit_Name (Node1) 11431 2 => True, -- Visible_Declarations (List2) 11432 3 => True, -- Private_Declarations (List3) 11433 4 => True, -- End_Label (Node4) 11434 5 => False), -- Generic_Parent (Node5-Sem) 11435 11436 N_Package_Body => 11437 (1 => True, -- Defining_Unit_Name (Node1) 11438 2 => True, -- Declarations (List2) 11439 3 => False, -- unused 11440 4 => True, -- Handled_Statement_Sequence (Node4) 11441 5 => False), -- Corresponding_Spec (Node5-Sem) 11442 11443 N_Private_Type_Declaration => 11444 (1 => True, -- Defining_Identifier (Node1) 11445 2 => False, -- unused 11446 3 => False, -- unused 11447 4 => True, -- Discriminant_Specifications (List4) 11448 5 => False), -- unused 11449 11450 N_Private_Extension_Declaration => 11451 (1 => True, -- Defining_Identifier (Node1) 11452 2 => True, -- Interface_List (List2) 11453 3 => False, -- unused 11454 4 => True, -- Discriminant_Specifications (List4) 11455 5 => True), -- Subtype_Indication (Node5) 11456 11457 N_Use_Package_Clause => 11458 (1 => False, -- unused 11459 2 => True, -- Names (List2) 11460 3 => False, -- Next_Use_Clause (Node3-Sem) 11461 4 => False, -- Hidden_By_Use_Clause (Elist4-Sem) 11462 5 => False), -- unused 11463 11464 N_Use_Type_Clause => 11465 (1 => False, -- unused 11466 2 => True, -- Subtype_Marks (List2) 11467 3 => False, -- Next_Use_Clause (Node3-Sem) 11468 4 => False, -- Hidden_By_Use_Clause (Elist4-Sem) 11469 5 => False), -- unused 11470 11471 N_Object_Renaming_Declaration => 11472 (1 => True, -- Defining_Identifier (Node1) 11473 2 => True, -- Name (Node2) 11474 3 => True, -- Access_Definition (Node3) 11475 4 => True, -- Subtype_Mark (Node4) 11476 5 => False), -- Corresponding_Generic_Association (Node5-Sem) 11477 11478 N_Exception_Renaming_Declaration => 11479 (1 => True, -- Defining_Identifier (Node1) 11480 2 => True, -- Name (Node2) 11481 3 => False, -- unused 11482 4 => False, -- unused 11483 5 => False), -- unused 11484 11485 N_Package_Renaming_Declaration => 11486 (1 => True, -- Defining_Unit_Name (Node1) 11487 2 => True, -- Name (Node2) 11488 3 => False, -- unused 11489 4 => False, -- Parent_Spec (Node4-Sem) 11490 5 => False), -- unused 11491 11492 N_Subprogram_Renaming_Declaration => 11493 (1 => True, -- Specification (Node1) 11494 2 => True, -- Name (Node2) 11495 3 => False, -- Corresponding_Formal_Spec (Node3-Sem) 11496 4 => False, -- Parent_Spec (Node4-Sem) 11497 5 => False), -- Corresponding_Spec (Node5-Sem) 11498 11499 N_Generic_Package_Renaming_Declaration => 11500 (1 => True, -- Defining_Unit_Name (Node1) 11501 2 => True, -- Name (Node2) 11502 3 => False, -- unused 11503 4 => False, -- Parent_Spec (Node4-Sem) 11504 5 => False), -- unused 11505 11506 N_Generic_Procedure_Renaming_Declaration => 11507 (1 => True, -- Defining_Unit_Name (Node1) 11508 2 => True, -- Name (Node2) 11509 3 => False, -- unused 11510 4 => False, -- Parent_Spec (Node4-Sem) 11511 5 => False), -- unused 11512 11513 N_Generic_Function_Renaming_Declaration => 11514 (1 => True, -- Defining_Unit_Name (Node1) 11515 2 => True, -- Name (Node2) 11516 3 => False, -- unused 11517 4 => False, -- Parent_Spec (Node4-Sem) 11518 5 => False), -- unused 11519 11520 N_Task_Type_Declaration => 11521 (1 => True, -- Defining_Identifier (Node1) 11522 2 => True, -- Interface_List (List2) 11523 3 => True, -- Task_Definition (Node3) 11524 4 => True, -- Discriminant_Specifications (List4) 11525 5 => False), -- Corresponding_Body (Node5-Sem) 11526 11527 N_Single_Task_Declaration => 11528 (1 => True, -- Defining_Identifier (Node1) 11529 2 => True, -- Interface_List (List2) 11530 3 => True, -- Task_Definition (Node3) 11531 4 => False, -- unused 11532 5 => False), -- unused 11533 11534 N_Task_Definition => 11535 (1 => False, -- unused 11536 2 => True, -- Visible_Declarations (List2) 11537 3 => True, -- Private_Declarations (List3) 11538 4 => True, -- End_Label (Node4) 11539 5 => False), -- unused 11540 11541 N_Task_Body => 11542 (1 => True, -- Defining_Identifier (Node1) 11543 2 => True, -- Declarations (List2) 11544 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11545 4 => True, -- Handled_Statement_Sequence (Node4) 11546 5 => False), -- Corresponding_Spec (Node5-Sem) 11547 11548 N_Protected_Type_Declaration => 11549 (1 => True, -- Defining_Identifier (Node1) 11550 2 => True, -- Interface_List (List2) 11551 3 => True, -- Protected_Definition (Node3) 11552 4 => True, -- Discriminant_Specifications (List4) 11553 5 => False), -- Corresponding_Body (Node5-Sem) 11554 11555 N_Single_Protected_Declaration => 11556 (1 => True, -- Defining_Identifier (Node1) 11557 2 => True, -- Interface_List (List2) 11558 3 => True, -- Protected_Definition (Node3) 11559 4 => False, -- unused 11560 5 => False), -- unused 11561 11562 N_Protected_Definition => 11563 (1 => False, -- unused 11564 2 => True, -- Visible_Declarations (List2) 11565 3 => True, -- Private_Declarations (List3) 11566 4 => True, -- End_Label (Node4) 11567 5 => False), -- unused 11568 11569 N_Protected_Body => 11570 (1 => True, -- Defining_Identifier (Node1) 11571 2 => True, -- Declarations (List2) 11572 3 => False, -- unused 11573 4 => True, -- End_Label (Node4) 11574 5 => False), -- Corresponding_Spec (Node5-Sem) 11575 11576 N_Entry_Declaration => 11577 (1 => True, -- Defining_Identifier (Node1) 11578 2 => False, -- unused 11579 3 => True, -- Parameter_Specifications (List3) 11580 4 => True, -- Discrete_Subtype_Definition (Node4) 11581 5 => False), -- Corresponding_Body (Node5-Sem) 11582 11583 N_Accept_Statement => 11584 (1 => True, -- Entry_Direct_Name (Node1) 11585 2 => True, -- Declarations (List2) 11586 3 => True, -- Parameter_Specifications (List3) 11587 4 => True, -- Handled_Statement_Sequence (Node4) 11588 5 => True), -- Entry_Index (Node5) 11589 11590 N_Entry_Body => 11591 (1 => True, -- Defining_Identifier (Node1) 11592 2 => True, -- Declarations (List2) 11593 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11594 4 => True, -- Handled_Statement_Sequence (Node4) 11595 5 => True), -- Entry_Body_Formal_Part (Node5) 11596 11597 N_Entry_Body_Formal_Part => 11598 (1 => True, -- Condition (Node1) 11599 2 => False, -- unused 11600 3 => True, -- Parameter_Specifications (List3) 11601 4 => True, -- Entry_Index_Specification (Node4) 11602 5 => False), -- unused 11603 11604 N_Entry_Index_Specification => 11605 (1 => True, -- Defining_Identifier (Node1) 11606 2 => False, -- unused 11607 3 => False, -- unused 11608 4 => True, -- Discrete_Subtype_Definition (Node4) 11609 5 => False), -- unused 11610 11611 N_Entry_Call_Statement => 11612 (1 => False, -- unused 11613 2 => True, -- Name (Node2) 11614 3 => True, -- Parameter_Associations (List3) 11615 4 => False, -- First_Named_Actual (Node4-Sem) 11616 5 => False), -- unused 11617 11618 N_Requeue_Statement => 11619 (1 => False, -- unused 11620 2 => True, -- Name (Node2) 11621 3 => False, -- unused 11622 4 => False, -- unused 11623 5 => False), -- unused 11624 11625 N_Delay_Until_Statement => 11626 (1 => False, -- unused 11627 2 => False, -- unused 11628 3 => True, -- Expression (Node3) 11629 4 => False, -- unused 11630 5 => False), -- unused 11631 11632 N_Delay_Relative_Statement => 11633 (1 => False, -- unused 11634 2 => False, -- unused 11635 3 => True, -- Expression (Node3) 11636 4 => False, -- unused 11637 5 => False), -- unused 11638 11639 N_Selective_Accept => 11640 (1 => True, -- Select_Alternatives (List1) 11641 2 => False, -- unused 11642 3 => False, -- unused 11643 4 => True, -- Else_Statements (List4) 11644 5 => False), -- unused 11645 11646 N_Accept_Alternative => 11647 (1 => True, -- Condition (Node1) 11648 2 => True, -- Accept_Statement (Node2) 11649 3 => True, -- Statements (List3) 11650 4 => True, -- Pragmas_Before (List4) 11651 5 => False), -- Accept_Handler_Records (List5-Sem) 11652 11653 N_Delay_Alternative => 11654 (1 => True, -- Condition (Node1) 11655 2 => True, -- Delay_Statement (Node2) 11656 3 => True, -- Statements (List3) 11657 4 => True, -- Pragmas_Before (List4) 11658 5 => False), -- unused 11659 11660 N_Terminate_Alternative => 11661 (1 => True, -- Condition (Node1) 11662 2 => False, -- unused 11663 3 => False, -- unused 11664 4 => True, -- Pragmas_Before (List4) 11665 5 => True), -- Pragmas_After (List5) 11666 11667 N_Timed_Entry_Call => 11668 (1 => True, -- Entry_Call_Alternative (Node1) 11669 2 => False, -- unused 11670 3 => False, -- unused 11671 4 => True, -- Delay_Alternative (Node4) 11672 5 => False), -- unused 11673 11674 N_Entry_Call_Alternative => 11675 (1 => True, -- Entry_Call_Statement (Node1) 11676 2 => False, -- unused 11677 3 => True, -- Statements (List3) 11678 4 => True, -- Pragmas_Before (List4) 11679 5 => False), -- unused 11680 11681 N_Conditional_Entry_Call => 11682 (1 => True, -- Entry_Call_Alternative (Node1) 11683 2 => False, -- unused 11684 3 => False, -- unused 11685 4 => True, -- Else_Statements (List4) 11686 5 => False), -- unused 11687 11688 N_Asynchronous_Select => 11689 (1 => True, -- Triggering_Alternative (Node1) 11690 2 => True, -- Abortable_Part (Node2) 11691 3 => False, -- unused 11692 4 => False, -- unused 11693 5 => False), -- unused 11694 11695 N_Triggering_Alternative => 11696 (1 => True, -- Triggering_Statement (Node1) 11697 2 => False, -- unused 11698 3 => True, -- Statements (List3) 11699 4 => True, -- Pragmas_Before (List4) 11700 5 => False), -- unused 11701 11702 N_Abortable_Part => 11703 (1 => False, -- unused 11704 2 => False, -- unused 11705 3 => True, -- Statements (List3) 11706 4 => False, -- unused 11707 5 => False), -- unused 11708 11709 N_Abort_Statement => 11710 (1 => False, -- unused 11711 2 => True, -- Names (List2) 11712 3 => False, -- unused 11713 4 => False, -- unused 11714 5 => False), -- unused 11715 11716 N_Compilation_Unit => 11717 (1 => True, -- Context_Items (List1) 11718 2 => True, -- Unit (Node2) 11719 3 => False, -- First_Inlined_Subprogram (Node3-Sem) 11720 4 => False, -- Library_Unit (Node4-Sem) 11721 5 => True), -- Aux_Decls_Node (Node5) 11722 11723 N_Compilation_Unit_Aux => 11724 (1 => True, -- Actions (List1) 11725 2 => True, -- Declarations (List2) 11726 3 => False, -- Default_Storage_Pool (Node3) 11727 4 => True, -- Config_Pragmas (List4) 11728 5 => True), -- Pragmas_After (List5) 11729 11730 N_With_Clause => 11731 (1 => False, -- unused 11732 2 => True, -- Name (Node2) 11733 3 => False, -- unused 11734 4 => False, -- Library_Unit (Node4-Sem) 11735 5 => False), -- Corresponding_Spec (Node5-Sem) 11736 11737 N_Subprogram_Body_Stub => 11738 (1 => True, -- Specification (Node1) 11739 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 11740 3 => False, -- unused 11741 4 => False, -- Library_Unit (Node4-Sem) 11742 5 => False), -- Corresponding_Body (Node5-Sem) 11743 11744 N_Package_Body_Stub => 11745 (1 => True, -- Defining_Identifier (Node1) 11746 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 11747 3 => False, -- unused 11748 4 => False, -- Library_Unit (Node4-Sem) 11749 5 => False), -- Corresponding_Body (Node5-Sem) 11750 11751 N_Task_Body_Stub => 11752 (1 => True, -- Defining_Identifier (Node1) 11753 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 11754 3 => False, -- unused 11755 4 => False, -- Library_Unit (Node4-Sem) 11756 5 => False), -- Corresponding_Body (Node5-Sem) 11757 11758 N_Protected_Body_Stub => 11759 (1 => True, -- Defining_Identifier (Node1) 11760 2 => False, -- Corresponding_Spec_Of_Stub (Node2-Sem) 11761 3 => False, -- unused 11762 4 => False, -- Library_Unit (Node4-Sem) 11763 5 => False), -- Corresponding_Body (Node5-Sem) 11764 11765 N_Subunit => 11766 (1 => True, -- Proper_Body (Node1) 11767 2 => True, -- Name (Node2) 11768 3 => False, -- Corresponding_Stub (Node3-Sem) 11769 4 => False, -- unused 11770 5 => False), -- unused 11771 11772 N_Exception_Declaration => 11773 (1 => True, -- Defining_Identifier (Node1) 11774 2 => False, -- unused 11775 3 => False, -- Expression (Node3-Sem) 11776 4 => False, -- unused 11777 5 => False), -- unused 11778 11779 N_Handled_Sequence_Of_Statements => 11780 (1 => True, -- At_End_Proc (Node1) 11781 2 => False, -- First_Real_Statement (Node2-Sem) 11782 3 => True, -- Statements (List3) 11783 4 => True, -- End_Label (Node4) 11784 5 => True), -- Exception_Handlers (List5) 11785 11786 N_Exception_Handler => 11787 (1 => False, -- Local_Raise_Statements (Elist1) 11788 2 => True, -- Choice_Parameter (Node2) 11789 3 => True, -- Statements (List3) 11790 4 => True, -- Exception_Choices (List4) 11791 5 => False), -- Exception_Label (Node5) 11792 11793 N_Raise_Statement => 11794 (1 => False, -- unused 11795 2 => True, -- Name (Node2) 11796 3 => True, -- Expression (Node3) 11797 4 => False, -- unused 11798 5 => False), -- unused 11799 11800 N_Raise_Expression => 11801 (1 => False, -- unused 11802 2 => True, -- Name (Node2) 11803 3 => True, -- Expression (Node3) 11804 4 => False, -- unused 11805 5 => False), -- Etype (Node5-Sem) 11806 11807 N_Generic_Subprogram_Declaration => 11808 (1 => True, -- Specification (Node1) 11809 2 => True, -- Generic_Formal_Declarations (List2) 11810 3 => False, -- unused 11811 4 => False, -- Parent_Spec (Node4-Sem) 11812 5 => False), -- Corresponding_Body (Node5-Sem) 11813 11814 N_Generic_Package_Declaration => 11815 (1 => True, -- Specification (Node1) 11816 2 => True, -- Generic_Formal_Declarations (List2) 11817 3 => False, -- Activation_Chain_Entity (Node3-Sem) 11818 4 => False, -- Parent_Spec (Node4-Sem) 11819 5 => False), -- Corresponding_Body (Node5-Sem) 11820 11821 N_Package_Instantiation => 11822 (1 => True, -- Defining_Unit_Name (Node1) 11823 2 => True, -- Name (Node2) 11824 3 => True, -- Generic_Associations (List3) 11825 4 => False, -- Parent_Spec (Node4-Sem) 11826 5 => False), -- Instance_Spec (Node5-Sem) 11827 11828 N_Procedure_Instantiation => 11829 (1 => True, -- Defining_Unit_Name (Node1) 11830 2 => True, -- Name (Node2) 11831 3 => True, -- Generic_Associations (List3) 11832 4 => False, -- Parent_Spec (Node4-Sem) 11833 5 => False), -- Instance_Spec (Node5-Sem) 11834 11835 N_Function_Instantiation => 11836 (1 => True, -- Defining_Unit_Name (Node1) 11837 2 => True, -- Name (Node2) 11838 3 => True, -- Generic_Associations (List3) 11839 4 => False, -- Parent_Spec (Node4-Sem) 11840 5 => False), -- Instance_Spec (Node5-Sem) 11841 11842 N_Generic_Association => 11843 (1 => True, -- Explicit_Generic_Actual_Parameter (Node1) 11844 2 => True, -- Selector_Name (Node2) 11845 3 => False, -- unused 11846 4 => False, -- unused 11847 5 => False), -- unused 11848 11849 N_Formal_Object_Declaration => 11850 (1 => True, -- Defining_Identifier (Node1) 11851 2 => False, -- unused 11852 3 => True, -- Access_Definition (Node3) 11853 4 => True, -- Subtype_Mark (Node4) 11854 5 => True), -- Default_Expression (Node5) 11855 11856 N_Formal_Type_Declaration => 11857 (1 => True, -- Defining_Identifier (Node1) 11858 2 => False, -- unused 11859 3 => True, -- Formal_Type_Definition (Node3) 11860 4 => True, -- Discriminant_Specifications (List4) 11861 5 => False), -- unused 11862 11863 N_Formal_Private_Type_Definition => 11864 (1 => False, -- unused 11865 2 => False, -- unused 11866 3 => False, -- unused 11867 4 => False, -- unused 11868 5 => False), -- unused 11869 11870 N_Formal_Incomplete_Type_Definition => 11871 (1 => False, -- unused 11872 2 => False, -- unused 11873 3 => False, -- unused 11874 4 => False, -- unused 11875 5 => False), -- unused 11876 11877 N_Formal_Derived_Type_Definition => 11878 (1 => False, -- unused 11879 2 => True, -- Interface_List (List2) 11880 3 => False, -- unused 11881 4 => True, -- Subtype_Mark (Node4) 11882 5 => False), -- unused 11883 11884 N_Formal_Discrete_Type_Definition => 11885 (1 => False, -- unused 11886 2 => False, -- unused 11887 3 => False, -- unused 11888 4 => False, -- unused 11889 5 => False), -- unused 11890 11891 N_Formal_Signed_Integer_Type_Definition => 11892 (1 => False, -- unused 11893 2 => False, -- unused 11894 3 => False, -- unused 11895 4 => False, -- unused 11896 5 => False), -- unused 11897 11898 N_Formal_Modular_Type_Definition => 11899 (1 => False, -- unused 11900 2 => False, -- unused 11901 3 => False, -- unused 11902 4 => False, -- unused 11903 5 => False), -- unused 11904 11905 N_Formal_Floating_Point_Definition => 11906 (1 => False, -- unused 11907 2 => False, -- unused 11908 3 => False, -- unused 11909 4 => False, -- unused 11910 5 => False), -- unused 11911 11912 N_Formal_Ordinary_Fixed_Point_Definition => 11913 (1 => False, -- unused 11914 2 => False, -- unused 11915 3 => False, -- unused 11916 4 => False, -- unused 11917 5 => False), -- unused 11918 11919 N_Formal_Decimal_Fixed_Point_Definition => 11920 (1 => False, -- unused 11921 2 => False, -- unused 11922 3 => False, -- unused 11923 4 => False, -- unused 11924 5 => False), -- unused 11925 11926 N_Formal_Concrete_Subprogram_Declaration => 11927 (1 => True, -- Specification (Node1) 11928 2 => True, -- Default_Name (Node2) 11929 3 => False, -- unused 11930 4 => False, -- unused 11931 5 => False), -- unused 11932 11933 N_Formal_Abstract_Subprogram_Declaration => 11934 (1 => True, -- Specification (Node1) 11935 2 => True, -- Default_Name (Node2) 11936 3 => False, -- unused 11937 4 => False, -- unused 11938 5 => False), -- unused 11939 11940 N_Formal_Package_Declaration => 11941 (1 => True, -- Defining_Identifier (Node1) 11942 2 => True, -- Name (Node2) 11943 3 => True, -- Generic_Associations (List3) 11944 4 => False, -- unused 11945 5 => False), -- Instance_Spec (Node5-Sem) 11946 11947 N_Attribute_Definition_Clause => 11948 (1 => True, -- Chars (Name1) 11949 2 => True, -- Name (Node2) 11950 3 => True, -- Expression (Node3) 11951 4 => False, -- unused 11952 5 => False), -- Next_Rep_Item (Node5-Sem) 11953 11954 N_Aspect_Specification => 11955 (1 => True, -- Identifier (Node1) 11956 2 => False, -- Aspect_Rep_Item (Node2-Sem) 11957 3 => True, -- Expression (Node3) 11958 4 => False, -- Entity (Node4-Sem) 11959 5 => False), -- Next_Rep_Item (Node5-Sem) 11960 11961 N_Enumeration_Representation_Clause => 11962 (1 => True, -- Identifier (Node1) 11963 2 => False, -- unused 11964 3 => True, -- Array_Aggregate (Node3) 11965 4 => False, -- unused 11966 5 => False), -- Next_Rep_Item (Node5-Sem) 11967 11968 N_Record_Representation_Clause => 11969 (1 => True, -- Identifier (Node1) 11970 2 => True, -- Mod_Clause (Node2) 11971 3 => True, -- Component_Clauses (List3) 11972 4 => False, -- unused 11973 5 => False), -- Next_Rep_Item (Node5-Sem) 11974 11975 N_Component_Clause => 11976 (1 => True, -- Component_Name (Node1) 11977 2 => True, -- Position (Node2) 11978 3 => True, -- First_Bit (Node3) 11979 4 => True, -- Last_Bit (Node4) 11980 5 => False), -- unused 11981 11982 N_Code_Statement => 11983 (1 => False, -- unused 11984 2 => False, -- unused 11985 3 => True, -- Expression (Node3) 11986 4 => False, -- unused 11987 5 => False), -- unused 11988 11989 N_Op_Rotate_Left => 11990 (1 => True, -- Chars (Name1) 11991 2 => True, -- Left_Opnd (Node2) 11992 3 => True, -- Right_Opnd (Node3) 11993 4 => False, -- Entity (Node4-Sem) 11994 5 => False), -- Etype (Node5-Sem) 11995 11996 N_Op_Rotate_Right => 11997 (1 => True, -- Chars (Name1) 11998 2 => True, -- Left_Opnd (Node2) 11999 3 => True, -- Right_Opnd (Node3) 12000 4 => False, -- Entity (Node4-Sem) 12001 5 => False), -- Etype (Node5-Sem) 12002 12003 N_Op_Shift_Left => 12004 (1 => True, -- Chars (Name1) 12005 2 => True, -- Left_Opnd (Node2) 12006 3 => True, -- Right_Opnd (Node3) 12007 4 => False, -- Entity (Node4-Sem) 12008 5 => False), -- Etype (Node5-Sem) 12009 12010 N_Op_Shift_Right_Arithmetic => 12011 (1 => True, -- Chars (Name1) 12012 2 => True, -- Left_Opnd (Node2) 12013 3 => True, -- Right_Opnd (Node3) 12014 4 => False, -- Entity (Node4-Sem) 12015 5 => False), -- Etype (Node5-Sem) 12016 12017 N_Op_Shift_Right => 12018 (1 => True, -- Chars (Name1) 12019 2 => True, -- Left_Opnd (Node2) 12020 3 => True, -- Right_Opnd (Node3) 12021 4 => False, -- Entity (Node4-Sem) 12022 5 => False), -- Etype (Node5-Sem) 12023 12024 N_Delta_Constraint => 12025 (1 => False, -- unused 12026 2 => False, -- unused 12027 3 => True, -- Delta_Expression (Node3) 12028 4 => True, -- Range_Constraint (Node4) 12029 5 => False), -- unused 12030 12031 N_At_Clause => 12032 (1 => True, -- Identifier (Node1) 12033 2 => False, -- unused 12034 3 => True, -- Expression (Node3) 12035 4 => False, -- unused 12036 5 => False), -- unused 12037 12038 N_Mod_Clause => 12039 (1 => False, -- unused 12040 2 => False, -- unused 12041 3 => True, -- Expression (Node3) 12042 4 => True, -- Pragmas_Before (List4) 12043 5 => False), -- unused 12044 12045 N_If_Expression => 12046 (1 => True, -- Expressions (List1) 12047 2 => False, -- Then_Actions (List2-Sem) 12048 3 => False, -- Else_Actions (List3-Sem) 12049 4 => False, -- unused 12050 5 => False), -- Etype (Node5-Sem) 12051 12052 N_Contract => 12053 (1 => False, -- Pre_Post_Conditions (Node1) 12054 2 => False, -- Contract_Test_Cases (Node2) 12055 3 => False, -- Classifications (Node3) 12056 4 => False, -- unused 12057 5 => False), -- unused 12058 12059 N_Expanded_Name => 12060 (1 => True, -- Chars (Name1) 12061 2 => True, -- Selector_Name (Node2) 12062 3 => True, -- Prefix (Node3) 12063 4 => False, -- Entity (Node4-Sem) 12064 5 => False), -- Etype (Node5-Sem) 12065 12066 N_Expression_With_Actions => 12067 (1 => True, -- Actions (List1) 12068 2 => False, -- unused 12069 3 => True, -- Expression (Node3) 12070 4 => False, -- unused 12071 5 => False), -- unused 12072 12073 N_Free_Statement => 12074 (1 => False, -- Storage_Pool (Node1-Sem) 12075 2 => False, -- Procedure_To_Call (Node2-Sem) 12076 3 => True, -- Expression (Node3) 12077 4 => False, -- Actual_Designated_Subtype (Node4-Sem) 12078 5 => False), -- unused 12079 12080 N_Freeze_Entity => 12081 (1 => True, -- Actions (List1) 12082 2 => False, -- Access_Types_To_Process (Elist2-Sem) 12083 3 => False, -- TSS_Elist (Elist3-Sem) 12084 4 => False, -- Entity (Node4-Sem) 12085 5 => False), -- First_Subtype_Link (Node5-Sem) 12086 12087 N_Freeze_Generic_Entity => 12088 (1 => False, -- unused 12089 2 => False, -- unused 12090 3 => False, -- unused 12091 4 => False, -- Entity (Node4-Sem) 12092 5 => False), -- unused 12093 12094 N_Implicit_Label_Declaration => 12095 (1 => True, -- Defining_Identifier (Node1) 12096 2 => False, -- Label_Construct (Node2-Sem) 12097 3 => False, -- unused 12098 4 => False, -- unused 12099 5 => False), -- unused 12100 12101 N_Itype_Reference => 12102 (1 => False, -- Itype (Node1-Sem) 12103 2 => False, -- unused 12104 3 => False, -- unused 12105 4 => False, -- unused 12106 5 => False), -- unused 12107 12108 N_Raise_Constraint_Error => 12109 (1 => True, -- Condition (Node1) 12110 2 => False, -- unused 12111 3 => True, -- Reason (Uint3) 12112 4 => False, -- unused 12113 5 => False), -- Etype (Node5-Sem) 12114 12115 N_Raise_Program_Error => 12116 (1 => True, -- Condition (Node1) 12117 2 => False, -- unused 12118 3 => True, -- Reason (Uint3) 12119 4 => False, -- unused 12120 5 => False), -- Etype (Node5-Sem) 12121 12122 N_Raise_Storage_Error => 12123 (1 => True, -- Condition (Node1) 12124 2 => False, -- unused 12125 3 => True, -- Reason (Uint3) 12126 4 => False, -- unused 12127 5 => False), -- Etype (Node5-Sem) 12128 12129 N_Push_Constraint_Error_Label => 12130 (1 => False, -- unused 12131 2 => False, -- unused 12132 3 => False, -- unused 12133 4 => False, -- unused 12134 5 => False), -- unused 12135 12136 N_Push_Program_Error_Label => 12137 (1 => False, -- Exception_Label 12138 2 => False, -- unused 12139 3 => False, -- unused 12140 4 => False, -- unused 12141 5 => False), -- Exception_Label 12142 12143 N_Push_Storage_Error_Label => 12144 (1 => False, -- Exception_Label 12145 2 => False, -- unused 12146 3 => False, -- unused 12147 4 => False, -- unused 12148 5 => False), -- Exception_Label 12149 12150 N_Pop_Constraint_Error_Label => 12151 (1 => False, -- unused 12152 2 => False, -- unused 12153 3 => False, -- unused 12154 4 => False, -- unused 12155 5 => False), -- unused 12156 12157 N_Pop_Program_Error_Label => 12158 (1 => False, -- unused 12159 2 => False, -- unused 12160 3 => False, -- unused 12161 4 => False, -- unused 12162 5 => False), -- unused 12163 12164 N_Pop_Storage_Error_Label => 12165 (1 => False, -- unused 12166 2 => False, -- unused 12167 3 => False, -- unused 12168 4 => False, -- unused 12169 5 => False), -- unused 12170 12171 N_Reference => 12172 (1 => False, -- unused 12173 2 => False, -- unused 12174 3 => True, -- Prefix (Node3) 12175 4 => False, -- unused 12176 5 => False), -- Etype (Node5-Sem) 12177 12178 N_Unchecked_Expression => 12179 (1 => False, -- unused 12180 2 => False, -- unused 12181 3 => True, -- Expression (Node3) 12182 4 => False, -- unused 12183 5 => False), -- Etype (Node5-Sem) 12184 12185 N_Unchecked_Type_Conversion => 12186 (1 => False, -- unused 12187 2 => False, -- unused 12188 3 => True, -- Expression (Node3) 12189 4 => True, -- Subtype_Mark (Node4) 12190 5 => False), -- Etype (Node5-Sem) 12191 12192 N_Validate_Unchecked_Conversion => 12193 (1 => False, -- Source_Type (Node1-Sem) 12194 2 => False, -- Target_Type (Node2-Sem) 12195 3 => False, -- unused 12196 4 => False, -- unused 12197 5 => False), -- unused 12198 12199 -- Entries for SCIL nodes 12200 12201 N_SCIL_Dispatch_Table_Tag_Init => 12202 (1 => False, -- unused 12203 2 => False, -- unused 12204 3 => False, -- unused 12205 4 => False, -- SCIL_Entity (Node4-Sem) 12206 5 => False), -- unused 12207 12208 N_SCIL_Dispatching_Call => 12209 (1 => False, -- unused 12210 2 => False, -- SCIL_Target_Prim (Node2-Sem) 12211 3 => False, -- unused 12212 4 => False, -- SCIL_Entity (Node4-Sem) 12213 5 => False), -- SCIL_Controlling_Tag (Node5-Sem) 12214 12215 N_SCIL_Membership_Test => 12216 (1 => False, -- unused 12217 2 => False, -- unused 12218 3 => False, -- unused 12219 4 => False, -- SCIL_Entity (Node4-Sem) 12220 5 => False), -- SCIL_Tag_Value (Node5-Sem) 12221 12222 -- Entries for Empty, Error and Unused. Even thought these have a Chars 12223 -- field for debugging purposes, they are not really syntactic fields, so 12224 -- we mark all fields as unused. 12225 12226 N_Empty => 12227 (1 => False, -- unused 12228 2 => False, -- unused 12229 3 => False, -- unused 12230 4 => False, -- unused 12231 5 => False), -- unused 12232 12233 N_Error => 12234 (1 => False, -- unused 12235 2 => False, -- unused 12236 3 => False, -- unused 12237 4 => False, -- unused 12238 5 => False), -- unused 12239 12240 N_Unused_At_Start => 12241 (1 => False, -- unused 12242 2 => False, -- unused 12243 3 => False, -- unused 12244 4 => False, -- unused 12245 5 => False), -- unused 12246 12247 N_Unused_At_End => 12248 (1 => False, -- unused 12249 2 => False, -- unused 12250 3 => False, -- unused 12251 4 => False, -- unused 12252 5 => False)); -- unused 12253 12254 -------------------- 12255 -- Inline Pragmas -- 12256 -------------------- 12257 12258 pragma Inline (ABE_Is_Certain); 12259 pragma Inline (Abort_Present); 12260 pragma Inline (Abortable_Part); 12261 pragma Inline (Abstract_Present); 12262 pragma Inline (Accept_Handler_Records); 12263 pragma Inline (Accept_Statement); 12264 pragma Inline (Access_Definition); 12265 pragma Inline (Access_To_Subprogram_Definition); 12266 pragma Inline (Access_Types_To_Process); 12267 pragma Inline (Actions); 12268 pragma Inline (Activation_Chain_Entity); 12269 pragma Inline (Acts_As_Spec); 12270 pragma Inline (Actual_Designated_Subtype); 12271 pragma Inline (Address_Warning_Posted); 12272 pragma Inline (Aggregate_Bounds); 12273 pragma Inline (Aliased_Present); 12274 pragma Inline (All_Others); 12275 pragma Inline (All_Present); 12276 pragma Inline (Alternatives); 12277 pragma Inline (Ancestor_Part); 12278 pragma Inline (Atomic_Sync_Required); 12279 pragma Inline (Array_Aggregate); 12280 pragma Inline (Aspect_Rep_Item); 12281 pragma Inline (Assignment_OK); 12282 pragma Inline (Associated_Node); 12283 pragma Inline (At_End_Proc); 12284 pragma Inline (Attribute_Name); 12285 pragma Inline (Aux_Decls_Node); 12286 pragma Inline (Backwards_OK); 12287 pragma Inline (Bad_Is_Detected); 12288 pragma Inline (Body_To_Inline); 12289 pragma Inline (Body_Required); 12290 pragma Inline (By_Ref); 12291 pragma Inline (Box_Present); 12292 pragma Inline (Char_Literal_Value); 12293 pragma Inline (Chars); 12294 pragma Inline (Check_Address_Alignment); 12295 pragma Inline (Choice_Parameter); 12296 pragma Inline (Choices); 12297 pragma Inline (Class_Present); 12298 pragma Inline (Classifications); 12299 pragma Inline (Comes_From_Extended_Return_Statement); 12300 pragma Inline (Compile_Time_Known_Aggregate); 12301 pragma Inline (Component_Associations); 12302 pragma Inline (Component_Clauses); 12303 pragma Inline (Component_Definition); 12304 pragma Inline (Component_Items); 12305 pragma Inline (Component_List); 12306 pragma Inline (Component_Name); 12307 pragma Inline (Componentwise_Assignment); 12308 pragma Inline (Condition); 12309 pragma Inline (Condition_Actions); 12310 pragma Inline (Config_Pragmas); 12311 pragma Inline (Constant_Present); 12312 pragma Inline (Constraint); 12313 pragma Inline (Constraints); 12314 pragma Inline (Context_Installed); 12315 pragma Inline (Context_Items); 12316 pragma Inline (Context_Pending); 12317 pragma Inline (Contract_Test_Cases); 12318 pragma Inline (Controlling_Argument); 12319 pragma Inline (Convert_To_Return_False); 12320 pragma Inline (Conversion_OK); 12321 pragma Inline (Corresponding_Aspect); 12322 pragma Inline (Corresponding_Body); 12323 pragma Inline (Corresponding_Formal_Spec); 12324 pragma Inline (Corresponding_Generic_Association); 12325 pragma Inline (Corresponding_Integer_Value); 12326 pragma Inline (Corresponding_Spec); 12327 pragma Inline (Corresponding_Spec_Of_Stub); 12328 pragma Inline (Corresponding_Stub); 12329 pragma Inline (Dcheck_Function); 12330 pragma Inline (Declarations); 12331 pragma Inline (Default_Expression); 12332 pragma Inline (Default_Storage_Pool); 12333 pragma Inline (Default_Name); 12334 pragma Inline (Defining_Identifier); 12335 pragma Inline (Defining_Unit_Name); 12336 pragma Inline (Delay_Alternative); 12337 pragma Inline (Delay_Statement); 12338 pragma Inline (Delta_Expression); 12339 pragma Inline (Digits_Expression); 12340 pragma Inline (Discr_Check_Funcs_Built); 12341 pragma Inline (Discrete_Choices); 12342 pragma Inline (Discrete_Range); 12343 pragma Inline (Discrete_Subtype_Definition); 12344 pragma Inline (Discrete_Subtype_Definitions); 12345 pragma Inline (Discriminant_Specifications); 12346 pragma Inline (Discriminant_Type); 12347 pragma Inline (Do_Accessibility_Check); 12348 pragma Inline (Do_Discriminant_Check); 12349 pragma Inline (Do_Length_Check); 12350 pragma Inline (Do_Division_Check); 12351 pragma Inline (Do_Overflow_Check); 12352 pragma Inline (Do_Range_Check); 12353 pragma Inline (Do_Storage_Check); 12354 pragma Inline (Do_Tag_Check); 12355 pragma Inline (Elaborate_Present); 12356 pragma Inline (Elaborate_All_Desirable); 12357 pragma Inline (Elaborate_All_Present); 12358 pragma Inline (Elaborate_Desirable); 12359 pragma Inline (Elaboration_Boolean); 12360 pragma Inline (Else_Actions); 12361 pragma Inline (Else_Statements); 12362 pragma Inline (Elsif_Parts); 12363 pragma Inline (Enclosing_Variant); 12364 pragma Inline (End_Label); 12365 pragma Inline (End_Span); 12366 pragma Inline (Entity); 12367 pragma Inline (Entity_Or_Associated_Node); 12368 pragma Inline (Entry_Body_Formal_Part); 12369 pragma Inline (Entry_Call_Alternative); 12370 pragma Inline (Entry_Call_Statement); 12371 pragma Inline (Entry_Direct_Name); 12372 pragma Inline (Entry_Index); 12373 pragma Inline (Entry_Index_Specification); 12374 pragma Inline (Etype); 12375 pragma Inline (Exception_Choices); 12376 pragma Inline (Exception_Handlers); 12377 pragma Inline (Exception_Junk); 12378 pragma Inline (Exception_Label); 12379 pragma Inline (Expansion_Delayed); 12380 pragma Inline (Explicit_Actual_Parameter); 12381 pragma Inline (Explicit_Generic_Actual_Parameter); 12382 pragma Inline (Expression); 12383 pragma Inline (Expressions); 12384 pragma Inline (First_Bit); 12385 pragma Inline (First_Inlined_Subprogram); 12386 pragma Inline (First_Name); 12387 pragma Inline (First_Named_Actual); 12388 pragma Inline (First_Real_Statement); 12389 pragma Inline (First_Subtype_Link); 12390 pragma Inline (Float_Truncate); 12391 pragma Inline (Formal_Type_Definition); 12392 pragma Inline (Forwards_OK); 12393 pragma Inline (From_Aspect_Specification); 12394 pragma Inline (From_At_End); 12395 pragma Inline (From_At_Mod); 12396 pragma Inline (From_Default); 12397 pragma Inline (Generalized_Indexing); 12398 pragma Inline (Generic_Associations); 12399 pragma Inline (Generic_Formal_Declarations); 12400 pragma Inline (Generic_Parent); 12401 pragma Inline (Generic_Parent_Type); 12402 pragma Inline (Handled_Statement_Sequence); 12403 pragma Inline (Handler_List_Entry); 12404 pragma Inline (Has_Created_Identifier); 12405 pragma Inline (Has_Dereference_Action); 12406 pragma Inline (Has_Dynamic_Length_Check); 12407 pragma Inline (Has_Dynamic_Range_Check); 12408 pragma Inline (Has_Init_Expression); 12409 pragma Inline (Has_Local_Raise); 12410 pragma Inline (Has_Self_Reference); 12411 pragma Inline (Has_SP_Choice); 12412 pragma Inline (Has_No_Elaboration_Code); 12413 pragma Inline (Has_Pragma_Suppress_All); 12414 pragma Inline (Has_Private_View); 12415 pragma Inline (Has_Relative_Deadline_Pragma); 12416 pragma Inline (Has_Storage_Size_Pragma); 12417 pragma Inline (Has_Wide_Character); 12418 pragma Inline (Has_Wide_Wide_Character); 12419 pragma Inline (Header_Size_Added); 12420 pragma Inline (Hidden_By_Use_Clause); 12421 pragma Inline (High_Bound); 12422 pragma Inline (Identifier); 12423 pragma Inline (Implicit_With); 12424 pragma Inline (Implicit_With_From_Instantiation); 12425 pragma Inline (Interface_List); 12426 pragma Inline (Interface_Present); 12427 pragma Inline (Includes_Infinities); 12428 pragma Inline (Import_Interface_Present); 12429 pragma Inline (In_Present); 12430 pragma Inline (Inherited_Discriminant); 12431 pragma Inline (Instance_Spec); 12432 pragma Inline (Intval); 12433 pragma Inline (Iterator_Specification); 12434 pragma Inline (Is_Accessibility_Actual); 12435 pragma Inline (Is_Asynchronous_Call_Block); 12436 pragma Inline (Is_Boolean_Aspect); 12437 pragma Inline (Is_Checked); 12438 pragma Inline (Is_Component_Left_Opnd); 12439 pragma Inline (Is_Component_Right_Opnd); 12440 pragma Inline (Is_Controlling_Actual); 12441 pragma Inline (Is_Delayed_Aspect); 12442 pragma Inline (Is_Disabled); 12443 pragma Inline (Is_Dynamic_Coextension); 12444 pragma Inline (Is_Elsif); 12445 pragma Inline (Is_Entry_Barrier_Function); 12446 pragma Inline (Is_Expanded_Build_In_Place_Call); 12447 pragma Inline (Is_Finalization_Wrapper); 12448 pragma Inline (Is_Folded_In_Parser); 12449 pragma Inline (Is_Ignored); 12450 pragma Inline (Is_In_Discriminant_Check); 12451 pragma Inline (Is_Machine_Number); 12452 pragma Inline (Is_Null_Loop); 12453 pragma Inline (Is_Overloaded); 12454 pragma Inline (Is_Power_Of_2_For_Shift); 12455 pragma Inline (Is_Prefixed_Call); 12456 pragma Inline (Is_Protected_Subprogram_Body); 12457 pragma Inline (Is_Static_Coextension); 12458 pragma Inline (Is_Static_Expression); 12459 pragma Inline (Is_Subprogram_Descriptor); 12460 pragma Inline (Is_Task_Allocation_Block); 12461 pragma Inline (Is_Task_Master); 12462 pragma Inline (Iteration_Scheme); 12463 pragma Inline (Itype); 12464 pragma Inline (Kill_Range_Check); 12465 pragma Inline (Last_Bit); 12466 pragma Inline (Last_Name); 12467 pragma Inline (Library_Unit); 12468 pragma Inline (Label_Construct); 12469 pragma Inline (Left_Opnd); 12470 pragma Inline (Limited_View_Installed); 12471 pragma Inline (Limited_Present); 12472 pragma Inline (Literals); 12473 pragma Inline (Local_Raise_Not_OK); 12474 pragma Inline (Local_Raise_Statements); 12475 pragma Inline (Loop_Actions); 12476 pragma Inline (Loop_Parameter_Specification); 12477 pragma Inline (Low_Bound); 12478 pragma Inline (Mod_Clause); 12479 pragma Inline (More_Ids); 12480 pragma Inline (Must_Be_Byte_Aligned); 12481 pragma Inline (Must_Not_Freeze); 12482 pragma Inline (Must_Not_Override); 12483 pragma Inline (Must_Override); 12484 pragma Inline (Name); 12485 pragma Inline (Names); 12486 pragma Inline (Next_Entity); 12487 pragma Inline (Next_Exit_Statement); 12488 pragma Inline (Next_Implicit_With); 12489 pragma Inline (Next_Named_Actual); 12490 pragma Inline (Next_Pragma); 12491 pragma Inline (Next_Rep_Item); 12492 pragma Inline (Next_Use_Clause); 12493 pragma Inline (No_Ctrl_Actions); 12494 pragma Inline (No_Elaboration_Check); 12495 pragma Inline (No_Entities_Ref_In_Spec); 12496 pragma Inline (No_Initialization); 12497 pragma Inline (No_Minimize_Eliminate); 12498 pragma Inline (No_Truncation); 12499 pragma Inline (Null_Present); 12500 pragma Inline (Null_Exclusion_Present); 12501 pragma Inline (Null_Exclusion_In_Return_Present); 12502 pragma Inline (Null_Record_Present); 12503 pragma Inline (Object_Definition); 12504 pragma Inline (Of_Present); 12505 pragma Inline (Original_Discriminant); 12506 pragma Inline (Original_Entity); 12507 pragma Inline (Others_Discrete_Choices); 12508 pragma Inline (Out_Present); 12509 pragma Inline (Parameter_Associations); 12510 pragma Inline (Parameter_Specifications); 12511 pragma Inline (Parameter_List_Truncated); 12512 pragma Inline (Parameter_Type); 12513 pragma Inline (Parent_Spec); 12514 pragma Inline (Position); 12515 pragma Inline (Pragma_Argument_Associations); 12516 pragma Inline (Pragma_Identifier); 12517 pragma Inline (Pragmas_After); 12518 pragma Inline (Pragmas_Before); 12519 pragma Inline (Pre_Post_Conditions); 12520 pragma Inline (Prefix); 12521 pragma Inline (Premature_Use); 12522 pragma Inline (Present_Expr); 12523 pragma Inline (Prev_Ids); 12524 pragma Inline (Print_In_Hex); 12525 pragma Inline (Private_Declarations); 12526 pragma Inline (Private_Present); 12527 pragma Inline (Procedure_To_Call); 12528 pragma Inline (Proper_Body); 12529 pragma Inline (Protected_Definition); 12530 pragma Inline (Protected_Present); 12531 pragma Inline (Raises_Constraint_Error); 12532 pragma Inline (Range_Constraint); 12533 pragma Inline (Range_Expression); 12534 pragma Inline (Real_Range_Specification); 12535 pragma Inline (Realval); 12536 pragma Inline (Reason); 12537 pragma Inline (Record_Extension_Part); 12538 pragma Inline (Redundant_Use); 12539 pragma Inline (Renaming_Exception); 12540 pragma Inline (Result_Definition); 12541 pragma Inline (Return_Object_Declarations); 12542 pragma Inline (Return_Statement_Entity); 12543 pragma Inline (Reverse_Present); 12544 pragma Inline (Right_Opnd); 12545 pragma Inline (Rounded_Result); 12546 pragma Inline (SCIL_Controlling_Tag); 12547 pragma Inline (SCIL_Entity); 12548 pragma Inline (SCIL_Tag_Value); 12549 pragma Inline (SCIL_Target_Prim); 12550 pragma Inline (Scope); 12551 pragma Inline (Select_Alternatives); 12552 pragma Inline (Selector_Name); 12553 pragma Inline (Selector_Names); 12554 pragma Inline (Shift_Count_OK); 12555 pragma Inline (Source_Type); 12556 pragma Inline (Specification); 12557 pragma Inline (Split_PPC); 12558 pragma Inline (Statements); 12559 pragma Inline (Storage_Pool); 12560 pragma Inline (Subpool_Handle_Name); 12561 pragma Inline (Strval); 12562 pragma Inline (Subtype_Indication); 12563 pragma Inline (Subtype_Mark); 12564 pragma Inline (Subtype_Marks); 12565 pragma Inline (Suppress_Assignment_Checks); 12566 pragma Inline (Suppress_Loop_Warnings); 12567 pragma Inline (Synchronized_Present); 12568 pragma Inline (Tagged_Present); 12569 pragma Inline (Target_Type); 12570 pragma Inline (Task_Definition); 12571 pragma Inline (Task_Present); 12572 pragma Inline (Then_Actions); 12573 pragma Inline (Then_Statements); 12574 pragma Inline (Triggering_Alternative); 12575 pragma Inline (Triggering_Statement); 12576 pragma Inline (Treat_Fixed_As_Integer); 12577 pragma Inline (TSS_Elist); 12578 pragma Inline (Type_Definition); 12579 pragma Inline (Unit); 12580 pragma Inline (Unknown_Discriminants_Present); 12581 pragma Inline (Unreferenced_In_Spec); 12582 pragma Inline (Variant_Part); 12583 pragma Inline (Variants); 12584 pragma Inline (Visible_Declarations); 12585 pragma Inline (Used_Operations); 12586 pragma Inline (Was_Originally_Stub); 12587 pragma Inline (Withed_Body); 12588 12589 pragma Inline (Set_ABE_Is_Certain); 12590 pragma Inline (Set_Abort_Present); 12591 pragma Inline (Set_Abortable_Part); 12592 pragma Inline (Set_Abstract_Present); 12593 pragma Inline (Set_Accept_Handler_Records); 12594 pragma Inline (Set_Accept_Statement); 12595 pragma Inline (Set_Access_Definition); 12596 pragma Inline (Set_Access_To_Subprogram_Definition); 12597 pragma Inline (Set_Access_Types_To_Process); 12598 pragma Inline (Set_Actions); 12599 pragma Inline (Set_Activation_Chain_Entity); 12600 pragma Inline (Set_Acts_As_Spec); 12601 pragma Inline (Set_Actual_Designated_Subtype); 12602 pragma Inline (Set_Address_Warning_Posted); 12603 pragma Inline (Set_Aggregate_Bounds); 12604 pragma Inline (Set_Aliased_Present); 12605 pragma Inline (Set_All_Others); 12606 pragma Inline (Set_All_Present); 12607 pragma Inline (Set_Alternatives); 12608 pragma Inline (Set_Ancestor_Part); 12609 pragma Inline (Set_Array_Aggregate); 12610 pragma Inline (Set_Aspect_Rep_Item); 12611 pragma Inline (Set_Assignment_OK); 12612 pragma Inline (Set_Associated_Node); 12613 pragma Inline (Set_At_End_Proc); 12614 pragma Inline (Set_Atomic_Sync_Required); 12615 pragma Inline (Set_Attribute_Name); 12616 pragma Inline (Set_Aux_Decls_Node); 12617 pragma Inline (Set_Backwards_OK); 12618 pragma Inline (Set_Bad_Is_Detected); 12619 pragma Inline (Set_Body_Required); 12620 pragma Inline (Set_Body_To_Inline); 12621 pragma Inline (Set_Box_Present); 12622 pragma Inline (Set_By_Ref); 12623 pragma Inline (Set_Char_Literal_Value); 12624 pragma Inline (Set_Chars); 12625 pragma Inline (Set_Check_Address_Alignment); 12626 pragma Inline (Set_Choice_Parameter); 12627 pragma Inline (Set_Choices); 12628 pragma Inline (Set_Class_Present); 12629 pragma Inline (Set_Classifications); 12630 pragma Inline (Set_Comes_From_Extended_Return_Statement); 12631 pragma Inline (Set_Compile_Time_Known_Aggregate); 12632 pragma Inline (Set_Component_Associations); 12633 pragma Inline (Set_Component_Clauses); 12634 pragma Inline (Set_Component_Definition); 12635 pragma Inline (Set_Component_Items); 12636 pragma Inline (Set_Component_List); 12637 pragma Inline (Set_Component_Name); 12638 pragma Inline (Set_Componentwise_Assignment); 12639 pragma Inline (Set_Condition); 12640 pragma Inline (Set_Condition_Actions); 12641 pragma Inline (Set_Config_Pragmas); 12642 pragma Inline (Set_Constant_Present); 12643 pragma Inline (Set_Constraint); 12644 pragma Inline (Set_Constraints); 12645 pragma Inline (Set_Context_Installed); 12646 pragma Inline (Set_Context_Items); 12647 pragma Inline (Set_Context_Pending); 12648 pragma Inline (Set_Contract_Test_Cases); 12649 pragma Inline (Set_Controlling_Argument); 12650 pragma Inline (Set_Conversion_OK); 12651 pragma Inline (Set_Convert_To_Return_False); 12652 pragma Inline (Set_Corresponding_Aspect); 12653 pragma Inline (Set_Corresponding_Body); 12654 pragma Inline (Set_Corresponding_Formal_Spec); 12655 pragma Inline (Set_Corresponding_Generic_Association); 12656 pragma Inline (Set_Corresponding_Integer_Value); 12657 pragma Inline (Set_Corresponding_Spec); 12658 pragma Inline (Set_Corresponding_Spec_Of_Stub); 12659 pragma Inline (Set_Corresponding_Stub); 12660 pragma Inline (Set_Dcheck_Function); 12661 pragma Inline (Set_Declarations); 12662 pragma Inline (Set_Default_Expression); 12663 pragma Inline (Set_Default_Name); 12664 pragma Inline (Set_Default_Storage_Pool); 12665 pragma Inline (Set_Defining_Identifier); 12666 pragma Inline (Set_Defining_Unit_Name); 12667 pragma Inline (Set_Delay_Alternative); 12668 pragma Inline (Set_Delay_Statement); 12669 pragma Inline (Set_Delta_Expression); 12670 pragma Inline (Set_Digits_Expression); 12671 pragma Inline (Set_Discr_Check_Funcs_Built); 12672 pragma Inline (Set_Discrete_Choices); 12673 pragma Inline (Set_Discrete_Range); 12674 pragma Inline (Set_Discrete_Subtype_Definition); 12675 pragma Inline (Set_Discrete_Subtype_Definitions); 12676 pragma Inline (Set_Discriminant_Specifications); 12677 pragma Inline (Set_Discriminant_Type); 12678 pragma Inline (Set_Do_Accessibility_Check); 12679 pragma Inline (Set_Do_Discriminant_Check); 12680 pragma Inline (Set_Do_Division_Check); 12681 pragma Inline (Set_Do_Length_Check); 12682 pragma Inline (Set_Do_Overflow_Check); 12683 pragma Inline (Set_Do_Range_Check); 12684 pragma Inline (Set_Do_Storage_Check); 12685 pragma Inline (Set_Do_Tag_Check); 12686 pragma Inline (Set_Elaborate_All_Desirable); 12687 pragma Inline (Set_Elaborate_All_Present); 12688 pragma Inline (Set_Elaborate_Desirable); 12689 pragma Inline (Set_Elaborate_Present); 12690 pragma Inline (Set_Elaboration_Boolean); 12691 pragma Inline (Set_Else_Actions); 12692 pragma Inline (Set_Else_Statements); 12693 pragma Inline (Set_Elsif_Parts); 12694 pragma Inline (Set_Enclosing_Variant); 12695 pragma Inline (Set_End_Label); 12696 pragma Inline (Set_End_Span); 12697 pragma Inline (Set_Entity); 12698 pragma Inline (Set_Entry_Body_Formal_Part); 12699 pragma Inline (Set_Entry_Call_Alternative); 12700 pragma Inline (Set_Entry_Call_Statement); 12701 pragma Inline (Set_Entry_Direct_Name); 12702 pragma Inline (Set_Entry_Index); 12703 pragma Inline (Set_Entry_Index_Specification); 12704 pragma Inline (Set_Etype); 12705 pragma Inline (Set_Exception_Choices); 12706 pragma Inline (Set_Exception_Handlers); 12707 pragma Inline (Set_Exception_Junk); 12708 pragma Inline (Set_Exception_Label); 12709 pragma Inline (Set_Expansion_Delayed); 12710 pragma Inline (Set_Explicit_Actual_Parameter); 12711 pragma Inline (Set_Explicit_Generic_Actual_Parameter); 12712 pragma Inline (Set_Expression); 12713 pragma Inline (Set_Expressions); 12714 pragma Inline (Set_First_Bit); 12715 pragma Inline (Set_First_Inlined_Subprogram); 12716 pragma Inline (Set_First_Name); 12717 pragma Inline (Set_First_Named_Actual); 12718 pragma Inline (Set_First_Real_Statement); 12719 pragma Inline (Set_First_Subtype_Link); 12720 pragma Inline (Set_Float_Truncate); 12721 pragma Inline (Set_Formal_Type_Definition); 12722 pragma Inline (Set_Forwards_OK); 12723 pragma Inline (Set_From_Aspect_Specification); 12724 pragma Inline (Set_From_At_End); 12725 pragma Inline (Set_From_At_Mod); 12726 pragma Inline (Set_From_Default); 12727 pragma Inline (Set_Generalized_Indexing); 12728 pragma Inline (Set_Generic_Associations); 12729 pragma Inline (Set_Generic_Formal_Declarations); 12730 pragma Inline (Set_Generic_Parent); 12731 pragma Inline (Set_Generic_Parent_Type); 12732 pragma Inline (Set_Handled_Statement_Sequence); 12733 pragma Inline (Set_Handler_List_Entry); 12734 pragma Inline (Set_Has_Created_Identifier); 12735 pragma Inline (Set_Has_Dereference_Action); 12736 pragma Inline (Set_Has_Dynamic_Length_Check); 12737 pragma Inline (Set_Has_Dynamic_Range_Check); 12738 pragma Inline (Set_Has_Init_Expression); 12739 pragma Inline (Set_Has_Local_Raise); 12740 pragma Inline (Set_Has_No_Elaboration_Code); 12741 pragma Inline (Set_Has_Pragma_Suppress_All); 12742 pragma Inline (Set_Has_Private_View); 12743 pragma Inline (Set_Has_Relative_Deadline_Pragma); 12744 pragma Inline (Set_Has_Self_Reference); 12745 pragma Inline (Set_Has_SP_Choice); 12746 pragma Inline (Set_Has_Storage_Size_Pragma); 12747 pragma Inline (Set_Has_Wide_Character); 12748 pragma Inline (Set_Has_Wide_Wide_Character); 12749 pragma Inline (Set_Header_Size_Added); 12750 pragma Inline (Set_Hidden_By_Use_Clause); 12751 pragma Inline (Set_High_Bound); 12752 pragma Inline (Set_Identifier); 12753 pragma Inline (Set_Implicit_With); 12754 pragma Inline (Set_Import_Interface_Present); 12755 pragma Inline (Set_In_Present); 12756 pragma Inline (Set_Includes_Infinities); 12757 pragma Inline (Set_Inherited_Discriminant); 12758 pragma Inline (Set_Instance_Spec); 12759 pragma Inline (Set_Interface_List); 12760 pragma Inline (Set_Interface_Present); 12761 pragma Inline (Set_Intval); 12762 pragma Inline (Set_Is_Accessibility_Actual); 12763 pragma Inline (Set_Is_Asynchronous_Call_Block); 12764 pragma Inline (Set_Is_Boolean_Aspect); 12765 pragma Inline (Set_Is_Checked); 12766 pragma Inline (Set_Is_Component_Left_Opnd); 12767 pragma Inline (Set_Is_Component_Right_Opnd); 12768 pragma Inline (Set_Is_Controlling_Actual); 12769 pragma Inline (Set_Is_Delayed_Aspect); 12770 pragma Inline (Set_Is_Disabled); 12771 pragma Inline (Set_Is_Dynamic_Coextension); 12772 pragma Inline (Set_Is_Elsif); 12773 pragma Inline (Set_Is_Entry_Barrier_Function); 12774 pragma Inline (Set_Is_Expanded_Build_In_Place_Call); 12775 pragma Inline (Set_Is_Finalization_Wrapper); 12776 pragma Inline (Set_Is_Folded_In_Parser); 12777 pragma Inline (Set_Is_Ignored); 12778 pragma Inline (Set_Is_In_Discriminant_Check); 12779 pragma Inline (Set_Is_Machine_Number); 12780 pragma Inline (Set_Is_Null_Loop); 12781 pragma Inline (Set_Is_Overloaded); 12782 pragma Inline (Set_Is_Power_Of_2_For_Shift); 12783 pragma Inline (Set_Is_Prefixed_Call); 12784 pragma Inline (Set_Is_Protected_Subprogram_Body); 12785 pragma Inline (Set_Is_Static_Coextension); 12786 pragma Inline (Set_Is_Static_Expression); 12787 pragma Inline (Set_Is_Subprogram_Descriptor); 12788 pragma Inline (Set_Is_Task_Allocation_Block); 12789 pragma Inline (Set_Is_Task_Master); 12790 pragma Inline (Set_Iteration_Scheme); 12791 pragma Inline (Set_Iterator_Specification); 12792 pragma Inline (Set_Itype); 12793 pragma Inline (Set_Kill_Range_Check); 12794 pragma Inline (Set_Label_Construct); 12795 pragma Inline (Set_Last_Bit); 12796 pragma Inline (Set_Last_Name); 12797 pragma Inline (Set_Left_Opnd); 12798 pragma Inline (Set_Library_Unit); 12799 pragma Inline (Set_Limited_Present); 12800 pragma Inline (Set_Limited_View_Installed); 12801 pragma Inline (Set_Literals); 12802 pragma Inline (Set_Local_Raise_Not_OK); 12803 pragma Inline (Set_Local_Raise_Statements); 12804 pragma Inline (Set_Loop_Actions); 12805 pragma Inline (Set_Loop_Parameter_Specification); 12806 pragma Inline (Set_Low_Bound); 12807 pragma Inline (Set_Mod_Clause); 12808 pragma Inline (Set_More_Ids); 12809 pragma Inline (Set_Must_Be_Byte_Aligned); 12810 pragma Inline (Set_Must_Not_Freeze); 12811 pragma Inline (Set_Must_Not_Override); 12812 pragma Inline (Set_Must_Override); 12813 pragma Inline (Set_Name); 12814 pragma Inline (Set_Names); 12815 pragma Inline (Set_Next_Entity); 12816 pragma Inline (Set_Next_Exit_Statement); 12817 pragma Inline (Set_Next_Implicit_With); 12818 pragma Inline (Set_Next_Named_Actual); 12819 pragma Inline (Set_Next_Pragma); 12820 pragma Inline (Set_Next_Rep_Item); 12821 pragma Inline (Set_Next_Use_Clause); 12822 pragma Inline (Set_No_Ctrl_Actions); 12823 pragma Inline (Set_No_Elaboration_Check); 12824 pragma Inline (Set_No_Entities_Ref_In_Spec); 12825 pragma Inline (Set_No_Initialization); 12826 pragma Inline (Set_No_Minimize_Eliminate); 12827 pragma Inline (Set_No_Truncation); 12828 pragma Inline (Set_Null_Exclusion_Present); 12829 pragma Inline (Set_Null_Exclusion_In_Return_Present); 12830 pragma Inline (Set_Null_Present); 12831 pragma Inline (Set_Null_Record_Present); 12832 pragma Inline (Set_Object_Definition); 12833 pragma Inline (Set_Of_Present); 12834 pragma Inline (Set_Original_Discriminant); 12835 pragma Inline (Set_Original_Entity); 12836 pragma Inline (Set_Others_Discrete_Choices); 12837 pragma Inline (Set_Out_Present); 12838 pragma Inline (Set_Parameter_Associations); 12839 pragma Inline (Set_Parameter_List_Truncated); 12840 pragma Inline (Set_Parameter_Specifications); 12841 pragma Inline (Set_Parameter_Type); 12842 pragma Inline (Set_Parent_Spec); 12843 pragma Inline (Set_Position); 12844 pragma Inline (Set_Pragma_Argument_Associations); 12845 pragma Inline (Set_Pragma_Identifier); 12846 pragma Inline (Set_Pragmas_After); 12847 pragma Inline (Set_Pragmas_Before); 12848 pragma Inline (Set_Pre_Post_Conditions); 12849 pragma Inline (Set_Prefix); 12850 pragma Inline (Set_Premature_Use); 12851 pragma Inline (Set_Present_Expr); 12852 pragma Inline (Set_Prev_Ids); 12853 pragma Inline (Set_Print_In_Hex); 12854 pragma Inline (Set_Private_Declarations); 12855 pragma Inline (Set_Private_Present); 12856 pragma Inline (Set_Procedure_To_Call); 12857 pragma Inline (Set_Proper_Body); 12858 pragma Inline (Set_Protected_Definition); 12859 pragma Inline (Set_Protected_Present); 12860 pragma Inline (Set_Raises_Constraint_Error); 12861 pragma Inline (Set_Range_Constraint); 12862 pragma Inline (Set_Range_Expression); 12863 pragma Inline (Set_Real_Range_Specification); 12864 pragma Inline (Set_Realval); 12865 pragma Inline (Set_Reason); 12866 pragma Inline (Set_Record_Extension_Part); 12867 pragma Inline (Set_Redundant_Use); 12868 pragma Inline (Set_Renaming_Exception); 12869 pragma Inline (Set_Result_Definition); 12870 pragma Inline (Set_Return_Object_Declarations); 12871 pragma Inline (Set_Reverse_Present); 12872 pragma Inline (Set_Right_Opnd); 12873 pragma Inline (Set_Rounded_Result); 12874 pragma Inline (Set_SCIL_Controlling_Tag); 12875 pragma Inline (Set_SCIL_Entity); 12876 pragma Inline (Set_SCIL_Tag_Value); 12877 pragma Inline (Set_SCIL_Target_Prim); 12878 pragma Inline (Set_Scope); 12879 pragma Inline (Set_Select_Alternatives); 12880 pragma Inline (Set_Selector_Name); 12881 pragma Inline (Set_Selector_Names); 12882 pragma Inline (Set_Shift_Count_OK); 12883 pragma Inline (Set_Source_Type); 12884 pragma Inline (Set_Split_PPC); 12885 pragma Inline (Set_Statements); 12886 pragma Inline (Set_Storage_Pool); 12887 pragma Inline (Set_Strval); 12888 pragma Inline (Set_Subpool_Handle_Name); 12889 pragma Inline (Set_Subtype_Indication); 12890 pragma Inline (Set_Subtype_Mark); 12891 pragma Inline (Set_Subtype_Marks); 12892 pragma Inline (Set_Suppress_Assignment_Checks); 12893 pragma Inline (Set_Suppress_Loop_Warnings); 12894 pragma Inline (Set_Synchronized_Present); 12895 pragma Inline (Set_TSS_Elist); 12896 pragma Inline (Set_Tagged_Present); 12897 pragma Inline (Set_Target_Type); 12898 pragma Inline (Set_Task_Definition); 12899 pragma Inline (Set_Task_Present); 12900 pragma Inline (Set_Then_Actions); 12901 pragma Inline (Set_Then_Statements); 12902 pragma Inline (Set_Treat_Fixed_As_Integer); 12903 pragma Inline (Set_Triggering_Alternative); 12904 pragma Inline (Set_Triggering_Statement); 12905 pragma Inline (Set_Type_Definition); 12906 pragma Inline (Set_Unit); 12907 pragma Inline (Set_Unknown_Discriminants_Present); 12908 pragma Inline (Set_Unreferenced_In_Spec); 12909 pragma Inline (Set_Used_Operations); 12910 pragma Inline (Set_Variant_Part); 12911 pragma Inline (Set_Variants); 12912 pragma Inline (Set_Visible_Declarations); 12913 pragma Inline (Set_Was_Originally_Stub); 12914 pragma Inline (Set_Withed_Body); 12915 12916end Sinfo; 12917