Commit a05e99a2 by Javier Miranda Committed by Arnaud Charlet

exp_ch3.adb (Component_Needs_Simple_Initialization): Add check for availability…

exp_ch3.adb (Component_Needs_Simple_Initialization): Add check for availability of RE_Interface_Tag.

2006-02-13  Javier Miranda  <miranda@adacore.com>
	    Gary Dismukes  <dismukes@adacore.com>

	* exp_ch3.adb (Component_Needs_Simple_Initialization): Add check for
	availability of RE_Interface_Tag.
	(Build_Initialization_Call): Fix wrong access to the discriminant value.
	(Freeze_Record_Type): Do not generate the tables associated with
	timed and conditional dispatching calls through synchronized
	interfaces if compiling under No_Dispatching_Calls restriction.
	When compiling for Ada 2005, for a nonabstract
	type with a null extension, call Make_Controlling_Function_Wrappers
	and insert the wrapper function declarations and bodies (the latter
	being appended as freeze actions).
	(Predefined_Primitive_Bodies): Do not generate the bodies of the
	predefined primitives associated with timed and conditional
	dispatching calls through synchronized interfaces if we are
	compiling under No_Dispatching_Calls.
	(Build_Init_Procedure):  Use RTE_Available to check if a run-time
	service is available before generating a call.
	(Make_Controlling_Function_Wrappers): New procedure.
	(Expand_N_Full_Type_Declaration): Create a class-wide master for
	access-to-limited-interfaces because they can be used to reference
	tasks that implement such limited interface.
	(Build_Offset_To_Top_Functions): Build the tree corresponding to the
	procedure spec and body of the Offset_To_Top function that is generated
	when the parent of a type with discriminants has secondary dispatch
	tables.
	(Init_Secondary_Tags): Handle the case in which the parent of the type
	containing secondary dispatch tables has discriminants to generate the
	correct arguments to call Set_Offset_To_Top.
	(Build_Record_Init_Proc): Add call to Build_Offset_To_Top_Functions.

	* a-tags.ads, a-tags.adb: (Check_Index): Removed.
	Add Wide_[Wide_]Expanded_Name.
	(Get_Predefined_Prim_Op_Address): New subprogram that provides exactly
	the same functionality of Get_Prim_Op_Address but applied to predefined
	primitive operations because the pointers to the predefined primitives
	are now saved in a separate table.
	(Parent_Size): Modified to get access to the separate table of primitive
	operations or the parent type.
	(Set_Predefined_Prim_Op_Address): New subprogram that provides the same
	functionality of Set_Prim_Op_Address but applied to predefined primitive
	operations.
	(Set_Signature): New subprogram used to store the signature of a DT.
	(Displace): If the Offset_To_Top value is not static then call the
	function generated by the expander to get such value; otherwise use
	the value stored in the table of interfaces.
	(Offset_To_Top): The type of the actual has been changed to Address to
	give the correct support to tagged types with discriminants. In this
	case this value is stored just immediately after the tag field.
	(Set_Offset_To_Top): Two new formals have been added to indicate if the
	offset_to_top value is static and hence pass this value to the run-time
	to store it in the table of interfaces, or else if this value is dynamic
	and then pass to the run-time the address of a function that is
	generated by the expander to provide this value for each object of the
	type.

	* rtsfind.ads (Default_Prin_Op_Count): Removed.
	(Default_Prim_Op_Count): New entity
	(Get_Predefined_Prim_Op_Address): New entity
	(Set_Predefined_Prim_Op_Address): New entity
	(RE_Set_Signature): New entity

From-SVN: r111059
parent 80d4224f
......@@ -502,6 +502,7 @@ package Rtsfind is
RE_Get_Entry_Index, -- Ada.Tags
RE_Get_External_Tag, -- Ada.Tags
RE_Get_Offset_Index, -- Ada.Tags
RE_Get_Predefined_Prim_Op_Address, -- Ada.Tags
RE_Get_Prim_Op_Address, -- Ada.Tags
RE_Get_Prim_Op_Kind, -- Ada.Tags
RE_Get_RC_Offset, -- Ada.Tags
......@@ -539,11 +540,13 @@ package Rtsfind is
RE_Set_Offset_Index, -- Ada.Tags
RE_Set_Offset_To_Top, -- Ada.Tags
RE_Set_OSD, -- Ada.Tags
RE_Set_Predefined_Prim_Op_Address, -- Ada.Tags
RE_Set_Prim_Op_Address, -- Ada.Tags
RE_Set_Prim_Op_Kind, -- Ada.Tags
RE_Set_RC_Offset, -- Ada.Tags
RE_Set_Remotely_Callable, -- Ada.Tags
RE_Set_SSD, -- Ada.Tags
RE_Set_Signature, -- Ada.Tags
RE_Set_Tagged_Kind, -- Ada.Tags
RE_Set_TSD, -- Ada.Tags
RE_Tag, -- Ada.Tags
......@@ -1656,6 +1659,7 @@ package Rtsfind is
RE_Get_Entry_Index => Ada_Tags,
RE_Get_External_Tag => Ada_Tags,
RE_Get_Offset_Index => Ada_Tags,
RE_Get_Predefined_Prim_Op_Address => Ada_Tags,
RE_Get_Prim_Op_Address => Ada_Tags,
RE_Get_Prim_Op_Kind => Ada_Tags,
RE_Get_RC_Offset => Ada_Tags,
......@@ -1693,11 +1697,13 @@ package Rtsfind is
RE_Set_Offset_Index => Ada_Tags,
RE_Set_Offset_To_Top => Ada_Tags,
RE_Set_OSD => Ada_Tags,
RE_Set_Predefined_Prim_Op_Address => Ada_Tags,
RE_Set_Prim_Op_Address => Ada_Tags,
RE_Set_Prim_Op_Kind => Ada_Tags,
RE_Set_RC_Offset => Ada_Tags,
RE_Set_Remotely_Callable => Ada_Tags,
RE_Set_SSD => Ada_Tags,
RE_Set_Signature => Ada_Tags,
RE_Set_Tagged_Kind => Ada_Tags,
RE_Set_TSD => Ada_Tags,
RE_Tag => Ada_Tags,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment