home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / atree.adb < prev    next >
Text File  |  1996-09-28  |  123KB  |  3,907 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                                A T R E E                                 --
  6. --                                                                          --
  7. --                                 B o d y                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.123 $                            --
  10. --                                                                          --
  11. --        Copyright (c) 1992,1993,1994,1995 NYU, All Rights Reserved        --
  12. --                                                                          --
  13. -- The GNAT library is free software; you can redistribute it and/or modify --
  14. -- it under terms of the GNU Library General Public License as published by --
  15. -- the Free Software  Foundation; either version 2, or (at your option) any --
  16. -- later version.  The GNAT library is distributed in the hope that it will --
  17. -- be useful, but WITHOUT ANY WARRANTY;  without even  the implied warranty --
  18. -- of MERCHANTABILITY  or  FITNESS FOR  A PARTICULAR PURPOSE.  See the  GNU --
  19. -- Library  General  Public  License for  more  details.  You  should  have --
  20. -- received  a copy of the GNU  Library  General Public License  along with --
  21. -- the GNAT library;  see the file  COPYING.LIB.  If not, write to the Free --
  22. -- Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.        --
  23. --                                                                          --
  24. ------------------------------------------------------------------------------
  25.  
  26. --  WARNING: There is a C version of this package. Any changes to this source
  27. --  file must be properly reflected in the C header a-atree.h (for inlined
  28. --  bodies) and the C file a-atree.c (for remaining non-inlined bodies).
  29.  
  30. with Debug;   use Debug;
  31. with Nlists;  use Nlists;
  32. with Elists;  use Elists;
  33. with Output;  use Output;
  34. with Sinput;  use Sinput;
  35. with Tree_IO; use Tree_IO;
  36. with Unchecked_Conversion;
  37.  
  38. package body Atree is
  39.  
  40.    Node_Count : Nat;
  41.    --  Count allocated nodes for Num_Nodes function
  42.  
  43.    use Unchecked_Access;
  44.    --  We are allowed to see these from within our own body!
  45.  
  46.    use Atree_Private_Part;
  47.    --  We are also allowed to see our private data structures!
  48.  
  49.    function E_To_N is new Unchecked_Conversion (Entity_Kind, Node_Kind);
  50.    function N_To_E is new Unchecked_Conversion (Node_Kind, Entity_Kind);
  51.    --  Functions used to store Entity_Kind value in Nkind field
  52.  
  53.    --  The following declarations are used to store flags 65-72 in the
  54.    --  Nkind field of the third component of an extended (entity) node.
  55.  
  56.    type Flag_Byte is record
  57.       Flag65 : Boolean;
  58.       Flag66 : Boolean;
  59.       Flag67 : Boolean;
  60.       Flag68 : Boolean;
  61.       Flag69 : Boolean;
  62.       Flag70 : Boolean;
  63.       Flag71 : Boolean;
  64.       Flag72 : Boolean;
  65.    end record;
  66.  
  67.    pragma Pack (Flag_Byte);
  68.    for Flag_Byte'Size use 8;
  69.  
  70.    type Flag_Byte_Ptr is access all Flag_Byte;
  71.    type Node_Kind_Ptr is access all Node_Kind;
  72.  
  73.    function To_Flag_Byte is new
  74.      Unchecked_Conversion (Node_Kind, Flag_Byte);
  75.  
  76.    function To_Flag_Byte_Ptr is new
  77.      Unchecked_Conversion (Node_Kind_Ptr, Flag_Byte_Ptr);
  78.  
  79.    --  The following declarations are used to store flags 73-96 in the
  80.    --  Field12 field of the third component of an extended (entity) node.
  81.    --  Note that the record contains space for 8 extra flags, but we have
  82.    --  not made these available yet, because there seems no pressing need.
  83.    --  need.
  84.  
  85.    type Flag_Word is record
  86.       Flag73 : Boolean;
  87.       Flag74 : Boolean;
  88.       Flag75 : Boolean;
  89.       Flag76 : Boolean;
  90.       Flag77 : Boolean;
  91.       Flag78 : Boolean;
  92.       Flag79 : Boolean;
  93.       Flag80 : Boolean;
  94.  
  95.       Flag81 : Boolean;
  96.       Flag82 : Boolean;
  97.       Flag83 : Boolean;
  98.       Flag84 : Boolean;
  99.       Flag85 : Boolean;
  100.       Flag86 : Boolean;
  101.       Flag87 : Boolean;
  102.       Flag88 : Boolean;
  103.  
  104.       Flag89 : Boolean;
  105.       Flag90 : Boolean;
  106.       Flag91 : Boolean;
  107.       Flag92 : Boolean;
  108.       Flag93 : Boolean;
  109.       Flag94 : Boolean;
  110.       Flag95 : Boolean;
  111.       Flag96 : Boolean;
  112.  
  113.       Convention : Convention_Id;
  114.    end record;
  115.  
  116.    pragma Pack (Flag_Word);
  117.    for Flag_Word'Size use 32;
  118.  
  119.    type Flag_Word_Ptr is access all Flag_Word;
  120.    type Union_Id_Ptr  is access all Union_Id;
  121.  
  122.    function To_Flag_Word is new
  123.      Unchecked_Conversion (Union_Id, Flag_Word);
  124.  
  125.    function To_Flag_Word_Ptr is new
  126.      Unchecked_Conversion (Union_Id_Ptr, Flag_Word_Ptr);
  127.  
  128.    --  The following declarations are used to store flags 97-112 in the
  129.    --  Field12 field of the fourth component of an extended (entity) node.
  130.    --  Note that the record contains space for 16 extra flags, but we have
  131.    --  not made these available yet, because they are not needed (yet!)
  132.  
  133.    type Flag_Word2 is record
  134.       Flag97  : Boolean;
  135.       Flag98  : Boolean;
  136.       Flag99  : Boolean;
  137.       Flag100 : Boolean;
  138.       Flag101 : Boolean;
  139.       Flag102 : Boolean;
  140.       Flag103 : Boolean;
  141.       Flag104 : Boolean;
  142.  
  143.       Flag105  : Boolean;
  144.       Flag106  : Boolean;
  145.       Flag107  : Boolean;
  146.       Flag108  : Boolean;
  147.       Flag109  : Boolean;
  148.       Flag110  : Boolean;
  149.       Flag111  : Boolean;
  150.       Flag112  : Boolean;
  151.  
  152.       Spare1 : Character;
  153.       Spare2 : Character;
  154.    end record;
  155.  
  156.    pragma Pack (Flag_Word2);
  157.    for Flag_Word2'Size use 32;
  158.  
  159.    type Flag_Word2_Ptr is access all Flag_Word2;
  160.  
  161.    function To_Flag_Word2 is new
  162.      Unchecked_Conversion (Union_Id, Flag_Word2);
  163.  
  164.    function To_Flag_Word2_Ptr is new
  165.      Unchecked_Conversion (Union_Id_Ptr, Flag_Word2_Ptr);
  166.  
  167.    --  Default value used to initialize default nodes. Note that some of the
  168.    --  fields get overwritten, and in particular, Nkind always gets reset.
  169.  
  170.    Default_Node : Node_Record := (
  171.       Is_Extension      => False,
  172.       Pflag1            => False,
  173.       Pflag2            => False,
  174.       In_List           => False,
  175.       Rewrite_Sub       => False,
  176.       Rewrite_Ins       => False,
  177.       Flag1             => False,
  178.       Comes_From_Source => False, -- modified by Set_Comes_From_Source_Default
  179.       Flag3             => False,
  180.       Flag4             => False,
  181.  
  182.       Flag5             => False,
  183.       Flag6             => False,
  184.       Flag7             => False,
  185.       Flag8             => False,
  186.       Flag9             => False,
  187.       Flag10            => False,
  188.       Flag11            => False,
  189.       Flag12            => False,
  190.  
  191.       Flag13            => False,
  192.       Flag14            => False,
  193.       Flag15            => False,
  194.       Flag16            => False,
  195.       Flag17            => False,
  196.       Flag18            => False,
  197.  
  198.       Nkind             => N_Unused_At_Start,
  199.  
  200.       Sloc              => No_Location,
  201.       Link              => Empty_List_Or_Node,
  202.       Field1            => Empty_List_Or_Node,
  203.       Field2            => Empty_List_Or_Node,
  204.       Field3            => Empty_List_Or_Node,
  205.       Field4            => Empty_List_Or_Node,
  206.       Field5            => Empty_List_Or_Node);
  207.  
  208.    --  Default value used to initialize node extensions (i.e. the second
  209.    --  and third and fourth components of an extended node). Note we are
  210.    --  cheating a bit here when it comes to Node12, which really holds
  211.    --  flags an (for the third component), the convention. But it works
  212.    --  because Empty, False, and Convention_Ada, all happen to be all
  213.    --  zero bits.
  214.  
  215.    Default_Node_Extension : constant Node_Record := (
  216.       Is_Extension      => True,
  217.       Pflag1            => False,
  218.       Pflag2            => False,
  219.       In_List           => False,
  220.       Rewrite_Sub       => False,
  221.       Rewrite_Ins       => False,
  222.       Flag1             => False,
  223.       Comes_From_Source => False,
  224.       Flag3             => False,
  225.       Flag4             => False,
  226.  
  227.       Flag5             => False,
  228.       Flag6             => False,
  229.       Flag7             => False,
  230.       Flag8             => False,
  231.       Flag9             => False,
  232.       Flag10            => False,
  233.       Flag11            => False,
  234.       Flag12            => False,
  235.  
  236.       Flag13            => False,
  237.       Flag14            => False,
  238.       Flag15            => False,
  239.       Flag16            => False,
  240.       Flag17            => False,
  241.       Flag18            => False,
  242.  
  243.       Nkind             => E_To_N (E_Void),
  244.  
  245.       Field6            => Empty_List_Or_Node,
  246.       Field7            => Empty_List_Or_Node,
  247.       Field8            => Empty_List_Or_Node,
  248.       Field9            => Empty_List_Or_Node,
  249.       Field10           => Empty_List_Or_Node,
  250.       Field11           => Empty_List_Or_Node,
  251.       Field12           => Empty_List_Or_Node);
  252.  
  253.    --------------------------------------------------
  254.    -- Implementation of Tree Substitution Routines --
  255.    --------------------------------------------------
  256.  
  257.    --  A hash table is used to keep track of the mapping between substituted
  258.    --  nodes and their corresponding original tree nodes. A call to the
  259.    --  Rewrite_Substitute_Tree procedure makes an entry in this table so
  260.    --  that Original_Tree can obtain the original tree before rewriting.
  261.  
  262.    type Hash_Entry_Id is new Nat;
  263.    --  Id of hash table entry is its subscript in the hash table
  264.  
  265.    No_Entry : constant Hash_Entry_Id := 0;
  266.    --  Value used to mark no chain, or end of chain
  267.  
  268.    type Hash_Entry is record
  269.       Next     : Hash_Entry_Id;
  270.       Old_Node : Node_Id;
  271.       New_Node : Node_Id;
  272.    end record;
  273.  
  274.    Num_Hash_Headers : constant := 512;
  275.    --  Number of headers in Hash_Headers array
  276.  
  277.    Hash_Headers : array (Nat range 0 .. Num_Hash_Headers - 1) of Hash_Entry_Id;
  278.    --  Table of hash headers, each entry points to chain of entries in the
  279.    --  hash table whose hash value matches the subscript in the header table.
  280.    --  The hash code is simply the Node_Id value mod Num_Hash_Headers.
  281.  
  282.    package Hash_Sub is new Table (
  283.       Table_Component_Type => Hash_Entry,
  284.       Table_Index_Type     => Hash_Entry_Id,
  285.       Table_Low_Bound      => 1,
  286.       Table_Initial        => Alloc_Hash_Sub_Initial,
  287.       Table_Increment      => Alloc_Hash_Sub_Increment,
  288.       Table_Name           => "Hash_Sub");
  289.  
  290.    -----------------------
  291.    -- Local Subprograms --
  292.    -----------------------
  293.  
  294.    procedure Fix_Parent (Field : Union_Id; Old_Node, New_Node : Node_Id);
  295.    --  This subprogram is used to fixup parent pointers that are rendered
  296.    --  incorrect because of a node copy. Field is checked to see if it
  297.    --  points to a node, list, or element list that has a parent that
  298.    --  points to Old_Node. If so, the parent is reset to point to New_Node.
  299.  
  300.    -----------------
  301.    -- Change_Node --
  302.    -----------------
  303.  
  304.    procedure Change_Node (N : Node_Id; New_Node_Kind : Node_Kind) is
  305.       Save_Sloc    : constant Source_Ptr := Sloc (N);
  306.       Save_In_List : constant Boolean    := Nodes.Table (N).In_List;
  307.       Save_Link    : constant Union_Id   := Nodes.Table (N).Link;
  308.       Save_CFS     : constant Boolean    := Nodes.Table (N).Comes_From_Source;
  309.  
  310.    begin
  311.       Nodes.Table (N)                   := Default_Node;
  312.       Nodes.Table (N).Sloc              := Save_Sloc;
  313.       Nodes.Table (N).In_List           := Save_In_List;
  314.       Nodes.Table (N).Link              := Save_Link;
  315.       Nodes.Table (N).Comes_From_Source := Save_CFS;
  316.       Nodes.Table (N).Nkind             := New_Node_Kind;
  317.    end Change_Node;
  318.  
  319.    -----------------------
  320.    -- Comes_From_Source --
  321.    -----------------------
  322.  
  323.    function Comes_From_Source (N : Node_Id) return Boolean is
  324.    begin
  325.       pragma Assert (N in Nodes.First .. Nodes.Last);
  326.       return Nodes.Table (N).Comes_From_Source;
  327.    end Comes_From_Source;
  328.  
  329.    ----------------
  330.    -- Convention --
  331.    ----------------
  332.  
  333.    function Convention  (N : Node_Id) return Convention_Id is
  334.    begin
  335.       pragma Assert (Nkind (N) in N_Entity);
  336.       return To_Flag_Word (Nodes.Table (N + 2).Field12).Convention;
  337.    end Convention;
  338.  
  339.    ---------------
  340.    -- Copy_Node --
  341.    ---------------
  342.  
  343.    procedure Copy_Node (Source : Node_Id; Destination : Node_Id) is
  344.       Save_In_List : constant Boolean  := Nodes.Table (Destination).In_List;
  345.       Save_Link    : constant Union_Id := Nodes.Table (Destination).Link;
  346.  
  347.    begin
  348.       Nodes.Table (Destination)         := Nodes.Table (Source);
  349.       Nodes.Table (Destination).In_List := Save_In_List;
  350.       Nodes.Table (Destination).Link    := Save_Link;
  351.  
  352.       if Has_Extension (Source) then
  353.          pragma Assert (Has_Extension (Destination));
  354.          Nodes.Table (Destination + 1) := Nodes.Table (Source + 1);
  355.          Nodes.Table (Destination + 2) := Nodes.Table (Source + 2);
  356.          Nodes.Table (Destination + 3) := Nodes.Table (Source + 3);
  357.  
  358.       else
  359.          pragma Assert (not Has_Extension (Source));
  360.          null;
  361.       end if;
  362.    end Copy_Node;
  363.  
  364.    ------------------------
  365.    -- Copy_Original_Tree --
  366.    ------------------------
  367.  
  368.    function Copy_Original_Tree (Source : Node_Id) return Node_Id is
  369.       New_Id  : Node_Id;
  370.  
  371.       function Copy_Entity (E : Entity_Id) return Entity_Id;
  372.       --  Copy Entity, copying only the Ekind and Chars fields
  373.  
  374.       function Copy_List (List : List_Id) return List_Id;
  375.       --  Copy list
  376.  
  377.       function Possible_Copy (Field : Union_Id) return Union_Id;
  378.       --  Given a field, returns a copy of the node or list if its parent
  379.       --  is the current source node, and otherwise returns the input
  380.  
  381.       function Copy_Entity (E : Entity_Id) return Entity_Id is
  382.          New_Ent : Entity_Id;
  383.  
  384.       begin
  385.          if Nkind (E) = N_Defining_Identifier then
  386.             New_Ent := New_Entity (N_Defining_Identifier, Sloc (E));
  387.  
  388.          elsif Nkind (E) = N_Defining_Character_Literal then
  389.             New_Ent := New_Entity (N_Defining_Character_Literal, Sloc (E));
  390.  
  391.          elsif Nkind (E) = N_Defining_Operator_Symbol then
  392.             New_Ent := New_Entity (N_Defining_Operator_Symbol, Sloc (E));
  393.          end if;
  394.  
  395.          Set_Chars (New_Ent, Chars (E));
  396.          return New_Ent;
  397.       end Copy_Entity;
  398.  
  399.       function Copy_List (List : List_Id) return List_Id is
  400.          NL : List_Id;
  401.          E  : Node_Id;
  402.  
  403.       begin
  404.          if List = No_List then
  405.             return No_List;
  406.  
  407.          else
  408.             NL := New_List;
  409.             E := First (List);
  410.  
  411.             while Present (E) loop
  412.  
  413.                if Has_Extension (E) then
  414.                   Append (Copy_Entity (E), NL);
  415.                else
  416.                   Append (Copy_Original_Tree (E), NL);
  417.                end if;
  418.  
  419.                E := Next (E);
  420.             end loop;
  421.  
  422.             return NL;
  423.          end if;
  424.  
  425.       end Copy_List;
  426.  
  427.       function Possible_Copy (Field : Union_Id) return Union_Id is
  428.          New_N : Union_Id;
  429.  
  430.       begin
  431.          if Field in Node_Range then
  432.  
  433.             New_N :=  Union_Id (Copy_Original_Tree (Node_Id (Field)));
  434.             Set_Parent (Node_Id (New_N), Node_Id (New_Id));
  435.  
  436.             return New_N;
  437.  
  438.          elsif Field in List_Range then
  439.  
  440.             New_N := Union_Id (Copy_List (List_Id (Field)));
  441.             Set_Parent (List_Id (New_N), Node_Id (New_Id));
  442.  
  443.             return New_N;
  444.  
  445.          else
  446.             return Field;
  447.          end if;
  448.       end Possible_Copy;
  449.  
  450.    --  Start of processing for Copy_Original_Tree
  451.  
  452.    begin
  453.       if Source <= Empty_Or_Error then
  454.          return Source;
  455.  
  456.       elsif Has_Extension (Source) then
  457.          return Copy_Entity (Source);
  458.  
  459.       elsif Is_Rewrite_Substitution (Source) then
  460.          return Copy_Original_Tree (Original_Node (Source));
  461.  
  462.       else
  463.          Nodes.Increment_Last;
  464.          New_Id := Nodes.Last;
  465.          Nodes.Table (New_Id) := Nodes.Table (Source);
  466.          Nodes.Table (New_Id).Link := Empty_List_Or_Node;
  467.          Nodes.Table (New_Id).In_List := False;
  468.          Node_Count := Node_Count + 1;
  469.  
  470.          --  Recursively copy descendents
  471.  
  472.          Set_Field1 (New_Id, Possible_Copy (Field1 (New_Id)));
  473.          Set_Field2 (New_Id, Possible_Copy (Field2 (New_Id)));
  474.          Set_Field3 (New_Id, Possible_Copy (Field3 (New_Id)));
  475.          Set_Field4 (New_Id, Possible_Copy (Field4 (New_Id)));
  476.          Set_Field5 (New_Id, Possible_Copy (Field5 (New_Id)));
  477.  
  478.          --  All done, return copied node
  479.  
  480.          return New_Id;
  481.       end if;
  482.    end Copy_Original_Tree;
  483.  
  484.    ------------------------
  485.    -- Copy_Separate_Tree --
  486.    ------------------------
  487.  
  488.    function Copy_Separate_Tree (Source : Node_Id) return Node_Id is
  489.       New_Id  : Node_Id;
  490.  
  491.       function Copy_Entity (E : Entity_Id) return Entity_Id;
  492.       --  Copy Entity, copying only the Ekind and Chars fields
  493.  
  494.       function Copy_List (List : List_Id) return List_Id;
  495.       --  Copy list
  496.  
  497.       function Possible_Copy (Field : Union_Id) return Union_Id;
  498.       --  Given a field, returns a copy of the node or list if its parent
  499.       --  is the current source node, and otherwise returns the input
  500.  
  501.       function Copy_Entity (E : Entity_Id) return Entity_Id is
  502.          New_Ent : Entity_Id;
  503.  
  504.       begin
  505.          if Nkind (E) = N_Defining_Identifier then
  506.             New_Ent := New_Entity (N_Defining_Identifier, Sloc (E));
  507.  
  508.          elsif Nkind (E) = N_Defining_Character_Literal then
  509.             New_Ent := New_Entity (N_Defining_Character_Literal, Sloc (E));
  510.  
  511.          elsif Nkind (E) = N_Defining_Operator_Symbol then
  512.             New_Ent := New_Entity (N_Defining_Operator_Symbol, Sloc (E));
  513.          end if;
  514.  
  515.          Set_Chars (New_Ent, Chars (E));
  516.          return New_Ent;
  517.       end Copy_Entity;
  518.  
  519.       function Copy_List (List : List_Id) return List_Id is
  520.          NL : List_Id;
  521.          E  : Node_Id;
  522.  
  523.       begin
  524.          if List = No_List then
  525.             return No_List;
  526.  
  527.          else
  528.             NL := New_List;
  529.             E := First (List);
  530.  
  531.             while Present (E) loop
  532.  
  533.                if Has_Extension (E) then
  534.                   Append (Copy_Entity (E), NL);
  535.                else
  536.                   Append (Copy_Separate_Tree (E), NL);
  537.                end if;
  538.  
  539.                E := Next (E);
  540.             end loop;
  541.  
  542.             return NL;
  543.          end if;
  544.  
  545.       end Copy_List;
  546.  
  547.       function Possible_Copy (Field : Union_Id) return Union_Id is
  548.          New_N : Union_Id;
  549.  
  550.       begin
  551.          if Field in Node_Range then
  552.  
  553.             New_N :=  Union_Id (Copy_Separate_Tree (Node_Id (Field)));
  554.  
  555.             if Parent (Node_Id (Field)) = Source then
  556.                Set_Parent (Node_Id (New_N), Node_Id (New_Id));
  557.             end if;
  558.  
  559.             return New_N;
  560.  
  561.          elsif Field in List_Range then
  562.             New_N := Union_Id (Copy_List (List_Id (Field)));
  563.  
  564.             if Parent (List_Id (Field)) = Source then
  565.                Set_Parent (List_Id (New_N), Node_Id (New_Id));
  566.             end if;
  567.  
  568.             return New_N;
  569.  
  570.          else
  571.             return Field;
  572.          end if;
  573.       end Possible_Copy;
  574.  
  575.    --  Start of processing for Copy_Separate_Tree
  576.  
  577.    begin
  578.       if Source <= Empty_Or_Error then
  579.          return Source;
  580.  
  581.       elsif Has_Extension (Source) then
  582.          return Copy_Entity (Source);
  583.  
  584.       else
  585.          Nodes.Increment_Last;
  586.          New_Id := Nodes.Last;
  587.          Nodes.Table (New_Id) := Nodes.Table (Source);
  588.          Nodes.Table (New_Id).Link := Empty_List_Or_Node;
  589.          Nodes.Table (New_Id).In_List := False;
  590.          Nodes.Table (New_Id).Rewrite_Sub := False;
  591.          Node_Count := Node_Count + 1;
  592.  
  593.          --  Recursively copy descendents
  594.  
  595.          Set_Field1 (New_Id, Possible_Copy (Field1 (New_Id)));
  596.          Set_Field2 (New_Id, Possible_Copy (Field2 (New_Id)));
  597.          Set_Field3 (New_Id, Possible_Copy (Field3 (New_Id)));
  598.          Set_Field4 (New_Id, Possible_Copy (Field4 (New_Id)));
  599.          Set_Field5 (New_Id, Possible_Copy (Field5 (New_Id)));
  600.  
  601.          --  All done, return copied node
  602.  
  603.          return New_Id;
  604.       end if;
  605.    end Copy_Separate_Tree;
  606.  
  607.    -----------------
  608.    -- Delete_Node --
  609.    -----------------
  610.  
  611.    procedure Delete_Node (Node : Node_Id) is
  612.    begin
  613.       pragma Assert (not Nodes.Table (Node).In_List);
  614.  
  615.       if Debug_Flag_N then
  616.          Write_Str ("Delete node ");
  617.          Write_Int (Int (Node));
  618.          Write_Eol;
  619.       end if;
  620.  
  621.       Nodes.Table (Node)       := Default_Node;
  622.       Nodes.Table (Node).Nkind := N_Unused_At_Start;
  623.       Node_Count := Node_Count - 1;
  624.  
  625.       --  Note: for now, we are not bothering to reuse deleted nodes
  626.  
  627.    end Delete_Node;
  628.  
  629.    -----------
  630.    -- Ekind --
  631.    -----------
  632.  
  633.    function Ekind (N : Node_Id) return Entity_Kind is
  634.    begin
  635.       pragma Assert (Nkind (N) in N_Entity);
  636.       return N_To_E (Nodes.Table (N + 1).Nkind);
  637.    end Ekind;
  638.  
  639.    -----------------------
  640.    -- Exchange_Entities --
  641.    -----------------------
  642.  
  643.    procedure Exchange_Entities (E1 : Entity_Id; E2 : Entity_Id) is
  644.       Temp_Ent : Node_Record;
  645.  
  646.    begin
  647.       pragma Assert (Has_Extension (E1)
  648.         and then Has_Extension (E2)
  649.         and then not Nodes.Table (E1).In_List
  650.         and then not Nodes.Table (E2).In_List);
  651.  
  652.       --  Exchange the contents of the two entities
  653.  
  654.       Temp_Ent := Nodes.Table (E1);
  655.       Nodes.Table (E1) := Nodes.Table (E2);
  656.       Nodes.Table (E2) := Temp_Ent;
  657.       Temp_Ent := Nodes.Table (E1 + 1);
  658.       Nodes.Table (E1 + 1) := Nodes.Table (E2 + 1);
  659.       Nodes.Table (E2 + 1) := Temp_Ent;
  660.       Temp_Ent := Nodes.Table (E1 + 2);
  661.       Nodes.Table (E1 + 2) := Nodes.Table (E2 + 2);
  662.       Nodes.Table (E2 + 2) := Temp_Ent;
  663.       Temp_Ent := Nodes.Table (E1 + 3);
  664.       Nodes.Table (E1 + 3) := Nodes.Table (E2 + 3);
  665.       Nodes.Table (E2 + 3) := Temp_Ent;
  666.  
  667.       --  That exchange exchanged the parent pointers as well, which is what
  668.       --  we want, but we need to patch up the defining identifier pointers
  669.       --  in the parent nodes (the child pointers) to match this switch
  670.       --  unless for Implicit types entities which have no parent
  671.  
  672.       if Present (Parent (E1)) then
  673.          Set_Defining_Identifier (Parent (E1), E1);
  674.       end if;
  675.  
  676.       if Present (Parent (E2)) then
  677.          Set_Defining_Identifier (Parent (E2), E2);
  678.       end if;
  679.    end Exchange_Entities;
  680.  
  681.    -----------------
  682.    -- Extend_Node --
  683.    -----------------
  684.  
  685.    function Extend_Node (Node : Node_Id) return Entity_Id is
  686.       Result : Entity_Id;
  687.  
  688.       procedure Debug_Extend_Node;
  689.       --  Debug routine for debug flag N
  690.  
  691.       procedure Debug_Extend_Node is
  692.       begin
  693.          if Debug_Flag_N then
  694.             Write_Str ("Extend node ");
  695.             Write_Int (Int (Node));
  696.  
  697.             if Result = Node then
  698.                Write_Str (" in place");
  699.             else
  700.                Write_Str (" copied to ");
  701.                Write_Int (Int (Result));
  702.             end if;
  703.          end if;
  704.       end Debug_Extend_Node;
  705.  
  706.       pragma Inline (Debug_Extend_Node);
  707.  
  708.    begin
  709.       if Node /= Nodes.Last then
  710.          Nodes.Increment_Last;
  711.          Nodes.Table (Nodes.Last) := Nodes.Table (Node);
  712.          Result := Nodes.Last;
  713.       else
  714.          Result := Node;
  715.       end if;
  716.  
  717.       Nodes.Increment_Last;
  718.       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  719.       Nodes.Increment_Last;
  720.       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  721.       Nodes.Increment_Last;
  722.       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  723.       pragma Debug (Debug_Extend_Node);
  724.       return Result;
  725.    end Extend_Node;
  726.  
  727.    ----------------
  728.    -- Fix_Parent --
  729.    ----------------
  730.  
  731.    procedure Fix_Parent (Field : Union_Id; Old_Node, New_Node : Node_Id) is
  732.    begin
  733.       --  Fix parent of node that is referenced by Field. Note that we must
  734.       --  exclude the case where the node is a member of a list, because in
  735.       --  this case the parent is the parent of the list.
  736.  
  737.       if Field in Node_Range
  738.         and then Present (Node_Id (Field))
  739.         and then not Nodes.Table (Node_Id (Field)).In_List
  740.         and then Parent (Node_Id (Field)) = Old_Node
  741.       then
  742.          Set_Parent (Node_Id (Field), New_Node);
  743.  
  744.       --  Fix parent of list that is referenced by Field
  745.  
  746.       elsif Field in List_Range
  747.         and then Present (List_Id (Field))
  748.         and then Parent (List_Id (Field)) = Old_Node
  749.       then
  750.          Set_Parent (List_Id (Field), New_Node);
  751.       end if;
  752.  
  753.    end Fix_Parent;
  754.  
  755.    -------------------
  756.    -- Has_Extension --
  757.    -------------------
  758.  
  759.    function Has_Extension (N : Node_Id) return Boolean is
  760.    begin
  761.       return N < Nodes.Last and then Nodes.Table (N + 1).Is_Extension;
  762.    end Has_Extension;
  763.  
  764.    ----------------
  765.    -- Initialize --
  766.    ----------------
  767.  
  768.    procedure Initialize is
  769.       Dummy : Node_Id;
  770.  
  771.    begin
  772.       Node_Count := 0;
  773.       Nodes.Init;
  774.       Hash_Sub.Init;
  775.  
  776.       for J in Hash_Headers'Range loop
  777.          Hash_Headers (J) := No_Entry;
  778.       end loop;
  779.  
  780.       --  Allocate Empty and Error nodes
  781.  
  782.       Dummy := New_Node (N_Empty, No_Location);
  783.       Set_Name1 (Empty, No_Name);
  784.       Dummy := New_Node (N_Error, No_Location);
  785.       Set_Name1 (Error, Error_Name);
  786.  
  787.    end Initialize;
  788.  
  789.    --------------------------
  790.    -- Is_Rewrite_Insertion --
  791.    --------------------------
  792.  
  793.    function Is_Rewrite_Insertion (Node : Node_Id) return Boolean is
  794.    begin
  795.       return Nodes.Table (Node).Rewrite_Ins;
  796.    end Is_Rewrite_Insertion;
  797.  
  798.    -----------------------------
  799.    -- Is_Rewrite_Substitution --
  800.    -----------------------------
  801.  
  802.    function Is_Rewrite_Substitution (Node : Node_Id) return Boolean is
  803.    begin
  804.       return Nodes.Table (Node).Rewrite_Sub;
  805.    end Is_Rewrite_Substitution;
  806.  
  807.    ------------------
  808.    -- Last_Node_Id --
  809.    ------------------
  810.  
  811.    function Last_Node_Id return Node_Id is
  812.    begin
  813.       return Nodes.Last;
  814.    end Last_Node_Id;
  815.  
  816.    ----------------------------
  817.    -- Mark_Rewrite_Insertion --
  818.    ----------------------------
  819.  
  820.    procedure Mark_Rewrite_Insertion (New_Node : Node_Id) is
  821.    begin
  822.       Nodes.Table (New_Node).Rewrite_Ins := True;
  823.    end Mark_Rewrite_Insertion;
  824.  
  825.    --------------
  826.    -- New_Copy --
  827.    --------------
  828.  
  829.    function New_Copy (Source : Node_Id) return Node_Id is
  830.       New_Id : Node_Id;
  831.  
  832.    begin
  833.       if Source <= Empty_Or_Error then
  834.          return Source;
  835.  
  836.       else
  837.          Nodes.Increment_Last;
  838.          New_Id := Nodes.Last;
  839.          Nodes.Table (New_Id) := Nodes.Table (Source);
  840.          Nodes.Table (New_Id).Link := Empty_List_Or_Node;
  841.          Nodes.Table (New_Id).In_List := False;
  842.  
  843.          if Has_Extension (Source) then
  844.             Nodes.Increment_Last;
  845.             Nodes.Table (New_Id + 1) := Nodes.Table (Source + 1);
  846.             Nodes.Increment_Last;
  847.             Nodes.Table (New_Id + 2) := Nodes.Table (Source + 2);
  848.             Nodes.Increment_Last;
  849.             Nodes.Table (New_Id + 3) := Nodes.Table (Source + 3);
  850.          end if;
  851.  
  852.          if Is_Rewrite_Substitution (Source) then
  853.             Nodes.Table (New_Id).Rewrite_Sub := False;
  854.          end if;
  855.  
  856.          Node_Count := Node_Count + 1;
  857.          return New_Id;
  858.       end if;
  859.    end New_Copy;
  860.  
  861.    -------------------
  862.    -- New_Copy_Tree --
  863.    -------------------
  864.  
  865.    function New_Copy_Tree (Source : Node_Id) return Node_Id is
  866.    begin
  867.       return New_Copy_With_Replacement (Source, New_Elmt_List);
  868.    end New_Copy_Tree;
  869.  
  870.    -------------------------------
  871.    -- New_Copy_With_Replacement --
  872.    -------------------------------
  873.  
  874.    function New_Copy_With_Replacement (Source : Node_Id; Map : Elist_Id)
  875.    return Node_Id is
  876.       New_Id : Node_Id;
  877.       O_Ityp : Node_Id;
  878.       N_Ityp : Node_Id;
  879.  
  880.       function Possible_Copy (Field : Union_Id) return Union_Id;
  881.       --  Given a field, returns a copy of the node or list if its parent
  882.       --  is the current source node, and otherwise returns the input
  883.  
  884.       procedure Add_Assoc  (Old_N : Node_Id; New_N : Node_Id);
  885.       --  Add one association
  886.  
  887.       function Assoc (N : Node_Id) return Node_Id;
  888.       --  Replace any occurrence of a component, discriminant, or Itype
  889.       --  in the original declaration,  with the corresponding entity in
  890.       --  the new declaration.
  891.  
  892.       function Copy_Elist_With_Replacement (E : Elist_Id) return Elist_Id;
  893.       --  Copy element list. Used for discriminant constraints of Itypes.
  894.  
  895.       function Copy_List_With_Replacement (List : List_Id) return List_Id;
  896.       --  Copy list doing replacement
  897.  
  898.       function Assoc (N : Node_Id) return Node_Id is
  899.          E : Elmt_Id := First_Elmt (Map);
  900.  
  901.       begin
  902.          if not Has_Extension (N) then
  903.             return N;
  904.  
  905.          elsif Ekind (N) /= E_Component
  906.            and then Ekind (N) /= E_Discriminant
  907.            and then Ekind (N) not in Record_Kind
  908.            and then Ekind (N) not in Private_Kind
  909.            and then Comes_From_Source (N)
  910.          then
  911.             return N;
  912.  
  913.          else
  914.             while Present (E) loop
  915.                if Node (E) = N then
  916.                   return Node (Next_Elmt (E));
  917.                else
  918.                   E := Next_Elmt (Next_Elmt (E));
  919.                end if;
  920.             end loop;
  921.          end if;
  922.  
  923.          return N;
  924.       end Assoc;
  925.  
  926.       procedure Add_Assoc  (Old_N : Node_Id; New_N : Node_Id) is
  927.       begin
  928.          Append_Elmt (Old_N, Map);
  929.          Append_Elmt (New_N, Map);
  930.       end Add_Assoc;
  931.  
  932.       function Copy_Itype (Itype : Entity_Id) return Entity_Id;
  933.       --  The constraints on Itypes may depend on discriminants that have
  934.       --  to be replaced as well. Itypes have to parent node,  so they have
  935.       --  to be treated specially. The itypes of interest are discrete
  936.       --  subtypes, that may be constrained index types, and record subyptes.
  937.       --  In both cases, the constraints must be copied.
  938.  
  939.       function Copy_Itype (Itype : Entity_Id) return Entity_Id is
  940.          New_Itype : Entity_Id := New_Copy (Itype);
  941.       begin
  942.          if Is_Discrete_Type (Itype) then
  943.             Set_Scalar_Range (New_Itype,
  944.                New_Copy_With_Replacement (Scalar_Range (Itype), Map));
  945.  
  946.          elsif Has_Discriminants (Base_Type (Itype)) then
  947.             Set_Discriminant_Constraint (New_Itype,
  948.               Copy_Elist_With_Replacement (Discriminant_Constraint (Itype)));
  949.          end if;
  950.  
  951.          return New_Itype;
  952.       end Copy_Itype;
  953.  
  954.       function Copy_Elist_With_Replacement (E : Elist_Id) return Elist_Id is
  955.          M : Elmt_Id;
  956.          L : Elist_Id := New_Elmt_List;
  957.  
  958.       begin
  959.          M := First_Elmt (E);
  960.  
  961.          while Present (M) loop
  962.             Append_Elmt (New_Copy_With_Replacement (Node (M), Map), L);
  963.             M := Next_Elmt (M);
  964.          end loop;
  965.  
  966.          return L;
  967.       end Copy_Elist_With_Replacement;
  968.  
  969.       function Copy_List_With_Replacement (List : List_Id) return List_Id is
  970.          NL : List_Id;
  971.          E  : Node_Id;
  972.  
  973.       begin
  974.          if List = No_List then
  975.             return No_List;
  976.  
  977.          else
  978.             NL := New_List;
  979.             E := First (List);
  980.  
  981.             while Present (E) loop
  982.  
  983.                if Has_Extension (E) then
  984.                   Append (Assoc (E), NL);
  985.                else
  986.                   Append (New_Copy_With_Replacement (E, Map), NL);
  987.                end if;
  988.  
  989.                E := Next (E);
  990.             end loop;
  991.  
  992.             return NL;
  993.          end if;
  994.  
  995.       end Copy_List_With_Replacement;
  996.  
  997.       function Possible_Copy (Field : Union_Id) return Union_Id is
  998.          New_N : Union_Id;
  999.  
  1000.       begin
  1001.          if Field in Node_Range then
  1002.  
  1003.             if Parent (Node_Id (Field)) = Source then
  1004.                New_N :=  Union_Id
  1005.                    (New_Copy_With_Replacement (Node_Id (Field), Map));
  1006.                Set_Parent (Node_Id (New_N), Node_Id (New_Id));
  1007.             else
  1008.                New_N :=  Union_Id (Assoc (Node_Id (Field)));
  1009.             end if;
  1010.  
  1011.             return New_N;
  1012.  
  1013.          elsif Field in List_Range then
  1014.             if Parent (List_Id (Field)) = Source then
  1015.                New_N := Union_Id
  1016.                      (Copy_List_With_Replacement (List_Id (Field)));
  1017.                Set_Parent (List_Id (New_N), Node_Id (New_Id));
  1018.                return New_N;
  1019.             else
  1020.                return Field;
  1021.             end if;
  1022.  
  1023.          else
  1024.             return Field;
  1025.          end if;
  1026.       end Possible_Copy;
  1027.  
  1028.    --  Start of processing for New_Copy_With_Replacement
  1029.  
  1030.    begin
  1031.       if Source <= Empty_Or_Error then
  1032.          return Source;
  1033.  
  1034.       elsif Has_Extension (Source) then
  1035.          return Assoc (Source);
  1036.  
  1037.       else
  1038.          Nodes.Increment_Last;
  1039.          New_Id := Nodes.Last;
  1040.          Nodes.Table (New_Id) := Nodes.Table (Source);
  1041.          Nodes.Table (New_Id).Link := Empty_List_Or_Node;
  1042.          Nodes.Table (New_Id).In_List := False;
  1043.          Node_Count := Node_Count + 1;
  1044.  
  1045.          --  Copy any attached Itypes and associate old Itype with new
  1046.          --  one, to keep consistent references in new tree.
  1047.  
  1048.          if Nkind (Source) in N_Has_Itypes
  1049.            and then Present (First_Itype (Source))
  1050.          then
  1051.             O_Ityp := First_Itype (Source);
  1052.             N_Ityp := Copy_Itype (O_Ityp);
  1053.             Set_First_Itype (New_Id, N_Ityp);
  1054.             Add_Assoc (O_Ityp,  N_Ityp);
  1055.  
  1056.             while Present (Next_Itype (N_Ityp)) loop
  1057.                O_Ityp := Next_Itype (N_Ityp);
  1058.                Set_Next_Itype (N_Ityp, Copy_Itype (O_Ityp));
  1059.                N_Ityp := Next_Itype (N_Ityp);
  1060.                Add_Assoc (O_Ityp, N_Ityp);
  1061.             end loop;
  1062.          end if;
  1063.  
  1064.          --  Recursively copy descendents
  1065.  
  1066.          Set_Field1 (New_Id, Possible_Copy (Field1 (New_Id)));
  1067.          Set_Field2 (New_Id, Possible_Copy (Field2 (New_Id)));
  1068.          Set_Field3 (New_Id, Possible_Copy (Field3 (New_Id)));
  1069.          Set_Field4 (New_Id, Possible_Copy (Field4 (New_Id)));
  1070.          Set_Field5 (New_Id, Possible_Copy (Field5 (New_Id)));
  1071.  
  1072.          --  If the original is marked as a rewrite subsitution or a rewrite
  1073.          --  insertion, then unmark the copy, since it is the original that
  1074.          --  was rewritten, or inserted, not the copy.
  1075.  
  1076.          Nodes.Table (New_Id).Rewrite_Sub := False;
  1077.          Nodes.Table (New_Id).Rewrite_Ins := False;
  1078.  
  1079.          --  All done, return copied node
  1080.  
  1081.          return New_Id;
  1082.       end if;
  1083.    end New_Copy_With_Replacement;
  1084.  
  1085.    ----------------
  1086.    -- New_Entity --
  1087.    ----------------
  1088.  
  1089.    function New_Entity
  1090.      (New_Node_Kind : Node_Kind;
  1091.       New_Sloc      : Source_Ptr)
  1092.       return          Entity_Id
  1093.    is
  1094.       procedure New_Entity_Debugging_Output;
  1095.       --  Debugging routine for debug flag N
  1096.  
  1097.       procedure New_Entity_Debugging_Output is
  1098.       begin
  1099.          if Debug_Flag_N then
  1100.             Write_Str ("Allocate entity, Id = ");
  1101.             Write_Int (Int (Nodes.Last));
  1102.             Write_Str ("  ");
  1103.             Write_Location (New_Sloc);
  1104.             Write_Str ("  ");
  1105.             Write_Str (Node_Kind'Image (New_Node_Kind));
  1106.             Write_Eol;
  1107.          end if;
  1108.       end New_Entity_Debugging_Output;
  1109.  
  1110.       pragma Inline (New_Entity_Debugging_Output);
  1111.  
  1112.    --  Start of processing for New_Entity
  1113.  
  1114.    begin
  1115.       pragma Assert (New_Node_Kind in N_Entity);
  1116.  
  1117.       Nodes.Increment_Last;
  1118.       Fatal_Error_Node := Nodes.Last;
  1119.       Nodes.Table (Nodes.Last)        := Default_Node;
  1120.       Nodes.Table (Nodes.Last).Nkind  := New_Node_Kind;
  1121.       Nodes.Table (Nodes.Last).Sloc   := New_Sloc;
  1122.       pragma Debug (New_Entity_Debugging_Output);
  1123.  
  1124.       Nodes.Increment_Last;
  1125.       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  1126.  
  1127.       Nodes.Increment_Last;
  1128.       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  1129.  
  1130.       Nodes.Increment_Last;
  1131.       Nodes.Table (Nodes.Last) := Default_Node_Extension;
  1132.  
  1133.       Node_Count := Node_Count + 1;
  1134.       return Fatal_Error_Node;
  1135.    end New_Entity;
  1136.  
  1137.    --------------
  1138.    -- New_Node --
  1139.    --------------
  1140.  
  1141.    function New_Node
  1142.      (New_Node_Kind : Node_Kind;
  1143.       New_Sloc      : Source_Ptr)
  1144.       return          Node_Id
  1145.    is
  1146.       procedure New_Node_Debugging_Output;
  1147.       --  Debugging routine for debug flag N
  1148.  
  1149.       procedure New_Node_Debugging_Output is
  1150.       begin
  1151.          if Debug_Flag_N then
  1152.             Write_Str ("Allocate node, Id = ");
  1153.             Write_Int (Int (Nodes.Last));
  1154.             Write_Str ("  ");
  1155.             Write_Location (New_Sloc);
  1156.             Write_Str ("  ");
  1157.             Write_Str (Node_Kind'Image (New_Node_Kind));
  1158.             Write_Eol;
  1159.          end if;
  1160.       end New_Node_Debugging_Output;
  1161.  
  1162.       pragma Inline (New_Node_Debugging_Output);
  1163.  
  1164.    --  Start of processing for New_Node
  1165.  
  1166.    begin
  1167.       pragma Assert (New_Node_Kind not in N_Entity);
  1168.       Nodes.Increment_Last;
  1169.       Nodes.Table (Nodes.Last)        := Default_Node;
  1170.       Nodes.Table (Nodes.Last).Nkind  := New_Node_Kind;
  1171.       Nodes.Table (Nodes.Last).Sloc   := New_Sloc;
  1172.       pragma Debug (New_Node_Debugging_Output);
  1173.       Fatal_Error_Node := Nodes.Last;
  1174.       Node_Count := Node_Count + 1;
  1175.       return Nodes.Last;
  1176.    end New_Node;
  1177.  
  1178.    -----------
  1179.    -- Nkind --
  1180.    -----------
  1181.  
  1182.    function Nkind (N : Node_Id) return Node_Kind is
  1183.    begin
  1184.       return Nodes.Table (N).Nkind;
  1185.    end Nkind;
  1186.  
  1187.    --------
  1188.    -- No --
  1189.    --------
  1190.  
  1191.    function No (N : Node_Id) return Boolean is
  1192.    begin
  1193.       return N = Empty;
  1194.    end No;
  1195.  
  1196.    -------------------
  1197.    -- Nodes_Address --
  1198.    -------------------
  1199.  
  1200.    function Nodes_Address return System.Address is
  1201.    begin
  1202.       return Nodes.Table (First_Node_Id)'Address;
  1203.    end Nodes_Address;
  1204.  
  1205.    ---------------
  1206.    -- Num_Nodes --
  1207.    ---------------
  1208.  
  1209.    function Num_Nodes return Nat is
  1210.    begin
  1211.       return Node_Count;
  1212.    end Num_Nodes;
  1213.  
  1214.    -------------------
  1215.    -- Original_Node --
  1216.    -------------------
  1217.  
  1218.    function Original_Node (Node : Node_Id) return Node_Id is
  1219.       Index : Hash_Entry_Id;
  1220.  
  1221.    begin
  1222.       --  For a node inserted by Rewrite_Ins, the original tree is Empty
  1223.  
  1224.       if Nodes.Table (Node).Rewrite_Ins then
  1225.          return Empty;
  1226.  
  1227.       --  For a node rewritten by Rewrite_Substitute_Tree, search the hash
  1228.       --  table to find the original node that matches the given node.
  1229.  
  1230.       elsif Nodes.Table (Node).Rewrite_Sub then
  1231.  
  1232.          Index := Hash_Headers (Int (Node) mod Num_Hash_Headers);
  1233.  
  1234.          loop
  1235.             pragma Assert (Index /= No_Entry);
  1236.  
  1237.             if Node = Hash_Sub.Table (Index).New_Node then
  1238.                return Hash_Sub.Table (Index).Old_Node;
  1239.             else
  1240.                Index := Hash_Sub.Table (Index).Next;
  1241.             end if;
  1242.          end loop;
  1243.  
  1244.       --  If not rewritten, then return original node
  1245.  
  1246.       else
  1247.          return Node;
  1248.       end if;
  1249.    end Original_Node;
  1250.  
  1251.    -----------------
  1252.    -- Paren_Count --
  1253.    -----------------
  1254.  
  1255.    function Paren_Count (N : Node_Id) return Paren_Count_Type is
  1256.       C : Paren_Count_Type := 0;
  1257.  
  1258.    begin
  1259.       pragma Assert (N in Nodes.First .. Nodes.Last);
  1260.  
  1261.       if Nodes.Table (N).Pflag1 then
  1262.          C := C + 1;
  1263.       end if;
  1264.  
  1265.       if Nodes.Table (N).Pflag2 then
  1266.          C := C + 2;
  1267.       end if;
  1268.  
  1269.       return C;
  1270.    end Paren_Count;
  1271.  
  1272.    ------------
  1273.    -- Parent --
  1274.    ------------
  1275.  
  1276.    function Parent (N : Node_Id) return Node_Id is
  1277.    begin
  1278.       if Is_List_Member (N) then
  1279.          return Parent (List_Containing (N));
  1280.       else
  1281.          return Node_Id (Nodes.Table (N).Link);
  1282.       end if;
  1283.    end Parent;
  1284.  
  1285.    -------------
  1286.    -- Present --
  1287.    -------------
  1288.  
  1289.    function Present (N : Node_Id) return Boolean is
  1290.    begin
  1291.       return N /= Empty;
  1292.    end Present;
  1293.  
  1294.    -------------------
  1295.    -- Relocate_Node --
  1296.    -------------------
  1297.  
  1298.    function Relocate_Node (Source : Node_Id) return Node_Id is
  1299.       New_Node : Node_Id;
  1300.  
  1301.    begin
  1302.       if No (Source) then
  1303.          return Empty;
  1304.       end if;
  1305.  
  1306.       New_Node := New_Copy (Source);
  1307.       Fix_Parent (Field1 (Source), Source, New_Node);
  1308.       Fix_Parent (Field2 (Source), Source, New_Node);
  1309.       Fix_Parent (Field3 (Source), Source, New_Node);
  1310.       Fix_Parent (Field4 (Source), Source, New_Node);
  1311.       Fix_Parent (Field5 (Source), Source, New_Node);
  1312.  
  1313.       --  We now set the parent of the new node to be the same as the
  1314.       --  parent of the source. Almost always this parent will be
  1315.       --  replaced by a new value when the relocated node is reattached
  1316.       --  to the tree, but by doing it now, we ensure that this node is
  1317.       --  not even temporarily disconnected from the tree. Note that this
  1318.       --  does not happen free, because in the list case, the parent does
  1319.       --  not get set.
  1320.  
  1321.       Set_Parent (New_Node, Parent (Source));
  1322.       return New_Node;
  1323.    end Relocate_Node;
  1324.  
  1325.    -----------------------------
  1326.    -- Replace_Substitute_Tree --
  1327.    -----------------------------
  1328.  
  1329.    procedure Replace_Substitute_Tree (Old_Node, New_Node : Node_Id) is
  1330.       Old_Link    : constant Union_Id := Nodes.Table (Old_Node).Link;
  1331.       Old_In_List : constant Boolean  := Nodes.Table (Old_Node).In_List;
  1332.       Old_Err_Flg : constant Boolean  := Error_Posted (Old_Node);
  1333.  
  1334.    begin
  1335.       --  Never use Replace_Substitute_Tree on expression nodes, use
  1336.       --  Rewrite_Substitute_Tree instead, since otherwise conformance
  1337.       --  checks get messed up. We could make this an absolute rule,
  1338.       --  but that would probably be harsh, so just fix it on the fly.
  1339.  
  1340.       if Nkind (Old_Node) in N_Subexpr then
  1341.          Rewrite_Substitute_Tree (Old_Node, New_Node);
  1342.  
  1343.       --  Not a subexpression, OK to do replace
  1344.  
  1345.       else
  1346.          pragma Assert
  1347.            (not Has_Extension (Old_Node)
  1348.               and not Has_Extension (New_Node)
  1349.               and not Nodes.Table (New_Node).In_List);
  1350.  
  1351.          --  Do copy, preserving link and in list status
  1352.  
  1353.          Nodes.Table (Old_Node)         := Nodes.Table (New_Node);
  1354.          Nodes.Table (Old_Node).Link    := Old_Link;
  1355.          Nodes.Table (Old_Node).In_List := Old_In_List;
  1356.  
  1357.          Set_Error_Posted (Old_Node, Old_Err_Flg);
  1358.  
  1359.          --  Fix parents of substituted node, since it has changed identity
  1360.  
  1361.          Fix_Parent (Field1 (Old_Node), New_Node, Old_Node);
  1362.          Fix_Parent (Field2 (Old_Node), New_Node, Old_Node);
  1363.          Fix_Parent (Field3 (Old_Node), New_Node, Old_Node);
  1364.          Fix_Parent (Field4 (Old_Node), New_Node, Old_Node);
  1365.          Fix_Parent (Field5 (Old_Node), New_Node, Old_Node);
  1366.  
  1367.          --  Finally delete the source, since it is now copied
  1368.  
  1369.          Delete_Node (New_Node);
  1370.       end if;
  1371.  
  1372.    end Replace_Substitute_Tree;
  1373.  
  1374.    -----------------------------
  1375.    -- Rewrite_Substitute_Tree --
  1376.    -----------------------------
  1377.  
  1378.    procedure Rewrite_Substitute_Tree (Old_Node, New_Node : Node_Id) is
  1379.       Old_Link    : constant Union_Id := Nodes.Table (Old_Node).Link;
  1380.       Old_In_List : constant Boolean  := Nodes.Table (Old_Node).In_List;
  1381.       Sav_Node    : Node_Id;
  1382.  
  1383.    begin
  1384.       pragma Assert
  1385.         (not Has_Extension (Old_Node)
  1386.            and not Has_Extension (New_Node)
  1387.            and not Nodes.Table (New_Node).In_List);
  1388.  
  1389.       --  Allocate a new node, to be used to preserve the original contents
  1390.       --  of the Old_Node, for possible later retrival by Original_Node.
  1391.  
  1392.       Nodes.Increment_Last;
  1393.       Node_Count := Node_Count + 1;
  1394.       Sav_Node := Nodes.Last;
  1395.       Nodes.Table (Sav_Node)         := Nodes.Table (Old_Node);
  1396.       Nodes.Table (Sav_Node).In_List := False;
  1397.       Nodes.Table (Sav_Node).Link    := Union_Id (Empty);
  1398.  
  1399.       --  Copy substitute node into place, preserving old link and in-list flag
  1400.  
  1401.       Nodes.Table (Old_Node)         := Nodes.Table (New_Node);
  1402.       Nodes.Table (Old_Node).Link    := Old_Link;
  1403.       Nodes.Table (Old_Node).In_List := Old_In_List;
  1404.  
  1405.       Set_Error_Posted (Old_Node, Error_Posted (Sav_Node));
  1406.  
  1407.       --  Set flag indicating that node has been rewritten and fixup parent
  1408.       --  pointers for the substituted node, since it has changed its identity
  1409.  
  1410.       Nodes.Table (Old_Node).Rewrite_Sub := True;
  1411.  
  1412.       --  Preserve parenthesized state of original (helps -gnatdg listing)
  1413.  
  1414.       if Nkind (Sav_Node) in N_Subexpr
  1415.         and then Paren_Count (Sav_Node) /= 0
  1416.         and then Nkind (New_Node) in N_Subexpr
  1417.       then
  1418.          Set_Paren_Count (New_Node, 1);
  1419.       end if;
  1420.  
  1421.       Fix_Parent (Field1 (Old_Node), New_Node, Old_Node);
  1422.       Fix_Parent (Field2 (Old_Node), New_Node, Old_Node);
  1423.       Fix_Parent (Field3 (Old_Node), New_Node, Old_Node);
  1424.       Fix_Parent (Field4 (Old_Node), New_Node, Old_Node);
  1425.       Fix_Parent (Field5 (Old_Node), New_Node, Old_Node);
  1426.  
  1427.       --  Now, make an entry in the hash table. Note that we overwrite any
  1428.       --  existing entry that references Old_Node. This allows multiple steps
  1429.       --  of substitutions, and we will always get the real original.
  1430.  
  1431.       declare
  1432.          Hash_Code : constant Nat  := Int (Old_Node) mod Num_Hash_Headers;
  1433.          Index     : Hash_Entry_Id := Hash_Headers (Hash_Code);
  1434.  
  1435.       begin
  1436.          --  If the hash table is empty, make a new entry
  1437.  
  1438.          if Index = No_Entry then
  1439.             Hash_Sub.Increment_Last;
  1440.             Hash_Headers (Hash_Code) := Hash_Sub.Last;
  1441.             Hash_Sub.Table (Hash_Sub.Last).Next     := No_Entry;
  1442.             Hash_Sub.Table (Hash_Sub.Last).New_Node := Old_Node;
  1443.             Hash_Sub.Table (Hash_Sub.Last).Old_Node := Sav_Node;
  1444.  
  1445.          else
  1446.             loop
  1447.                --  If we already have an entry in the hash table for this node,
  1448.                --  it means that we already replaced it once, and the entry in
  1449.                --  the hash table should remain unchanged, indicating the node
  1450.                --  contents before the first Rewrite_Substitute_Tree call. In
  1451.                --  this case we don't need Sav_Node after all and can simply
  1452.                --  undo its allocation.
  1453.  
  1454.                if Hash_Sub.Table (Index).New_Node = Old_Node then
  1455.                   Nodes.Decrement_Last;
  1456.                   return;
  1457.  
  1458.                --  If end of hash chain, insert new entry
  1459.  
  1460.                elsif Hash_Sub.Table (Index).Next = No_Entry then
  1461.                   Hash_Sub.Increment_Last;
  1462.                   Hash_Sub.Table (Index).Next := Hash_Sub.Last;
  1463.                   Hash_Sub.Table (Hash_Sub.Last).Next     := No_Entry;
  1464.                   Hash_Sub.Table (Hash_Sub.Last).New_Node := Old_Node;
  1465.                   Hash_Sub.Table (Hash_Sub.Last).Old_Node := Sav_Node;
  1466.                   return;
  1467.  
  1468.                --  Otherwise move out on hash chain
  1469.  
  1470.                else
  1471.                   Index := Hash_Sub.Table (Index).Next;
  1472.                end if;
  1473.             end loop;
  1474.          end if;
  1475.       end;
  1476.  
  1477.    end Rewrite_Substitute_Tree;
  1478.  
  1479.    -----------------------------------
  1480.    -- Set_Comes_From_Source_Default --
  1481.    -----------------------------------
  1482.  
  1483.    procedure Set_Comes_From_Source_Default (Default : Boolean) is
  1484.    begin
  1485.       Default_Node.Comes_From_Source := Default;
  1486.    end Set_Comes_From_Source_Default;
  1487.  
  1488.    --------------------
  1489.    -- Set_Convention --
  1490.    --------------------
  1491.  
  1492.    procedure Set_Convention  (N : Node_Id; Val : Convention_Id) is
  1493.    begin
  1494.       pragma Assert (Nkind (N) in N_Entity);
  1495.       To_Flag_Word_Ptr
  1496.         (Union_Id_Ptr'
  1497.           (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Convention :=
  1498.                                                                         Val;
  1499.    end Set_Convention;
  1500.  
  1501.    ---------------
  1502.    -- Set_Ekind --
  1503.    ---------------
  1504.  
  1505.    procedure Set_Ekind (N : Node_Id; Val : Entity_Kind) is
  1506.    begin
  1507.       pragma Assert (Nkind (N) in N_Entity);
  1508.       Nodes.Table (N + 1).Nkind := E_To_N (Val);
  1509.    end Set_Ekind;
  1510.  
  1511.    ---------------------
  1512.    -- Set_Paren_Count --
  1513.    ---------------------
  1514.  
  1515.    procedure Set_Paren_Count (N : Node_Id; Val : Paren_Count_Type) is
  1516.    begin
  1517.       pragma Assert (Nkind (N) in N_Subexpr);
  1518.       Nodes.Table (N).Pflag1 := (Val mod 2 /= 0);
  1519.       Nodes.Table (N).Pflag2 := (Val >= 2);
  1520.    end Set_Paren_Count;
  1521.  
  1522.    ----------------
  1523.    -- Set_Parent --
  1524.    ----------------
  1525.  
  1526.    procedure Set_Parent (N : Node_Id; Val : Node_Id) is
  1527.    begin
  1528.       pragma Assert (not Nodes.Table (N).In_List);
  1529.       Nodes.Table (N).Link := Union_Id (Val);
  1530.    end Set_Parent;
  1531.  
  1532.    --------------
  1533.    -- Set_Sloc --
  1534.    --------------
  1535.  
  1536.    procedure Set_Sloc (N : Node_Id; Val : Source_Ptr) is
  1537.    begin
  1538.       Nodes.Table (N).Sloc := Val;
  1539.    end Set_Sloc;
  1540.  
  1541.    ----------
  1542.    -- Sloc --
  1543.    ----------
  1544.  
  1545.    function Sloc (N : Node_Id) return Source_Ptr is
  1546.    begin
  1547.       return Nodes.Table (N).Sloc;
  1548.    end Sloc;
  1549.  
  1550.    ---------------
  1551.    -- Tree_Read --
  1552.    ---------------
  1553.  
  1554.    procedure Tree_Read is
  1555.    begin
  1556.       Tree_Read_Int (Node_Count);
  1557.       Nodes.Tree_Read;
  1558.       Hash_Sub.Tree_Read;
  1559.  
  1560.       Tree_Read_Data
  1561.         (Hash_Headers'Address,
  1562.          Hash_Headers'Length * (Hash_Entry_Id'Size / Storage_Unit));
  1563.  
  1564.    end Tree_Read;
  1565.  
  1566.    ----------------
  1567.    -- Tree_Write --
  1568.    ----------------
  1569.  
  1570.    procedure Tree_Write is
  1571.    begin
  1572.       Tree_Write_Int (Node_Count);
  1573.       Nodes.Tree_Write;
  1574.       Hash_Sub.Tree_Write;
  1575.  
  1576.       Tree_Write_Data
  1577.         (Hash_Headers'Address,
  1578.          Hash_Headers'Length * (Hash_Entry_Id'Size / Storage_Unit));
  1579.  
  1580.    end Tree_Write;
  1581.  
  1582.    ------------------------------
  1583.    -- Unchecked Access Package --
  1584.    ------------------------------
  1585.  
  1586.    package body Unchecked_Access is
  1587.  
  1588.       function Field1 (N : Node_Id) return Union_Id is
  1589.       begin
  1590.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1591.          return Nodes.Table (N).Field1;
  1592.       end Field1;
  1593.  
  1594.       function Field2 (N : Node_Id) return Union_Id is
  1595.       begin
  1596.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1597.          return Nodes.Table (N).Field2;
  1598.       end Field2;
  1599.  
  1600.       function Field3 (N : Node_Id) return Union_Id is
  1601.       begin
  1602.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1603.          return Nodes.Table (N).Field3;
  1604.       end Field3;
  1605.  
  1606.       function Field4 (N : Node_Id) return Union_Id is
  1607.       begin
  1608.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1609.          return Nodes.Table (N).Field4;
  1610.       end Field4;
  1611.  
  1612.       function Field5 (N : Node_Id) return Union_Id is
  1613.       begin
  1614.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1615.          return Nodes.Table (N).Field5;
  1616.       end Field5;
  1617.  
  1618.       function Field6 (N : Node_Id) return Union_Id is
  1619.       begin
  1620.          pragma Assert (Nkind (N) in N_Entity);
  1621.          return Nodes.Table (N + 1).Field6;
  1622.       end Field6;
  1623.  
  1624.       function Field7 (N : Node_Id) return Union_Id is
  1625.       begin
  1626.          pragma Assert (Nkind (N) in N_Entity);
  1627.          return Nodes.Table (N + 1).Field7;
  1628.       end Field7;
  1629.  
  1630.       function Field8 (N : Node_Id) return Union_Id is
  1631.       begin
  1632.          pragma Assert (Nkind (N) in N_Entity);
  1633.          return Nodes.Table (N + 1).Field8;
  1634.       end Field8;
  1635.  
  1636.       function Field9 (N : Node_Id) return Union_Id is
  1637.       begin
  1638.          pragma Assert (Nkind (N) in N_Entity);
  1639.          return Nodes.Table (N + 1).Field9;
  1640.       end Field9;
  1641.  
  1642.       function Field10 (N : Node_Id) return Union_Id is
  1643.       begin
  1644.          pragma Assert (Nkind (N) in N_Entity);
  1645.          return Nodes.Table (N + 1).Field10;
  1646.       end Field10;
  1647.  
  1648.       function Field11 (N : Node_Id) return Union_Id is
  1649.       begin
  1650.          pragma Assert (Nkind (N) in N_Entity);
  1651.          return Nodes.Table (N + 1).Field11;
  1652.       end Field11;
  1653.  
  1654.       function Field12 (N : Node_Id) return Union_Id is
  1655.       begin
  1656.          pragma Assert (Nkind (N) in N_Entity);
  1657.          return Nodes.Table (N + 1).Field12;
  1658.       end Field12;
  1659.  
  1660.       function Field13 (N : Node_Id) return Union_Id is
  1661.       begin
  1662.          pragma Assert (Nkind (N) in N_Entity);
  1663.          return Nodes.Table (N + 2).Field6;
  1664.       end Field13;
  1665.  
  1666.       function Field14 (N : Node_Id) return Union_Id is
  1667.       begin
  1668.          pragma Assert (Nkind (N) in N_Entity);
  1669.          return Nodes.Table (N + 2).Field7;
  1670.       end Field14;
  1671.  
  1672.       function Field15 (N : Node_Id) return Union_Id is
  1673.       begin
  1674.          pragma Assert (Nkind (N) in N_Entity);
  1675.          return Nodes.Table (N + 2).Field8;
  1676.       end Field15;
  1677.  
  1678.       function Field16 (N : Node_Id) return Union_Id is
  1679.       begin
  1680.          pragma Assert (Nkind (N) in N_Entity);
  1681.          return Nodes.Table (N + 2).Field9;
  1682.       end Field16;
  1683.  
  1684.       function Field17 (N : Node_Id) return Union_Id is
  1685.       begin
  1686.          pragma Assert (Nkind (N) in N_Entity);
  1687.          return Nodes.Table (N + 2).Field10;
  1688.       end Field17;
  1689.  
  1690.       function Field18 (N : Node_Id) return Union_Id is
  1691.       begin
  1692.          pragma Assert (Nkind (N) in N_Entity);
  1693.          return Nodes.Table (N + 2).Field11;
  1694.       end Field18;
  1695.  
  1696.       function Field19 (N : Node_Id) return Union_Id is
  1697.       begin
  1698.          pragma Assert (Nkind (N) in N_Entity);
  1699.          return Nodes.Table (N + 3).Field6;
  1700.       end Field19;
  1701.  
  1702.       function Field20 (N : Node_Id) return Union_Id is
  1703.       begin
  1704.          pragma Assert (Nkind (N) in N_Entity);
  1705.          return Nodes.Table (N + 3).Field7;
  1706.       end Field20;
  1707.  
  1708.       function Field21 (N : Node_Id) return Union_Id is
  1709.       begin
  1710.          pragma Assert (Nkind (N) in N_Entity);
  1711.          return Nodes.Table (N + 3).Field8;
  1712.       end Field21;
  1713.  
  1714.       function Field22 (N : Node_Id) return Union_Id is
  1715.       begin
  1716.          pragma Assert (Nkind (N) in N_Entity);
  1717.          return Nodes.Table (N + 3).Field9;
  1718.       end Field22;
  1719.  
  1720.       function Node1 (N : Node_Id) return Node_Id is
  1721.       begin
  1722.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1723.          return Node_Id (Nodes.Table (N).Field1);
  1724.       end Node1;
  1725.  
  1726.       function Node2 (N : Node_Id) return Node_Id is
  1727.       begin
  1728.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1729.          return Node_Id (Nodes.Table (N).Field2);
  1730.       end Node2;
  1731.  
  1732.       function Node3 (N : Node_Id) return Node_Id is
  1733.       begin
  1734.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1735.          return Node_Id (Nodes.Table (N).Field3);
  1736.       end Node3;
  1737.  
  1738.       function Node4 (N : Node_Id) return Node_Id is
  1739.       begin
  1740.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1741.          return Node_Id (Nodes.Table (N).Field4);
  1742.       end Node4;
  1743.  
  1744.       function Node5 (N : Node_Id) return Node_Id is
  1745.       begin
  1746.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1747.          return Node_Id (Nodes.Table (N).Field5);
  1748.       end Node5;
  1749.  
  1750.       function Node6 (N : Node_Id) return Node_Id is
  1751.       begin
  1752.          pragma Assert (Nkind (N) in N_Entity);
  1753.          return Node_Id (Nodes.Table (N + 1).Field6);
  1754.       end Node6;
  1755.  
  1756.       function Node7 (N : Node_Id) return Node_Id is
  1757.       begin
  1758.          pragma Assert (Nkind (N) in N_Entity);
  1759.          return Node_Id (Nodes.Table (N + 1).Field7);
  1760.       end Node7;
  1761.  
  1762.       function Node8 (N : Node_Id) return Node_Id is
  1763.       begin
  1764.          pragma Assert (Nkind (N) in N_Entity);
  1765.          return Node_Id (Nodes.Table (N + 1).Field8);
  1766.       end Node8;
  1767.  
  1768.       function Node9 (N : Node_Id) return Node_Id is
  1769.       begin
  1770.          pragma Assert (Nkind (N) in N_Entity);
  1771.          return Node_Id (Nodes.Table (N + 1).Field9);
  1772.       end Node9;
  1773.  
  1774.       function Node10 (N : Node_Id) return Node_Id is
  1775.       begin
  1776.          pragma Assert (Nkind (N) in N_Entity);
  1777.          return Node_Id (Nodes.Table (N + 1).Field10);
  1778.       end Node10;
  1779.  
  1780.       function Node11 (N : Node_Id) return Node_Id is
  1781.       begin
  1782.          pragma Assert (Nkind (N) in N_Entity);
  1783.          return Node_Id (Nodes.Table (N + 1).Field11);
  1784.       end Node11;
  1785.  
  1786.       function Node12 (N : Node_Id) return Node_Id is
  1787.       begin
  1788.          pragma Assert (Nkind (N) in N_Entity);
  1789.          return Node_Id (Nodes.Table (N + 1).Field12);
  1790.       end Node12;
  1791.  
  1792.       function Node13 (N : Node_Id) return Node_Id is
  1793.       begin
  1794.          pragma Assert (Nkind (N) in N_Entity);
  1795.          return Node_Id (Nodes.Table (N + 2).Field6);
  1796.       end Node13;
  1797.  
  1798.       function Node14 (N : Node_Id) return Node_Id is
  1799.       begin
  1800.          pragma Assert (Nkind (N) in N_Entity);
  1801.          return Node_Id (Nodes.Table (N + 2).Field7);
  1802.       end Node14;
  1803.  
  1804.       function Node15 (N : Node_Id) return Node_Id is
  1805.       begin
  1806.          pragma Assert (Nkind (N) in N_Entity);
  1807.          return Node_Id (Nodes.Table (N + 2).Field8);
  1808.       end Node15;
  1809.  
  1810.       function Node16 (N : Node_Id) return Node_Id is
  1811.       begin
  1812.          pragma Assert (Nkind (N) in N_Entity);
  1813.          return Node_Id (Nodes.Table (N + 2).Field9);
  1814.       end Node16;
  1815.  
  1816.       function Node17 (N : Node_Id) return Node_Id is
  1817.       begin
  1818.          pragma Assert (Nkind (N) in N_Entity);
  1819.          return Node_Id (Nodes.Table (N + 2).Field10);
  1820.       end Node17;
  1821.  
  1822.       function Node18 (N : Node_Id) return Node_Id is
  1823.       begin
  1824.          pragma Assert (Nkind (N) in N_Entity);
  1825.          return Node_Id (Nodes.Table (N + 2).Field11);
  1826.       end Node18;
  1827.  
  1828.       function Node19 (N : Node_Id) return Node_Id is
  1829.       begin
  1830.          pragma Assert (Nkind (N) in N_Entity);
  1831.          return Node_Id (Nodes.Table (N + 3).Field6);
  1832.       end Node19;
  1833.  
  1834.       function Node20 (N : Node_Id) return Node_Id is
  1835.       begin
  1836.          pragma Assert (Nkind (N) in N_Entity);
  1837.          return Node_Id (Nodes.Table (N + 3).Field7);
  1838.       end Node20;
  1839.  
  1840.       function Node21 (N : Node_Id) return Node_Id is
  1841.       begin
  1842.          pragma Assert (Nkind (N) in N_Entity);
  1843.          return Node_Id (Nodes.Table (N + 3).Field8);
  1844.       end Node21;
  1845.  
  1846.       function Node22 (N : Node_Id) return Node_Id is
  1847.       begin
  1848.          pragma Assert (Nkind (N) in N_Entity);
  1849.          return Node_Id (Nodes.Table (N + 3).Field9);
  1850.       end Node22;
  1851.  
  1852.       function List1 (N : Node_Id) return List_Id is
  1853.       begin
  1854.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1855.          return List_Id (Nodes.Table (N).Field1);
  1856.       end List1;
  1857.  
  1858.       function List2 (N : Node_Id) return List_Id is
  1859.       begin
  1860.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1861.          return List_Id (Nodes.Table (N).Field2);
  1862.       end List2;
  1863.  
  1864.       function List3 (N : Node_Id) return List_Id is
  1865.       begin
  1866.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1867.          return List_Id (Nodes.Table (N).Field3);
  1868.       end List3;
  1869.  
  1870.       function List4 (N : Node_Id) return List_Id is
  1871.       begin
  1872.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1873.          return List_Id (Nodes.Table (N).Field4);
  1874.       end List4;
  1875.  
  1876.       function List5 (N : Node_Id) return List_Id is
  1877.       begin
  1878.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1879.          return List_Id (Nodes.Table (N).Field5);
  1880.       end List5;
  1881.  
  1882.       function Elist3 (N : Node_Id) return Elist_Id is
  1883.       begin
  1884.          return Elist_Id (Nodes.Table (N).Field3);
  1885.       end Elist3;
  1886.  
  1887.       function Elist6 (N : Node_Id) return Elist_Id is
  1888.       begin
  1889.          pragma Assert (Nkind (N) in N_Entity);
  1890.          return Elist_Id (Nodes.Table (N + 1).Field6);
  1891.       end Elist6;
  1892.  
  1893.       function Elist7 (N : Node_Id) return Elist_Id is
  1894.       begin
  1895.          pragma Assert (Nkind (N) in N_Entity);
  1896.          return Elist_Id (Nodes.Table (N + 1).Field7);
  1897.       end Elist7;
  1898.  
  1899.       function Elist13 (N : Node_Id) return Elist_Id is
  1900.       begin
  1901.          pragma Assert (Nkind (N) in N_Entity);
  1902.          return Elist_Id (Nodes.Table (N + 2).Field6);
  1903.       end Elist13;
  1904.  
  1905.       function Name1 (N : Node_Id) return Name_Id is
  1906.       begin
  1907.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1908.          return Name_Id (Nodes.Table (N).Field1);
  1909.       end Name1;
  1910.  
  1911.       function Name2 (N : Node_Id) return Name_Id is
  1912.       begin
  1913.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1914.          return Name_Id (Nodes.Table (N).Field2);
  1915.       end Name2;
  1916.  
  1917.       function Str3 (N : Node_Id) return String_Id is
  1918.       begin
  1919.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1920.          return String_Id (Nodes.Table (N).Field3);
  1921.       end Str3;
  1922.  
  1923.       function Char_Code2 (N : Node_Id) return Char_Code is
  1924.       begin
  1925.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1926.          return Char_Code (Nodes.Table (N).Field2 - Char_Code_Bias);
  1927.       end Char_Code2;
  1928.  
  1929.       function Uint3 (N : Node_Id) return Uint is
  1930.       begin
  1931.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1932.          return From_Union (Nodes.Table (N).Field3);
  1933.       end Uint3;
  1934.  
  1935.       function Uint4 (N : Node_Id) return Uint is
  1936.       begin
  1937.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1938.          return From_Union (Nodes.Table (N).Field4);
  1939.       end Uint4;
  1940.  
  1941.       function Uint8 (N : Node_Id) return Uint is
  1942.       begin
  1943.          pragma Assert (Nkind (N) in N_Entity);
  1944.          return From_Union (Nodes.Table (N + 1).Field8);
  1945.       end Uint8;
  1946.  
  1947.       function Uint9 (N : Node_Id) return Uint is
  1948.       begin
  1949.          pragma Assert (Nkind (N) in N_Entity);
  1950.          return From_Union (Nodes.Table (N + 1).Field9);
  1951.       end Uint9;
  1952.  
  1953.       function Uint11 (N : Node_Id) return Uint is
  1954.       begin
  1955.          pragma Assert (Nkind (N) in N_Entity);
  1956.          return From_Union (Nodes.Table (N + 1).Field11);
  1957.       end Uint11;
  1958.  
  1959.       function Uint12 (N : Node_Id) return Uint is
  1960.       begin
  1961.          pragma Assert (Nkind (N) in N_Entity);
  1962.          return From_Union (Nodes.Table (N + 1).Field12);
  1963.       end Uint12;
  1964.  
  1965.       function Uint15 (N : Node_Id) return Uint is
  1966.       begin
  1967.          pragma Assert (Nkind (N) in N_Entity);
  1968.          return From_Union (Nodes.Table (N + 2).Field8);
  1969.       end Uint15;
  1970.  
  1971.       function Ureal3 (N : Node_Id) return Ureal is
  1972.       begin
  1973.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1974.          return From_Union (Nodes.Table (N).Field3);
  1975.       end Ureal3;
  1976.  
  1977.       function Ureal6 (N : Node_Id) return Ureal is
  1978.       begin
  1979.          pragma Assert (Nkind (N) in N_Entity);
  1980.          return From_Union (Nodes.Table (N + 1).Field6);
  1981.       end Ureal6;
  1982.  
  1983.       function Ureal7 (N : Node_Id) return Ureal is
  1984.       begin
  1985.          pragma Assert (Nkind (N) in N_Entity);
  1986.          return From_Union (Nodes.Table (N + 1).Field7);
  1987.       end Ureal7;
  1988.  
  1989.       function Flag1 (N : Node_Id) return Boolean is
  1990.       begin
  1991.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1992.          return Nodes.Table (N).Flag1;
  1993.       end Flag1;
  1994.  
  1995.       function Flag3 (N : Node_Id) return Boolean is
  1996.       begin
  1997.          pragma Assert (N in Nodes.First .. Nodes.Last);
  1998.          return Nodes.Table (N).Flag3;
  1999.       end Flag3;
  2000.  
  2001.       function Flag4 (N : Node_Id) return Boolean is
  2002.       begin
  2003.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2004.          return Nodes.Table (N).Flag4;
  2005.       end Flag4;
  2006.  
  2007.       function Flag5 (N : Node_Id) return Boolean is
  2008.       begin
  2009.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2010.          return Nodes.Table (N).Flag5;
  2011.       end Flag5;
  2012.  
  2013.       function Flag6 (N : Node_Id) return Boolean is
  2014.       begin
  2015.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2016.          return Nodes.Table (N).Flag6;
  2017.       end Flag6;
  2018.  
  2019.       function Flag7 (N : Node_Id) return Boolean is
  2020.       begin
  2021.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2022.          return Nodes.Table (N).Flag7;
  2023.       end Flag7;
  2024.  
  2025.       function Flag8 (N : Node_Id) return Boolean is
  2026.       begin
  2027.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2028.          return Nodes.Table (N).Flag8;
  2029.       end Flag8;
  2030.  
  2031.       function Flag9 (N : Node_Id) return Boolean is
  2032.       begin
  2033.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2034.          return Nodes.Table (N).Flag9;
  2035.       end Flag9;
  2036.  
  2037.       function Flag10 (N : Node_Id) return Boolean is
  2038.       begin
  2039.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2040.          return Nodes.Table (N).Flag10;
  2041.       end Flag10;
  2042.  
  2043.       function Flag11 (N : Node_Id) return Boolean is
  2044.       begin
  2045.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2046.          return Nodes.Table (N).Flag11;
  2047.       end Flag11;
  2048.  
  2049.       function Flag12 (N : Node_Id) return Boolean is
  2050.       begin
  2051.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2052.          return Nodes.Table (N).Flag12;
  2053.       end Flag12;
  2054.  
  2055.       function Flag13 (N : Node_Id) return Boolean is
  2056.       begin
  2057.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2058.          return Nodes.Table (N).Flag13;
  2059.       end Flag13;
  2060.  
  2061.       function Flag14 (N : Node_Id) return Boolean is
  2062.       begin
  2063.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2064.          return Nodes.Table (N).Flag14;
  2065.       end Flag14;
  2066.  
  2067.       function Flag15 (N : Node_Id) return Boolean is
  2068.       begin
  2069.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2070.          return Nodes.Table (N).Flag15;
  2071.       end Flag15;
  2072.  
  2073.       function Flag16 (N : Node_Id) return Boolean is
  2074.       begin
  2075.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2076.          return Nodes.Table (N).Flag16;
  2077.       end Flag16;
  2078.  
  2079.       function Flag17 (N : Node_Id) return Boolean is
  2080.       begin
  2081.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2082.          return Nodes.Table (N).Flag17;
  2083.       end Flag17;
  2084.  
  2085.       function Flag18 (N : Node_Id) return Boolean is
  2086.       begin
  2087.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2088.          return Nodes.Table (N).Flag18;
  2089.       end Flag18;
  2090.  
  2091.       function Flag19 (N : Node_Id) return Boolean is
  2092.       begin
  2093.          pragma Assert (Nkind (N) in N_Entity);
  2094.          return Nodes.Table (N + 1).In_List;
  2095.       end Flag19;
  2096.  
  2097.       function Flag20 (N : Node_Id) return Boolean is
  2098.       begin
  2099.          pragma Assert (Nkind (N) in N_Entity);
  2100.          return Nodes.Table (N + 1).Rewrite_Sub;
  2101.       end Flag20;
  2102.  
  2103.       function Flag21 (N : Node_Id) return Boolean is
  2104.       begin
  2105.          pragma Assert (Nkind (N) in N_Entity);
  2106.          return Nodes.Table (N + 1).Rewrite_Ins;
  2107.       end Flag21;
  2108.  
  2109.       function Flag22 (N : Node_Id) return Boolean is
  2110.       begin
  2111.          pragma Assert (Nkind (N) in N_Entity);
  2112.          return Nodes.Table (N + 1).Flag1;
  2113.       end Flag22;
  2114.  
  2115.       function Flag23 (N : Node_Id) return Boolean is
  2116.       begin
  2117.          pragma Assert (Nkind (N) in N_Entity);
  2118.          return Nodes.Table (N + 1).Comes_From_Source;
  2119.       end Flag23;
  2120.  
  2121.       function Flag24 (N : Node_Id) return Boolean is
  2122.       begin
  2123.          pragma Assert (Nkind (N) in N_Entity);
  2124.          return Nodes.Table (N + 1).Flag3;
  2125.       end Flag24;
  2126.  
  2127.       function Flag25 (N : Node_Id) return Boolean is
  2128.       begin
  2129.          pragma Assert (Nkind (N) in N_Entity);
  2130.          return Nodes.Table (N + 1).Flag4;
  2131.       end Flag25;
  2132.  
  2133.       function Flag26 (N : Node_Id) return Boolean is
  2134.       begin
  2135.          pragma Assert (Nkind (N) in N_Entity);
  2136.          return Nodes.Table (N + 1).Flag5;
  2137.       end Flag26;
  2138.  
  2139.       function Flag27 (N : Node_Id) return Boolean is
  2140.       begin
  2141.          pragma Assert (Nkind (N) in N_Entity);
  2142.          return Nodes.Table (N + 1).Flag6;
  2143.       end Flag27;
  2144.  
  2145.       function Flag28 (N : Node_Id) return Boolean is
  2146.       begin
  2147.          pragma Assert (Nkind (N) in N_Entity);
  2148.          return Nodes.Table (N + 1).Flag7;
  2149.       end Flag28;
  2150.  
  2151.       function Flag29 (N : Node_Id) return Boolean is
  2152.       begin
  2153.          pragma Assert (Nkind (N) in N_Entity);
  2154.          return Nodes.Table (N + 1).Flag8;
  2155.       end Flag29;
  2156.  
  2157.       function Flag30 (N : Node_Id) return Boolean is
  2158.       begin
  2159.          pragma Assert (Nkind (N) in N_Entity);
  2160.          return Nodes.Table (N + 1).Flag9;
  2161.       end Flag30;
  2162.  
  2163.       function Flag31 (N : Node_Id) return Boolean is
  2164.       begin
  2165.          pragma Assert (Nkind (N) in N_Entity);
  2166.          return Nodes.Table (N + 1).Flag10;
  2167.       end Flag31;
  2168.  
  2169.       function Flag32 (N : Node_Id) return Boolean is
  2170.       begin
  2171.          pragma Assert (Nkind (N) in N_Entity);
  2172.          return Nodes.Table (N + 1).Flag11;
  2173.       end Flag32;
  2174.  
  2175.       function Flag33 (N : Node_Id) return Boolean is
  2176.       begin
  2177.          pragma Assert (Nkind (N) in N_Entity);
  2178.          return Nodes.Table (N + 1).Flag12;
  2179.       end Flag33;
  2180.  
  2181.       function Flag34 (N : Node_Id) return Boolean is
  2182.       begin
  2183.          pragma Assert (Nkind (N) in N_Entity);
  2184.          return Nodes.Table (N + 1).Flag13;
  2185.       end Flag34;
  2186.  
  2187.       function Flag35 (N : Node_Id) return Boolean is
  2188.       begin
  2189.          pragma Assert (Nkind (N) in N_Entity);
  2190.          return Nodes.Table (N + 1).Flag14;
  2191.       end Flag35;
  2192.  
  2193.       function Flag36 (N : Node_Id) return Boolean is
  2194.       begin
  2195.          pragma Assert (Nkind (N) in N_Entity);
  2196.          return Nodes.Table (N + 1).Flag15;
  2197.       end Flag36;
  2198.  
  2199.       function Flag37 (N : Node_Id) return Boolean is
  2200.       begin
  2201.          pragma Assert (Nkind (N) in N_Entity);
  2202.          return Nodes.Table (N + 1).Flag16;
  2203.       end Flag37;
  2204.  
  2205.       function Flag38 (N : Node_Id) return Boolean is
  2206.       begin
  2207.          pragma Assert (Nkind (N) in N_Entity);
  2208.          return Nodes.Table (N + 1).Flag17;
  2209.       end Flag38;
  2210.  
  2211.       function Flag39 (N : Node_Id) return Boolean is
  2212.       begin
  2213.          pragma Assert (Nkind (N) in N_Entity);
  2214.          return Nodes.Table (N + 1).Flag18;
  2215.       end Flag39;
  2216.  
  2217.       function Flag40 (N : Node_Id) return Boolean is
  2218.       begin
  2219.          pragma Assert (Nkind (N) in N_Entity);
  2220.          return Nodes.Table (N + 2).In_List;
  2221.       end Flag40;
  2222.  
  2223.       function Flag41 (N : Node_Id) return Boolean is
  2224.       begin
  2225.          pragma Assert (Nkind (N) in N_Entity);
  2226.          return Nodes.Table (N + 2).Rewrite_Sub;
  2227.       end Flag41;
  2228.  
  2229.       function Flag42 (N : Node_Id) return Boolean is
  2230.       begin
  2231.          pragma Assert (Nkind (N) in N_Entity);
  2232.          return Nodes.Table (N + 2).Rewrite_Ins;
  2233.       end Flag42;
  2234.  
  2235.       function Flag43 (N : Node_Id) return Boolean is
  2236.       begin
  2237.          pragma Assert (Nkind (N) in N_Entity);
  2238.          return Nodes.Table (N + 2).Flag1;
  2239.       end Flag43;
  2240.  
  2241.       function Flag44 (N : Node_Id) return Boolean is
  2242.       begin
  2243.          pragma Assert (Nkind (N) in N_Entity);
  2244.          return Nodes.Table (N + 2).Comes_From_Source;
  2245.       end Flag44;
  2246.  
  2247.       function Flag45 (N : Node_Id) return Boolean is
  2248.       begin
  2249.          pragma Assert (Nkind (N) in N_Entity);
  2250.          return Nodes.Table (N + 2).Flag3;
  2251.       end Flag45;
  2252.  
  2253.       function Flag46 (N : Node_Id) return Boolean is
  2254.       begin
  2255.          pragma Assert (Nkind (N) in N_Entity);
  2256.          return Nodes.Table (N + 2).Flag4;
  2257.       end Flag46;
  2258.  
  2259.       function Flag47 (N : Node_Id) return Boolean is
  2260.       begin
  2261.          pragma Assert (Nkind (N) in N_Entity);
  2262.          return Nodes.Table (N + 2).Flag5;
  2263.       end Flag47;
  2264.  
  2265.       function Flag48 (N : Node_Id) return Boolean is
  2266.       begin
  2267.          pragma Assert (Nkind (N) in N_Entity);
  2268.          return Nodes.Table (N + 2).Flag6;
  2269.       end Flag48;
  2270.  
  2271.       function Flag49 (N : Node_Id) return Boolean is
  2272.       begin
  2273.          pragma Assert (Nkind (N) in N_Entity);
  2274.          return Nodes.Table (N + 2).Flag7;
  2275.       end Flag49;
  2276.  
  2277.       function Flag50 (N : Node_Id) return Boolean is
  2278.       begin
  2279.          pragma Assert (Nkind (N) in N_Entity);
  2280.          return Nodes.Table (N + 2).Flag8;
  2281.       end Flag50;
  2282.  
  2283.       function Flag51 (N : Node_Id) return Boolean is
  2284.       begin
  2285.          pragma Assert (Nkind (N) in N_Entity);
  2286.          return Nodes.Table (N + 2).Flag9;
  2287.       end Flag51;
  2288.  
  2289.       function Flag52 (N : Node_Id) return Boolean is
  2290.       begin
  2291.          pragma Assert (Nkind (N) in N_Entity);
  2292.          return Nodes.Table (N + 2).Flag10;
  2293.       end Flag52;
  2294.  
  2295.       function Flag53 (N : Node_Id) return Boolean is
  2296.       begin
  2297.          pragma Assert (Nkind (N) in N_Entity);
  2298.          return Nodes.Table (N + 2).Flag11;
  2299.       end Flag53;
  2300.  
  2301.       function Flag54 (N : Node_Id) return Boolean is
  2302.       begin
  2303.          pragma Assert (Nkind (N) in N_Entity);
  2304.          return Nodes.Table (N + 2).Flag12;
  2305.       end Flag54;
  2306.  
  2307.       function Flag55 (N : Node_Id) return Boolean is
  2308.       begin
  2309.          pragma Assert (Nkind (N) in N_Entity);
  2310.          return Nodes.Table (N + 2).Flag13;
  2311.       end Flag55;
  2312.  
  2313.       function Flag56 (N : Node_Id) return Boolean is
  2314.       begin
  2315.          pragma Assert (Nkind (N) in N_Entity);
  2316.          return Nodes.Table (N + 2).Flag14;
  2317.       end Flag56;
  2318.  
  2319.       function Flag57 (N : Node_Id) return Boolean is
  2320.       begin
  2321.          pragma Assert (Nkind (N) in N_Entity);
  2322.          return Nodes.Table (N + 2).Flag15;
  2323.       end Flag57;
  2324.  
  2325.       function Flag58 (N : Node_Id) return Boolean is
  2326.       begin
  2327.          pragma Assert (Nkind (N) in N_Entity);
  2328.          return Nodes.Table (N + 2).Flag16;
  2329.       end Flag58;
  2330.  
  2331.       function Flag59 (N : Node_Id) return Boolean is
  2332.       begin
  2333.          pragma Assert (Nkind (N) in N_Entity);
  2334.          return Nodes.Table (N + 2).Flag17;
  2335.       end Flag59;
  2336.  
  2337.       function Flag60 (N : Node_Id) return Boolean is
  2338.       begin
  2339.          pragma Assert (Nkind (N) in N_Entity);
  2340.          return Nodes.Table (N + 2).Flag18;
  2341.       end Flag60;
  2342.  
  2343.       function Flag61 (N : Node_Id) return Boolean is
  2344.       begin
  2345.          pragma Assert (Nkind (N) in N_Entity);
  2346.          return Nodes.Table (N + 1).Pflag1;
  2347.       end Flag61;
  2348.  
  2349.       function Flag62 (N : Node_Id) return Boolean is
  2350.       begin
  2351.          pragma Assert (Nkind (N) in N_Entity);
  2352.          return Nodes.Table (N + 1).Pflag2;
  2353.       end Flag62;
  2354.  
  2355.       function Flag63 (N : Node_Id) return Boolean is
  2356.       begin
  2357.          pragma Assert (Nkind (N) in N_Entity);
  2358.          return Nodes.Table (N + 2).Pflag1;
  2359.       end Flag63;
  2360.  
  2361.       function Flag64 (N : Node_Id) return Boolean is
  2362.       begin
  2363.          pragma Assert (Nkind (N) in N_Entity);
  2364.          return Nodes.Table (N + 2).Pflag2;
  2365.       end Flag64;
  2366.  
  2367.       function Flag65 (N : Node_Id) return Boolean is
  2368.       begin
  2369.          pragma Assert (Nkind (N) in N_Entity);
  2370.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag65;
  2371.       end Flag65;
  2372.  
  2373.       function Flag66 (N : Node_Id) return Boolean is
  2374.       begin
  2375.          pragma Assert (Nkind (N) in N_Entity);
  2376.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag66;
  2377.       end Flag66;
  2378.  
  2379.       function Flag67 (N : Node_Id) return Boolean is
  2380.       begin
  2381.          pragma Assert (Nkind (N) in N_Entity);
  2382.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag67;
  2383.       end Flag67;
  2384.  
  2385.       function Flag68 (N : Node_Id) return Boolean is
  2386.       begin
  2387.          pragma Assert (Nkind (N) in N_Entity);
  2388.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag68;
  2389.       end Flag68;
  2390.  
  2391.       function Flag69 (N : Node_Id) return Boolean is
  2392.       begin
  2393.          pragma Assert (Nkind (N) in N_Entity);
  2394.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag69;
  2395.       end Flag69;
  2396.  
  2397.       function Flag70 (N : Node_Id) return Boolean is
  2398.       begin
  2399.          pragma Assert (Nkind (N) in N_Entity);
  2400.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag70;
  2401.       end Flag70;
  2402.  
  2403.       function Flag71 (N : Node_Id) return Boolean is
  2404.       begin
  2405.          pragma Assert (Nkind (N) in N_Entity);
  2406.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag71;
  2407.       end Flag71;
  2408.  
  2409.       function Flag72 (N : Node_Id) return Boolean is
  2410.       begin
  2411.          pragma Assert (Nkind (N) in N_Entity);
  2412.          return To_Flag_Byte (Nodes.Table (N + 2).Nkind).Flag72;
  2413.       end Flag72;
  2414.  
  2415.       function Flag73 (N : Node_Id) return Boolean is
  2416.       begin
  2417.          pragma Assert (Nkind (N) in N_Entity);
  2418.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag73;
  2419.       end Flag73;
  2420.  
  2421.       function Flag74 (N : Node_Id) return Boolean is
  2422.       begin
  2423.          pragma Assert (Nkind (N) in N_Entity);
  2424.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag74;
  2425.       end Flag74;
  2426.  
  2427.       function Flag75 (N : Node_Id) return Boolean is
  2428.       begin
  2429.          pragma Assert (Nkind (N) in N_Entity);
  2430.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag75;
  2431.       end Flag75;
  2432.  
  2433.       function Flag76 (N : Node_Id) return Boolean is
  2434.       begin
  2435.          pragma Assert (Nkind (N) in N_Entity);
  2436.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag76;
  2437.       end Flag76;
  2438.  
  2439.       function Flag77 (N : Node_Id) return Boolean is
  2440.       begin
  2441.          pragma Assert (Nkind (N) in N_Entity);
  2442.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag77;
  2443.       end Flag77;
  2444.  
  2445.       function Flag78 (N : Node_Id) return Boolean is
  2446.       begin
  2447.          pragma Assert (Nkind (N) in N_Entity);
  2448.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag78;
  2449.       end Flag78;
  2450.  
  2451.       function Flag79 (N : Node_Id) return Boolean is
  2452.       begin
  2453.          pragma Assert (Nkind (N) in N_Entity);
  2454.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag79;
  2455.       end Flag79;
  2456.  
  2457.       function Flag80 (N : Node_Id) return Boolean is
  2458.       begin
  2459.          pragma Assert (Nkind (N) in N_Entity);
  2460.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag80;
  2461.       end Flag80;
  2462.  
  2463.       function Flag81 (N : Node_Id) return Boolean is
  2464.       begin
  2465.          pragma Assert (Nkind (N) in N_Entity);
  2466.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag81;
  2467.       end Flag81;
  2468.  
  2469.       function Flag82 (N : Node_Id) return Boolean is
  2470.       begin
  2471.          pragma Assert (Nkind (N) in N_Entity);
  2472.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag82;
  2473.       end Flag82;
  2474.  
  2475.       function Flag83 (N : Node_Id) return Boolean is
  2476.       begin
  2477.          pragma Assert (Nkind (N) in N_Entity);
  2478.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag83;
  2479.       end Flag83;
  2480.  
  2481.       function Flag84 (N : Node_Id) return Boolean is
  2482.       begin
  2483.          pragma Assert (Nkind (N) in N_Entity);
  2484.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag84;
  2485.       end Flag84;
  2486.  
  2487.       function Flag85 (N : Node_Id) return Boolean is
  2488.       begin
  2489.          pragma Assert (Nkind (N) in N_Entity);
  2490.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag85;
  2491.       end Flag85;
  2492.  
  2493.       function Flag86 (N : Node_Id) return Boolean is
  2494.       begin
  2495.          pragma Assert (Nkind (N) in N_Entity);
  2496.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag86;
  2497.       end Flag86;
  2498.  
  2499.       function Flag87 (N : Node_Id) return Boolean is
  2500.       begin
  2501.          pragma Assert (Nkind (N) in N_Entity);
  2502.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag87;
  2503.       end Flag87;
  2504.  
  2505.       function Flag88 (N : Node_Id) return Boolean is
  2506.       begin
  2507.          pragma Assert (Nkind (N) in N_Entity);
  2508.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag88;
  2509.       end Flag88;
  2510.  
  2511.       function Flag89 (N : Node_Id) return Boolean is
  2512.       begin
  2513.          pragma Assert (Nkind (N) in N_Entity);
  2514.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag89;
  2515.       end Flag89;
  2516.  
  2517.       function Flag90 (N : Node_Id) return Boolean is
  2518.       begin
  2519.          pragma Assert (Nkind (N) in N_Entity);
  2520.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag90;
  2521.       end Flag90;
  2522.  
  2523.       function Flag91 (N : Node_Id) return Boolean is
  2524.       begin
  2525.          pragma Assert (Nkind (N) in N_Entity);
  2526.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag91;
  2527.       end Flag91;
  2528.  
  2529.       function Flag92 (N : Node_Id) return Boolean is
  2530.       begin
  2531.          pragma Assert (Nkind (N) in N_Entity);
  2532.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag92;
  2533.       end Flag92;
  2534.  
  2535.       function Flag93 (N : Node_Id) return Boolean is
  2536.       begin
  2537.          pragma Assert (Nkind (N) in N_Entity);
  2538.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag93;
  2539.       end Flag93;
  2540.  
  2541.       function Flag94 (N : Node_Id) return Boolean is
  2542.       begin
  2543.          pragma Assert (Nkind (N) in N_Entity);
  2544.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag94;
  2545.       end Flag94;
  2546.  
  2547.       function Flag95 (N : Node_Id) return Boolean is
  2548.       begin
  2549.          pragma Assert (Nkind (N) in N_Entity);
  2550.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag95;
  2551.       end Flag95;
  2552.  
  2553.       function Flag96 (N : Node_Id) return Boolean is
  2554.       begin
  2555.          pragma Assert (Nkind (N) in N_Entity);
  2556.          return To_Flag_Word (Nodes.Table (N + 2).Field12).Flag96;
  2557.       end Flag96;
  2558.  
  2559.       function Flag97 (N : Node_Id) return Boolean is
  2560.       begin
  2561.          pragma Assert (Nkind (N) in N_Entity);
  2562.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag97;
  2563.       end Flag97;
  2564.  
  2565.       function Flag98 (N : Node_Id) return Boolean is
  2566.       begin
  2567.          pragma Assert (Nkind (N) in N_Entity);
  2568.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag98;
  2569.       end Flag98;
  2570.  
  2571.       function Flag99 (N : Node_Id) return Boolean is
  2572.       begin
  2573.          pragma Assert (Nkind (N) in N_Entity);
  2574.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag99;
  2575.       end Flag99;
  2576.  
  2577.       function Flag100 (N : Node_Id) return Boolean is
  2578.       begin
  2579.          pragma Assert (Nkind (N) in N_Entity);
  2580.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag100;
  2581.       end Flag100;
  2582.  
  2583.       function Flag101 (N : Node_Id) return Boolean is
  2584.       begin
  2585.          pragma Assert (Nkind (N) in N_Entity);
  2586.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag101;
  2587.       end Flag101;
  2588.  
  2589.       function Flag102 (N : Node_Id) return Boolean is
  2590.       begin
  2591.          pragma Assert (Nkind (N) in N_Entity);
  2592.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag102;
  2593.       end Flag102;
  2594.  
  2595.       function Flag103 (N : Node_Id) return Boolean is
  2596.       begin
  2597.          pragma Assert (Nkind (N) in N_Entity);
  2598.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag103;
  2599.       end Flag103;
  2600.  
  2601.       function Flag104 (N : Node_Id) return Boolean is
  2602.       begin
  2603.          pragma Assert (Nkind (N) in N_Entity);
  2604.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag104;
  2605.       end Flag104;
  2606.  
  2607.       function Flag105 (N : Node_Id) return Boolean is
  2608.       begin
  2609.          pragma Assert (Nkind (N) in N_Entity);
  2610.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag105;
  2611.       end Flag105;
  2612.  
  2613.       function Flag106 (N : Node_Id) return Boolean is
  2614.       begin
  2615.          pragma Assert (Nkind (N) in N_Entity);
  2616.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag106;
  2617.       end Flag106;
  2618.  
  2619.       function Flag107 (N : Node_Id) return Boolean is
  2620.       begin
  2621.          pragma Assert (Nkind (N) in N_Entity);
  2622.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag107;
  2623.       end Flag107;
  2624.  
  2625.       function Flag108 (N : Node_Id) return Boolean is
  2626.       begin
  2627.          pragma Assert (Nkind (N) in N_Entity);
  2628.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag108;
  2629.       end Flag108;
  2630.  
  2631.       function Flag109 (N : Node_Id) return Boolean is
  2632.       begin
  2633.          pragma Assert (Nkind (N) in N_Entity);
  2634.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag109;
  2635.       end Flag109;
  2636.  
  2637.       function Flag110 (N : Node_Id) return Boolean is
  2638.       begin
  2639.          pragma Assert (Nkind (N) in N_Entity);
  2640.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag110;
  2641.       end Flag110;
  2642.  
  2643.       function Flag111 (N : Node_Id) return Boolean is
  2644.       begin
  2645.          pragma Assert (Nkind (N) in N_Entity);
  2646.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag111;
  2647.       end Flag111;
  2648.  
  2649.       function Flag112 (N : Node_Id) return Boolean is
  2650.       begin
  2651.          pragma Assert (Nkind (N) in N_Entity);
  2652.          return To_Flag_Word2 (Nodes.Table (N + 3).Field12).Flag112;
  2653.       end Flag112;
  2654.  
  2655.       procedure Set_Nkind (N : Node_Id; Val : Node_Kind) is
  2656.       begin
  2657.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2658.          Nodes.Table (N).Nkind := Val;
  2659.       end Set_Nkind;
  2660.  
  2661.       procedure Set_Field1 (N : Node_Id; Val : Union_Id) is
  2662.       begin
  2663.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2664.          Nodes.Table (N).Field1 := Val;
  2665.       end Set_Field1;
  2666.  
  2667.       procedure Set_Field2 (N : Node_Id; Val : Union_Id) is
  2668.       begin
  2669.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2670.          Nodes.Table (N).Field2 := Val;
  2671.       end Set_Field2;
  2672.  
  2673.       procedure Set_Field3 (N : Node_Id; Val : Union_Id) is
  2674.       begin
  2675.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2676.          Nodes.Table (N).Field3 := Val;
  2677.       end Set_Field3;
  2678.  
  2679.       procedure Set_Field4 (N : Node_Id; Val : Union_Id) is
  2680.       begin
  2681.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2682.          Nodes.Table (N).Field4 := Val;
  2683.       end Set_Field4;
  2684.  
  2685.       procedure Set_Field5 (N : Node_Id; Val : Union_Id) is
  2686.       begin
  2687.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2688.          Nodes.Table (N).Field5 := Val;
  2689.       end Set_Field5;
  2690.  
  2691.       procedure Set_Field6 (N : Node_Id; Val : Union_Id) is
  2692.       begin
  2693.          pragma Assert (Nkind (N) in N_Entity);
  2694.          Nodes.Table (N + 1).Field6 := Val;
  2695.       end Set_Field6;
  2696.  
  2697.       procedure Set_Field7 (N : Node_Id; Val : Union_Id) is
  2698.       begin
  2699.          pragma Assert (Nkind (N) in N_Entity);
  2700.          Nodes.Table (N + 1).Field7 := Val;
  2701.       end Set_Field7;
  2702.  
  2703.       procedure Set_Field8 (N : Node_Id; Val : Union_Id) is
  2704.       begin
  2705.          pragma Assert (Nkind (N) in N_Entity);
  2706.          Nodes.Table (N + 1).Field8 := Val;
  2707.       end Set_Field8;
  2708.  
  2709.       procedure Set_Field9 (N : Node_Id; Val : Union_Id) is
  2710.       begin
  2711.          pragma Assert (Nkind (N) in N_Entity);
  2712.          Nodes.Table (N + 1).Field9 := Val;
  2713.       end Set_Field9;
  2714.  
  2715.       procedure Set_Field10 (N : Node_Id; Val : Union_Id) is
  2716.       begin
  2717.          pragma Assert (Nkind (N) in N_Entity);
  2718.          Nodes.Table (N + 1).Field10 := Val;
  2719.       end Set_Field10;
  2720.  
  2721.       procedure Set_Field11 (N : Node_Id; Val : Union_Id) is
  2722.       begin
  2723.          pragma Assert (Nkind (N) in N_Entity);
  2724.          Nodes.Table (N + 1).Field11 := Val;
  2725.       end Set_Field11;
  2726.  
  2727.       procedure Set_Field12 (N : Node_Id; Val : Union_Id) is
  2728.       begin
  2729.          pragma Assert (Nkind (N) in N_Entity);
  2730.          Nodes.Table (N + 1).Field12 := Val;
  2731.       end Set_Field12;
  2732.  
  2733.       procedure Set_Field13 (N : Node_Id; Val : Union_Id) is
  2734.       begin
  2735.          pragma Assert (Nkind (N) in N_Entity);
  2736.          Nodes.Table (N + 2).Field6 := Val;
  2737.       end Set_Field13;
  2738.  
  2739.       procedure Set_Field14 (N : Node_Id; Val : Union_Id) is
  2740.       begin
  2741.          pragma Assert (Nkind (N) in N_Entity);
  2742.          Nodes.Table (N + 2).Field7 := Val;
  2743.       end Set_Field14;
  2744.  
  2745.       procedure Set_Field15 (N : Node_Id; Val : Union_Id) is
  2746.       begin
  2747.          pragma Assert (Nkind (N) in N_Entity);
  2748.          Nodes.Table (N + 2).Field8 := Val;
  2749.       end Set_Field15;
  2750.  
  2751.       procedure Set_Field16 (N : Node_Id; Val : Union_Id) is
  2752.       begin
  2753.          pragma Assert (Nkind (N) in N_Entity);
  2754.          Nodes.Table (N + 2).Field9 := Val;
  2755.       end Set_Field16;
  2756.  
  2757.       procedure Set_Field17 (N : Node_Id; Val : Union_Id) is
  2758.       begin
  2759.          pragma Assert (Nkind (N) in N_Entity);
  2760.          Nodes.Table (N + 2).Field10 := Val;
  2761.       end Set_Field17;
  2762.  
  2763.       procedure Set_Field18 (N : Node_Id; Val : Union_Id) is
  2764.       begin
  2765.          pragma Assert (Nkind (N) in N_Entity);
  2766.          Nodes.Table (N + 2).Field11 := Val;
  2767.       end Set_Field18;
  2768.  
  2769.       procedure Set_Field19 (N : Node_Id; Val : Union_Id) is
  2770.       begin
  2771.          pragma Assert (Nkind (N) in N_Entity);
  2772.          Nodes.Table (N + 3).Field6 := Val;
  2773.       end Set_Field19;
  2774.  
  2775.       procedure Set_Field20 (N : Node_Id; Val : Union_Id) is
  2776.       begin
  2777.          pragma Assert (Nkind (N) in N_Entity);
  2778.          Nodes.Table (N + 3).Field7 := Val;
  2779.       end Set_Field20;
  2780.  
  2781.       procedure Set_Field21 (N : Node_Id; Val : Union_Id) is
  2782.       begin
  2783.          pragma Assert (Nkind (N) in N_Entity);
  2784.          Nodes.Table (N + 3).Field8 := Val;
  2785.       end Set_Field21;
  2786.  
  2787.       procedure Set_Field22 (N : Node_Id; Val : Union_Id) is
  2788.       begin
  2789.          pragma Assert (Nkind (N) in N_Entity);
  2790.          Nodes.Table (N + 3).Field9 := Val;
  2791.       end Set_Field22;
  2792.  
  2793.       procedure Set_Node1 (N : Node_Id; Val : Node_Id) is
  2794.       begin
  2795.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2796.          Nodes.Table (N).Field1 := Union_Id (Val);
  2797.       end Set_Node1;
  2798.  
  2799.       procedure Set_Node2 (N : Node_Id; Val : Node_Id) is
  2800.       begin
  2801.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2802.          Nodes.Table (N).Field2 := Union_Id (Val);
  2803.       end Set_Node2;
  2804.  
  2805.       procedure Set_Node3 (N : Node_Id; Val : Node_Id) is
  2806.       begin
  2807.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2808.          Nodes.Table (N).Field3 := Union_Id (Val);
  2809.       end Set_Node3;
  2810.  
  2811.       procedure Set_Node4 (N : Node_Id; Val : Node_Id) is
  2812.       begin
  2813.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2814.          Nodes.Table (N).Field4 := Union_Id (Val);
  2815.       end Set_Node4;
  2816.  
  2817.       procedure Set_Node5 (N : Node_Id; Val : Node_Id) is
  2818.       begin
  2819.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2820.          Nodes.Table (N).Field5 := Union_Id (Val);
  2821.       end Set_Node5;
  2822.  
  2823.       procedure Set_Node6 (N : Node_Id; Val : Node_Id) is
  2824.       begin
  2825.          pragma Assert (Nkind (N) in N_Entity);
  2826.          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  2827.       end Set_Node6;
  2828.  
  2829.       procedure Set_Node7 (N : Node_Id; Val : Node_Id) is
  2830.       begin
  2831.          pragma Assert (Nkind (N) in N_Entity);
  2832.          Nodes.Table (N + 1).Field7 := Union_Id (Val);
  2833.       end Set_Node7;
  2834.  
  2835.       procedure Set_Node8 (N : Node_Id; Val : Node_Id) is
  2836.       begin
  2837.          pragma Assert (Nkind (N) in N_Entity);
  2838.          Nodes.Table (N + 1).Field8 := Union_Id (Val);
  2839.       end Set_Node8;
  2840.  
  2841.       procedure Set_Node9 (N : Node_Id; Val : Node_Id) is
  2842.       begin
  2843.          pragma Assert (Nkind (N) in N_Entity);
  2844.          Nodes.Table (N + 1).Field9 := Union_Id (Val);
  2845.       end Set_Node9;
  2846.  
  2847.       procedure Set_Node10 (N : Node_Id; Val : Node_Id) is
  2848.       begin
  2849.          pragma Assert (Nkind (N) in N_Entity);
  2850.          Nodes.Table (N + 1).Field10 := Union_Id (Val);
  2851.       end Set_Node10;
  2852.  
  2853.       procedure Set_Node11 (N : Node_Id; Val : Node_Id) is
  2854.       begin
  2855.          pragma Assert (Nkind (N) in N_Entity);
  2856.          Nodes.Table (N + 1).Field11 := Union_Id (Val);
  2857.       end Set_Node11;
  2858.  
  2859.       procedure Set_Node12 (N : Node_Id; Val : Node_Id) is
  2860.       begin
  2861.          pragma Assert (Nkind (N) in N_Entity);
  2862.          Nodes.Table (N + 1).Field12 := Union_Id (Val);
  2863.       end Set_Node12;
  2864.  
  2865.       procedure Set_Node13 (N : Node_Id; Val : Node_Id) is
  2866.       begin
  2867.          pragma Assert (Nkind (N) in N_Entity);
  2868.          Nodes.Table (N + 2).Field6 := Union_Id (Val);
  2869.       end Set_Node13;
  2870.  
  2871.       procedure Set_Node14 (N : Node_Id; Val : Node_Id) is
  2872.       begin
  2873.          pragma Assert (Nkind (N) in N_Entity);
  2874.          Nodes.Table (N + 2).Field7 := Union_Id (Val);
  2875.       end Set_Node14;
  2876.  
  2877.       procedure Set_Node15 (N : Node_Id; Val : Node_Id) is
  2878.       begin
  2879.          pragma Assert (Nkind (N) in N_Entity);
  2880.          Nodes.Table (N + 2).Field8 := Union_Id (Val);
  2881.       end Set_Node15;
  2882.  
  2883.       procedure Set_Node16 (N : Node_Id; Val : Node_Id) is
  2884.       begin
  2885.          pragma Assert (Nkind (N) in N_Entity);
  2886.          Nodes.Table (N + 2).Field9 := Union_Id (Val);
  2887.       end Set_Node16;
  2888.  
  2889.       procedure Set_Node17 (N : Node_Id; Val : Node_Id) is
  2890.       begin
  2891.          pragma Assert (Nkind (N) in N_Entity);
  2892.          Nodes.Table (N + 2).Field10 := Union_Id (Val);
  2893.       end Set_Node17;
  2894.  
  2895.       procedure Set_Node18 (N : Node_Id; Val : Node_Id) is
  2896.       begin
  2897.          pragma Assert (Nkind (N) in N_Entity);
  2898.          Nodes.Table (N + 2).Field11 := Union_Id (Val);
  2899.       end Set_Node18;
  2900.  
  2901.       procedure Set_Node19 (N : Node_Id; Val : Node_Id) is
  2902.       begin
  2903.          pragma Assert (Nkind (N) in N_Entity);
  2904.          Nodes.Table (N + 3).Field6 := Union_Id (Val);
  2905.       end Set_Node19;
  2906.  
  2907.       procedure Set_Node20 (N : Node_Id; Val : Node_Id) is
  2908.       begin
  2909.          pragma Assert (Nkind (N) in N_Entity);
  2910.          Nodes.Table (N + 3).Field7 := Union_Id (Val);
  2911.       end Set_Node20;
  2912.  
  2913.       procedure Set_Node21 (N : Node_Id; Val : Node_Id) is
  2914.       begin
  2915.          pragma Assert (Nkind (N) in N_Entity);
  2916.          Nodes.Table (N + 3).Field8 := Union_Id (Val);
  2917.       end Set_Node21;
  2918.  
  2919.       procedure Set_Node22 (N : Node_Id; Val : Node_Id) is
  2920.       begin
  2921.          pragma Assert (Nkind (N) in N_Entity);
  2922.          Nodes.Table (N + 2).Field9 := Union_Id (Val);
  2923.       end Set_Node22;
  2924.  
  2925.       procedure Set_List1 (N : Node_Id; Val : List_Id) is
  2926.       begin
  2927.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2928.          Nodes.Table (N).Field1 := Union_Id (Val);
  2929.       end Set_List1;
  2930.  
  2931.       procedure Set_List2 (N : Node_Id; Val : List_Id) is
  2932.       begin
  2933.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2934.          Nodes.Table (N).Field2 := Union_Id (Val);
  2935.       end Set_List2;
  2936.  
  2937.       procedure Set_List3 (N : Node_Id; Val : List_Id) is
  2938.       begin
  2939.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2940.          Nodes.Table (N).Field3 := Union_Id (Val);
  2941.       end Set_List3;
  2942.  
  2943.       procedure Set_List4 (N : Node_Id; Val : List_Id) is
  2944.       begin
  2945.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2946.          Nodes.Table (N).Field4 := Union_Id (Val);
  2947.       end Set_List4;
  2948.  
  2949.       procedure Set_List5 (N : Node_Id; Val : List_Id) is
  2950.       begin
  2951.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2952.          Nodes.Table (N).Field5 := Union_Id (Val);
  2953.       end Set_List5;
  2954.  
  2955.       procedure Set_Elist3 (N : Node_Id; Val : Elist_Id) is
  2956.       begin
  2957.          Nodes.Table (N).Field3 := Union_Id (Val);
  2958.       end Set_Elist3;
  2959.  
  2960.       procedure Set_Elist6 (N : Node_Id; Val : Elist_Id) is
  2961.       begin
  2962.          pragma Assert (Nkind (N) in N_Entity);
  2963.          Nodes.Table (N + 1).Field6 := Union_Id (Val);
  2964.       end Set_Elist6;
  2965.  
  2966.       procedure Set_Elist7 (N : Node_Id; Val : Elist_Id) is
  2967.       begin
  2968.          pragma Assert (Nkind (N) in N_Entity);
  2969.          Nodes.Table (N + 1).Field7 := Union_Id (Val);
  2970.       end Set_Elist7;
  2971.  
  2972.       procedure Set_Elist13 (N : Node_Id; Val : Elist_Id) is
  2973.       begin
  2974.          pragma Assert (Nkind (N) in N_Entity);
  2975.          Nodes.Table (N + 2).Field6 := Union_Id (Val);
  2976.       end Set_Elist13;
  2977.  
  2978.       procedure Set_Name1 (N : Node_Id; Val : Name_Id) is
  2979.       begin
  2980.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2981.          Nodes.Table (N).Field1 := Union_Id (Val);
  2982.       end Set_Name1;
  2983.  
  2984.       procedure Set_Name2 (N : Node_Id; Val : Name_Id) is
  2985.       begin
  2986.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2987.          Nodes.Table (N).Field2 := Union_Id (Val);
  2988.       end Set_Name2;
  2989.  
  2990.       procedure Set_Str3 (N : Node_Id; Val : String_Id) is
  2991.       begin
  2992.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2993.          Nodes.Table (N).Field3 := Union_Id (Val);
  2994.       end Set_Str3;
  2995.  
  2996.       procedure Set_Uint3 (N : Node_Id; Val : Uint) is
  2997.       begin
  2998.          pragma Assert (N in Nodes.First .. Nodes.Last);
  2999.          Nodes.Table (N).Field3 := To_Union (Val);
  3000.       end Set_Uint3;
  3001.  
  3002.       procedure Set_Uint4 (N : Node_Id; Val : Uint) is
  3003.       begin
  3004.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3005.          Nodes.Table (N).Field4 := To_Union (Val);
  3006.       end Set_Uint4;
  3007.  
  3008.       procedure Set_Uint8 (N : Node_Id; Val : Uint) is
  3009.       begin
  3010.          pragma Assert (Nkind (N) in N_Entity);
  3011.          Nodes.Table (N + 1).Field8 := To_Union (Val);
  3012.       end Set_Uint8;
  3013.  
  3014.       procedure Set_Uint9 (N : Node_Id; Val : Uint) is
  3015.       begin
  3016.          pragma Assert (Nkind (N) in N_Entity);
  3017.          Nodes.Table (N + 1).Field9 := To_Union (Val);
  3018.       end Set_Uint9;
  3019.  
  3020.       procedure Set_Uint11 (N : Node_Id; Val : Uint) is
  3021.       begin
  3022.          pragma Assert (Nkind (N) in N_Entity);
  3023.          Nodes.Table (N + 1).Field11 := To_Union (Val);
  3024.       end Set_Uint11;
  3025.  
  3026.       procedure Set_Uint12 (N : Node_Id; Val : Uint) is
  3027.       begin
  3028.          pragma Assert (Nkind (N) in N_Entity);
  3029.          Nodes.Table (N + 1).Field12 := To_Union (Val);
  3030.       end Set_Uint12;
  3031.  
  3032.       procedure Set_Uint15 (N : Node_Id; Val : Uint) is
  3033.       begin
  3034.          pragma Assert (Nkind (N) in N_Entity);
  3035.          Nodes.Table (N + 2).Field8 := To_Union (Val);
  3036.       end Set_Uint15;
  3037.  
  3038.       procedure Set_Ureal3 (N : Node_Id; Val : Ureal) is
  3039.       begin
  3040.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3041.          Nodes.Table (N).Field3 := To_Union (Val);
  3042.       end Set_Ureal3;
  3043.  
  3044.       procedure Set_Ureal6 (N : Node_Id; Val : Ureal) is
  3045.       begin
  3046.          pragma Assert (Nkind (N) in N_Entity);
  3047.          Nodes.Table (N + 1).Field6 := To_Union (Val);
  3048.       end Set_Ureal6;
  3049.  
  3050.       procedure Set_Ureal7 (N : Node_Id; Val : Ureal) is
  3051.       begin
  3052.          pragma Assert (Nkind (N) in N_Entity);
  3053.          Nodes.Table (N + 1).Field7 := To_Union (Val);
  3054.       end Set_Ureal7;
  3055.  
  3056.       procedure Set_Char_Code2 (N : Node_Id; Val : Char_Code) is
  3057.       begin
  3058.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3059.          Nodes.Table (N).Field2 := Union_Id (Val) + Char_Code_Bias;
  3060.       end Set_Char_Code2;
  3061.  
  3062.       procedure Set_Flag1 (N : Node_Id; Val : Boolean) is
  3063.       begin
  3064.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3065.          Nodes.Table (N).Flag1 := Val;
  3066.       end Set_Flag1;
  3067.  
  3068.       procedure Set_Flag3 (N : Node_Id; Val : Boolean) is
  3069.       begin
  3070.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3071.          Nodes.Table (N).Flag3 := Val;
  3072.       end Set_Flag3;
  3073.  
  3074.       procedure Set_Flag4 (N : Node_Id; Val : Boolean) is
  3075.       begin
  3076.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3077.          Nodes.Table (N).Flag4 := Val;
  3078.       end Set_Flag4;
  3079.  
  3080.       procedure Set_Flag5 (N : Node_Id; Val : Boolean) is
  3081.       begin
  3082.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3083.          Nodes.Table (N).Flag5 := Val;
  3084.       end Set_Flag5;
  3085.  
  3086.       procedure Set_Flag6 (N : Node_Id; Val : Boolean) is
  3087.       begin
  3088.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3089.          Nodes.Table (N).Flag6 := Val;
  3090.       end Set_Flag6;
  3091.  
  3092.       procedure Set_Flag7 (N : Node_Id; Val : Boolean) is
  3093.       begin
  3094.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3095.          Nodes.Table (N).Flag7 := Val;
  3096.       end Set_Flag7;
  3097.  
  3098.       procedure Set_Flag8 (N : Node_Id; Val : Boolean) is
  3099.       begin
  3100.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3101.          Nodes.Table (N).Flag8 := Val;
  3102.       end Set_Flag8;
  3103.  
  3104.       procedure Set_Flag9 (N : Node_Id; Val : Boolean) is
  3105.       begin
  3106.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3107.          Nodes.Table (N).Flag9 := Val;
  3108.       end Set_Flag9;
  3109.  
  3110.       procedure Set_Flag10 (N : Node_Id; Val : Boolean) is
  3111.       begin
  3112.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3113.          Nodes.Table (N).Flag10 := Val;
  3114.       end Set_Flag10;
  3115.  
  3116.       procedure Set_Flag11 (N : Node_Id; Val : Boolean) is
  3117.       begin
  3118.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3119.          Nodes.Table (N).Flag11 := Val;
  3120.       end Set_Flag11;
  3121.  
  3122.       procedure Set_Flag12 (N : Node_Id; Val : Boolean) is
  3123.       begin
  3124.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3125.          Nodes.Table (N).Flag12 := Val;
  3126.       end Set_Flag12;
  3127.  
  3128.       procedure Set_Flag13 (N : Node_Id; Val : Boolean) is
  3129.       begin
  3130.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3131.          Nodes.Table (N).Flag13 := Val;
  3132.       end Set_Flag13;
  3133.  
  3134.       procedure Set_Flag14 (N : Node_Id; Val : Boolean) is
  3135.       begin
  3136.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3137.          Nodes.Table (N).Flag14 := Val;
  3138.       end Set_Flag14;
  3139.  
  3140.       procedure Set_Flag15 (N : Node_Id; Val : Boolean) is
  3141.       begin
  3142.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3143.          Nodes.Table (N).Flag15 := Val;
  3144.       end Set_Flag15;
  3145.  
  3146.       procedure Set_Flag16 (N : Node_Id; Val : Boolean) is
  3147.       begin
  3148.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3149.          Nodes.Table (N).Flag16 := Val;
  3150.       end Set_Flag16;
  3151.  
  3152.       procedure Set_Flag17 (N : Node_Id; Val : Boolean) is
  3153.       begin
  3154.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3155.          Nodes.Table (N).Flag17 := Val;
  3156.       end Set_Flag17;
  3157.  
  3158.       procedure Set_Flag18 (N : Node_Id; Val : Boolean) is
  3159.       begin
  3160.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3161.          Nodes.Table (N).Flag18 := Val;
  3162.       end Set_Flag18;
  3163.  
  3164.       procedure Set_Flag19 (N : Node_Id; Val : Boolean) is
  3165.       begin
  3166.          pragma Assert (Nkind (N) in N_Entity);
  3167.          Nodes.Table (N + 1).In_List := Val;
  3168.       end Set_Flag19;
  3169.  
  3170.       procedure Set_Flag20 (N : Node_Id; Val : Boolean) is
  3171.       begin
  3172.          pragma Assert (Nkind (N) in N_Entity);
  3173.          Nodes.Table (N + 1).Rewrite_Sub := Val;
  3174.       end Set_Flag20;
  3175.  
  3176.       procedure Set_Flag21 (N : Node_Id; Val : Boolean) is
  3177.       begin
  3178.          pragma Assert (Nkind (N) in N_Entity);
  3179.          Nodes.Table (N + 1).Rewrite_Ins := Val;
  3180.       end Set_Flag21;
  3181.  
  3182.       procedure Set_Flag22 (N : Node_Id; Val : Boolean) is
  3183.       begin
  3184.          pragma Assert (Nkind (N) in N_Entity);
  3185.          Nodes.Table (N + 1).Flag1 := Val;
  3186.       end Set_Flag22;
  3187.  
  3188.       procedure Set_Flag23 (N : Node_Id; Val : Boolean) is
  3189.       begin
  3190.          pragma Assert (Nkind (N) in N_Entity);
  3191.          Nodes.Table (N + 1).Comes_From_Source := Val;
  3192.       end Set_Flag23;
  3193.  
  3194.       procedure Set_Flag24 (N : Node_Id; Val : Boolean) is
  3195.       begin
  3196.          pragma Assert (Nkind (N) in N_Entity);
  3197.          Nodes.Table (N + 1).Flag3 := Val;
  3198.       end Set_Flag24;
  3199.  
  3200.       procedure Set_Flag25 (N : Node_Id; Val : Boolean) is
  3201.       begin
  3202.          pragma Assert (Nkind (N) in N_Entity);
  3203.          Nodes.Table (N + 1).Flag4 := Val;
  3204.       end Set_Flag25;
  3205.  
  3206.       procedure Set_Flag26 (N : Node_Id; Val : Boolean) is
  3207.       begin
  3208.          pragma Assert (Nkind (N) in N_Entity);
  3209.          Nodes.Table (N + 1).Flag5 := Val;
  3210.       end Set_Flag26;
  3211.  
  3212.       procedure Set_Flag27 (N : Node_Id; Val : Boolean) is
  3213.       begin
  3214.          pragma Assert (Nkind (N) in N_Entity);
  3215.          Nodes.Table (N + 1).Flag6 := Val;
  3216.       end Set_Flag27;
  3217.  
  3218.       procedure Set_Flag28 (N : Node_Id; Val : Boolean) is
  3219.       begin
  3220.          pragma Assert (Nkind (N) in N_Entity);
  3221.          Nodes.Table (N + 1).Flag7 := Val;
  3222.       end Set_Flag28;
  3223.  
  3224.       procedure Set_Flag29 (N : Node_Id; Val : Boolean) is
  3225.       begin
  3226.          pragma Assert (Nkind (N) in N_Entity);
  3227.          Nodes.Table (N + 1).Flag8 := Val;
  3228.       end Set_Flag29;
  3229.  
  3230.       procedure Set_Flag30 (N : Node_Id; Val : Boolean) is
  3231.       begin
  3232.          pragma Assert (Nkind (N) in N_Entity);
  3233.          Nodes.Table (N + 1).Flag9 := Val;
  3234.       end Set_Flag30;
  3235.  
  3236.       procedure Set_Flag31 (N : Node_Id; Val : Boolean) is
  3237.       begin
  3238.          pragma Assert (Nkind (N) in N_Entity);
  3239.          Nodes.Table (N + 1).Flag10 := Val;
  3240.       end Set_Flag31;
  3241.  
  3242.       procedure Set_Flag32 (N : Node_Id; Val : Boolean) is
  3243.       begin
  3244.          pragma Assert (Nkind (N) in N_Entity);
  3245.          Nodes.Table (N + 1).Flag11 := Val;
  3246.       end Set_Flag32;
  3247.  
  3248.       procedure Set_Flag33 (N : Node_Id; Val : Boolean) is
  3249.       begin
  3250.          pragma Assert (Nkind (N) in N_Entity);
  3251.          Nodes.Table (N + 1).Flag12 := Val;
  3252.       end Set_Flag33;
  3253.  
  3254.       procedure Set_Flag34 (N : Node_Id; Val : Boolean) is
  3255.       begin
  3256.          pragma Assert (Nkind (N) in N_Entity);
  3257.          Nodes.Table (N + 1).Flag13 := Val;
  3258.       end Set_Flag34;
  3259.  
  3260.       procedure Set_Flag35 (N : Node_Id; Val : Boolean) is
  3261.       begin
  3262.          pragma Assert (Nkind (N) in N_Entity);
  3263.          Nodes.Table (N + 1).Flag14 := Val;
  3264.       end Set_Flag35;
  3265.  
  3266.       procedure Set_Flag36 (N : Node_Id; Val : Boolean) is
  3267.       begin
  3268.          pragma Assert (Nkind (N) in N_Entity);
  3269.          Nodes.Table (N + 1).Flag15 := Val;
  3270.       end Set_Flag36;
  3271.  
  3272.       procedure Set_Flag37 (N : Node_Id; Val : Boolean) is
  3273.       begin
  3274.          pragma Assert (Nkind (N) in N_Entity);
  3275.          Nodes.Table (N + 1).Flag16 := Val;
  3276.       end Set_Flag37;
  3277.  
  3278.       procedure Set_Flag38 (N : Node_Id; Val : Boolean) is
  3279.       begin
  3280.          pragma Assert (Nkind (N) in N_Entity);
  3281.          Nodes.Table (N + 1).Flag17 := Val;
  3282.       end Set_Flag38;
  3283.  
  3284.       procedure Set_Flag39 (N : Node_Id; Val : Boolean) is
  3285.       begin
  3286.          pragma Assert (Nkind (N) in N_Entity);
  3287.          Nodes.Table (N + 1).Flag18 := Val;
  3288.       end Set_Flag39;
  3289.  
  3290.       procedure Set_Flag40 (N : Node_Id; Val : Boolean) is
  3291.       begin
  3292.          pragma Assert (Nkind (N) in N_Entity);
  3293.          Nodes.Table (N + 2).In_List := Val;
  3294.       end Set_Flag40;
  3295.  
  3296.       procedure Set_Flag41 (N : Node_Id; Val : Boolean) is
  3297.       begin
  3298.          pragma Assert (Nkind (N) in N_Entity);
  3299.          Nodes.Table (N + 2).Rewrite_Sub := Val;
  3300.       end Set_Flag41;
  3301.  
  3302.       procedure Set_Flag42 (N : Node_Id; Val : Boolean) is
  3303.       begin
  3304.          pragma Assert (Nkind (N) in N_Entity);
  3305.          Nodes.Table (N + 2).Rewrite_Ins := Val;
  3306.       end Set_Flag42;
  3307.  
  3308.       procedure Set_Flag43 (N : Node_Id; Val : Boolean) is
  3309.       begin
  3310.          pragma Assert (Nkind (N) in N_Entity);
  3311.          Nodes.Table (N + 2).Flag1 := Val;
  3312.       end Set_Flag43;
  3313.  
  3314.       procedure Set_Flag44 (N : Node_Id; Val : Boolean) is
  3315.       begin
  3316.          pragma Assert (Nkind (N) in N_Entity);
  3317.          Nodes.Table (N + 2).Comes_From_Source := Val;
  3318.       end Set_Flag44;
  3319.  
  3320.       procedure Set_Flag45 (N : Node_Id; Val : Boolean) is
  3321.       begin
  3322.          pragma Assert (Nkind (N) in N_Entity);
  3323.          Nodes.Table (N + 2).Flag3 := Val;
  3324.       end Set_Flag45;
  3325.  
  3326.       procedure Set_Flag46 (N : Node_Id; Val : Boolean) is
  3327.       begin
  3328.          pragma Assert (Nkind (N) in N_Entity);
  3329.          Nodes.Table (N + 2).Flag4 := Val;
  3330.       end Set_Flag46;
  3331.  
  3332.       procedure Set_Flag47 (N : Node_Id; Val : Boolean) is
  3333.       begin
  3334.          pragma Assert (Nkind (N) in N_Entity);
  3335.          Nodes.Table (N + 2).Flag5 := Val;
  3336.       end Set_Flag47;
  3337.  
  3338.       procedure Set_Flag48 (N : Node_Id; Val : Boolean) is
  3339.       begin
  3340.          pragma Assert (Nkind (N) in N_Entity);
  3341.          Nodes.Table (N + 2).Flag6 := Val;
  3342.       end Set_Flag48;
  3343.  
  3344.       procedure Set_Flag49 (N : Node_Id; Val : Boolean) is
  3345.       begin
  3346.          pragma Assert (Nkind (N) in N_Entity);
  3347.          Nodes.Table (N + 2).Flag7 := Val;
  3348.       end Set_Flag49;
  3349.  
  3350.       procedure Set_Flag50 (N : Node_Id; Val : Boolean) is
  3351.       begin
  3352.          pragma Assert (Nkind (N) in N_Entity);
  3353.          Nodes.Table (N + 2).Flag8 := Val;
  3354.       end Set_Flag50;
  3355.  
  3356.       procedure Set_Flag51 (N : Node_Id; Val : Boolean) is
  3357.       begin
  3358.          pragma Assert (Nkind (N) in N_Entity);
  3359.          Nodes.Table (N + 2).Flag9 := Val;
  3360.       end Set_Flag51;
  3361.  
  3362.       procedure Set_Flag52 (N : Node_Id; Val : Boolean) is
  3363.       begin
  3364.          pragma Assert (Nkind (N) in N_Entity);
  3365.          Nodes.Table (N + 2).Flag10 := Val;
  3366.       end Set_Flag52;
  3367.  
  3368.       procedure Set_Flag53 (N : Node_Id; Val : Boolean) is
  3369.       begin
  3370.          pragma Assert (Nkind (N) in N_Entity);
  3371.          Nodes.Table (N + 2).Flag11 := Val;
  3372.       end Set_Flag53;
  3373.  
  3374.       procedure Set_Flag54 (N : Node_Id; Val : Boolean) is
  3375.       begin
  3376.          pragma Assert (Nkind (N) in N_Entity);
  3377.          Nodes.Table (N + 2).Flag12 := Val;
  3378.       end Set_Flag54;
  3379.  
  3380.       procedure Set_Flag55 (N : Node_Id; Val : Boolean) is
  3381.       begin
  3382.          pragma Assert (Nkind (N) in N_Entity);
  3383.          Nodes.Table (N + 2).Flag13 := Val;
  3384.       end Set_Flag55;
  3385.  
  3386.       procedure Set_Flag56 (N : Node_Id; Val : Boolean) is
  3387.       begin
  3388.          pragma Assert (Nkind (N) in N_Entity);
  3389.          Nodes.Table (N + 2).Flag14 := Val;
  3390.       end Set_Flag56;
  3391.  
  3392.       procedure Set_Flag57 (N : Node_Id; Val : Boolean) is
  3393.       begin
  3394.          pragma Assert (Nkind (N) in N_Entity);
  3395.          Nodes.Table (N + 2).Flag15 := Val;
  3396.       end Set_Flag57;
  3397.  
  3398.       procedure Set_Flag58 (N : Node_Id; Val : Boolean) is
  3399.       begin
  3400.          pragma Assert (Nkind (N) in N_Entity);
  3401.          Nodes.Table (N + 2).Flag16 := Val;
  3402.       end Set_Flag58;
  3403.  
  3404.       procedure Set_Flag59 (N : Node_Id; Val : Boolean) is
  3405.       begin
  3406.          pragma Assert (Nkind (N) in N_Entity);
  3407.          Nodes.Table (N + 2).Flag17 := Val;
  3408.       end Set_Flag59;
  3409.  
  3410.       procedure Set_Flag60 (N : Node_Id; Val : Boolean) is
  3411.       begin
  3412.          pragma Assert (Nkind (N) in N_Entity);
  3413.          Nodes.Table (N + 2).Flag18 := Val;
  3414.       end Set_Flag60;
  3415.  
  3416.       procedure Set_Flag61 (N : Node_Id; Val : Boolean) is
  3417.       begin
  3418.          pragma Assert (Nkind (N) in N_Entity);
  3419.          Nodes.Table (N + 1).Pflag1 := Val;
  3420.       end Set_Flag61;
  3421.  
  3422.       procedure Set_Flag62 (N : Node_Id; Val : Boolean) is
  3423.       begin
  3424.          pragma Assert (Nkind (N) in N_Entity);
  3425.          Nodes.Table (N + 1).Pflag2 := Val;
  3426.       end Set_Flag62;
  3427.  
  3428.       procedure Set_Flag63 (N : Node_Id; Val : Boolean) is
  3429.       begin
  3430.          pragma Assert (Nkind (N) in N_Entity);
  3431.          Nodes.Table (N + 2).Pflag1 := Val;
  3432.       end Set_Flag63;
  3433.  
  3434.       procedure Set_Flag64 (N : Node_Id; Val : Boolean) is
  3435.       begin
  3436.          pragma Assert (Nkind (N) in N_Entity);
  3437.          Nodes.Table (N + 2).Pflag2 := Val;
  3438.       end Set_Flag64;
  3439.  
  3440.       procedure Set_Flag65 (N : Node_Id; Val : Boolean) is
  3441.       begin
  3442.          pragma Assert (Nkind (N) in N_Entity);
  3443.          To_Flag_Byte_Ptr
  3444.            (Node_Kind_Ptr'
  3445.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag65 := Val;
  3446.       end Set_Flag65;
  3447.  
  3448.       procedure Set_Flag66 (N : Node_Id; Val : Boolean) is
  3449.       begin
  3450.          pragma Assert (Nkind (N) in N_Entity);
  3451.          To_Flag_Byte_Ptr
  3452.            (Node_Kind_Ptr'
  3453.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag66 := Val;
  3454.       end Set_Flag66;
  3455.  
  3456.       procedure Set_Flag67 (N : Node_Id; Val : Boolean) is
  3457.       begin
  3458.          pragma Assert (Nkind (N) in N_Entity);
  3459.          To_Flag_Byte_Ptr
  3460.            (Node_Kind_Ptr'
  3461.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag67 := Val;
  3462.       end Set_Flag67;
  3463.  
  3464.       procedure Set_Flag68 (N : Node_Id; Val : Boolean) is
  3465.       begin
  3466.          pragma Assert (Nkind (N) in N_Entity);
  3467.          To_Flag_Byte_Ptr
  3468.            (Node_Kind_Ptr'
  3469.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag68 := Val;
  3470.       end Set_Flag68;
  3471.  
  3472.       procedure Set_Flag69 (N : Node_Id; Val : Boolean) is
  3473.       begin
  3474.          pragma Assert (Nkind (N) in N_Entity);
  3475.          To_Flag_Byte_Ptr
  3476.            (Node_Kind_Ptr'
  3477.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag69 := Val;
  3478.       end Set_Flag69;
  3479.  
  3480.       procedure Set_Flag70 (N : Node_Id; Val : Boolean) is
  3481.       begin
  3482.          pragma Assert (Nkind (N) in N_Entity);
  3483.          To_Flag_Byte_Ptr
  3484.            (Node_Kind_Ptr'
  3485.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag70 := Val;
  3486.       end Set_Flag70;
  3487.  
  3488.       procedure Set_Flag71 (N : Node_Id; Val : Boolean) is
  3489.       begin
  3490.          pragma Assert (Nkind (N) in N_Entity);
  3491.          To_Flag_Byte_Ptr
  3492.            (Node_Kind_Ptr'
  3493.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag71 := Val;
  3494.       end Set_Flag71;
  3495.  
  3496.       procedure Set_Flag72 (N : Node_Id; Val : Boolean) is
  3497.       begin
  3498.          pragma Assert (Nkind (N) in N_Entity);
  3499.          To_Flag_Byte_Ptr
  3500.            (Node_Kind_Ptr'
  3501.              (Nodes.Table (N + 2).Nkind'Unrestricted_Access)).Flag72 := Val;
  3502.       end Set_Flag72;
  3503.  
  3504.       procedure Set_Flag73 (N : Node_Id; Val : Boolean) is
  3505.       begin
  3506.          pragma Assert (Nkind (N) in N_Entity);
  3507.          To_Flag_Word_Ptr
  3508.            (Union_Id_Ptr'
  3509.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag73 := Val;
  3510.       end Set_Flag73;
  3511.  
  3512.       procedure Set_Flag74 (N : Node_Id; Val : Boolean) is
  3513.       begin
  3514.          pragma Assert (Nkind (N) in N_Entity);
  3515.          To_Flag_Word_Ptr
  3516.            (Union_Id_Ptr'
  3517.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag74 := Val;
  3518.       end Set_Flag74;
  3519.  
  3520.       procedure Set_Flag75 (N : Node_Id; Val : Boolean) is
  3521.       begin
  3522.          pragma Assert (Nkind (N) in N_Entity);
  3523.          To_Flag_Word_Ptr
  3524.            (Union_Id_Ptr'
  3525.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag75 := Val;
  3526.       end Set_Flag75;
  3527.  
  3528.       procedure Set_Flag76 (N : Node_Id; Val : Boolean) is
  3529.       begin
  3530.          pragma Assert (Nkind (N) in N_Entity);
  3531.          To_Flag_Word_Ptr
  3532.            (Union_Id_Ptr'
  3533.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag76 := Val;
  3534.       end Set_Flag76;
  3535.  
  3536.       procedure Set_Flag77 (N : Node_Id; Val : Boolean) is
  3537.       begin
  3538.          pragma Assert (Nkind (N) in N_Entity);
  3539.          To_Flag_Word_Ptr
  3540.            (Union_Id_Ptr'
  3541.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag77 := Val;
  3542.       end Set_Flag77;
  3543.  
  3544.       procedure Set_Flag78 (N : Node_Id; Val : Boolean) is
  3545.       begin
  3546.          pragma Assert (Nkind (N) in N_Entity);
  3547.          To_Flag_Word_Ptr
  3548.            (Union_Id_Ptr'
  3549.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag78 := Val;
  3550.       end Set_Flag78;
  3551.  
  3552.       procedure Set_Flag79 (N : Node_Id; Val : Boolean) is
  3553.       begin
  3554.          pragma Assert (Nkind (N) in N_Entity);
  3555.          To_Flag_Word_Ptr
  3556.            (Union_Id_Ptr'
  3557.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag79 := Val;
  3558.       end Set_Flag79;
  3559.  
  3560.       procedure Set_Flag80 (N : Node_Id; Val : Boolean) is
  3561.       begin
  3562.          pragma Assert (Nkind (N) in N_Entity);
  3563.          To_Flag_Word_Ptr
  3564.            (Union_Id_Ptr'
  3565.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag80 := Val;
  3566.       end Set_Flag80;
  3567.  
  3568.       procedure Set_Flag81 (N : Node_Id; Val : Boolean) is
  3569.       begin
  3570.          pragma Assert (Nkind (N) in N_Entity);
  3571.          To_Flag_Word_Ptr
  3572.            (Union_Id_Ptr'
  3573.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag81 := Val;
  3574.       end Set_Flag81;
  3575.  
  3576.       procedure Set_Flag82 (N : Node_Id; Val : Boolean) is
  3577.       begin
  3578.          pragma Assert (Nkind (N) in N_Entity);
  3579.          To_Flag_Word_Ptr
  3580.            (Union_Id_Ptr'
  3581.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag82 := Val;
  3582.       end Set_Flag82;
  3583.  
  3584.       procedure Set_Flag83 (N : Node_Id; Val : Boolean) is
  3585.       begin
  3586.          pragma Assert (Nkind (N) in N_Entity);
  3587.          To_Flag_Word_Ptr
  3588.            (Union_Id_Ptr'
  3589.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag83 := Val;
  3590.       end Set_Flag83;
  3591.  
  3592.       procedure Set_Flag84 (N : Node_Id; Val : Boolean) is
  3593.       begin
  3594.          pragma Assert (Nkind (N) in N_Entity);
  3595.          To_Flag_Word_Ptr
  3596.            (Union_Id_Ptr'
  3597.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag84 := Val;
  3598.       end Set_Flag84;
  3599.  
  3600.       procedure Set_Flag85 (N : Node_Id; Val : Boolean) is
  3601.       begin
  3602.          pragma Assert (Nkind (N) in N_Entity);
  3603.          To_Flag_Word_Ptr
  3604.            (Union_Id_Ptr'
  3605.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag85 := Val;
  3606.       end Set_Flag85;
  3607.  
  3608.       procedure Set_Flag86 (N : Node_Id; Val : Boolean) is
  3609.       begin
  3610.          pragma Assert (Nkind (N) in N_Entity);
  3611.          To_Flag_Word_Ptr
  3612.            (Union_Id_Ptr'
  3613.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag86 := Val;
  3614.       end Set_Flag86;
  3615.  
  3616.       procedure Set_Flag87 (N : Node_Id; Val : Boolean) is
  3617.       begin
  3618.          pragma Assert (Nkind (N) in N_Entity);
  3619.          To_Flag_Word_Ptr
  3620.            (Union_Id_Ptr'
  3621.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag87 := Val;
  3622.       end Set_Flag87;
  3623.  
  3624.       procedure Set_Flag88 (N : Node_Id; Val : Boolean) is
  3625.       begin
  3626.          pragma Assert (Nkind (N) in N_Entity);
  3627.          To_Flag_Word_Ptr
  3628.            (Union_Id_Ptr'
  3629.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag88 := Val;
  3630.       end Set_Flag88;
  3631.  
  3632.       procedure Set_Flag89 (N : Node_Id; Val : Boolean) is
  3633.       begin
  3634.          pragma Assert (Nkind (N) in N_Entity);
  3635.          To_Flag_Word_Ptr
  3636.            (Union_Id_Ptr'
  3637.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag89 := Val;
  3638.       end Set_Flag89;
  3639.  
  3640.       procedure Set_Flag90 (N : Node_Id; Val : Boolean) is
  3641.       begin
  3642.          pragma Assert (Nkind (N) in N_Entity);
  3643.          To_Flag_Word_Ptr
  3644.            (Union_Id_Ptr'
  3645.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag90 := Val;
  3646.       end Set_Flag90;
  3647.  
  3648.       procedure Set_Flag91 (N : Node_Id; Val : Boolean) is
  3649.       begin
  3650.          pragma Assert (Nkind (N) in N_Entity);
  3651.          To_Flag_Word_Ptr
  3652.            (Union_Id_Ptr'
  3653.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag91 := Val;
  3654.       end Set_Flag91;
  3655.  
  3656.       procedure Set_Flag92 (N : Node_Id; Val : Boolean) is
  3657.       begin
  3658.          pragma Assert (Nkind (N) in N_Entity);
  3659.          To_Flag_Word_Ptr
  3660.            (Union_Id_Ptr'
  3661.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag92 := Val;
  3662.       end Set_Flag92;
  3663.  
  3664.       procedure Set_Flag93 (N : Node_Id; Val : Boolean) is
  3665.       begin
  3666.          pragma Assert (Nkind (N) in N_Entity);
  3667.          To_Flag_Word_Ptr
  3668.            (Union_Id_Ptr'
  3669.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag93 := Val;
  3670.       end Set_Flag93;
  3671.  
  3672.       procedure Set_Flag94 (N : Node_Id; Val : Boolean) is
  3673.       begin
  3674.          pragma Assert (Nkind (N) in N_Entity);
  3675.          To_Flag_Word_Ptr
  3676.            (Union_Id_Ptr'
  3677.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag94 := Val;
  3678.       end Set_Flag94;
  3679.  
  3680.       procedure Set_Flag95 (N : Node_Id; Val : Boolean) is
  3681.       begin
  3682.          pragma Assert (Nkind (N) in N_Entity);
  3683.          To_Flag_Word_Ptr
  3684.            (Union_Id_Ptr'
  3685.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag95 := Val;
  3686.       end Set_Flag95;
  3687.  
  3688.       procedure Set_Flag96 (N : Node_Id; Val : Boolean) is
  3689.       begin
  3690.          pragma Assert (Nkind (N) in N_Entity);
  3691.          To_Flag_Word_Ptr
  3692.            (Union_Id_Ptr'
  3693.              (Nodes.Table (N + 2).Field12'Unrestricted_Access)).Flag96 := Val;
  3694.       end Set_Flag96;
  3695.  
  3696.       procedure Set_Flag97 (N : Node_Id; Val : Boolean) is
  3697.       begin
  3698.          pragma Assert (Nkind (N) in N_Entity);
  3699.          To_Flag_Word2_Ptr
  3700.            (Union_Id_Ptr'
  3701.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag97 := Val;
  3702.       end Set_Flag97;
  3703.  
  3704.       procedure Set_Flag98 (N : Node_Id; Val : Boolean) is
  3705.       begin
  3706.          pragma Assert (Nkind (N) in N_Entity);
  3707.          To_Flag_Word2_Ptr
  3708.            (Union_Id_Ptr'
  3709.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag98 := Val;
  3710.       end Set_Flag98;
  3711.  
  3712.       procedure Set_Flag99 (N : Node_Id; Val : Boolean) is
  3713.       begin
  3714.          pragma Assert (Nkind (N) in N_Entity);
  3715.          To_Flag_Word2_Ptr
  3716.            (Union_Id_Ptr'
  3717.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag99 := Val;
  3718.       end Set_Flag99;
  3719.  
  3720.       procedure Set_Flag100 (N : Node_Id; Val : Boolean) is
  3721.       begin
  3722.          pragma Assert (Nkind (N) in N_Entity);
  3723.          To_Flag_Word2_Ptr
  3724.            (Union_Id_Ptr'
  3725.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag100 := Val;
  3726.       end Set_Flag100;
  3727.  
  3728.       procedure Set_Flag101 (N : Node_Id; Val : Boolean) is
  3729.       begin
  3730.          pragma Assert (Nkind (N) in N_Entity);
  3731.          To_Flag_Word2_Ptr
  3732.            (Union_Id_Ptr'
  3733.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag101 := Val;
  3734.       end Set_Flag101;
  3735.  
  3736.       procedure Set_Flag102 (N : Node_Id; Val : Boolean) is
  3737.       begin
  3738.          pragma Assert (Nkind (N) in N_Entity);
  3739.          To_Flag_Word2_Ptr
  3740.            (Union_Id_Ptr'
  3741.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag102 := Val;
  3742.       end Set_Flag102;
  3743.  
  3744.       procedure Set_Flag103 (N : Node_Id; Val : Boolean) is
  3745.       begin
  3746.          pragma Assert (Nkind (N) in N_Entity);
  3747.          To_Flag_Word2_Ptr
  3748.            (Union_Id_Ptr'
  3749.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag103 := Val;
  3750.       end Set_Flag103;
  3751.  
  3752.       procedure Set_Flag104 (N : Node_Id; Val : Boolean) is
  3753.       begin
  3754.          pragma Assert (Nkind (N) in N_Entity);
  3755.          To_Flag_Word2_Ptr
  3756.            (Union_Id_Ptr'
  3757.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag104 := Val;
  3758.       end Set_Flag104;
  3759.  
  3760.       procedure Set_Flag105 (N : Node_Id; Val : Boolean) is
  3761.       begin
  3762.          pragma Assert (Nkind (N) in N_Entity);
  3763.          To_Flag_Word2_Ptr
  3764.            (Union_Id_Ptr'
  3765.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag105 := Val;
  3766.       end Set_Flag105;
  3767.  
  3768.       procedure Set_Flag106 (N : Node_Id; Val : Boolean) is
  3769.       begin
  3770.          pragma Assert (Nkind (N) in N_Entity);
  3771.          To_Flag_Word2_Ptr
  3772.            (Union_Id_Ptr'
  3773.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag106 := Val;
  3774.       end Set_Flag106;
  3775.  
  3776.       procedure Set_Flag107 (N : Node_Id; Val : Boolean) is
  3777.       begin
  3778.          pragma Assert (Nkind (N) in N_Entity);
  3779.          To_Flag_Word2_Ptr
  3780.            (Union_Id_Ptr'
  3781.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag107 := Val;
  3782.       end Set_Flag107;
  3783.  
  3784.       procedure Set_Flag108 (N : Node_Id; Val : Boolean) is
  3785.       begin
  3786.          pragma Assert (Nkind (N) in N_Entity);
  3787.          To_Flag_Word2_Ptr
  3788.            (Union_Id_Ptr'
  3789.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag108 := Val;
  3790.       end Set_Flag108;
  3791.  
  3792.       procedure Set_Flag109 (N : Node_Id; Val : Boolean) is
  3793.       begin
  3794.          pragma Assert (Nkind (N) in N_Entity);
  3795.          To_Flag_Word2_Ptr
  3796.            (Union_Id_Ptr'
  3797.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag109 := Val;
  3798.       end Set_Flag109;
  3799.  
  3800.       procedure Set_Flag110 (N : Node_Id; Val : Boolean) is
  3801.       begin
  3802.          pragma Assert (Nkind (N) in N_Entity);
  3803.          To_Flag_Word2_Ptr
  3804.            (Union_Id_Ptr'
  3805.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag110 := Val;
  3806.       end Set_Flag110;
  3807.  
  3808.       procedure Set_Flag111 (N : Node_Id; Val : Boolean) is
  3809.       begin
  3810.          pragma Assert (Nkind (N) in N_Entity);
  3811.          To_Flag_Word2_Ptr
  3812.            (Union_Id_Ptr'
  3813.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag111 := Val;
  3814.       end Set_Flag111;
  3815.  
  3816.       procedure Set_Flag112 (N : Node_Id; Val : Boolean) is
  3817.       begin
  3818.          pragma Assert (Nkind (N) in N_Entity);
  3819.          To_Flag_Word2_Ptr
  3820.            (Union_Id_Ptr'
  3821.              (Nodes.Table (N + 3).Field12'Unrestricted_Access)).Flag112 := Val;
  3822.       end Set_Flag112;
  3823.  
  3824.       procedure Set_Node1_With_Parent (N : Node_Id; Val : Node_Id) is
  3825.       begin
  3826.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3827.          if Val > Error then Set_Parent (Val, N); end if;
  3828.          Set_Node1 (N, Val);
  3829.       end Set_Node1_With_Parent;
  3830.  
  3831.       procedure Set_Node2_With_Parent (N : Node_Id; Val : Node_Id) is
  3832.       begin
  3833.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3834.          if Val > Error then Set_Parent (Val, N); end if;
  3835.          Set_Node2 (N, Val);
  3836.       end Set_Node2_With_Parent;
  3837.  
  3838.       procedure Set_Node3_With_Parent (N : Node_Id; Val : Node_Id) is
  3839.       begin
  3840.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3841.          if Val > Error then Set_Parent (Val, N); end if;
  3842.          Set_Node3 (N, Val);
  3843.       end Set_Node3_With_Parent;
  3844.  
  3845.       procedure Set_Node4_With_Parent (N : Node_Id; Val : Node_Id) is
  3846.       begin
  3847.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3848.          if Val > Error then Set_Parent (Val, N); end if;
  3849.          Set_Node4 (N, Val);
  3850.       end Set_Node4_With_Parent;
  3851.  
  3852.       procedure Set_Node5_With_Parent (N : Node_Id; Val : Node_Id) is
  3853.       begin
  3854.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3855.          if Val > Error then Set_Parent (Val, N); end if;
  3856.          Set_Node5 (N, Val);
  3857.       end Set_Node5_With_Parent;
  3858.  
  3859.       procedure Set_List1_With_Parent (N : Node_Id; Val : List_Id) is
  3860.       begin
  3861.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3862.          if Val /= No_List and then Val /= Error_List then
  3863.             Set_Parent (Val, N);
  3864.          end if;
  3865.          Set_List1 (N, Val);
  3866.       end Set_List1_With_Parent;
  3867.  
  3868.       procedure Set_List2_With_Parent (N : Node_Id; Val : List_Id) is
  3869.       begin
  3870.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3871.          if Val /= No_List and then Val /= Error_List then
  3872.             Set_Parent (Val, N);
  3873.          end if;
  3874.          Set_List2 (N, Val);
  3875.       end Set_List2_With_Parent;
  3876.  
  3877.       procedure Set_List3_With_Parent (N : Node_Id; Val : List_Id) is
  3878.       begin
  3879.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3880.          if Val /= No_List and then Val /= Error_List then
  3881.             Set_Parent (Val, N);
  3882.          end if;
  3883.          Set_List3 (N, Val);
  3884.       end Set_List3_With_Parent;
  3885.  
  3886.       procedure Set_List4_With_Parent (N : Node_Id; Val : List_Id) is
  3887.       begin
  3888.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3889.          if Val /= No_List and then Val /= Error_List then
  3890.             Set_Parent (Val, N);
  3891.          end if;
  3892.          Set_List4 (N, Val);
  3893.       end Set_List4_With_Parent;
  3894.  
  3895.       procedure Set_List5_With_Parent (N : Node_Id; Val : List_Id) is
  3896.       begin
  3897.          pragma Assert (N in Nodes.First .. Nodes.Last);
  3898.          if Val /= No_List and then Val /= Error_List then
  3899.             Set_Parent (Val, N);
  3900.          end if;
  3901.          Set_List5 (N, Val);
  3902.       end Set_List5_With_Parent;
  3903.  
  3904.    end Unchecked_Access;
  3905.  
  3906. end Atree;
  3907.