Commit e0f66eea by Robert Dewar Committed by Arnaud Charlet

par_sco.adb (Traverse_Declarations_Or_Statements): Separate F/W qualifiers for FOR/WHILE loops

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
parent 7f657dde
2010-01-26 Robert Dewar <dewar@adacore.com> 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 * get_scos.adb (Get_SCOs): Implement new form of CS entries (multiple
entries per line, one for each statement in the sequence). entries per line, one for each statement in the sequence).
* par_sco.adb (Traverse_Declarations_Or_Statements): Increase array * par_sco.adb (Traverse_Declarations_Or_Statements): Increase array
......
...@@ -938,7 +938,7 @@ package body Par_SCO is ...@@ -938,7 +938,7 @@ package body Par_SCO is
-- any decisions in the exit statement expression. -- any decisions in the exit statement expression.
when N_Exit_Statement => when N_Exit_Statement =>
Extend_Statement_Sequence (N, ' '); Extend_Statement_Sequence (N, 'E');
Set_Statement_Entry; Set_Statement_Entry;
Process_Decisions (Condition (N), 'E'); Process_Decisions (Condition (N), 'E');
...@@ -1043,16 +1043,25 @@ package body Par_SCO is ...@@ -1043,16 +1043,25 @@ package body Par_SCO is
when N_Loop_Statement => when N_Loop_Statement =>
if Present (Iteration_Scheme (N)) then 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 declare
ISC : constant Node_Id := Iteration_Scheme (N); ISC : constant Node_Id := Iteration_Scheme (N);
begin begin
Extend_Statement_Sequence (N, ISC, 'F'); -- While statement
if Present (Condition (ISC)) then if Present (Condition (ISC)) then
Process_Decisions Extend_Statement_Sequence (N, ISC, 'W');
(Condition (ISC), 'W'); Process_Decisions (Condition (ISC), 'W');
-- For statement
else else
Extend_Statement_Sequence (N, ISC, 'F');
Process_Decisions Process_Decisions
(Loop_Parameter_Specification (ISC), 'X'); (Loop_Parameter_Specification (ISC), 'X');
end if; end if;
......
...@@ -105,8 +105,9 @@ package SCOs is ...@@ -105,8 +105,9 @@ package SCOs is
-- and the following regions of the syntax tree: -- and the following regions of the syntax tree:
-- the part of a case_statement from CASE up to the expression -- 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 -- 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 -- the part of an extended_return_statement from RETURN up to the
-- expression (if present) or to the return_subtype_indication (if -- expression (if present) or to the return_subtype_indication (if
-- no expression) -- no expression)
...@@ -148,11 +149,13 @@ package SCOs is ...@@ -148,11 +149,13 @@ package SCOs is
-- r renaming declaration -- r renaming declaration
-- i generic instantiation -- i generic instantiation
-- C CASE statement (includes only the expression) -- 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 -- I IF statement (includes only the condition [in the RM sense, which
-- is a decision in the SCO sense]) -- is a decision in the SCO sense])
-- P PRAGMA -- P PRAGMA
-- R extended RETURN statement -- R extended RETURN statement
-- W WHILE loop statement (includes only the condition)
-- and is omitted for all other cases. -- and is omitted for all other cases.
...@@ -278,9 +281,10 @@ package SCOs is ...@@ -278,9 +281,10 @@ package SCOs is
-- Statements -- Statements
-- C1 = 'S' for entry point, 's' otherwise -- 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/ -- (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 -- From = starting source location
-- To = ending source location -- To = ending source location
-- Last = False for all but the last entry, True for last entry -- Last = False for all but the last entry, True for last entry
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment