|
|
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: 10240 (0x2800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Links, seg_0045b0, separate Object_Info
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
separate (Object_Info)
package body Links is
--[BE CAREFUL NOT TO INTRODUCE MUTUAL RECURSION]
--[BETWEEN THIS PACKAGE AND OBJECT_INFO.CMVC ]
function "=" (This_Kind : in Link_Tools.Link_Kind;
That_Kind : in Link_Tools.Link_Kind)
return Boolean renames Link_Tools."=";
function Links_For
(This_World : in World; Used_Only : in Boolean) return Links is
Links : Link_Tools.Link_Iterator;
The_Links : Objects := Directory_Tools.Object.Create;
Dummy : Boolean;
begin
if not Any.Is_World (This_World) then
return Utilities.Bad_Objects;
end if;
Link_Tools.Init
(Links, World => Directory_Tools.Naming.Full_Name (This_World));
while not Link_Tools.Done (Links) loop
declare
The_Link : Link := Directory_Tools.Naming.Resolution
(Link_Tools.Source (Links));
begin
if Used_Only then
if Object_Info.Links.Is_Used
(The_Link, In_World => This_World) then
Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
end if;
else
Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
end if;
end;
Link_Tools.Next (Links);
end loop;
Directory_Tools.Object.Reset (The_Links);
return The_Links;
exception
when others =>
return Utilities.Bad_Objects;
end Links_For;
function Internal_Links_For (This_World : in World; Used_Only : in Boolean)
return Internal_Links is
Links : Link_Tools.Link_Iterator;
The_Links : Objects := Directory_Tools.Object.Create;
Dummy : Boolean;
begin
if not Any.Is_World (This_World) then
return Utilities.Bad_Objects;
end if;
Link_Tools.Init
(Links, World => Directory_Tools.Naming.Full_Name (This_World));
while not Link_Tools.Done (Links) loop
if Link_Tools.Kind (Links) = Link_Tools.Internal then
declare
The_Link : Link := Directory_Tools.Naming.Resolution
(Link_Tools.Source (Links));
begin
if Used_Only then
if Object_Info.Links.Is_Used
(The_Link, In_World => This_World) then
Directory_Tools.Object.Add
(The_Links, The_Link, Dummy);
end if;
else
Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
end if;
end;
end if;
Link_Tools.Next (Links);
end loop;
Directory_Tools.Object.Reset (The_Links);
return The_Links;
exception
when others =>
return Utilities.Bad_Objects;
end Internal_Links_For;
function External_Links_For (This_World : in World; Used_Only : in Boolean)
return External_Links is
Links : Link_Tools.Link_Iterator;
The_Links : Objects := Directory_Tools.Object.Create;
Dummy : Boolean;
begin
if not Any.Is_World (This_World) then
return Utilities.Bad_Objects;
end if;
Link_Tools.Init
(Links, World => Directory_Tools.Naming.Full_Name (This_World));
while not Link_Tools.Done (Links) loop
if Link_Tools.Kind (Links) = Link_Tools.External then
declare
The_Link : Link := Directory_Tools.Naming.Resolution
(Link_Tools.Source (Links));
begin
if Used_Only then
if Object_Info.Links.Is_Used
(The_Link, In_World => This_World) then
Directory_Tools.Object.Add
(The_Links, The_Link, Dummy);
end if;
else
Directory_Tools.Object.Add (The_Links, The_Link, Dummy);
end if;
end;
end if;
Link_Tools.Next (Links);
end loop;
Directory_Tools.Object.Reset (The_Links);
return The_Links;
exception
when others =>
return Utilities.Bad_Objects;
end External_Links_For;
function Imported_External_Links_For
(This_View : in View; Used_Only : in Boolean)
return Imported_External_Links is
All_External_Links : External_Links :=
Object_Info.Links.External_Links_For (This_View, Used_Only);
begin
[statement]
exception
when others =>
return Utilities.Bad_Objects;
end Imported_External_Links_For;
function Non_Imported_External_Links_For
(This_View : in View; Used_Only : in Boolean)
return Non_Imported_External_Links is
All_External_Links : External_Links :=
Object_Info.Links.External_Links_For (This_View, Used_Only);
begin
[statement]
exception
when others =>
return Utilities.Bad_Objects;
end Non_Imported_External_Links_For;
function Is_Used (This_Link : in Link; In_World : in World)
return Boolean is
begin
if not Any.Is_World (In_World) then
return False;
end if;
return not Link_Tools.Done
(Link_Tools.Dependents
(Source => Directory_Tools.Naming.Full_Name
(This_Link),
World => Directory_Tools.Naming.Full_Name
(In_World)));
end Is_Used;
function Conversion_Of (This_Dependent : in Diana.Tree) return Ada_Unit is
begin
return Directory_Tools.Object.Low_Level.Make_Handle
(The_Error => Directory_Tools.Object.Nil,
The_Name => String_Table.Nil,
The_Declaration => This_Dependent);
end Conversion_Of;
function Dependencies_On
(This_Link : in Link; In_World : in World) return Ada_Units is
Dependents : Link_Tools.Dependent_Iterator;
The_Dependents : Objects := Directory_Tools.Object.Create;
Dummy : Boolean;
begin
if not Any.Is_World (In_World) then
return The_Dependents;
end if;
Dependents :=
Link_Tools.Dependents
(Source => Directory_Tools.Naming.Full_Name (This_Link),
World => Directory_Tools.Naming.Full_Name (In_World));
while not Link_Tools.Done (Dependents) loop
declare
The_Dependent : Ada_Unit := Object_Info.Links.Conversion_Of
(Link_Tools.Value (Dependents));
begin
if not Directory_Tools.Object.Has
(The_Dependents, The_Dependent) then
Directory_Tools.Object.Add
(The_Dependents, The_Dependent, Dummy);
end if;
end;
Link_Tools.Next (Dependents);
end loop;
Directory_Tools.Object.Reset (The_Dependents);
return The_Dependents;
exception
when others =>
return Utilities.Bad_Objects;
end Dependencies_On;
function Links_Derived_From
(This_Import : in Import;
Into_View : in View;
Used_Only : in Boolean) return Imported_External_Links is
begin
[statement]
exception
when others =>
return Utilities.Bad_Objects;
end Links_Derived_From;
end Links;
nblk1=9
nid=0
hdr6=12
[0x00] rec0=1e rec1=00 rec2=01 rec3=054
[0x01] rec0=1f rec1=00 rec2=02 rec3=012
[0x02] rec0=15 rec1=00 rec2=03 rec3=02c
[0x03] rec0=1f rec1=00 rec2=04 rec3=090
[0x04] rec0=1b rec1=00 rec2=05 rec3=050
[0x05] rec0=20 rec1=00 rec2=06 rec3=044
[0x06] rec0=1a rec1=00 rec2=07 rec3=04e
[0x07] rec0=19 rec1=00 rec2=08 rec3=020
[0x08] rec0=11 rec1=00 rec2=09 rec3=000
tail 0x215003eb0815c65481524 0x42a00088462061e03