exp_smem.adb (Make_Shared_Var_Procs): For a protected type...

2009-04-15  Thomas Quinot  <quinot@adacore.com>

	* exp_smem.adb (Make_Shared_Var_Procs): For a protected type,
	instantiate generic shared object package with the corresponding
	record type.

From-SVN: r146083
This commit is contained in:
Thomas Quinot 2009-04-15 08:47:44 +00:00 committed by Arnaud Charlet
parent e0568eecc3
commit a808ba1bfb
2 changed files with 29 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2009-04-15 Thomas Quinot <quinot@adacore.com>
* exp_smem.adb (Make_Shared_Var_Procs): For a protected type,
instantiate generic shared object package with the corresponding
record type.
2009-04-15 Arnaud Charlet <charlet@adacore.com>
* system-linux-sparc.ads: Remove obsolete entries.

View File

@ -25,6 +25,7 @@
with Atree; use Atree;
with Einfo; use Einfo;
with Exp_Ch9; use Exp_Ch9;
with Exp_Util; use Exp_Util;
with Nmake; use Nmake;
with Namet; use Namet;
@ -286,10 +287,12 @@ package body Exp_Smem is
---------------------------
function Make_Shared_Var_Procs (N : Node_Id) return Node_Id is
Loc : constant Source_Ptr := Sloc (N);
Ent : constant Entity_Id := Defining_Identifier (N);
Typ : constant Entity_Id := Etype (Ent);
Vnm : String_Id;
Loc : constant Source_Ptr := Sloc (N);
Ent : constant Entity_Id := Defining_Identifier (N);
Typ : constant Entity_Id := Etype (Ent);
Vnm : String_Id;
Obj : Node_Id;
Obj_Typ : Entity_Id;
After : constant Node_Id := Next (N);
-- Node located right after N originally (after insertion of the SV
@ -316,7 +319,14 @@ package body Exp_Smem is
-- Construct generic package instantiation
-- package varG is new Shared_Var_Procs (Typ, var, "pkg.var");
-- package varG is new Shared_Var_Procs (typ, var, "pkg.var");
Obj := New_Occurrence_Of (Ent, Loc);
Obj_Typ := Typ;
if Is_Concurrent_Type (Typ) then
Obj := Convert_Concurrent (N => Obj, Typ => Typ);
Obj_Typ := Corresponding_Record_Type (Typ);
end if;
Instantiation :=
Make_Package_Instantiation (Loc,
@ -324,12 +334,14 @@ package body Exp_Smem is
Name =>
New_Occurrence_Of (RTE (RE_Shared_Var_Procs), Loc),
Generic_Associations => New_List (
Make_Generic_Association (Loc, Explicit_Generic_Actual_Parameter =>
New_Occurrence_Of (Typ, Loc)),
Make_Generic_Association (Loc, Explicit_Generic_Actual_Parameter =>
New_Occurrence_Of (Ent, Loc)),
Make_Generic_Association (Loc, Explicit_Generic_Actual_Parameter =>
Make_String_Literal (Loc, Vnm))));
Make_Generic_Association (Loc,
Explicit_Generic_Actual_Parameter =>
New_Occurrence_Of (Obj_Typ, Loc)),
Make_Generic_Association (Loc,
Explicit_Generic_Actual_Parameter => Obj),
Make_Generic_Association (Loc,
Explicit_Generic_Actual_Parameter =>
Make_String_Literal (Loc, Vnm))));
Insert_After_And_Analyze (N, Instantiation);