1with System;
2
3package Loop_Optimization2 is
4
5   type Prim_Ptr is access procedure;
6   type Address_Array is array (Positive range <>) of Prim_Ptr;
7
8   subtype Dispatch_Table is Address_Array (1 .. 1);
9
10   type Tag is access all Dispatch_Table;
11
12   type Tag_Array is array (Positive range <>) of Tag;
13
14   function Interface_Ancestor_Tags (T : Tag) return Tag_Array;
15
16   type Interface_Data_Element is record
17      Iface_Tag : Tag;
18   end record;
19
20   type Interfaces_Array is array (Natural range <>) of Interface_Data_Element;
21
22   type Interface_Data (Nb_Ifaces : Positive) is record
23      Ifaces_Table : Interfaces_Array (1 .. Nb_Ifaces);
24   end record;
25
26   type Interface_Data_Ptr is access all Interface_Data;
27
28   type Type_Specific_Data (Idepth : Natural) is record
29      Interfaces_Table : Interface_Data_Ptr;
30   end record;
31
32   type Type_Specific_Data_Ptr is access all Type_Specific_Data;
33   pragma No_Strict_Aliasing (Type_Specific_Data_Ptr);
34
35   subtype Predef_Prims_Table is Address_Array (1 .. 16);
36   type Predef_Prims_Table_Ptr is access Predef_Prims_Table;
37
38   type Addr_Ptr is access System.Address;
39   pragma No_Strict_Aliasing (Addr_Ptr);
40
41end Loop_Optimization2;
42