From: Piotr Trojanek <troja...@adacore.com> Use utility routines to compute number of elements in lists of nodes and chains of formal parameters. Code cleanup; semantics is unaffected.
gcc/ada/ChangeLog: * exp_aggr.adb (Others_Check): Reuse List_Length; tune whitespace. * exp_ch3.adb (Constrain_Array): Remove counting of constraints. * exp_disp.adb (Make_DT): Use Elist utility routines; tune whitespace. * sem_ch12.adb (Formal_Dimensions): Reuse List_Length. (Valid_Default_Attribute): Reuse Number_Formals. * sem_prag.adb (Process_Convention): Likewise. * sem_util.adb (Normalize_Actuals): Likewise. (Check_Function_Writable_Actuals): Reuse List_Length. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/exp_aggr.adb | 18 +++--------------- gcc/ada/exp_ch3.adb | 15 ++++----------- gcc/ada/exp_disp.adb | 18 ++++++------------ gcc/ada/sem_ch12.adb | 22 +++++----------------- gcc/ada/sem_prag.adb | 13 +------------ gcc/ada/sem_util.adb | 24 +++++++----------------- 6 files changed, 26 insertions(+), 84 deletions(-) diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 64bb05c9b4c..dae9d4e5009 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -5352,17 +5352,10 @@ package body Exp_Aggr is -- Count the number of discrete choices. Start with -1 because -- the others choice does not count. - -- Is there some reason we do not use List_Length here ??? - Nb_Choices := -1; Assoc := First (Component_Associations (Sub_Aggr)); while Present (Assoc) loop - Choice := First (Choice_List (Assoc)); - while Present (Choice) loop - Nb_Choices := Nb_Choices + 1; - Next (Choice); - end loop; - + Nb_Choices := Nb_Choices + List_Length (Choice_List (Assoc)); Next (Assoc); end loop; @@ -5379,12 +5372,7 @@ package body Exp_Aggr is -- choice then compute the number or positional elements. if Need_To_Check and then Present (Expressions (Sub_Aggr)) then - Expr := First (Expressions (Sub_Aggr)); - Nb_Elements := Uint_0; - while Present (Expr) loop - Nb_Elements := Nb_Elements + 1; - Next (Expr); - end loop; + Nb_Elements := UI_From_Int (List_Length (Expressions (Sub_Aggr))); -- If the aggregate contains discrete choices and an others choice -- compute the smallest and largest discrete choice values. @@ -5395,7 +5383,7 @@ package body Exp_Aggr is Table : Case_Table_Type (1 .. Nb_Choices); -- Used to sort all the different choice values - J : Pos := 1; + J : Pos := 1; begin Assoc := First (Component_Associations (Sub_Aggr)); diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 71bca1cdc88..a68b4f12ca6 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -4300,10 +4300,9 @@ package body Exp_Ch3 is (SI : Node_Id; Check_List : List_Id) is - C : constant Node_Id := Constraint (SI); - Number_Of_Constraints : Nat := 0; - Index : Node_Id; - S, T : Entity_Id; + C : constant Node_Id := Constraint (SI); + Index : Node_Id; + S, T : Entity_Id; procedure Constrain_Index (Index : Node_Id; @@ -4341,12 +4340,6 @@ package body Exp_Ch3 is T := Designated_Type (T); end if; - S := First (Constraints (C)); - while Present (S) loop - Number_Of_Constraints := Number_Of_Constraints + 1; - Next (S); - end loop; - -- In either case, the index constraint must provide a discrete -- range for each index of the array type and the type of each -- discrete range must be the same as that of the corresponding @@ -4358,7 +4351,7 @@ package body Exp_Ch3 is -- Apply constraints to each index type - for J in 1 .. Number_Of_Constraints loop + while Present (S) loop Constrain_Index (Index, S, Check_List); Next (Index); Next (S); diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb index f2501173516..9fcc4694488 100644 --- a/gcc/ada/exp_disp.adb +++ b/gcc/ada/exp_disp.adb @@ -4650,7 +4650,6 @@ package body Exp_Disp is Name_ITable : Name_Id; Nb_Prim : Nat := 0; New_Node : Node_Id; - Num_Ifaces : Nat := 0; Parent_Typ : Entity_Id; Predef_Prims : Entity_Id; Prim : Entity_Id; @@ -5494,23 +5493,18 @@ package body Exp_Disp is Collect_Interfaces (Typ, Typ_Ifaces); - AI := First_Elmt (Typ_Ifaces); - while Present (AI) loop - Num_Ifaces := Num_Ifaces + 1; - Next_Elmt (AI); - end loop; - - if Num_Ifaces = 0 then + if Is_Empty_Elmt_List (Typ_Ifaces) then Iface_Table_Node := Make_Null (Loc); -- Generate the Interface_Table object else declare - TSD_Ifaces_List : constant List_Id := New_List; - Elmt : Elmt_Id; - Offset_To_Top : Node_Id; - Sec_DT_Tag : Node_Id; + Num_Ifaces : constant Pos := List_Length (Typ_Ifaces); + TSD_Ifaces_List : constant List_Id := New_List; + Elmt : Elmt_Id; + Offset_To_Top : Node_Id; + Sec_DT_Tag : Node_Id; Dummy_Object_Ifaces_List : Elist_Id := No_Elist; Dummy_Object_Ifaces_Comp_List : Elist_Id := No_Elist; diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb index b1d6efd1439..b52d9ddc9d0 100644 --- a/gcc/ada/sem_ch12.adb +++ b/gcc/ada/sem_ch12.adb @@ -14010,22 +14010,16 @@ package body Sem_Ch12 is ----------------------- function Formal_Dimensions return Nat is - Num : Nat := 0; - Index : Node_Id; + Dims : List_Id; begin if Nkind (Def) = N_Constrained_Array_Definition then - Index := First (Discrete_Subtype_Definitions (Def)); + Dims := Discrete_Subtype_Definitions (Def); else - Index := First (Subtype_Marks (Def)); + Dims := Subtype_Marks (Def); end if; - while Present (Index) loop - Num := Num + 1; - Next (Index); - end loop; - - return Num; + return List_Length (Dims); end Formal_Dimensions; -- Start of processing for Validate_Array_Type_Instance @@ -18079,7 +18073,6 @@ package body Sem_Ch12 is Get_Attribute_Id (Attribute_Name (Def)); T : constant Entity_Id := Entity (Prefix (Def)); Is_Fun : constant Boolean := (Ekind (Nam) = E_Function); - F : Entity_Id; Num_F : Nat; OK : Boolean; @@ -18088,12 +18081,7 @@ package body Sem_Ch12 is return; end if; - Num_F := 0; - F := First_Formal (Nam); - while Present (F) loop - Num_F := Num_F + 1; - Next_Formal (F); - end loop; + Num_F := Number_Formals (Nam); case Attr_Id is when Attribute_Adjacent diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 50ba96bbef1..081716a4027 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -8801,19 +8801,8 @@ package body Sem_Prag is Minimum : constant Nat := Convention_Id'Pos (C) - Convention_Id'Pos (Convention_C_Variadic_0); - - Count : Nat; - Formal : Entity_Id; - begin - Count := 0; - Formal := First_Formal (Subp); - while Present (Formal) loop - Count := Count + 1; - Next_Formal (Formal); - end loop; - - if Count < Minimum then + if Number_Formals (Subp) < Minimum then Error_Msg_Uint_1 := UI_From_Int (Minimum); Error_Pragma_Arg ("argument of pragma% must have at least" diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 6bc50c44291..bd798d74885 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -2915,7 +2915,7 @@ package body Sem_Util is Expr_Value (Low_Bound (Aggregate_Bounds (N))) then declare - Count_Components : Uint := Uint_0; + Count_Components : Uint; Num_Components : Uint; Others_Assoc : Node_Id := Empty; Others_Choice : Node_Id := Empty; @@ -2924,13 +2924,8 @@ package body Sem_Util is begin -- Count positional associations - if Present (Expressions (N)) then - Comp_Expr := First (Expressions (N)); - while Present (Comp_Expr) loop - Count_Components := Count_Components + 1; - Next (Comp_Expr); - end loop; - end if; + Count_Components := + UI_From_Int (List_Length (Expressions (N))); -- Count the rest of elements and locate the N_Others -- choice (if any) @@ -25044,8 +25039,8 @@ package body Sem_Util is First_Named : Node_Id := Empty; Found : Boolean; - Formals_To_Match : Integer := 0; - Actuals_To_Match : Integer := 0; + Formals_To_Match : Int := 0; + Actuals_To_Match : Int := 0; procedure Chain (A : Node_Id); -- Add named actual at the proper place in the list, using the @@ -25106,16 +25101,11 @@ package body Sem_Util is -- The name in the call is a function call that returns an access -- to subprogram. The designated type has the list of formals. - Formal := First_Formal (Designated_Type (S)); + Formals_To_Match := Number_Formals (Designated_Type (S)); else - Formal := First_Formal (S); + Formals_To_Match := Number_Formals (S); end if; - while Present (Formal) loop - Formals_To_Match := Formals_To_Match + 1; - Next_Formal (Formal); - end loop; - -- Find if there is a named association, and verify that no positional -- associations appear after named ones. -- 2.43.0