|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 9216 (0x2400)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Test_Id_Referencers, seg_00460f
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with Compilation_Units;
with Io;
with Profile;
with Log;
with String_Utilities;
with Id_Referencers;
with Debug_Tools;
with Directory_Tools;
with Ada_Program;
with Table_Formatter;
with Declarations;
procedure Test_Id_Referencers (Units : String := "") is
package Ada renames Ada_Program;
package Decls renames Declarations;
package Object renames Directory_Tools.Object;
package Naming renames Directory_Tools.Naming;
function "=" (Left, Right : Directory_Tools.Ada_Object.Unit_Kind)
return Boolean renames Directory_Tools.Ada_Object."=";
type Columns is (Decl_Unit, Object_Decl, Ref_Line, Ref_Unit, Set_Used);
Rows : array (Columns) of Integer;
package Table is new Table_Formatter (Rows'Length);
Fields : Table.Field_List (1 .. Columns'Pos (Columns'Last) + 1);
Iter : Object.Iterator := Naming.Resolution (Units);
Unit : Object.Handle;
Bool : Boolean := True;
function Unit_Name (Of_Elem : Ada.Element) return String is
begin
return Declarations.Name
(Compilation_Units.Unit_Declaration
(Compilation_Units.Parent_Compilation_Unit (Of_Elem)));
end Unit_Name;
procedure Pre_Op (Elem : Ada_Program.Element;
State : in out Boolean;
Control : in out Ada_Program.Traversal_Control) is
procedure Add_Referencers is
Refs : Id_Referencers.Object_References :=
Id_Referencers.Initialize_References (Elem);
Object_Id : constant String :=
Ada.Image (Elem) & "(" &
String_Utilities.Strip
(Integer'Image (Ada.Line_Number (Elem))) & ")";
Parent_Name : constant String := Unit_Name (Elem);
Ref : Ada_Program.Element;
begin
while not Id_Referencers.Done (Refs) loop
Ref := Id_Referencers.Value (Refs);
Table.Item (Parent_Name);
Table.Item (Object_Id);
Table.Item (Integer'Image (Ada.Line_Number (Ref)));
Table.Item (Unit_Name (Ref));
case Id_Referencers.Kind (Ref) is
when Id_Referencers.Set =>
Table.Item ("SET");
when Id_Referencers.Used =>
Table.Item ("USED");
when Id_Referencers.Set_And_Used =>
Table.Item ("SET/USED");
end case;
Id_Referencers.Next (Refs);
end loop;
end Add_Referencers;
begin
-- check first if we have an identifier definition
case Ada_Program.Id_Kind (Elem) is
when Ada.An_Identifier_Definition =>
case Decls.Kind (Elem) is
when Decls.A_Variable_Declaration =>
-- due to a bug in decls this may not really be
-- a variable_decl - it may be a record field.
-- Weed out those by seeing if the parent is a type.
if Ada."=" (Ada.Kind (Ada.Parent (Elem)),
Ada.A_Declaration) and then
Decls."=" (Decls.Kind (Ada.Parent (Elem)),
Decls.A_Type_Declaration) then
null;
else
Add_Referencers;
end if;
when Decls.A_Constant_Declaration |
Decls.A_Deferred_Constant_Declaration |
Decls.An_Integer_Number_Declaration |
Decls.A_Real_Number_Declaration =>
Add_Referencers;
when others =>
null;
end case;
when others =>
null;
end case;
Control := Ada_Program.Continue;
exception
when others =>
Log.Put_Line ("UNEXPECTED ERROR, EXCEPTION:" &
Debug_Tools.Get_Exception_Name, Profile.Error_Msg);
Log.Put_Line ("DIAGNOSIS: " & Ada_Program.Diagnosis,
Profile.Error_Msg);
Log.Put_Line ("UNIT: " & Naming.Unique_Full_Name (Unit),
Profile.Error_Msg);
Log.Put_Line ("On line: " &
Natural'Image (Ada_Program.Line_Number (Elem)),
Profile.Error_Msg);
Control := Ada_Program.Continue;
end Pre_Op;
procedure Post_Op (Program_Element : Ada_Program.Element;
State : in out Boolean;
Control : in out Ada_Program.Traversal_Control) is
begin
Control := Ada_Program.Continue;
end Post_Op;
procedure Traverse is new Ada_Program.Depth_First_Traversal
(Boolean, Pre_Op, Post_Op);
begin
if Object.Is_Bad (Iter) then
Log.Put_Line (Units & ": is not a valid pathname", Profile.Error_Msg);
else
for C in Columns loop
Fields (Columns'Pos (C) + 1) := Columns'Pos (C) + 1;
Table.Header (Columns'Image (C));
end loop;
while not Object.Done (Iter) loop
Unit := Object.Value (Iter);
if Directory_Tools.Ada_Object.Kind (Unit) =
Directory_Tools.Ada_Object.Not_Class_Ada then
Log.Put_Line (Naming.Unique_Full_Name (Unit) &
" is not an Ada unit", Profile.Warning_Msg);
elsif Directory_Tools.Ada_Object.Is_Installed (Unit) then
Traverse (Ada_Program.Conversion.To_Compilation_Unit (Unit),
Bool, False);
else
Log.Put_Line (Naming.Unique_Full_Name (Unit) &
" is not installed", Profile.Warning_Msg);
end if;
Object.Next (Iter);
end loop;
Table.Sort (Fields);
Table.Display (Io.Standard_Output);
end if;
end Test_Id_Referencers;
nblk1=8
nid=0
hdr6=10
[0x00] rec0=23 rec1=00 rec2=01 rec3=000
[0x01] rec0=19 rec1=00 rec2=08 rec3=00e
[0x02] rec0=00 rec1=00 rec2=02 rec3=012
[0x03] rec0=1a rec1=00 rec2=03 rec3=012
[0x04] rec0=12 rec1=00 rec2=04 rec3=00e
[0x05] rec0=18 rec1=00 rec2=05 rec3=034
[0x06] rec0=18 rec1=00 rec2=06 rec3=04a
[0x07] rec0=0b rec1=00 rec2=07 rec3=000
tail 0x2150041cc815c65aa8ccb 0x42a00088462061e03