1 ------------------------------------------------------------------------------
3 -- GNAT COMPILER COMPONENTS --
5 -- G E N _ I L . U T I L S --
9 -- Copyright (C) 2020-2023, Free Software Foundation, Inc. --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
17 -- for more details. You should have received a copy of the GNU General --
18 -- Public License distributed with GNAT; see file COPYING3. If not, go to --
19 -- http://www.gnu.org/licenses for a complete copy of the license. --
21 -- GNAT was originally developed by the GNAT team at New York University. --
22 -- Extensive contributions were provided by Ada Core Technologies Inc. --
24 ------------------------------------------------------------------------------
26 with Ada
.Containers
.Vectors
; use Ada
.Containers
;
28 with GNAT
.Strings
; use GNAT
.Strings
;
30 with Gen_IL
.Types
; use Gen_IL
.Types
;
31 with Gen_IL
.Fields
; use Gen_IL
.Fields
;
33 package Gen_IL
.Internals
is
35 function Image
(T
: Opt_Type_Enum
) return String;
37 function Image_Sans_N
(T
: Opt_Type_Enum
) return String;
38 -- Returns the image without the leading "N_"
42 type Type_Set
is array (Type_Enum
) of Boolean;
44 type Type_Index
is new Positive;
45 subtype Type_Count
is Type_Index
'Base range 0 .. Type_Index
'Last;
46 package Type_Vectors
is new Vectors
(Type_Index
, Type_Enum
);
48 subtype Type_Vector
is Type_Vectors
.Vector
;
50 type Type_Array
is array (Type_Index
range <>) of Type_Enum
;
54 procedure Put_Types_With_Bars
(S
: in out Sink
; U
: Type_Vector
);
55 procedure Put_Type_Ids_With_Bars
(S
: in out Sink
; U
: Type_Vector
);
56 -- Put the types with vertical bars in between, as in
57 -- N_This | N_That | N_Other
59 -- N_This_Id | N_That_Id | N_Other_Id
61 function Id_Image
(T
: Type_Enum
) return String;
62 -- Image of the type for use with _Id types
64 function Get_Set_Id_Image
(T
: Type_Enum
) return String;
65 -- Image of the type for use with getters and setters
69 type Fields_Present_Array
is array (Field_Enum
) of Type_Set
;
71 type Field_Set
is array (Field_Enum
) of Boolean;
72 type Fields_Per_Node_Type
is array (Node_Or_Entity_Type
) of Field_Set
;
74 type Field_Index
is new Positive;
75 package Field_Vectors
is new Vectors
(Field_Index
, Field_Enum
);
76 subtype Field_Vector
is Field_Vectors
.Vector
;
78 type Bit_Offset
is new Root_Nat
range 0 .. 32_000
- 1;
79 -- Offset in bits. The number 32_000 is chosen because there are fewer than
80 -- 1000 fields, but offsets are in size units (1 bit for flags, 32 bits for
81 -- most others, also 2, 4, and 8).
83 type Field_Offset
is new Bit_Offset
;
85 type Type_Info
(Is_Union
: Boolean) is record
86 Parent
: Opt_Abstract_Type
;
87 -- Parent of this type (single inheritance). No_Type for a root
88 -- type (Node_Kind or Entity_Kind). For union types, this is
91 Children
: Type_Vector
;
94 Concrete_Descendants
: Type_Vector
;
101 First
, Last
: Concrete_Type
;
102 -- This type includes concrete types in the range First..Last. For
103 -- a concrete type, First=Last. For an abstract type, First..Last
104 -- includes two or more types.
106 Fields
: Field_Vector
;
108 Nmake_Assert
: String_Access
; -- only for concrete node types
112 type Type_Info_Ptr
is access all Type_Info
;
114 Type_Table
: array (Node_Or_Entity_Type
) of Type_Info_Ptr
;
115 -- Table mapping from enumeration literals representing types to
116 -- information about the type.
118 procedure Verify_Type_Table
;
119 -- Check Type_Table for consistency
121 function Num_Concrete_Descendants
122 (T
: Node_Or_Entity_Type
) return Natural;
123 -- Number of concrete descendants of T, including (if T is concrete)
126 type Field_Default_Value
is
128 Default_Empty
, -- Node_Id
129 Default_No_List
, Default_Empty_List
, -- List_Id
130 Default_False
, Default_True
, -- Flag
131 Default_No_Elist
, -- Elist_Id
132 Default_No_Name
, -- Name_Id
133 Default_Uint_0
); -- Uint
134 -- Default value for a field in the Nmake functions. No_Default if the
135 -- field parameter has no default value. Otherwise this indicates the
136 -- default value used, which must match the type of the field.
138 function Image
(Default
: Field_Default_Value
) return String;
139 -- This will be something like "Default_Empty".
140 function Value_Image
(Default
: Field_Default_Value
) return String;
141 -- This will be something like "Empty".
143 type Type_Only_Enum
is
144 (No_Type_Only
, Base_Type_Only
, Impl_Base_Type_Only
, Root_Type_Only
);
145 -- These correspond to the "[base type only]", "[implementation base type
146 -- only]", and "[root type only]" annotations documented in einfo.ads.
147 -- The default is No_Type_Only, indicating the field is not one of
148 -- these special "[... only]" ones.
150 function Image
(Type_Only
: Type_Only_Enum
) return String is
151 (Capitalize
(Type_Only
'Img));
153 Unknown_Offset
: constant := -1;
154 -- Initial value of Offset, so we can tell whether it has been set
156 type Field_Info
is record
157 Have_This_Field
: Type_Vector
;
158 -- Types that have this field
160 Field_Type
: Type_Enum
;
161 -- Type of the field. Currently, we use Node_Id for all node-valued
162 -- fields, but we could narrow down to children of that. Similar for
165 Default_Value
: Field_Default_Value
;
166 Type_Only
: Type_Only_Enum
;
167 Pre
, Pre_Get
, Pre_Set
: String_Access
;
168 -- Above record the information in the calls to Create_...Field.
169 -- See Gen_IL.Gen for details.
171 Offset
: Field_Offset
'Base range Unknown_Offset
.. Field_Offset
'Last;
172 -- Offset of the field from the start of the node, in units of the field
173 -- size. So if a field is 4 bits in size, it starts at bit number
174 -- Offset*4 from the start of the node.
177 type Field_Info_Ptr
is access all Field_Info
;
179 Field_Table
: array (Field_Enum
) of Field_Info_Ptr
;
180 -- Table mapping from enumeration literals representing fields to
181 -- information about the field.
183 -- Getters for fields of types Elist_Id and Uint need special treatment of
184 -- defaults. In particular, if the field has its initial 0 value, getters
185 -- need to return the appropriate default value. Note that these defaults
186 -- have nothing to do with the defaults mentioned above for Nmake
189 function Field_Has_Special_Default
190 (Field_Type
: Type_Enum
) return Boolean is
191 (Field_Type
in Elist_Id | Uint
);
192 -- These are the field types that have a default value that is not
193 -- represented as zero.
195 function Special_Default
196 (Field_Type
: Type_Enum
) return String is
198 when Elist_Id
=> "No_Elist",
199 when Uint
=> "No_Uint",
200 when others => "can't happen");
204 subtype Node_Field
is
207 Field_Enum
'Pred (Between_Node_And_Entity_Fields
);
209 subtype Entity_Field
is
211 Field_Enum
'Succ (Between_Node_And_Entity_Fields
) ..
214 function Image
(F
: Opt_Field_Enum
) return String;
216 function F_Image
(F
: Opt_Field_Enum
) return String is
218 -- Prepends "F_" to Image (F). This is used for the enumeration literals in
219 -- the generated Sinfo.Nodes.Node_Field and Einfo.Entities.Entity_Field
220 -- types. If we used Image (F), these enumeration literals would overload
221 -- the getter functions, which confuses gdb.
223 procedure Nil
(T
: Node_Or_Entity_Type
);
226 procedure Iterate_Types
227 (Root
: Node_Or_Entity_Type
;
228 Pre
, Post
: not null access procedure (T
: Node_Or_Entity_Type
) :=
230 -- Iterate top-down on the type hierarchy. Call Pre and Post before and
231 -- after walking child types. Note that this ignores union types, because
232 -- they are nonhierarchical. The order in which concrete types are visited
233 -- matches the order of the generated enumeration types Node_Kind and
234 -- Entity_Kind, which is not the same as the order of the Type_Enum
235 -- type in Gen_IL.Types.
237 function Is_Descendant
(Ancestor
, Descendant
: Node_Or_Entity_Type
)
239 -- True if Descendant is a descendant of Ancestor; that is,
240 -- True if Ancestor is an ancestor of Descendant. True for
243 procedure Put_Type_Hierarchy
(S
: in out Sink
; Root
: Root_Type
);
247 type Field_Desc
is record
249 Is_Syntactic
: Boolean;
250 -- The same field can be syntactic in some nodes but semantic in others
253 type Field_Sequence_Index
is new Positive;
254 type Field_Sequence
is array (Field_Sequence_Index
range <>) of Field_Desc
;
255 No_Fields
: constant Field_Sequence
:= (1 .. 0 => <>);
257 type Field_Array
is array (Bit_Offset
range <>) of Opt_Field_Enum
;
258 type Field_Array_Ptr
is access all Field_Array
;
260 type Concrete_Type_Layout_Array
is array (Concrete_Type
) of Field_Array_Ptr
;
261 -- Mapping from types to mappings from offsets to fields. Each bit offset
262 -- is mapped to the corresponding field for the given type. An n-bit field
263 -- will have n bit offsets mapped to the same field.
265 type Offset_To_Fields_Mapping
is
266 array (Bit_Offset
range <>) of Field_Array_Ptr
;
267 -- Mapping from bit offsets to fields using that offset
269 function First_Abstract
(Root
: Root_Type
) return Abstract_Type
;
270 function Last_Abstract
(Root
: Root_Type
) return Abstract_Type
;
271 -- First and Last abstract types descended from the Root. So for example if
272 -- Root = Node_Kind, then First_Abstract = Abstract_Node'First.
274 function First_Concrete
(Root
: Root_Type
) return Concrete_Type
;
275 function Last_Concrete
(Root
: Root_Type
) return Concrete_Type
;
276 -- First and Last concrete types descended from the Root
278 function First_Field
(Root
: Root_Type
) return Field_Enum
;
279 function Last_Field
(Root
: Root_Type
) return Field_Enum
;
280 -- First and Last node or entity fields
282 function Node_Or_Entity
(Root
: Root_Type
) return String;
283 -- Return "Node" or "Entity" depending on whether Root = Node_Kind or
286 pragma Style_Checks
(Off
);
287 -- We don't want warnings about wrong casing in the Type_Frequency table;
288 -- this table is not intended to be particularly readable.
290 -- The Type_Frequency table shows the frequency of nodes and entity kinds
291 -- printed by -gnatd.A for a large example. It is used in the field offset
292 -- computations for efficiency. Note that N_Defining_Identifier,
293 -- N_Defining_Operator_Symbol, and N_Defining_Character_Literal are set to
294 -- zero, because the Ekind is what matters for those.
296 Type_Frequency
: constant array (Concrete_Type
) of Type_Count
:=
297 (N_Identifier
=> 3496964, -- (0.354) 7 slots
298 N_Defining_Identifier
=> 0, -- 1468484, -- (0.149) 8 slots
299 N_Integer_Literal
=> 455415, -- (0.046) 6 slots
300 E_In_Parameter
=> 391008, -- (0.040) 42 slots
301 N_Attribute_Reference
=> 330825, -- (0.033) 9 slots
302 N_Expanded_Name
=> 329509, -- (0.033) 8 slots
303 N_Selected_Component
=> 328862, -- (0.033) 8 slots
304 N_Parameter_Specification
=> 321313, -- (0.033) 7 slots
305 E_Void
=> 173019, -- (0.018) 59 slots
306 N_Explicit_Dereference
=> 155113, -- (0.016) 8 slots
307 N_Procedure_Call_Statement
=> 125403, -- (0.013) 8 slots
308 N_Object_Declaration
=> 115610, -- (0.012) 8 slots
309 E_Component
=> 108208, -- (0.011) 49 slots
310 N_Procedure_Specification
=> 106277, -- (0.011) 7 slots
311 E_Procedure
=> 104063, -- (0.011) 62 slots
312 N_Unchecked_Type_Conversion
=> 94477, -- (0.010) 7 slots
313 N_Range
=> 91413, -- (0.009) 6 slots
314 E_Function
=> 90035, -- (0.009) 62 slots
315 N_Handled_Sequence_Of_Statements
=> 87930, -- (0.009) 8 slots
316 N_Subprogram_Declaration
=> 85248, -- (0.009) 7 slots
317 N_Parameter_Association
=> 81464, -- (0.008) 8 slots
318 N_Indexed_Component
=> 80049, -- (0.008) 7 slots
319 N_Freeze_Entity
=> 79904, -- (0.008) 8 slots
320 N_Call_Marker
=> 79521, -- (0.008) 4 slots
321 N_Assignment_Statement
=> 76554, -- (0.008) 8 slots
322 N_Function_Specification
=> 76052, -- (0.008) 7 slots
323 N_Function_Call
=> 75028, -- (0.008) 9 slots
324 N_Op_Eq
=> 74874, -- (0.008) 8 slots
325 E_Constant
=> 66667, -- (0.007) 47 slots
326 N_If_Statement
=> 60066, -- (0.006) 8 slots
327 N_Component_Association
=> 54642, -- (0.006) 7 slots
328 N_Subprogram_Body
=> 53805, -- (0.005) 10 slots
329 N_Type_Conversion
=> 53383, -- (0.005) 7 slots
330 E_In_Out_Parameter
=> 52936, -- (0.005) 38 slots
331 N_Simple_Return_Statement
=> 52436, -- (0.005) 7 slots
332 N_Subtype_Indication
=> 49535, -- (0.005) 6 slots
333 N_Raise_Constraint_Error
=> 49069, -- (0.005) 6 slots
334 N_Null
=> 46850, -- (0.005) 5 slots
335 N_Itype_Reference
=> 45422, -- (0.005) 4 slots
336 E_Anonymous_Access_Type
=> 45149, -- (0.005) 44 slots
337 N_And_Then
=> 44721, -- (0.005) 8 slots
338 N_Block_Statement
=> 44328, -- (0.004) 10 slots
339 N_Subtype_Declaration
=> 43149, -- (0.004) 6 slots
340 N_Op_Not
=> 40531, -- (0.004) 7 slots
341 E_Array_Subtype
=> 40051, -- (0.004) 50 slots
342 N_Expression_With_Actions
=> 36726, -- (0.004) 7 slots
343 E_Access_Subprogram_Type
=> 36700, -- (0.004) 45 slots
344 E_Signed_Integer_Subtype
=> 36659, -- (0.004) 43 slots
345 N_String_Literal
=> 34815, -- (0.004) 7 slots
346 N_Aggregate
=> 33899, -- (0.003) 8 slots
347 N_Index_Or_Discriminant_Constraint
=> 33546, -- (0.003) 4 slots
348 E_Variable
=> 33102, -- (0.003) 55 slots
349 E_Block
=> 32829, -- (0.003) 58 slots
350 N_Op_Ne
=> 32127, -- (0.003) 8 slots
351 N_Pragma_Argument_Association
=> 31504, -- (0.003) 7 slots
352 N_Null_Statement
=> 30816, -- (0.003) 5 slots
353 N_Aspect_Specification
=> 29667, -- (0.003) 9 slots
354 N_Pragma
=> 28317, -- (0.003) 9 slots
355 N_Generic_Association
=> 26297, -- (0.003) 8 slots
356 N_Formal_Concrete_Subprogram_Declaration
=> 25843, -- (0.003) 6 slots
357 N_Op_Lt
=> 25328, -- (0.003) 8 slots
358 E_String_Literal_Subtype
=> 25272, -- (0.003) 48 slots
359 N_Full_Type_Declaration
=> 25258, -- (0.003) 7 slots
360 N_With_Clause
=> 24370, -- (0.002) 9 slots
361 N_Op_Add
=> 23839, -- (0.002) 8 slots
362 E_Subprogram_Body
=> 23790, -- (0.002) 42 slots
363 E_Return_Statement
=> 23098, -- (0.002) 51 slots
364 N_Or_Else
=> 22858, -- (0.002) 8 slots
365 N_Implicit_Label_Declaration
=> 21687, -- (0.002) 5 slots
366 N_Others_Choice
=> 21579, -- (0.002) 4 slots
367 E_Out_Parameter
=> 21513, -- (0.002) 38 slots
368 N_Op_Subtract
=> 21441, -- (0.002) 8 slots
369 N_Op_Ge
=> 21116, -- (0.002) 8 slots
370 N_Component_Definition
=> 21075, -- (0.002) 7 slots
371 N_Case_Statement_Alternative
=> 19664, -- (0.002) 8 slots
372 N_Loop_Statement
=> 19507, -- (0.002) 9 slots
373 E_Package
=> 19029, -- (0.002) 53 slots
374 N_Op_Gt
=> 18619, -- (0.002) 8 slots
375 N_Op_Le
=> 16564, -- (0.002) 8 slots
376 N_Formal_Object_Declaration
=> 16219, -- (0.002) 7 slots
377 E_Discriminant
=> 16091, -- (0.002) 56 slots
378 N_Component_Declaration
=> 15858, -- (0.002) 7 slots
379 N_Iteration_Scheme
=> 15719, -- (0.002) 8 slots
380 N_Access_To_Object_Definition
=> 14875, -- (0.002) 5 slots
381 E_Record_Subtype
=> 14569, -- (0.001) 52 slots
382 N_Generic_Subprogram_Declaration
=> 14320, -- (0.001) 7 slots
383 N_Package_Specification
=> 13323, -- (0.001) 8 slots
384 N_Exception_Handler
=> 12841, -- (0.001) 8 slots
385 E_Enumeration_Literal
=> 11608, -- (0.001) 42 slots
386 N_Subprogram_Renaming_Declaration
=> 10991, -- (0.001) 9 slots
387 N_In
=> 10794, -- (0.001) 8 slots
388 E_Allocator_Type
=> 10751, -- (0.001) 44 slots
389 E_General_Access_Type
=> 10451, -- (0.001) 44 slots
390 E_Generic_Procedure
=> 9837, -- (0.001) 41 slots
391 N_Package_Renaming_Declaration
=> 9395, -- (0.001) 8 slots
392 N_Access_Definition
=> 9388, -- (0.001) 6 slots
393 N_Qualified_Expression
=> 9012, -- (0.001) 7 slots
394 E_Enumeration_Subtype
=> 8560, -- (0.001) 46 slots
395 N_Allocator
=> 8474, -- (0.001) 8 slots
396 N_Package_Declaration
=> 8099, -- (0.001) 10 slots
397 N_Formal_Type_Declaration
=> 7964, -- (0.001) 7 slots
398 N_Exit_Statement
=> 7960, -- (0.001) 8 slots
399 N_Component_List
=> 7829, -- (0.001) 5 slots
400 N_Defining_Operator_Symbol
=> 0, -- 7525, -- (0.001) 8 slots
401 N_Case_Statement
=> 7271, -- (0.001) 7 slots
402 N_Expression_Function
=> 7242, -- (0.001) 9 slots
403 N_Loop_Parameter_Specification
=> 7042, -- (0.001) 7 slots
404 N_Character_Literal
=> 6842, -- (0.001) 7 slots
405 N_Op_Concat
=> 6565, -- (0.001) 8 slots
406 N_Not_In
=> 6341, -- (0.001) 8 slots
407 N_Label
=> 6133, -- (0.001) 9 slots
408 N_Goto_Statement
=> 6133, -- (0.001) 8 slots
409 E_Label
=> 6133, -- (0.001) 57 slots
410 E_Loop
=> 6008, -- (0.001) 41 slots
411 N_Generic_Package_Declaration
=> 5808, -- (0.001) 10 slots
412 N_If_Expression
=> 5800, -- (0.001) 7 slots
413 N_Record_Definition
=> 5628, -- (0.001) 7 slots
414 N_Slice
=> 5461, -- (0.001) 7 slots
415 N_Reference
=> 5332, -- (0.001) 7 slots
416 E_Generic_Package
=> 5268, -- (0.001) 59 slots
417 E_Record_Type
=> 4838, -- (0.000) 51 slots
418 N_Raise_Program_Error
=> 4675, -- (0.000) 6 slots
419 N_Raise_Statement
=> 4628, -- (0.000) 8 slots
420 N_Use_Type_Clause
=> 4487, -- (0.000) 9 slots
421 E_Array_Type
=> 4325, -- (0.000) 48 slots
422 E_Operator
=> 4308, -- (0.000) 55 slots
423 N_Freeze_Generic_Entity
=> 4249, -- (0.000) 4 slots
424 N_Constrained_Array_Definition
=> 4244, -- (0.000) 5 slots
425 N_Object_Renaming_Declaration
=> 4067, -- (0.000) 8 slots
426 N_Formal_Private_Type_Definition
=> 4018, -- (0.000) 8 slots
427 E_Loop_Parameter
=> 3870, -- (0.000) 38 slots
428 N_Real_Literal
=> 3759, -- (0.000) 7 slots
429 N_Attribute_Definition_Clause
=> 3724, -- (0.000) 8 slots
430 N_Exception_Renaming_Declaration
=> 3697, -- (0.000) 8 slots
431 E_Class_Wide_Type
=> 3674, -- (0.000) 48 slots
432 E_Exception
=> 3632, -- (0.000) 24 slots
433 N_Range_Constraint
=> 3506, -- (0.000) 4 slots
434 E_Access_Type
=> 3487, -- (0.000) 44 slots
435 E_Subprogram_Type
=> 3248, -- (0.000) 47 slots
436 N_Package_Instantiation
=> 3005, -- (0.000) 8 slots
437 E_Access_Attribute_Type
=> 2959, -- (0.000) 44 slots
438 N_Op_And
=> 2957, -- (0.000) 8 slots
439 E_Generic_In_Parameter
=> 2704, -- (0.000) 31 slots
440 N_Derived_Type_Definition
=> 2688, -- (0.000) 7 slots
441 N_Variant
=> 2535, -- (0.000) 8 slots
442 E_Record_Subtype_With_Private
=> 2327, -- (0.000) 50 slots
443 N_Private_Type_Declaration
=> 2287, -- (0.000) 6 slots
444 E_Private_Type
=> 1890, -- (0.000) 48 slots
445 N_Discriminant_Specification
=> 1864, -- (0.000) 7 slots
446 N_Procedure_Instantiation
=> 1659, -- (0.000) 8 slots
447 N_Op_Multiply
=> 1634, -- (0.000) 8 slots
448 E_Access_Subtype
=> 1606, -- (0.000) 44 slots
449 N_Defining_Program_Unit_Name
=> 1463, -- (0.000) 8 slots
450 N_Number_Declaration
=> 1461, -- (0.000) 7 slots
451 E_Named_Integer
=> 1430, -- (0.000) 19 slots
452 N_Use_Package_Clause
=> 1369, -- (0.000) 9 slots
453 N_Compilation_Unit_Aux
=> 1341, -- (0.000) 8 slots
454 N_Compilation_Unit
=> 1341, -- (0.000) 8 slots
455 N_Elsif_Part
=> 1331, -- (0.000) 7 slots
456 N_Operator_Symbol
=> 1305, -- (0.000) 7 slots
457 E_Limited_Private_Type
=> 1299, -- (0.000) 48 slots
458 E_Generic_Function
=> 1292, -- (0.000) 41 slots
459 E_Enumeration_Type
=> 1186, -- (0.000) 47 slots
460 N_Enumeration_Type_Definition
=> 1169, -- (0.000) 6 slots
461 N_Unchecked_Expression
=> 1112, -- (0.000) 7 slots
462 N_Op_Or
=> 1107, -- (0.000) 8 slots
463 N_Designator
=> 1100, -- (0.000) 9 slots
464 N_Formal_Discrete_Type_Definition
=> 1086, -- (0.000) 4 slots
465 N_Variant_Part
=> 1072, -- (0.000) 8 slots
466 N_Formal_Package_Declaration
=> 1047, -- (0.000) 8 slots
467 N_Quantified_Expression
=> 1033, -- (0.000) 8 slots
468 E_Record_Type_With_Private
=> 1017, -- (0.000) 51 slots
469 N_Package_Body
=> 999, -- (0.000) 9 slots
470 N_Unconstrained_Array_Definition
=> 973, -- (0.000) 5 slots
471 E_Private_Subtype
=> 971, -- (0.000) 48 slots
472 N_Incomplete_Type_Declaration
=> 863, -- (0.000) 6 slots
473 E_Incomplete_Type
=> 863, -- (0.000) 48 slots
474 N_Contract
=> 859, -- (0.000) 6 slots
475 E_Package_Body
=> 852, -- (0.000) 46 slots
476 N_Extended_Return_Statement
=> 801, -- (0.000) 8 slots
477 N_Op_Divide
=> 724, -- (0.000) 8 slots
478 N_Extension_Aggregate
=> 718, -- (0.000) 8 slots
479 N_Function_Instantiation
=> 642, -- (0.000) 8 slots
480 N_Exception_Declaration
=> 594, -- (0.000) 7 slots
481 N_Discriminant_Association
=> 552, -- (0.000) 7 slots
482 N_Iterator_Specification
=> 543, -- (0.000) 8 slots
483 N_Private_Extension_Declaration
=> 540, -- (0.000) 8 slots
484 N_Formal_Signed_Integer_Type_Definition
=> 512, -- (0.000) 4 slots
485 E_Modular_Integer_Subtype
=> 490, -- (0.000) 44 slots
486 N_Component_Clause
=> 468, -- (0.000) 7 slots
487 E_Signed_Integer_Type
=> 399, -- (0.000) 43 slots
488 N_Op_Minus
=> 356, -- (0.000) 7 slots
489 N_Raise_Expression
=> 337, -- (0.000) 8 slots
490 N_Case_Expression_Alternative
=> 336, -- (0.000) 8 slots
491 N_Op_Expon
=> 280, -- (0.000) 8 slots
492 N_Abstract_Subprogram_Declaration
=> 250, -- (0.000) 6 slots
493 E_Modular_Integer_Type
=> 232, -- (0.000) 44 slots
494 N_Modular_Type_Definition
=> 214, -- (0.000) 7 slots
495 N_Compound_Statement
=> 212, -- (0.000) 6 slots
496 N_Free_Statement
=> 209, -- (0.000) 8 slots
497 N_Record_Representation_Clause
=> 197, -- (0.000) 9 slots
498 N_Access_Procedure_Definition
=> 195, -- (0.000) 6 slots
499 E_Limited_Private_Subtype
=> 178, -- (0.000) 48 slots
500 N_Access_Function_Definition
=> 172, -- (0.000) 7 slots
501 N_Op_Mod
=> 163, -- (0.000) 8 slots
502 N_Validate_Unchecked_Conversion
=> 156, -- (0.000) 5 slots
503 E_Anonymous_Access_Subprogram_Type
=> 155, -- (0.000) 44 slots
504 N_Op_Rem
=> 147, -- (0.000) 8 slots
505 N_Formal_Incomplete_Type_Definition
=> 140, -- (0.000) 4 slots
506 N_Signed_Integer_Type_Definition
=> 137, -- (0.000) 6 slots
507 N_Case_Expression
=> 132, -- (0.000) 7 slots
508 N_Op_Plus
=> 129, -- (0.000) 7 slots
509 E_Incomplete_Subtype
=> 129, -- (0.000) 48 slots
510 N_Op_Abs
=> 119, -- (0.000) 7 slots
511 N_Op_Shift_Right
=> 109, -- (0.000) 8 slots
512 E_Floating_Point_Subtype
=> 94, -- (0.000) 43 slots
513 N_Op_Shift_Left
=> 72, -- (0.000) 8 slots
514 E_Floating_Point_Type
=> 59, -- (0.000) 43 slots
515 N_Formal_Derived_Type_Definition
=> 53, -- (0.000) 7 slots
516 N_Formal_Floating_Point_Definition
=> 40, -- (0.000) 4 slots
517 N_Defining_Character_Literal
=> 0, -- 36, -- (0.000) 8 slots
518 N_Formal_Modular_Type_Definition
=> 27, -- (0.000) 4 slots
519 E_Ordinary_Fixed_Point_Subtype
=> 23, -- (0.000) 44 slots
520 E_Abstract_State
=> 22, -- (0.000) 48 slots
521 E_Named_Real
=> 20, -- (0.000) 19 slots
522 N_Floating_Point_Definition
=> 19, -- (0.000) 6 slots
523 N_Subunit
=> 17, -- (0.000) 8 slots
524 N_Enumeration_Representation_Clause
=> 17, -- (0.000) 9 slots
525 N_Entry_Declaration
=> 17, -- (0.000) 7 slots
526 N_Subprogram_Body_Stub
=> 16, -- (0.000) 8 slots
527 N_Unused_At_Start
=> 15, -- (0.000) 4 slots
528 E_Entry
=> 14, -- (0.000) 42 slots
529 N_Formal_Ordinary_Fixed_Point_Definition
=> 12, -- (0.000) 4 slots
530 E_Class_Wide_Subtype
=> 9, -- (0.000) 52 slots
531 E_Protected_Subtype
=> 8, -- (0.000) 48 slots
532 E_Ordinary_Fixed_Point_Type
=> 8, -- (0.000) 44 slots
533 N_Op_Xor
=> 7, -- (0.000) 8 slots
534 E_Generic_In_Out_Parameter
=> 7, -- (0.000) 31 slots
535 N_Protected_Type_Declaration
=> 6, -- (0.000) 8 slots
536 N_Protected_Definition
=> 6, -- (0.000) 8 slots
537 N_Task_Type_Declaration
=> 4, -- (0.000) 8 slots
538 N_Task_Definition
=> 4, -- (0.000) 8 slots
539 N_Protected_Body
=> 4, -- (0.000) 9 slots
540 E_Task_Subtype
=> 4, -- (0.000) 50 slots
541 E_Protected_Type
=> 4, -- (0.000) 49 slots
542 E_Access_Protected_Subprogram_Type
=> 4, -- (0.000) 45 slots
543 N_Entry_Call_Statement
=> 3, -- (0.000) 8 slots
544 E_Task_Type
=> 3, -- (0.000) 50 slots
545 N_Raise_Storage_Error
=> 2, -- (0.000) 6 slots
546 N_Package_Body_Stub
=> 2, -- (0.000) 8 slots
547 N_Generic_Procedure_Renaming_Declaration
=> 2, -- (0.000) 8 slots
548 N_Task_Body
=> 1, -- (0.000) 10 slots
549 N_Single_Protected_Declaration
=> 1, -- (0.000) 8 slots
550 N_Real_Range_Specification
=> 1, -- (0.000) 6 slots
551 N_Ordinary_Fixed_Point_Definition
=> 1, -- (0.000) 6 slots
552 N_Error
=> 1, -- (0.000) 6 slots
553 N_Entry_Body_Formal_Part
=> 1, -- (0.000) 6 slots
554 N_Entry_Body
=> 1, -- (0.000) 10 slots
555 N_Empty
=> 1, -- (0.000) 6 slots
556 N_Delay_Relative_Statement
=> 1, -- (0.000) 7 slots
557 E_Protected_Body
=> 1, -- (0.000) 35 slots
559 Between_Concrete_Node_And_Concrete_Entity_Types
=> 0,
561 -- The rest had frequency 0 (i.e. no such nodes were created in the
562 -- example), but we set them to 1, so we won't lose information when
563 -- multiplying. We use "others", so that if new node types are added,
564 -- we don't have to modify the table; new node types are unlikely to
568 -- N_Variable_Reference_Marker => 0, (0.000) 4 slots
569 -- N_Unused_At_End => 0, (0.000) 4 slots
570 -- N_Triggering_Alternative => 0, (0.000) 6 slots
571 -- N_Timed_Entry_Call => 0, (0.000) 5 slots
572 -- N_Terminate_Alternative => 0, (0.000) 6 slots
573 -- N_Task_Body_Stub => 0, (0.000) 8 slots
574 -- N_Target_Name => 0, (0.000) 5 slots
575 -- N_Single_Task_Declaration => 0, (0.000) 8 slots
576 -- N_Selective_Accept => 0, (0.000) 5 slots
577 -- N_Scil_Membership_Test => 0, (0.000) 5 slots
578 -- N_Scil_Dispatch_Table_Tag_Init => 0, (0.000) 4 slots
579 -- N_Scil_Dispatching_Call => 0, (0.000) 6 slots
580 -- N_Return_When_Statement => 0, (0.000) 7 slots
581 -- N_Requeue_Statement => 0, (0.000) 8 slots
582 -- N_Raise_When_Statement => 0, (0.000) 8 slots
583 -- N_Push_Storage_Error_Label => 0, (0.000) 4 slots
584 -- N_Push_Program_Error_Label => 0, (0.000) 4 slots
585 -- N_Push_Constraint_Error_Label => 0, (0.000) 4 slots
586 -- N_Protected_Body_Stub => 0, (0.000) 8 slots
587 -- N_Pop_Storage_Error_Label => 0, (0.000) 4 slots
588 -- N_Pop_Program_Error_Label => 0, (0.000) 4 slots
589 -- N_Pop_Constraint_Error_Label => 0, (0.000) 4 slots
590 -- N_Op_Shift_Right_Arithmetic => 0, (0.000) 8 slots
591 -- N_Op_Rotate_Right => 0, (0.000) 8 slots
592 -- N_Op_Rotate_Left => 0, (0.000) 8 slots
593 -- N_Mod_Clause => 0, (0.000) 7 slots
594 -- N_Iterated_Element_Association => 0, (0.000) 8 slots
595 -- N_Iterated_Component_Association => 0, (0.000) 8 slots
596 -- N_Goto_When_Statement => 0, (0.000) 8 slots
597 -- N_Generic_Package_Renaming_Declaration => 0, (0.000) 8 slots
598 -- N_Generic_Function_Renaming_Declaration => 0, (0.000) 8 slots
599 -- N_Formal_Decimal_Fixed_Point_Definition => 0, (0.000) 4 slots
600 -- N_Formal_Abstract_Subprogram_Declaration => 0, (0.000) 6 slots
601 -- N_Entry_Index_Specification => 0, (0.000) 7 slots
602 -- N_Entry_Call_Alternative => 0, (0.000) 6 slots
603 -- N_Digits_Constraint => 0, (0.000) 6 slots
604 -- N_Delta_Constraint => 0, (0.000) 6 slots
605 -- N_Delta_Aggregate => 0, (0.000) 8 slots
606 -- N_Delay_Until_Statement => 0, (0.000) 7 slots
607 -- N_Delay_Alternative => 0, (0.000) 7 slots
608 -- N_Decimal_Fixed_Point_Definition => 0, (0.000) 6 slots
609 -- N_Conditional_Entry_Call => 0, (0.000) 5 slots
610 -- N_Code_Statement => 0, (0.000) 7 slots
611 -- N_At_Clause => 0, (0.000) 9 slots
612 -- N_Asynchronous_Select => 0, (0.000) 5 slots
613 -- N_Accept_Statement => 0, (0.000) 8 slots
614 -- N_Accept_Alternative => 0, (0.000) 8 slots
615 -- N_Abort_Statement => 0, (0.000) 4 slots
616 -- N_Abortable_Part => 0, (0.000) 5 slots
617 -- E_Task_Body => 0, (0.000) 39 slots
618 -- E_Exception_Type => 0, (0.000) 45 slots
619 -- E_Entry_Index_Parameter => 0, (0.000) 19 slots
620 -- E_Entry_Family => 0, (0.000) 42 slots
621 -- E_Decimal_Fixed_Point_Type => 0, (0.000) 52 slots
622 -- E_Decimal_Fixed_Point_Subtype => 0, (0.000) 52 slots
623 -- E_Anonymous_Access_Protected_Subprogram_Type => 0, (0.000) 45 slots
626 end Gen_IL
.Internals
;