@@ -433,7 +433,6 @@ package body Aspects is
-------------------
procedure Copy_Aspects (From : Node_Id; To : Node_Id) is
-
begin
if not Has_Aspects (From) then
return;
@@ -512,7 +512,6 @@ package body Contracts is
if Present (It) then
Validate_Iterable_Aspect (E, It);
end if;
-
if Present (I_Lit) then
Validate_Literal_Aspect (E, I_Lit);
end if;
@@ -4980,9 +4979,7 @@ package body Contracts is
Push_Scope (Gen_Id);
- if Permits_Aspect_Specifications (Templ)
- and then Has_Aspects (Templ)
- then
+ if Permits_Aspect_Specifications (Templ) then
Save_Global_References_In_Aspects (Templ);
end if;
@@ -1696,10 +1696,6 @@ package body Par_SCO is
C1 : Character;
begin
- if not Has_Aspects (N) then
- return;
- end if;
-
AN := First (Aspect_Specifications (N));
while Present (AN) loop
AE := Expression (AN);
@@ -2414,7 +2410,9 @@ package body Par_SCO is
end if;
end case;
- Traverse_Aspects (N);
+ if Permits_Aspect_Specifications (N) then
+ Traverse_Aspects (N);
+ end if;
end Traverse_One;
-- Start of processing for Traverse_Declarations_Or_Statements
@@ -9663,21 +9663,17 @@ package body Sem_Ch12 is
A_Spec : Node_Id;
A_Id : Aspect_Id;
begin
- if No (A_List) then
- return False;
- else
- A_Spec := First (A_List);
- while Present (A_Spec) loop
- A_Id := Get_Aspect_Id (A_Spec);
- if A_Id = Aspect_Pre or else A_Id = Aspect_Post then
- return True;
- end if;
+ A_Spec := First (A_List);
+ while Present (A_Spec) loop
+ A_Id := Get_Aspect_Id (A_Spec);
+ if A_Id = Aspect_Pre or else A_Id = Aspect_Post then
+ return True;
+ end if;
- Next (A_Spec);
- end loop;
+ Next (A_Spec);
+ end loop;
- return False;
- end if;
+ return False;
end Has_Contracts;
----------
@@ -4153,24 +4153,22 @@ package body Sem_Ch3 is
A_Id : Aspect_Id;
begin
- if Present (Aspect_Specifications (N)) then
- A := First (Aspect_Specifications (N));
+ A := First (Aspect_Specifications (N));
- while Present (A) loop
- A_Id := Get_Aspect_Id (Chars (Identifier (A)));
+ while Present (A) loop
+ A_Id := Get_Aspect_Id (Chars (Identifier (A)));
- if A_Id = Aspect_Address then
+ if A_Id = Aspect_Address then
- -- Set flag on object entity, for later processing at
- -- the freeze point.
+ -- Set flag on object entity, for later processing at the
+ -- freeze point.
- Set_Has_Delayed_Aspects (Id);
- return True;
- end if;
+ Set_Has_Delayed_Aspects (Id);
+ return True;
+ end if;
- Next (A);
- end loop;
- end if;
+ Next (A);
+ end loop;
return False;
end Delayed_Aspect_Present;
@@ -18013,16 +18011,14 @@ package body Sem_Ch3 is
Prev_Asp : Node_Id;
begin
- if Present (Prev_Asps) then
- Prev_Asp := First (Prev_Asps);
- while Present (Prev_Asp) loop
- if Get_Aspect_Id (Prev_Asp) = Asp_Id then
- return Prev_Asp;
- end if;
+ Prev_Asp := First (Prev_Asps);
+ while Present (Prev_Asp) loop
+ if Get_Aspect_Id (Prev_Asp) = Asp_Id then
+ return Prev_Asp;
+ end if;
- Next (Prev_Asp);
- end loop;
- end if;
+ Next (Prev_Asp);
+ end loop;
return Empty;
end Get_Partial_View_Aspect;
@@ -18036,38 +18032,35 @@ package body Sem_Ch3 is
-- Start of processing for Check_Duplicate_Aspects
begin
- if Present (Full_Asps) then
- Full_Asp := First (Full_Asps);
- while Present (Full_Asp) loop
- Part_Asp := Get_Partial_View_Aspect (Full_Asp);
+ Full_Asp := First (Full_Asps);
+ while Present (Full_Asp) loop
+ Part_Asp := Get_Partial_View_Aspect (Full_Asp);
- -- An aspect and its class-wide counterpart are two distinct
- -- aspects and may apply to both views of an entity.
+ -- An aspect and its class-wide counterpart are two distinct
+ -- aspects and may apply to both views of an entity.
- if Present (Part_Asp)
- and then Class_Present (Part_Asp) = Class_Present (Full_Asp)
- then
- Error_Msg_N
- ("aspect already specified in private declaration",
- Full_Asp);
+ if Present (Part_Asp)
+ and then Class_Present (Part_Asp) = Class_Present (Full_Asp)
+ then
+ Error_Msg_N
+ ("aspect already specified in private declaration", Full_Asp);
- Remove (Full_Asp);
- return;
- end if;
+ Remove (Full_Asp);
+ return;
+ end if;
- if Has_Discriminants (Prev)
- and then not Has_Unknown_Discriminants (Prev)
- and then Get_Aspect_Id (Full_Asp) =
- Aspect_Implicit_Dereference
- then
- Error_Msg_N
- ("cannot specify aspect if partial view has known "
- & "discriminants", Full_Asp);
- end if;
+ if Has_Discriminants (Prev)
+ and then not Has_Unknown_Discriminants (Prev)
+ and then Get_Aspect_Id (Full_Asp) =
+ Aspect_Implicit_Dereference
+ then
+ Error_Msg_N
+ ("cannot specify aspect if partial view has known "
+ & "discriminants", Full_Asp);
+ end if;
- Next (Full_Asp);
- end loop;
- end if;
+ Next (Full_Asp);
+ end loop;
end Check_Duplicate_Aspects;
------------------
@@ -1932,19 +1932,17 @@ package body Sem_Disp is
Asp : Node_Id;
begin
- if Present (Aspect_Specifications (W_Decl)) then
- Asp := First (Aspect_Specifications (W_Decl));
- while Present (Asp) loop
- if Chars (Identifier (Asp)) = Name_Yield then
- Error_Msg_Name_1 := Name_Yield;
- Error_Msg_N
- ("specification of inherited aspect% can only confirm "
- & "parent value", Asp);
- end if;
+ Asp := First (Aspect_Specifications (W_Decl));
+ while Present (Asp) loop
+ if Chars (Identifier (Asp)) = Name_Yield then
+ Error_Msg_Name_1 := Name_Yield;
+ Error_Msg_N
+ ("specification of inherited aspect% can only confirm "
+ & "parent value", Asp);
+ end if;
- Next (Asp);
- end loop;
- end if;
+ Next (Asp);
+ end loop;
Set_Has_Yield_Aspect (Wrapped_Entity (Subp));
end;
From: Piotr Trojanek <trojanek@adacore.com> When iterating over Aspect_Specifications, we can use First/Next directly even if the Aspect_Specifications returns a No_List or the list has no items. Code cleanup. gcc/ada/ * aspects.adb (Copy_Aspects): Style fix. * contracts.adb (Analyze_Contracts): Style fix. (Save_Global_References_In_Contract): Remove extra guards. * par_sco.adb (Traverse_Aspects): Move guard to the caller and make it consistent with Save_Global_References_In_Contract. * sem_ch12.adb (Has_Contracts): Remove extra guards. * sem_ch3.adb (Delayed_Aspect_Present, Get_Partial_View_Aspect, Check_Duplicate_Aspects): Likewise. * sem_disp.adb (Check_Dispatching_Operation): Likewise. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/aspects.adb | 1 - gcc/ada/contracts.adb | 5 +-- gcc/ada/par_sco.adb | 8 ++-- gcc/ada/sem_ch12.adb | 22 +++++------ gcc/ada/sem_ch3.adb | 91 ++++++++++++++++++++----------------------- gcc/ada/sem_disp.adb | 22 +++++------ 6 files changed, 65 insertions(+), 84 deletions(-)