Stop : Nat;
begin
- Write_Info_Initiate ('C');
- Write_Info_Char (' ');
- Write_Info_Nat (SUT.Dep_Num);
- Write_Info_Char (' ');
+ Start := SUT.From;
+ Stop := SUT.To;
- for N in SUT.File_Name'Range loop
- Write_Info_Char (SUT.File_Name (N));
- end loop;
+ -- Write unit header (omitted if no SCOs are generated for this unit)
+
+ if Start <= Stop then
+ Write_Info_Initiate ('C');
+ Write_Info_Char (' ');
+ Write_Info_Nat (SUT.Dep_Num);
+ Write_Info_Char (' ');
- Write_Info_Terminate;
+ for N in SUT.File_Name'Range loop
+ Write_Info_Char (SUT.File_Name (N));
+ end loop;
+
+ Write_Info_Terminate;
+ end if;
-- Loop through SCO entries for this unit
- Start := SUT.From;
- Stop := SUT.To;
loop
exit when Start = Stop + 1;
pragma Assert (Start <= Stop);
case T.C1 is
- -- Statements, exit
+ -- Statements
+
+ when 'S' =>
+ loop
+ Write_Info_Char (' ');
+
+ if SCO_Table.Table (Start).C2 /= ' ' then
+ Write_Info_Char (SCO_Table.Table (Start).C2);
+ end if;
+
+ Output_Range (SCO_Table.Table (Start));
+ exit when SCO_Table.Table (Start).Last;
+
+ Start := Start + 1;
+ pragma Assert (SCO_Table.Table (Start).C1 = 's');
+ end loop;
- when 'S' | 'T' =>
- Write_Info_Char (' ');
- Output_Range (T);
+ -- Statement continuations should not occur since they
+ -- are supposed to have been handled in the loop above.
+
+ when 's' =>
+ raise Program_Error;
- -- Decision
+ -- Decision
- when 'I' | 'E' | 'W' | 'X' =>
+ when 'I' | 'E' | 'P' | 'W' | 'X' =>
if T.C2 = ' ' then
Start := Start + 1;
end if;