mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2025-12-21 19:03:28 +00:00
374 lines
15 KiB
Diff
374 lines
15 KiB
Diff
From 43bb629645c3f558bbba5e3cf4b5902dddae3a6a Mon Sep 17 00:00:00 2001
|
|
From: Gary Dismukes <dismukes@adacore.com>
|
|
Date: Tue, 21 Oct 2025 00:28:41 +0000
|
|
Subject: [PATCH] Updates to gpr2 sources to accommodate limited predefined
|
|
reference types
|
|
|
|
Various reference types declared in gpr2 sources must be changed to be
|
|
limited types due to their full types having components of reference types
|
|
coming from the predefined container packages, which are now declared as
|
|
limited types (as required by AI22-0082). Also, the associated reference
|
|
functions's bodies are revised to avoid copying limited references within
|
|
return statements.
|
|
|
|
Note that these changes are being made in advance of merging the changes
|
|
to the reference types in the predefined container generics in the GNAT
|
|
library, but are believed to be compatible with the nonlimited reference
|
|
types in the current library.
|
|
|
|
Issue: eng/toolchain/gnat#1098
|
|
---
|
|
src/build/gpr2-build-tree_db.adb | 24 ++++++++++++++++++++----
|
|
src/build/gpr2-build-tree_db.ads | 20 +++++++++++---------
|
|
src/build/gpr2-build-unit_info-list.adb | 5 +++--
|
|
src/build/gpr2-build-unit_info-list.ads | 5 +++--
|
|
src/lib/gpr2-log.adb | 4 ++--
|
|
src/lib/gpr2-log.ads | 9 +++++----
|
|
src/lib/gpr2-project-attribute-set.adb | 6 ++++--
|
|
src/lib/gpr2-project-attribute-set.ads | 12 +++++++-----
|
|
src/lib/gpr2-project-import-set.adb | 3 ++-
|
|
src/lib/gpr2-project-import-set.ads | 6 ++++--
|
|
10 files changed, 61 insertions(+), 33 deletions(-)
|
|
|
|
diff --git a/src/build/gpr2-build-tree_db.adb b/src/build/gpr2-build-tree_db.adb
|
|
index 2cb71c052..dca5fa4b7 100644
|
|
--- a/src/build/gpr2-build-tree_db.adb
|
|
+++ b/src/build/gpr2-build-tree_db.adb
|
|
@@ -101,7 +101,8 @@ package body GPR2.Build.Tree_Db is
|
|
is
|
|
Ref : constant Action_Maps.Reference_Type := Self.Actions.Reference (Id);
|
|
begin
|
|
- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref);
|
|
+ return (Element => Ref.Element.all'Unchecked_Access,
|
|
+ Ref => Self.Actions.Reference (Id));
|
|
end Action_Id_To_Reference;
|
|
|
|
----------------------
|
|
@@ -115,7 +116,8 @@ package body GPR2.Build.Tree_Db is
|
|
Ref : constant Action_Maps.Reference_Type :=
|
|
Iterator.Db.Actions.Reference (Pos.Pos);
|
|
begin
|
|
- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref);
|
|
+ return (Element => Ref.Element.all'Unchecked_Access,
|
|
+ Ref => Iterator.Db.Actions.Reference (Pos.Pos));
|
|
end Action_Reference;
|
|
|
|
----------------
|
|
@@ -354,7 +356,8 @@ package body GPR2.Build.Tree_Db is
|
|
Ref : constant Action_Maps.Constant_Reference_Type :=
|
|
Iterator.Db.Actions.Constant_Reference (Pos.Pos);
|
|
begin
|
|
- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref);
|
|
+ return (Element => Ref.Element.all'Unchecked_Access,
|
|
+ Ref => Iterator.Db.Actions.Constant_Reference (Pos.Pos));
|
|
end Constant_Action_Reference;
|
|
|
|
---------------------------------
|
|
@@ -379,7 +382,20 @@ package body GPR2.Build.Tree_Db is
|
|
when others =>
|
|
raise Internal_Error with "Wrong kind of cursor");
|
|
begin
|
|
- return (Element => Ref.Element.all'Unchecked_Access, Ref => Ref);
|
|
+ return (Element => Ref.Element.all'Unchecked_Access,
|
|
+ Ref =>
|
|
+ (case Pos.Current is
|
|
+ when Implicit_Inputs =>
|
|
+ Iterator.Db.Implicit_Inputs.Constant_Reference
|
|
+ (Pos.Map_Pos).Constant_Reference (Pos.Pos),
|
|
+ when Explicit_Inputs =>
|
|
+ Iterator.Db.Inputs.Constant_Reference
|
|
+ (Pos.Map_Pos).Constant_Reference (Pos.Pos),
|
|
+ when Outputs =>
|
|
+ Iterator.Db.Outputs.Constant_Reference
|
|
+ (Pos.Map_Pos).Constant_Reference (Pos.Pos),
|
|
+ when others =>
|
|
+ raise Program_Error with "Wrong kind of cursor"));
|
|
end Constant_Artifact_Reference;
|
|
|
|
------------
|
|
diff --git a/src/build/gpr2-build-tree_db.ads b/src/build/gpr2-build-tree_db.ads
|
|
index 00a5da22a..3e9fe6dcb 100644
|
|
--- a/src/build/gpr2-build-tree_db.ads
|
|
+++ b/src/build/gpr2-build-tree_db.ads
|
|
@@ -171,8 +171,9 @@ package GPR2.Build.Tree_Db is
|
|
(List : Artifacts_List) return Artifact_Iterators.Forward_Iterator'Class;
|
|
|
|
type Constant_Artifact_Reference_Type
|
|
- (Element : not null access constant Artifacts.Object'Class) is private
|
|
- with Implicit_Dereference => Element;
|
|
+ (Element : not null access constant Artifacts.Object'Class) is
|
|
+ limited private
|
|
+ with Implicit_Dereference => Element;
|
|
|
|
function Constant_Artifact_Reference
|
|
(Iterator : aliased Artifacts_List;
|
|
@@ -204,8 +205,8 @@ package GPR2.Build.Tree_Db is
|
|
(List : Actions_List) return Action_Iterators.Forward_Iterator'Class;
|
|
|
|
type Action_Reference_Type
|
|
- (Element : not null access Actions.Object'Class) is private
|
|
- with Implicit_Dereference => Element;
|
|
+ (Element : not null access Actions.Object'Class) is limited private
|
|
+ with Implicit_Dereference => Element;
|
|
|
|
function Action_Id_To_Reference
|
|
(Self : in out Object;
|
|
@@ -217,8 +218,9 @@ package GPR2.Build.Tree_Db is
|
|
Pos : Action_Cursor) return Action_Reference_Type;
|
|
|
|
type Constant_Action_Reference_Type
|
|
- (Element : not null access constant Actions.Object'Class) is private
|
|
- with Implicit_Dereference => Element;
|
|
+ (Element : not null access constant Actions.Object'Class) is
|
|
+ limited private
|
|
+ with Implicit_Dereference => Element;
|
|
|
|
function Constant_Action_Reference
|
|
(Iterator : aliased Actions_List;
|
|
@@ -452,7 +454,7 @@ private
|
|
|
|
type Constant_Artifact_Reference_Type
|
|
(Element : not null access constant Artifacts.Object'Class)
|
|
- is record
|
|
+ is limited record
|
|
Ref : Artifact_Sets.Constant_Reference_Type (Element);
|
|
end record;
|
|
|
|
@@ -477,13 +479,13 @@ private
|
|
|
|
type Action_Reference_Type
|
|
(Element : not null access Actions.Object'Class)
|
|
- is record
|
|
+ is limited record
|
|
Ref : Action_Maps.Reference_Type (Element);
|
|
end record;
|
|
|
|
type Constant_Action_Reference_Type
|
|
(Element : not null access constant Actions.Object'Class)
|
|
- is record
|
|
+ is limited record
|
|
Ref : Action_Maps.Constant_Reference_Type (Element);
|
|
end record;
|
|
|
|
diff --git a/src/build/gpr2-build-unit_info-list.adb b/src/build/gpr2-build-unit_info-list.adb
|
|
index 69213b9bb..549523efa 100644
|
|
--- a/src/build/gpr2-build-unit_info-list.adb
|
|
+++ b/src/build/gpr2-build-unit_info-list.adb
|
|
@@ -29,7 +29,8 @@ package body GPR2.Build.Unit_Info.List is
|
|
Self.Units.Constant_Reference (Unit_Map.Cursor (Position));
|
|
begin
|
|
return (Element => Ref.Element.all'Unchecked_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Self.Units.Constant_Reference
|
|
+ (Unit_Map.Cursor (Position)));
|
|
end Constant_Reference;
|
|
|
|
function Constant_Reference
|
|
@@ -140,7 +141,7 @@ package body GPR2.Build.Unit_Info.List is
|
|
Self.Units.Reference (Unit_Map.Cursor (Position));
|
|
begin
|
|
return (Element => Ref.Element.all'Unchecked_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Self.Units.Reference (Unit_Map.Cursor (Position)));
|
|
end Reference;
|
|
|
|
end GPR2.Build.Unit_Info.List;
|
|
diff --git a/src/build/gpr2-build-unit_info-list.ads b/src/build/gpr2-build-unit_info-list.ads
|
|
index 210ad9dc5..8d0bc027a 100644
|
|
--- a/src/build/gpr2-build-unit_info-list.ads
|
|
+++ b/src/build/gpr2-build-unit_info-list.ads
|
|
@@ -56,7 +56,8 @@ package GPR2.Build.Unit_Info.List is
|
|
Index : Unit_Index) return Unit_Info.Object;
|
|
-- Get a single unit
|
|
|
|
- type Reference_Type (Element : not null access Unit_Info.Object) is private
|
|
+ type Reference_Type
|
|
+ (Element : not null access Unit_Info.Object) is limited private
|
|
with Implicit_Dereference => Element;
|
|
|
|
function Reference
|
|
@@ -64,7 +65,7 @@ package GPR2.Build.Unit_Info.List is
|
|
Position : Cursor) return Reference_Type;
|
|
|
|
type Constant_Reference_Type
|
|
- (Element : not null access constant Unit_Info.Object) is private
|
|
+ (Element : not null access constant Unit_Info.Object) is limited private
|
|
with Implicit_Dereference => Element;
|
|
|
|
function Constant_Reference
|
|
diff --git a/src/lib/gpr2-log.adb b/src/lib/gpr2-log.adb
|
|
index 9711f6048..e66eafef6 100644
|
|
--- a/src/lib/gpr2-log.adb
|
|
+++ b/src/lib/gpr2-log.adb
|
|
@@ -93,7 +93,7 @@ package body GPR2.Log is
|
|
begin
|
|
return Constant_Reference_Type'
|
|
(Message => Ref.Element.all'Unrestricted_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Message_Set.Constant_Reference (Self.Store, Position.P));
|
|
end Constant_Reference;
|
|
|
|
-----------
|
|
@@ -256,7 +256,7 @@ package body GPR2.Log is
|
|
begin
|
|
return Reference_Type'
|
|
(Message => Ref.Element.all'Unrestricted_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Message_Set.Reference (Self.Store, Position.P));
|
|
end Reference;
|
|
|
|
--------------
|
|
diff --git a/src/lib/gpr2-log.ads b/src/lib/gpr2-log.ads
|
|
index e4616aa55..63bed5c54 100644
|
|
--- a/src/lib/gpr2-log.ads
|
|
+++ b/src/lib/gpr2-log.ads
|
|
@@ -82,7 +82,8 @@ package GPR2.Log is
|
|
package Log_Iterator is new Ada.Iterator_Interfaces (Cursor, Has_Element);
|
|
|
|
type Constant_Reference_Type
|
|
- (Message : not null access constant GPR2.Message.Object) is private
|
|
+ (Message : not null access constant GPR2.Message.Object)
|
|
+ is limited private
|
|
with Implicit_Dereference => Message;
|
|
|
|
function Constant_Reference
|
|
@@ -90,7 +91,7 @@ package GPR2.Log is
|
|
Position : Cursor) return Constant_Reference_Type;
|
|
|
|
type Reference_Type
|
|
- (Message : not null access GPR2.Message.Object) is private
|
|
+ (Message : not null access GPR2.Message.Object) is limited private
|
|
with Implicit_Dereference => Message;
|
|
|
|
function Reference
|
|
@@ -130,7 +131,7 @@ private
|
|
end record;
|
|
|
|
type Constant_Reference_Type
|
|
- (Message : not null access constant GPR2.Message.Object) is record
|
|
+ (Message : not null access constant GPR2.Message.Object) is limited record
|
|
-- We need to keep the underlying reference so that it is not cleared
|
|
-- upon return of the getter, and so that the container has the proper
|
|
-- busy state
|
|
@@ -138,7 +139,7 @@ private
|
|
end record;
|
|
|
|
type Reference_Type
|
|
- (Message : not null access GPR2.Message.Object) is record
|
|
+ (Message : not null access GPR2.Message.Object) is limited record
|
|
-- We need to keep the underlying reference so that it is not cleared
|
|
-- upon return of the getter, and so that the container has the proper
|
|
-- busy state
|
|
diff --git a/src/lib/gpr2-project-attribute-set.adb b/src/lib/gpr2-project-attribute-set.adb
|
|
index ca316eb4c..26b4b16bf 100644
|
|
--- a/src/lib/gpr2-project-attribute-set.adb
|
|
+++ b/src/lib/gpr2-project-attribute-set.adb
|
|
@@ -49,7 +49,8 @@ package body GPR2.Project.Attribute.Set is
|
|
begin
|
|
return Constant_Reference_Type'
|
|
(Attribute => Ref.Element.all'Unrestricted_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Self.Attributes.Constant_Reference
|
|
+ (Position.CM).Constant_Reference (Position.CA));
|
|
end Constant_Reference;
|
|
|
|
--------------
|
|
@@ -419,7 +420,8 @@ package body GPR2.Project.Attribute.Set is
|
|
begin
|
|
return Reference_Type'
|
|
(Attribute => Ref.Element.all'Unrestricted_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Self.Attributes.Reference (Position.CM).Reference
|
|
+ (Position.CA));
|
|
end Reference;
|
|
|
|
end GPR2.Project.Attribute.Set;
|
|
diff --git a/src/lib/gpr2-project-attribute-set.ads b/src/lib/gpr2-project-attribute-set.ads
|
|
index bc22704db..28c5186df 100644
|
|
--- a/src/lib/gpr2-project-attribute-set.ads
|
|
+++ b/src/lib/gpr2-project-attribute-set.ads
|
|
@@ -92,12 +92,14 @@ package GPR2.Project.Attribute.Set is
|
|
new Ada.Iterator_Interfaces (Cursor, Has_Element);
|
|
|
|
type Constant_Reference_Type
|
|
- (Attribute : not null access constant Project.Attribute.Object) is private
|
|
+ (Attribute : not null access constant Project.Attribute.Object)
|
|
+ is limited private
|
|
with Implicit_Dereference => Attribute;
|
|
|
|
type Reference_Type
|
|
- (Attribute : not null access Project.Attribute.Object) is private
|
|
- with Implicit_Dereference => Attribute;
|
|
+ (Attribute : not null access Project.Attribute.Object)
|
|
+ is limited private
|
|
+ with Implicit_Dereference => Attribute;
|
|
|
|
function Constant_Reference
|
|
(Self : aliased Object;
|
|
@@ -160,7 +162,7 @@ private
|
|
|
|
type Constant_Reference_Type
|
|
(Attribute : not null access constant Project.Attribute.Object)
|
|
- is record
|
|
+ is limited record
|
|
-- We need to keep the underlying reference so that it is not cleared
|
|
-- upon return of the getter, and so that the container has the proper
|
|
-- busy state
|
|
@@ -169,7 +171,7 @@ private
|
|
|
|
type Reference_Type
|
|
(Attribute : not null access Project.Attribute.Object)
|
|
- is record
|
|
+ is limited record
|
|
-- We need to keep the underlying reference so that it is not cleared
|
|
-- upon return of the getter, and so that the container has the proper
|
|
-- busy state
|
|
diff --git a/src/lib/gpr2-project-import-set.adb b/src/lib/gpr2-project-import-set.adb
|
|
index 55748c2b3..dc76b24c7 100644
|
|
--- a/src/lib/gpr2-project-import-set.adb
|
|
+++ b/src/lib/gpr2-project-import-set.adb
|
|
@@ -38,7 +38,8 @@ package body GPR2.Project.Import.Set is
|
|
begin
|
|
return Constant_Reference_Type'
|
|
(Import => Ref.Element.all'Unrestricted_Access,
|
|
- Ref => Ref);
|
|
+ Ref => Base_Name_Set.Constant_Reference
|
|
+ (Self.Set, Position.Current));
|
|
end Constant_Reference;
|
|
|
|
--------------
|
|
diff --git a/src/lib/gpr2-project-import-set.ads b/src/lib/gpr2-project-import-set.ads
|
|
index 67dae8e03..978f74686 100644
|
|
--- a/src/lib/gpr2-project-import-set.ads
|
|
+++ b/src/lib/gpr2-project-import-set.ads
|
|
@@ -66,7 +66,8 @@ package GPR2.Project.Import.Set is
|
|
new Ada.Iterator_Interfaces (Cursor, Has_Element);
|
|
|
|
type Constant_Reference_Type
|
|
- (Import : not null access constant Project.Import.Object) is private
|
|
+ (Import : not null access constant Project.Import.Object)
|
|
+ is limited private
|
|
with Implicit_Dereference => Import;
|
|
|
|
function Constant_Reference
|
|
@@ -93,7 +94,8 @@ private
|
|
Cursor'(Current => Base_Name_Set.No_Element);
|
|
|
|
type Constant_Reference_Type
|
|
- (Import : not null access constant Project.Import.Object) is record
|
|
+ (Import : not null access constant Project.Import.Object)
|
|
+ is limited record
|
|
-- We need to keep the underlying reference so that it is not cleared
|
|
-- upon return of the getter, and so that the container has the proper
|
|
-- busy state
|
|
--- a/src/build/gpr2-build-signature.adb 2025-12-06 22:06:07.534198947 +0100
|
|
+++ b/src/build/gpr2-build-signature.adb 2025-12-06 22:06:22.392020509 +0100
|
|
@@ -75,8 +75,6 @@
|
|
end loop;
|
|
end;
|
|
|
|
- JSON_Result.Value.Finalize;
|
|
-
|
|
return Signature;
|
|
|
|
exception
|