diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-10-13 16:31:00 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-10-13 16:31:00 +0000 |
commit | 28ff117fcc4265431367a02b6c28a7312cbbeb3e (patch) | |
tree | d2a660b065458b989b4a8888b359b237367e4a4a /gcc/ada/elists.adb | |
parent | 14ac37284360c1b3b44c02e6398d9bdd2996f06e (diff) | |
download | gcc-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.adb | 77 |
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 -- ----------------- |