DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦dd58a5327⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, generic, package Declaration_Table, seg_00461f

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦5a81ac88f⟧ »Space Info Vol 1« 
        └─⟦this⟧ 

E3 Source Code



--| @SUMMARY Provides a mapping mechanism to store declarations and client
--| state associated with the declaration for later retrieval. It provides
--| overload analysis and for the construction of unique names for reference
--| to overloaded entities.  Finally it provides a list of a external units
--| referenced by the declarations in the database.
with Unbounded_String;
with Map_Generic;
with String_Map_Generic;
with Ada_Program;
generic
    Size : Integer;

    type Global_State is private;

    type Declaration_State is private;  
    pragma Must_Be_Constrained (Yes => Declaration_State);

    with procedure Update_State (Of_Decl    :        Ada_Program.Declaration;
                                 Decl_State : in out Declaration_State;
                                 Global     : in out Global_State);
package Declaration_Table is

    type Database is private;

    procedure Initialize (Db : in out Database);

    --| @DESCRIPTION This procedure will store declarations and their analysis
    --| state in the database for future iteration.  If the declaration
    --| already exits and duplicate with separate state may be added with
    --| Insert_duplications.  Otherwise the state is only updated.
    --| A list of unique parent compilation units is also computed and added
    --| to the database.
    procedure Add (The_Declaration :        Ada_Program.Declaration;  
                   To              : in out Database;
                   Global          : in out Global_State);

    type Declaration_Iterator is private;

    procedure Init (From_Db : Database; Iter : in out Declaration_Iterator);
    function  Done (Iter : Declaration_Iterator) return Boolean;
    procedure Next (Iter : in out Declaration_Iterator);

    function Declaration (Iter : Declaration_Iterator)
                         return Ada_Program.Element;
    function Analysis    (Iter : Declaration_Iterator) return Declaration_State;   function Simple_Name (Iter : Declaration_Iterator) return String;

    function Is_Overloaded (Iter : Declaration_Iterator) return Boolean;

    --| @DESCRIPTION Returns a unique name in the face of overloading by
    --| appending an "_N" the the base simple name.
    function Unique_Simple_Name (Iter : Declaration_Iterator) return String;

    type Parent_Comp_Unit_Iterator is private;

    procedure Init        (From_Db :        Database;
                           Iter    : in out Parent_Comp_Unit_Iterator);
    function  Done        (Iter : Parent_Comp_Unit_Iterator) return Boolean;
    function  Parent      (Iter : Parent_Comp_Unit_Iterator)
                    return Ada_Program.Compilation_Unit;
    function  Simple_Name (Iter : Parent_Comp_Unit_Iterator) return String;
    procedure Next        (Iter : in out Parent_Comp_Unit_Iterator);

private
    package Unbounded is new Unbounded_String (80);

    type Decl_Info is
        record
            Decl_Number        : Positive;
            Decl               : Ada_Program.Declaration;
            Is_Overloaded      : Boolean;
            Unique_Simple_Name : Unbounded.Variable_String;
            Parent             : Ada_Program.Compilation_Unit;
            Analysis_State     : Declaration_State;
        end record;

    function Hash (Key : Long_Integer) return Integer;

    package Decl_Map is new Map_Generic (Size, Long_Integer, Decl_Info, Hash);

    package Parent_Map is new Map_Generic (Size, Long_Integer,
                                           Ada_Program.Element, Hash);

    package Simple_Name_Map is new String_Map_Generic (Size, Natural);

    type Database is
        record
            Last_Decl_Number : Natural := 0;
            Decls            : Decl_Map.Map;  
            Simple_Names     : Simple_Name_Map.Map;
            Parents          : Parent_Map.Map;
            Parent_Iter      : Parent_Map.Iterator;
        end record;

    type Decl_List is array (1 .. Size) of Decl_Info;

    type Declaration_Iterator is
        record
            Size    : Positive;
            Current : Positive;
            Data    : Decl_List;
        end record;

    type Parent_Comp_Unit_Iterator is new Database;
end Declaration_Table;

E3 Meta Data

    nblk1=7
    nid=0
    hdr6=e
        [0x00] rec0=1c rec1=00 rec2=01 rec3=03a
        [0x01] rec0=12 rec1=00 rec2=02 rec3=0a0
        [0x02] rec0=01 rec1=00 rec2=07 rec3=002
        [0x03] rec0=17 rec1=00 rec2=03 rec3=016
        [0x04] rec0=01 rec1=00 rec2=06 rec3=012
        [0x05] rec0=19 rec1=00 rec2=04 rec3=04a
        [0x06] rec0=0b rec1=00 rec2=05 rec3=000
    tail 0x215004326815c65d191de 0x42a00088462061e03