summaryrefslogtreecommitdiff
path: root/gcc/ada/elists.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-13 16:31:00 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-13 16:31:00 +0000
commit28ff117fcc4265431367a02b6c28a7312cbbeb3e (patch)
treed2a660b065458b989b4a8888b359b237367e4a4a /gcc/ada/elists.adb
parent14ac37284360c1b3b44c02e6398d9bdd2996f06e (diff)
downloadgcc-28ff117fcc4265431367a02b6c28a7312cbbeb3e.tar.gz
2013-10-13 Hristian Kirtchev <kirtchev@adacore.com>
* einfo.adb: Add node/list usage for Refined_State and Refinement_Constituents. (Get_Pragma): Update the initialization of Is_CDG to include Refined_Global and Refined_Depends. Rename constant Delayed to In_Contract and update all of its occurrences. (Is_Non_Volatile_State): New routine. (Is_Volatile_State): Removed. (Refined_State): New routine. (Refinement_Constituents): New routine. (Set_Refined_State): New routine. (Set_Refinement_Constituents): New routine. (Write_Field8_Name): Add output for Refinement_Constituents. (Write_Field10_Name): Add output for Refined_State. * einfo.ads: Add new synthesized attribute Is_Non_Volatile_State. Remove synthesized attribute Is_Volatile_State. Add new attributes Refined_State and Refinement_Constituents along with usage in nodes. (Get_Pragma): Update the comment on usage. (Is_Non_Volatile_State): New routine. (Is_Volatile_State): Removed. (Refined_State): New routine and pragma Inline. (Refinement_Constituents): New routine and pragma Inline. (Set_Refined_State): New routine and pragma Inline. (Set_Refinement_Constituents): New routine and pragma Inline. * elists.ads, elists.adb (Clone): Removed. (New_Copy_Elist): New routine. (Remove): New routine. * sem_ch3.adb (Analyze_Declarations): Use Defining_Entity to get the entity of the subprogram [body]. (Analyze_Object_Declaration): Add initialization for Refined_State. * sem_ch6.adb (Analyze_Subprogram_Body_Contract): Add processing for Refined_Global and Refined_Depends. Emit an error when the body requires Refined_Global, but the aspect/pragma is not present. * sem_ch6.ads (Analyze_Subprogram_Body_Contract): Change procedure signature and add comment on usage. * sem_ch13.adb (Analyze_Aspect_Specifications): Add processing for aspect Refined_Global. * sem_prag.adb (Analyze_Abstract_State): Add initialization of attributes Refined_State and Refinement_Constituents. (Analyze_Depends_In_Decl_Part, Analyze_Global_In_Decl_Part, Analyze_Contract_Cases_In_Decl_Part): Remove local constant Arg1. (Analyze_Pragma): Add processing for pragma Refined_Global. The analysis of Refined_Post and Refined_Pre has been merged. Update an error message in the processing of pragma Refined_State. (Analyze_Refined_Global_In_Decl_Part): Provide implementation. (Analyze_Refined_Pragma): New routine. (Analyze_Refined_Pre_Post_Condition): Removed. (Analyze_Refined_State_In_Decl_Part): Update the call to Clone. (Analyze_Refinement_Clause): Make State_Id visible to all nested subprogram. (Check_Matching_Constituent): Establish a relation between a refined state and its constituent. (Collect_Hidden_States_In_Decls): Remove ??? comment. Look at the entity of the object declaration to establish its kind. * sem_util.adb: Alphabetize with and use clauses. (Contains_Refined_State): New routine. * sem_util.ads (Contains_Refined_State): New routine. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203504 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/elists.adb')
-rw-r--r--gcc/ada/elists.adb77
1 files changed, 49 insertions, 28 deletions
diff --git a/gcc/ada/elists.adb b/gcc/ada/elists.adb
index a840d95e333..7e62ce49f69 100644
--- a/gcc/ada/elists.adb
+++ b/gcc/ada/elists.adb
@@ -158,34 +158,6 @@ package body Elists is
end loop;
end Append_Unique_Elmt;
- -----------
- -- Clone --
- ------------
-
- function Clone (List : Elist_Id) return Elist_Id is
- Result : Elist_Id;
- Elmt : Elmt_Id;
-
- begin
- if List = No_Elist then
- return No_Elist;
-
- -- Replicate the contents of the input list while preserving the
- -- original order.
-
- else
- Result := New_Elmt_List;
-
- Elmt := First_Elmt (List);
- while Present (Elmt) loop
- Append_Elmt (Node (Elmt), Result);
- Next_Elmt (Elmt);
- end loop;
-
- return Result;
- end if;
- end Clone;
-
--------------
-- Contains --
--------------
@@ -315,6 +287,34 @@ package body Elists is
Elmts.Release;
end Lock;
+ --------------------
+ -- New_Copy_Elist --
+ --------------------
+
+ function New_Copy_Elist (List : Elist_Id) return Elist_Id is
+ Result : Elist_Id;
+ Elmt : Elmt_Id;
+
+ begin
+ if List = No_Elist then
+ return No_Elist;
+
+ -- Replicate the contents of the input list while preserving the
+ -- original order.
+
+ else
+ Result := New_Elmt_List;
+
+ Elmt := First_Elmt (List);
+ while Present (Elmt) loop
+ Append_Elmt (Node (Elmt), Result);
+ Next_Elmt (Elmt);
+ end loop;
+
+ return Result;
+ end if;
+ end New_Copy_Elist;
+
-------------------
-- New_Elmt_List --
-------------------
@@ -425,6 +425,27 @@ package body Elists is
return Elmt /= No_Elmt;
end Present;
+ ------------
+ -- Remove --
+ ------------
+
+ procedure Remove (List : Elist_Id; N : Node_Or_Entity_Id) is
+ Elmt : Elmt_Id;
+
+ begin
+ if Present (List) then
+ Elmt := First_Elmt (List);
+ while Present (Elmt) loop
+ if Node (Elmt) = N then
+ Remove_Elmt (List, Elmt);
+ exit;
+ end if;
+
+ Next_Elmt (Elmt);
+ end loop;
+ end if;
+ end Remove;
+
-----------------
-- Remove_Elmt --
-----------------