einfo.ads (Abstract_Interface_Alias): Renamed as Interface_Alias.
authorJavier Miranda <miranda@adacore.com>
Mon, 26 May 2008 13:43:18 +0000 (15:43 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 26 May 2008 13:43:18 +0000 (15:43 +0200)
commitce2b6ba521252796f61a25ada77f3e55ea97b36d
tree79adfbe7ee2b0d0ba21e43d27188487c0ef9a3bb
parente5f005e18cf7763078e93e3da1747cb3c964b0b3
einfo.ads (Abstract_Interface_Alias): Renamed as Interface_Alias.

2008-05-26  Javier Miranda  <miranda@adacore.com>

* einfo.ads (Abstract_Interface_Alias): Renamed as Interface_Alias.
(Set_Abstract_Interface_Alias): Renamed as Set_Interface_Alias.
(Is_Internal): Adding documentation on internal entities that have
  attribute Interface_Alias (old attribute Abstract_Interface_Alias)

* einfo.adb (Abstract_Interface_Alias): Renamed as Interface_Alias.
(Set_Abstract_Interface_Alias): Renamed as Set_Interface_Alias.
  Added assertion to force entities with this attribute to have
  attribute Is_Internal set to True.
(Next_Tag_Component): Simplify assertion using attribute Is_Tag.

* sem_ch3.adb (Derive_Interface_Subprograms): This subprogram has been
  renamed as Derive_Progenitor_Subprograms. In addition, its code is
  a new implementation.
(Add_Interface_Tag_Components): Remove special management of
synchronized interfaces.
(Analyze_Interface_Declaration): Minor reformating
(Build_Derived_Record_Type): Minor reformating
(Check_Abstract_Overriding): Avoid reporting error in case of abstract
  predefined primitive inherited from interface type because the body of
  internally generated predefined primitives of tagged types are generated
  later by Freeze_Type
(Derive_Subprogram): Avoid generating an internal name if the parent
  subprogram overrides an interface primitive.
(Derive_Subprograms): New implementation that keeps separate the
  management of tagged types not implementing interfaces, from tagged
  types that implement interfaces.
(Is_Progenitor): New implementation.
(Process_Full_View): Add documentation
(Record_Type_Declaration): Replace call to Derive_Interface_Subprograms
  by call to Derive_Progenitor_Subprograms.

* sem_ch6.ads (Is_Interface_Conformant): New subprogram.
(Check_Subtype_Conformant, Subtype_Conformant): Adding new argument
  Skip_Controlling_Formals.

* sem_ch6.adb (Is_Interface_Conformant): New subprogram.
(Check_Conventions): New implementation. Remove local subprogram
  Skip_Check. Remove formal Search_From of routine Check_Convention.
(Check_Subtype_Conformant, Subtype_Conformant): Adding new argument
  Skip_Controlling_Formals.
(New_Overloaded_Entity): Enable addition of predefined dispatching
  operations.

* sem_disp.ads
(Find_Primitive_Covering_Interface): New subprogram.

* sem_disp.adb (Check_Dispatching_Operation): Disable registering
  the task body procedure as a primitive of the corresponding tagged
  type.
(Check_Operation_From_Private_Type): Avoid adding twice an entity
  to the list of primitives.
(Find_Primitive_Covering_Interface): New subprogram.
(Override_Dispatching_Operation): Add documentation.

* sem_type.adb (Covers): Minor reformatings

* sem_util.ads (Collect_Abstract_Interfaces): Renamed as
Collect_Interfaces.
  Rename formal.
(Has_Abstract_Interfaces): Renamed as Has_Interfaces.
(Implements_Interface): New subprogram.
(Is_Parent): Removed.
(Primitive_Names_Match): New subprogram.
(Remove_Homonym): Moved here from Derive_Interface_Subprograms.
(Ultimate_Alias): New subprogram.

* sem_util.adb (Collect_Abstract_Interfaces): Renamed as
Collect_Interfaces.
  Remove special management for synchronized types. Rename formal. Remove
  internal subprograms Interface_Present_In_Parent and Add_Interface.
(Has_Abstract_Interfaces): Renamed as Has_Interfaces. Replace assertion
  on non-record types by code to return false in such case.
(Implements_Interface): New subprogram.
(Is_Parent): Removed. No special management is now required for
  synchronized types covering interfaces.
(Primitive_Names_Match): New subprogram.
(Remove_Homonym): Moved here from Derive_Interface_Subprograms.
(Ultimate_Alias): New subprogram.

* exp_ch3.adb (Add_Internal_Interface_Entities): New subprogram.
  Add internal entities associated with secondary dispatch tables to
  the list of tagged type primitives that are not interfaces.
(Freeze_Record_Type): Add new call to Add_Internal_Interface_Entities
(Make_Predefined_Primitive_Specs): Code reorganization to improve
  the management of predefined equality operator. In addition, if
  the type has an equality function corresponding with a primitive
  defined in an interface type, the inherited equality is abstract
  as well, and no body can be created for it.

* exp_disp.ads (Is_Predefined_Dispatching_Operation): Moved from
  exp_util to exp_disp.
(Is_Predefined_Interface_Primitive): New subprogram. Returns True if
  an entity corresponds with one of the predefined primitives required
  to implement interfaces.
Update copyright notice.

* exp_disp.adb (Set_All_DT_Position): Add assertion. Exclude from the
  final check on abstract subprograms all the primitives associated with
  interface primitives because they must be visible in the public and
  private part.
(Write_DT): Use Find_Dispatching_Type to locate the name of the
interface type. This allows the use of this routine, for debugging
purposes, when the tagged type is not fully decorated.
(Is_Predefined_Dispatching_Operation): Moved from exp_util to exp_disp.
  Factorize code calling new subprogram Is_Predefined_Interface_Primitive.
(Is_Predefined_Interface_Primitive): New subprogram. Returns True if an
  entity corresponds with one of the predefined primitives required to
  implement interfaces.

* exp_util.adb (Find_Interface_ADT): New implementation
(Find_Interface): Removed.

* sprint.adb (Sprint_Node_Actual): Generate missing output for the
  list of interfaces associated with nodes
N_Formal_Derived_Type_Definition and N_Private_Extension_Declaration.

From-SVN: r135923
29 files changed:
gcc/ada/einfo.adb
gcc/ada/einfo.ads
gcc/ada/exp_aggr.adb
gcc/ada/exp_ch13.adb
gcc/ada/exp_ch3.adb
gcc/ada/exp_ch4.adb
gcc/ada/exp_ch6.adb
gcc/ada/exp_ch9.adb
gcc/ada/exp_disp.adb
gcc/ada/exp_disp.ads
gcc/ada/exp_intr.adb
gcc/ada/exp_util.adb
gcc/ada/exp_util.ads
gcc/ada/freeze.adb
gcc/ada/lib-xref.adb
gcc/ada/sem_cat.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch3.ads
gcc/ada/sem_ch4.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_ch6.ads
gcc/ada/sem_ch9.adb
gcc/ada/sem_disp.adb
gcc/ada/sem_disp.ads
gcc/ada/sem_type.adb
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads
gcc/ada/sprint.adb