par_sco.adb (Traverse_Declarations_Or_Statements): Separate F/W qualifiers for FOR...
authorRobert Dewar <dewar@adacore.com>
Tue, 26 Jan 2010 13:29:46 +0000 (13:29 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 26 Jan 2010 13:29:46 +0000 (14:29 +0100)
2010-01-26  Robert Dewar  <dewar@adacore.com>

* 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

gcc/ada/ChangeLog
gcc/ada/par_sco.adb
gcc/ada/scos.ads

index f8261fbea7392dbe000fbaaabf1999598060ac42..0cb26f2e40b9b74a4061d5f368ee835127d4c442 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-26  Robert Dewar  <dewar@adacore.com>
+
+       * 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  <dewar@adacore.com>
 
        * get_scos.adb (Get_SCOs): Implement new form of CS entries (multiple
index e0e9318076c1855dc530e9207025184f6dabfa72..e9ed4b3a51cdd13d322d21b5839630d83a96a0a3 100644 (file)
@@ -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;
index b8dd08d0350305e84b41c24ad57d7e3be56035cb..6cc8742f3abd992459fa6587438f0cdf94354c81 100644 (file)
@@ -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