Commit f9622ab1 by Arnaud Charlet

exp_atag.adb (Build_Inherit_Prims): Addition of a new formal.

	* exp_atag.adb (Build_Inherit_Prims): Addition of a new formal.
	(Build_Inherit_Predefined_Prims): Replace occurrences of Default_
	Prim_Op_Count by Max_Predef_Prims.

From-SVN: r127468
parent 33c423c8
...@@ -30,6 +30,7 @@ with Exp_Util; use Exp_Util; ...@@ -30,6 +30,7 @@ with Exp_Util; use Exp_Util;
with Nlists; use Nlists; with Nlists; use Nlists;
with Nmake; use Nmake; with Nmake; use Nmake;
with Rtsfind; use Rtsfind; with Rtsfind; use Rtsfind;
with Sem_Util; use Sem_Util;
with Stand; use Stand; with Stand; use Stand;
with Snames; use Snames; with Snames; use Snames;
with Tbuild; use Tbuild; with Tbuild; use Tbuild;
...@@ -139,7 +140,7 @@ package body Exp_Atag is ...@@ -139,7 +140,7 @@ package body Exp_Atag is
Make_Assignment_Statement (Loc, Make_Assignment_Statement (Loc,
Name => Make_Identifier (Loc, Name_uF), Name => Make_Identifier (Loc, Name_uF),
Expression => New_Reference_To (Standard_True, Loc)), Expression => New_Reference_To (Standard_True, Loc)),
Make_Return_Statement (Loc)))); Make_Simple_Return_Statement (Loc))));
end Build_Common_Dispatching_Select_Statements; end Build_Common_Dispatching_Select_Statements;
------------------------- -------------------------
...@@ -253,40 +254,67 @@ package body Exp_Atag is ...@@ -253,40 +254,67 @@ package body Exp_Atag is
function Build_Inherit_Prims function Build_Inherit_Prims
(Loc : Source_Ptr; (Loc : Source_Ptr;
Typ : Entity_Id;
Old_Tag_Node : Node_Id; Old_Tag_Node : Node_Id;
New_Tag_Node : Node_Id; New_Tag_Node : Node_Id;
Num_Prims : Nat) return Node_Id Num_Prims : Nat) return Node_Id
is is
begin begin
return if RTE_Available (RE_DT) then
Make_Assignment_Statement (Loc, return
Name => Make_Assignment_Statement (Loc,
Make_Slice (Loc, Name =>
Prefix => Make_Slice (Loc,
Make_Selected_Component (Loc, Prefix =>
Prefix => Make_Selected_Component (Loc,
Build_DT (Loc, New_Tag_Node), Prefix =>
Selector_Name => Build_DT (Loc, New_Tag_Node),
New_Reference_To Selector_Name =>
(RTE_Record_Component (RE_Prims_Ptr), Loc)), New_Reference_To
Discrete_Range => (RTE_Record_Component (RE_Prims_Ptr), Loc)),
Make_Range (Loc, Discrete_Range =>
Low_Bound => Make_Integer_Literal (Loc, 1), Make_Range (Loc,
High_Bound => Make_Integer_Literal (Loc, Num_Prims))), Low_Bound => Make_Integer_Literal (Loc, 1),
High_Bound => Make_Integer_Literal (Loc, Num_Prims))),
Expression =>
Make_Slice (Loc, Expression =>
Prefix => Make_Slice (Loc,
Make_Selected_Component (Loc, Prefix =>
Prefix => Make_Selected_Component (Loc,
Build_DT (Loc, Old_Tag_Node), Prefix =>
Selector_Name => Build_DT (Loc, Old_Tag_Node),
New_Reference_To Selector_Name =>
(RTE_Record_Component (RE_Prims_Ptr), Loc)), New_Reference_To
Discrete_Range => (RTE_Record_Component (RE_Prims_Ptr), Loc)),
Make_Range (Loc, Discrete_Range =>
Low_Bound => Make_Integer_Literal (Loc, 1), Make_Range (Loc,
High_Bound => Make_Integer_Literal (Loc, Num_Prims)))); Low_Bound => Make_Integer_Literal (Loc, 1),
High_Bound => Make_Integer_Literal (Loc, Num_Prims))));
else
return
Make_Assignment_Statement (Loc,
Name =>
Make_Slice (Loc,
Prefix =>
Unchecked_Convert_To
(Node (Last_Elmt (Access_Disp_Table (Typ))),
New_Tag_Node),
Discrete_Range =>
Make_Range (Loc,
Low_Bound => Make_Integer_Literal (Loc, 1),
High_Bound => Make_Integer_Literal (Loc, Num_Prims))),
Expression =>
Make_Slice (Loc,
Prefix =>
Unchecked_Convert_To
(Node (Last_Elmt (Access_Disp_Table (Typ))),
Old_Tag_Node),
Discrete_Range =>
Make_Range (Loc,
Low_Bound => Make_Integer_Literal (Loc, 1),
High_Bound => Make_Integer_Literal (Loc, Num_Prims))));
end if;
end Build_Inherit_Prims; end Build_Inherit_Prims;
------------------------------- -------------------------------
...@@ -342,39 +370,64 @@ package body Exp_Atag is ...@@ -342,39 +370,64 @@ package body Exp_Atag is
New_Tag_Node : Node_Id) return Node_Id New_Tag_Node : Node_Id) return Node_Id
is is
begin begin
return if RTE_Available (RE_DT) then
Make_Assignment_Statement (Loc, return
Name => Make_Assignment_Statement (Loc,
Make_Slice (Loc, Name =>
Prefix => Make_Slice (Loc,
Make_Explicit_Dereference (Loc, Prefix =>
Unchecked_Convert_To (RTE (RE_Predef_Prims_Table_Ptr), Make_Explicit_Dereference (Loc,
Make_Selected_Component (Loc, Unchecked_Convert_To (RTE (RE_Predef_Prims_Table_Ptr),
Prefix => Make_Selected_Component (Loc,
Build_DT (Loc, New_Tag_Node), Prefix =>
Selector_Name => Build_DT (Loc, New_Tag_Node),
New_Reference_To Selector_Name =>
(RTE_Record_Component (RE_Predef_Prims), Loc)))), New_Reference_To
Discrete_Range => Make_Range (Loc, (RTE_Record_Component (RE_Predef_Prims), Loc)))),
Make_Integer_Literal (Loc, Uint_1), Discrete_Range => Make_Range (Loc,
New_Reference_To (RTE (RE_Default_Prim_Op_Count), Loc))), Make_Integer_Literal (Loc, Uint_1),
New_Reference_To (RTE (RE_Max_Predef_Prims), Loc))),
Expression =>
Make_Slice (Loc, Expression =>
Prefix => Make_Slice (Loc,
Make_Explicit_Dereference (Loc, Prefix =>
Unchecked_Convert_To (RTE (RE_Predef_Prims_Table_Ptr), Make_Explicit_Dereference (Loc,
Make_Selected_Component (Loc, Unchecked_Convert_To (RTE (RE_Predef_Prims_Table_Ptr),
Prefix => Make_Selected_Component (Loc,
Build_DT (Loc, Old_Tag_Node), Prefix =>
Selector_Name => Build_DT (Loc, Old_Tag_Node),
New_Reference_To Selector_Name =>
(RTE_Record_Component (RE_Predef_Prims), Loc)))), New_Reference_To
Discrete_Range => (RTE_Record_Component (RE_Predef_Prims), Loc)))),
Make_Range (Loc,
Low_Bound => Make_Integer_Literal (Loc, 1), Discrete_Range =>
High_Bound => Make_Range (Loc,
New_Reference_To (RTE (RE_Default_Prim_Op_Count), Loc)))); Low_Bound => Make_Integer_Literal (Loc, 1),
High_Bound =>
New_Reference_To (RTE (RE_Max_Predef_Prims), Loc))));
else
return
Make_Assignment_Statement (Loc,
Name =>
Make_Slice (Loc,
Prefix =>
Make_Explicit_Dereference (Loc,
Build_Predef_Prims (Loc, New_Tag_Node)),
Discrete_Range => Make_Range (Loc,
Make_Integer_Literal (Loc, Uint_1),
New_Reference_To (RTE (RE_Max_Predef_Prims), Loc))),
Expression =>
Make_Slice (Loc,
Prefix =>
Make_Explicit_Dereference (Loc,
Build_Predef_Prims (Loc, Old_Tag_Node)),
Discrete_Range =>
Make_Range (Loc,
Low_Bound => Make_Integer_Literal (Loc, 1),
High_Bound =>
New_Reference_To (RTE (RE_Max_Predef_Prims), Loc))));
end if;
end Build_Inherit_Predefined_Prims; end Build_Inherit_Predefined_Prims;
------------------------ ------------------------
......
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