|
|
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: 15360 (0x3c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Find_Generics, seg_004401
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
with More_String_Utilities;
with Log;
with Profile;
with Common;
with Errors;
with Simple_Status;
with Add_Hyper_Table;
with Create_Null_Document;
with Lrm_Renames;
use Lrm_Renames;
with Directory_Renames;
use Directory_Renames;
package body Find_Generics is
function In_A_Dynamic_Scope (E : Ada.Element) return Boolean is
Parent : Ada.Element := Ada.Parent (E);
begin
while not Ada.Is_Nil (Parent) loop
case Ada.Kind (Parent) is
when Ada.A_Declaration =>
case Decls.Kind (Parent) is
when Decls.A_Procedure_Body_Declaration |
Decls.A_Function_Body_Declaration =>
return True;
when others =>
null;
end case;
when Ada.A_Statement =>
case Stmts.Kind (Parent) is
when Stmts.A_Block_Statement =>
return True;
when others =>
null;
end case;
when others =>
null;
end case;
Parent := Ada.Parent (Parent);
end loop;
return False;
end In_A_Dynamic_Scope;
procedure Add (Units : String := "";
To_Document : in out Abstract_Document.Handle;
Response : String := "<PROFILE>") is
Is_A_Generic : Boolean;
Is_Dynamic : Boolean;
The_Generic : Ada.Element;
Gen_Parameters : Ada.Element_Iterator;
Current_Gen_Param : Ada.Element;
Actual_Parameters : Ada.Element_Iterator;
Current_Actual_Param : Ada.Element;
Units_Iter : Object.Iterator := Naming.Resolution (Units);
type Columns is (Generic_Unit,
Instantiation,
Dynamic,
P1,
P2,
P3,
P4);
function Is_Integer_Column (C : Columns) return Boolean is
begin
return False;
end Is_Integer_Column;
procedure Step_Parameters is
begin
if Is_A_Generic then
if Ada.Done (Gen_Parameters) then
Current_Gen_Param := Ada.Nil_Element;
else
Current_Gen_Param := Ada.Value (Gen_Parameters);
Ada.Next (Gen_Parameters);
end if;
else
if Ada.Done (Actual_Parameters) then
Current_Actual_Param := Ada.Nil_Element;
else
Current_Actual_Param := Ada.Value (Actual_Parameters);
Ada.Next (Actual_Parameters);
end if;
end if;
end Step_Parameters;
function Is_Included (Elem : Ada.Element) return Boolean is
begin
if Ada.Kind (Elem) = Ada.A_Declaration then
Is_A_Generic := Decls.Is_Generic (Elem);
if Is_A_Generic then
The_Generic := Elem;
Gen_Parameters := Decls.Generic_Parameters (Elem);
Step_Parameters;
return True;
elsif Decls.Is_Generic_Instantiation (Elem) then
The_Generic := Ada.Definition (Elem);
Is_Dynamic := In_A_Dynamic_Scope (Elem);
Actual_Parameters := Decls.Generic_Actual_Parameters (Elem);
Current_Actual_Param := Ada.Value (Actual_Parameters);
Step_Parameters;
return True;
else
return False;
end if;
else
return False;
end if;
end Is_Included;
function Actual_Reference (Actual_Param : Ada.Element) return String is
Def : Ada.Element;
begin
if Ada.Is_Nil (Actual_Param) then
return "";
else
Def := Ada.Definition (Actual_Param);
if Ada.Is_Nil (Def) then
return Ada.Image (Actual_Param);
else
return Decls.Name (Def);
end if;
end if;
end Actual_Reference;
function Image (Gen_Param : Ada.Element) return String is
begin
if Ada.Is_Nil (Gen_Param) then
return "";
else
return More_String_Utilities.Replaced
(Decls.Generic_Parameter_Kinds'Image
(Decls.Generic_Parameter_Kind (Gen_Param)));
end if;
end Image;
function Column_Image (C : Columns; Elem : Ada.Element) return String is
begin
case C is
when Generic_Unit =>
return Decls.Name (The_Generic);
when Instantiation =>
if Is_A_Generic then
return "";
else
return Decls.Name (Elem);
end if;
when Dynamic =>
if Is_A_Generic then
return "";
else
if Is_Dynamic then
return "YES";
else
return "NO ";
end if;
end if;
when P1 .. P4 =>
if Is_A_Generic then
declare
Col_Image : constant String :=
Image (Current_Gen_Param);
begin
Step_Parameters;
return (Col_Image);
end;
else
declare
Col_Image : constant String :=
Actual_Reference (Current_Actual_Param);
begin
Step_Parameters;
return (Col_Image);
end;
end if;
end case;
end Column_Image;
function Explanation (C : Columns; Elem : Ada.Element) return String is
begin
case C is
when Generic_Unit =>
return "Name of the generic unit";
when Instantiation =>
return "Name of the Instantiation";
when Dynamic =>
if Is_A_Generic then
return "";
else
if Is_Dynamic then
return
"Instantiation is declared in a subuprogram and is dynamically instantiated";
else
return "Instantiation is not dynamic";
end if;
end if;
when P1 .. P4 =>
if Is_A_Generic then
return "Kind of the generic parameter";
else
return
"Reference to the declaration used for the actual parameter";
end if;
end case;
end Explanation;
procedure Linkage (C : Columns;
Elem : Ada.Element;
Linkage_Element : out Ada.Element;
Linkage_Elements : out Ada.Element_List) is
begin
-- default values changed within the case statement as necessary
Linkage_Element := Ada.Nil_Element;
Linkage_Elements := Ada.Nil_List;
case C is
when Generic_Unit =>
Linkage_Element := The_Generic;
when Instantiation =>
if Is_A_Generic then
null;
else
Linkage_Element := Elem;
end if;
when Dynamic =>
if Is_A_Generic then
Linkage_Element := The_Generic;
else
Linkage_Element := Elem;
end if;
when P1 .. P4 =>
if Is_A_Generic then
Linkage_Element := Curret_Gen_Param;
else
Linkage_Element := Current_Actual_Param;
end if;
end case;
end Linkage;
procedure Add_Hyper_Table_To_Doc is
new Add_Hyper_Table
(Is_Included,
Columns,
Is_Integer_Column,
Column_Image,
Explanation,
Linkage,
Table_Title => "Generics and their Instantiations");
begin
if Object.Is_Bad (Units_Iter) then
Log.Put_Line (Units & " is not a valid pathname",
Profile.Error_Msg);
else
Add_Hyper_Table_To_Doc (Units_Iter, To_Document, Response);
end if;
end Add;
procedure Display (Units : String := "";
To_Preview_Object : String := "generic_info";
Response : String := "<PROFILE>") is
Document : Abstract_Document.Handle;
Condition : Errors.Condition;
begin
Create_Null_Document (Named => To_Preview_Object,
Error_Info => Condition,
Document_Handle => Document);
case Errors.Severity (Condition) is
when Simple_Status.Problem | Simple_Status.Fatal =>
Log.Put_Line ("Problem creating object " & To_Preview_Object &
". " & Errors.Info (Condition),
Profile.Error_Msg);
when others =>
Add (Units, Document, Response);
Abstract_Document.Close (Document);
Common.Definition (To_Preview_Object);
end case;
end Display;
end Find_Generics;
nblk1=e
nid=0
hdr6=1c
[0x00] rec0=20 rec1=00 rec2=01 rec3=040
[0x01] rec0=20 rec1=00 rec2=02 rec3=050
[0x02] rec0=01 rec1=00 rec2=0c rec3=016
[0x03] rec0=1b rec1=00 rec2=03 rec3=006
[0x04] rec0=19 rec1=00 rec2=04 rec3=014
[0x05] rec0=00 rec1=00 rec2=0e rec3=008
[0x06] rec0=1c rec1=00 rec2=05 rec3=08c
[0x07] rec0=1d rec1=00 rec2=06 rec3=044
[0x08] rec0=19 rec1=00 rec2=07 rec3=01a
[0x09] rec0=17 rec1=00 rec2=08 rec3=036
[0x0a] rec0=18 rec1=00 rec2=09 rec3=060
[0x0b] rec0=00 rec1=00 rec2=0d rec3=002
[0x0c] rec0=1b rec1=00 rec2=0a rec3=048
[0x0d] rec0=17 rec1=00 rec2=0b rec3=000
tail 0x215003330815c637bf11f 0x42a00088462061e03