summaryrefslogtreecommitdiff
path: root/gcc/ada/exp_disp.ads
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-07 09:42:10 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-07-07 09:42:10 +0000
commite1c20931c7c1473851ea4b05e4d1aec6a74ec5aa (patch)
tree638e14e666a1b32a2339a40ce7405fbcc3e2c6e4 /gcc/ada/exp_disp.ads
parent0ac6f3b3f98435ab28c9cdc020c75d7134ea8ca7 (diff)
downloadgcc-e1c20931c7c1473851ea4b05e4d1aec6a74ec5aa.tar.gz
2005-07-07 Javier Miranda <miranda@adacore.com>
* exp_ch3.adb (Build_Record_Init_Proc/Freeze_Record_Type): Reimplementation of the support for abstract interface types in order to leave the code more clear and easy to maintain. * exp_ch6.adb (Freeze_Subprogram): Reimplementation of the support for abstract interface types in order to leave the code clearer and easier to maintain. * exp_disp.ads, exp_disp.adb (Fill_DT_Entry): Part of its functionality is now implemented by the new subprogram Fill_Secondary_DT_Entry. (Fill_Secondary_DT_Entry): Generate the code necessary to fill the appropriate entry of the secondary dispatch table. (Make_DT): Add code to inherit the secondary dispatch tables of the ancestors. * exp_util.adb (Find_Interface_Tag/Find_Interface_ADT): Instead of implementing both functionalities by means of a common routine, each routine has its own code. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101694 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/exp_disp.ads')
-rw-r--r--gcc/ada/exp_disp.ads21
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/ada/exp_disp.ads b/gcc/ada/exp_disp.ads
index 0da765b904d..10900d04103 100644
--- a/gcc/ada/exp_disp.ads
+++ b/gcc/ada/exp_disp.ads
@@ -55,12 +55,20 @@ package Exp_Disp is
TSD_Prologue_Size);
function Fill_DT_Entry
- (Loc : Source_Ptr;
- Prim : Entity_Id;
- Thunk_Id : Entity_Id := Empty) return Node_Id;
+ (Loc : Source_Ptr;
+ Prim : Entity_Id) return Node_Id;
-- Generate the code necessary to fill the appropriate entry of the
-- dispatch table of Prim's controlling type with Prim's address.
+ function Fill_Secondary_DT_Entry
+ (Loc : Source_Ptr;
+ Prim : Entity_Id;
+ Thunk_Id : Entity_Id;
+ Iface_DT_Ptr : Entity_Id) return Node_Id;
+ -- (Ada 2005): Generate the code necessary to fill the appropriate entry of
+ -- the secondary dispatch table of Prim's controlling type with Thunk_Id's
+ -- address.
+
procedure Make_Abstract_Interface_DT
(AI_Tag : Entity_Id;
Acc_Disp_Tables : in out Elist_Id;
@@ -102,9 +110,10 @@ package Exp_Disp is
-- secondary dispatch table
function Expand_Interface_Thunk
- (N : Node_Id;
- Thunk_Id : Entity_Id;
- Iface_Tag : Entity_Id) return Node_Id;
+ (N : Node_Id;
+ Thunk_Alias : Node_Id;
+ Thunk_Id : Entity_Id;
+ Iface_Tag : Entity_Id) return Node_Id;
-- Ada 2005 (AI-251): When a tagged type implements abstract interfaces we
-- generate additional subprograms (thunks) to have a layout compatible
-- with the C++ ABI. The thunk modifies the value of the first actual of