From: Robert Dewar Date: Tue, 26 Jan 2010 13:29:46 +0000 (+0000) Subject: par_sco.adb (Traverse_Declarations_Or_Statements): Separate F/W qualifiers for FOR... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e0f66eea4fd4bafb915a6435ba1f3063d0757bbe;p=gcc.git par_sco.adb (Traverse_Declarations_Or_Statements): Separate F/W qualifiers for FOR/WHILE loops 2010-01-26 Robert Dewar * par_sco.adb (Traverse_Declarations_Or_Statements): Separate F/W qualifiers for FOR/WHILE loops * scos.ads: Use separate type letters F/W for for/while loops From-SVN: r156245 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f8261fbea73..0cb26f2e40b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2010-01-26 Robert Dewar + + * par_sco.adb (Traverse_Declarations_Or_Statements): Separate F/W + qualifiers for FOR/WHILE loops + * scos.ads: Use separate type letters F/W for for/while loops + 2010-01-26 Robert Dewar * get_scos.adb (Get_SCOs): Implement new form of CS entries (multiple diff --git a/gcc/ada/par_sco.adb b/gcc/ada/par_sco.adb index e0e9318076c..e9ed4b3a51c 100644 --- a/gcc/ada/par_sco.adb +++ b/gcc/ada/par_sco.adb @@ -938,7 +938,7 @@ package body Par_SCO is -- any decisions in the exit statement expression. when N_Exit_Statement => - Extend_Statement_Sequence (N, ' '); + Extend_Statement_Sequence (N, 'E'); Set_Statement_Entry; Process_Decisions (Condition (N), 'E'); @@ -1043,16 +1043,25 @@ package body Par_SCO is when N_Loop_Statement => if Present (Iteration_Scheme (N)) then + + -- If iteration scheme present, extend the current + -- statement sequence to include the iteration scheme + -- and process any decisions it contains. + declare ISC : constant Node_Id := Iteration_Scheme (N); begin - Extend_Statement_Sequence (N, ISC, 'F'); + -- While statement if Present (Condition (ISC)) then - Process_Decisions - (Condition (ISC), 'W'); + Extend_Statement_Sequence (N, ISC, 'W'); + Process_Decisions (Condition (ISC), 'W'); + + -- For statement + else + Extend_Statement_Sequence (N, ISC, 'F'); Process_Decisions (Loop_Parameter_Specification (ISC), 'X'); end if; diff --git a/gcc/ada/scos.ads b/gcc/ada/scos.ads index b8dd08d0350..6cc8742f3ab 100644 --- a/gcc/ada/scos.ads +++ b/gcc/ada/scos.ads @@ -105,8 +105,9 @@ package SCOs is -- and the following regions of the syntax tree: -- the part of a case_statement from CASE up to the expression - -- the part of a FOR iteration scheme from FOR up to the + -- the part of a FOR loop iteration scheme from FOR up to the -- loop_parameter_specification + -- the part of a WHILE loop up to the condition -- the part of an extended_return_statement from RETURN up to the -- expression (if present) or to the return_subtype_indication (if -- no expression) @@ -148,11 +149,13 @@ package SCOs is -- r renaming declaration -- i generic instantiation -- C CASE statement (includes only the expression) - -- F FOR/WHILE loop statement (includes only the iteration scheme) + -- E EXIT statement + -- F FOR loop statement (includes only the iteration scheme) -- I IF statement (includes only the condition [in the RM sense, which -- is a decision in the SCO sense]) -- P PRAGMA -- R extended RETURN statement + -- W WHILE loop statement (includes only the condition) -- and is omitted for all other cases. @@ -278,9 +281,10 @@ package SCOs is -- Statements -- C1 = 'S' for entry point, 's' otherwise - -- C2 = 't', 's', 'o', 'r', 'i', 'C', 'F', 'I', 'P', 'R', ' ' + -- C2 = 't', 's', 'o', 'r', 'i', + -- 'C', 'E', 'F', 'I', 'P', 'R', 'W', ' ' -- (type/subtype/object/renaming/instantiation/ - -- CASE/FOR or WHILE/IF/PRAGMA/RETURN/other) + -- CASE/EXIT/FOR/IF/PRAGMA/RETURN/WHILE/other) -- From = starting source location -- To = ending source location -- Last = False for all but the last entry, True for last entry