| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT COMPILER COMPONENTS -- |
| -- -- |
| -- E X P _ D I S P -- |
| -- -- |
| -- S p e c -- |
| -- -- |
| -- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- |
| -- -- |
| -- GNAT is free software; you can redistribute it and/or modify it under -- |
| -- terms of the GNU General Public License as published by the Free Soft- -- |
| -- ware Foundation; either version 2, or (at your option) any later ver- -- |
| -- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- |
| -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- |
| -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- |
| -- for more details. You should have received a copy of the GNU General -- |
| -- Public License distributed with GNAT; see file COPYING. If not, write -- |
| -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- |
| -- MA 02111-1307, USA. -- |
| -- -- |
| -- GNAT was originally developed by the GNAT team at New York University. -- |
| -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| -- This package contains routines involved in tagged types and dynamic |
| -- dispatching expansion |
| |
| with Types; use Types; |
| package Exp_Disp is |
| |
| type DT_Access_Action is |
| (CW_Membership, |
| DT_Entry_Size, |
| DT_Prologue_Size, |
| Get_Expanded_Name, |
| Get_External_Tag, |
| Get_Prim_Op_Address, |
| Get_RC_Offset, |
| Get_Remotely_Callable, |
| Get_TSD, |
| Inherit_DT, |
| Inherit_TSD, |
| Register_Tag, |
| Set_Expanded_Name, |
| Set_External_Tag, |
| Set_Prim_Op_Address, |
| Set_RC_Offset, |
| Set_Remotely_Callable, |
| Set_TSD, |
| TSD_Entry_Size, |
| TSD_Prologue_Size); |
| |
| function Fill_DT_Entry |
| (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 Make_DT_Access_Action |
| (Typ : Entity_Id; |
| Action : DT_Access_Action; |
| Args : List_Id) |
| return Node_Id; |
| -- Generate a call to one of the Dispatch Table Access Subprograms defined |
| -- in Ada.Tags or in Interfaces.Cpp |
| |
| function Make_DT (Typ : Entity_Id) return List_Id; |
| -- Expand the declarations for the Dispatch Table (or the Vtable in |
| -- the case of type whose ancestor is a CPP_Class) |
| |
| procedure Set_All_DT_Position (Typ : Entity_Id); |
| -- Set the DT_Position field for each primitive operation. In the CPP |
| -- Class case check that no pragma CPP_Virtual is missing and that the |
| -- DT_Position are coherent |
| |
| procedure Expand_Dispatching_Call (Call_Node : Node_Id); |
| -- Expand the call to the operation through the dispatch table and perform |
| -- the required tag checks when appropriate. For CPP types the call is |
| -- done through the Vtable (tag checks are not relevant) |
| |
| procedure Set_Default_Constructor (Typ : Entity_Id); |
| -- Typ is a CPP_Class type. Create the Init procedure of that type to |
| -- be the default constructor (i.e. the function returning this type, |
| -- having a pragma CPP_Constructor and no parameter) |
| |
| function Get_Remotely_Callable (Obj : Node_Id) return Node_Id; |
| -- Return an expression that holds True if the object can be transmitted |
| -- onto another partition according to E.4 (18) |
| |
| end Exp_Disp; |