|
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: 13312 (0x3400) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Find_Use_Clauses, seg_004419
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Log; with Profile; with Common; with Lrm_Utilities; with Add_Hyper_Table; with Create_Null_Document; with Lrm_Renames; use Lrm_Renames; with Directory_Renames; use Directory_Renames; with Errors; with Simple_Status; package body Find_Use_Clauses is type Context_Data is record First_With : Ada.Element; Number_Of_Withs : Natural; First_Use : Ada.Element; Number_Of_Uses : Natural; Internal_Uses : Ada.Element_List; Number_Of_Internal_Uses : Natural; end record; Nil_Data : constant Context_Data := (Ada.Nil_Element, 0, Ada.Nil_Element, 0, Ada.Nil_List, 0); procedure Pre_Op (Program_Element : Ada.Element; State : in out Context_Data; Control : in out Ada.Traversal_Control) is Referenced_Units : Ada.Element_Iterator; begin case Ada.Kind (Program_Element) is when Ada.A_Context_Clause => case Comp_Units.Context_Clause_Kind (Program_Element) is when Comp_Units.A_Use_Clause => Referenced_Units := Comp_Units.Referenced_Units (Program_Element); case Ada.Kind (Ada.Parent (Program_Element)) is when Ada.A_Compilation_Unit => if Ada.Is_Nil (State.First_Use) then State.First_Use := Program_Element; end if; while not Ada.Done (Referenced_Units) loop State.Number_Of_Uses := State.Number_Of_Uses + 1; Ada.Next (Referenced_Units); end loop; -- this is an internal use clause when others => Ada.Append (Program_Element, State.Internal_Uses); while not Ada.Done (Referenced_Units) loop State.Number_Of_Internal_Uses := State.Number_Of_Internal_Uses + 1; Ada.Next (Referenced_Units); end loop; end case; when Comp_Units.A_With_Clause => if Ada.Is_Nil (State.First_With) then State.First_With := Program_Element; end if; Referenced_Units := Comp_Units.Referenced_Units (Program_Element); while not Ada.Done (Referenced_Units) loop State.Number_Of_Withs := State.Number_Of_Withs + 1; Ada.Next (Referenced_Units); end loop; when others => null; end case; when others => null; end case; Control := Ada.Continue; end Pre_Op; procedure Post_Op (Program_Element : Ada.Element; State : in out Context_Data; Control : in out Ada.Traversal_Control) is begin Control := Ada.Continue; end Post_Op; procedure Traverse_For_Clauses is new Ada.Depth_First_Traversal (Context_Data, Pre_Op, Post_Op); procedure Add (Units : String := ""; To_Document : in out Abstract_Document.Handle; Response : String := "<PROFILE>") is Units_Iter : Object.Iterator := Naming.Resolution (Units); type Columns is (Uses, Internal_Uses, Withs, Compilation_Unit); Data : Context_Data; function Is_Integer_Column (C : Columns) return Boolean is begin case C is when Withs | Uses | Internal_Uses => return True; when Compilation_Unit => return False; end case; end Is_Integer_Column; function Is_Included (Elem : Ada.Element) return Boolean is begin case Ada.Kind (Elem) is when Ada.A_Compilation_Unit => Data := Nil_Data; Traverse_For_Clauses (Root_Element => Elem, State => Data, Major_Elements_Only => True); if Data.Number_Of_Uses > 0 or else Data.Number_Of_Internal_Uses > 0 then return True; else return False; end if; when others => return False; end case; end Is_Included; function Explanation (C : Columns; Elem : Ada.Element) return String is begin case C is when Compilation_Unit => return "Name of the compilation unit"; when Uses => return "Number of use clauses in the context part"; when Internal_Uses => return "Number of use clauses used internally in the unit"; when Withs => return "Number of with clauses in the context part"; end case; end Explanation; function Column_Image (C : Columns; Elem : Ada.Element) return String is begin case C is when Compilation_Unit => return Decls.Name (Comp_Units.Unit_Declaration (Elem)); when Uses => return Natural'Image (Data.Number_Of_Uses); when Internal_Uses => return Natural'Image (Data.Number_Of_Internal_Uses); when Withs => return Natural'Image (Data.Number_Of_Withs); end case; end Column_Image; 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 Compilation_Unit => Linkage_Element := Lrm_Utilities.Comp_Unit_Id (Elem); when Internal_Uses => Linkage_Elements := Data.Internal_Uses; when Withs => if Data.Number_Of_Withs > 0 then Linkage_Element := Data.First_With; else Linkage_Element := Ada.Nil_Element; end if; when Uses => if Data.Number_Of_Uses > 0 then Linkage_Element := Data.First_Use; else Linkage_Element := Ada.Nil_Element; 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 => "UNITS CONTAINING USE CLAUSES"); 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); end if; end Add; procedure Display (Units : String := ""; To_Preview_Object : String := "Use_Clause_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_Use_Clauses;
nblk1=c nid=0 hdr6=18 [0x00] rec0=20 rec1=00 rec2=01 rec3=04c [0x01] rec0=02 rec1=00 rec2=0c rec3=03a [0x02] rec0=14 rec1=00 rec2=02 rec3=070 [0x03] rec0=15 rec1=00 rec2=03 rec3=046 [0x04] rec0=1d rec1=00 rec2=04 rec3=074 [0x05] rec0=1c rec1=00 rec2=05 rec3=06e [0x06] rec0=1a rec1=00 rec2=06 rec3=060 [0x07] rec0=18 rec1=00 rec2=07 rec3=008 [0x08] rec0=00 rec1=00 rec2=0b rec3=002 [0x09] rec0=19 rec1=00 rec2=08 rec3=058 [0x0a] rec0=18 rec1=00 rec2=09 rec3=01c [0x0b] rec0=0d rec1=00 rec2=0a rec3=000 tail 0x215003528815c63b6ac87 0x42a00088462061e03