a-tags.ads, a-tags.adb:
authorJavier Miranda <miranda@adacore.com>
Tue, 31 Oct 2006 17:50:11 +0000 (18:50 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 31 Oct 2006 17:50:11 +0000 (18:50 +0100)
commitbfef8d0d62ede027e717a7ab1900bee71b54e708
treea8db6c2b8b000b3fdd656234dd9be6d790c13218
parent3cb8344bd34b50012b5c43c7d34d01472f41e026
a-tags.ads, a-tags.adb:

2006-10-31  Javier Miranda  <miranda@adacore.com>

* a-tags.ads, a-tags.adb:
(Predefined_DT): New function that improves readability of the code.
(Get_Predefined_Prim_Op_Address, Set_Predefined_Prim_Op_Address,
Inherit_DT): Use the new function Predefined_DT to improve code
readability.
(Register_Interface_Tag): Update assertion.
(Set_Interface_Table): Update assertion.
(Interface_Ancestor_Tags): New subprogram required to implement AI-405:
determining progenitor interfaces in Tags.
(Inherit_CPP_DT): New subprogram.

        * exp_disp.adb (Expand_Interface_Thunk): Suppress checks during the
analysis of the thunk code.
        (Expand_Interface_Conversion): Handle run-time conversion of
        access to class wide types.
(Expand_Dispatching_Call): When generating the profile for the
subprogram itype for a dispatching operation, properly terminate the
formal parameters chaind list (set the Next_Entity of the last formal
to Empty).
(Collect_All_Interfaces): Removed. This routine has been moved to
sem_util and renamed as Collect_All_Abstract_Interfaces.
(Set_All_DT_Position): Hidden entities associated with abstract
interface primitives are not taken into account in the check for
3.9.3(10); this check is done with the aliased entity.
(Make_DT, Set_All_DT_Position): Enable full ABI compatibility for
interfacing with CPP by default.
(Expand_Interface_Conversion): Add missing support for static conversion
from an interface to a tagged type.
(Collect_All_Interfaces): Add new out formal containing the list of
abstract interface types to cleanup the subprogram Make_DT.
(Make_DT): Update the code to generate the table of interfaces in case
of abstract interface types.
(Is_Predefined_Dispatching_Alias): New function that returns true if
a primitive is not a predefined dispatching primitive but it is an
alias of a predefined dispatching primitive.
(Make_DT): If the ancestor of the type is a CPP_Class and we are
compiling under full ABI compatibility mode we avoid the generation of
calls to run-time services that fill the dispatch tables because under
this mode we currently inherit the dispatch tables in the IP subprogram.
(Write_DT): Emit an "is null" indication for a null procedure primitive.
(Expand_Interface_Conversion): Use an address as the type of the formal
of the internally built function that handles the case in which the
target type is an access type.

From-SVN: r118244
gcc/ada/a-tags.adb
gcc/ada/a-tags.ads
gcc/ada/exp_disp.adb