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

⟦841ffe38f⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Program_Analysis, seg_004561

Derivation

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

E3 Source Code



with Lrm_Utilities;
with Lrm_Renames;
use Lrm_Renames;
package body Program_Analysis is
    package Ada renames Ada_Program;

    function Is_Predefined_Type_Defintion (Elem : Ada.Element) return Boolean is
        Ground : Ada.Element;
    begin
        if Types.Kind (Elem) /= Types.Not_A_Type_Definition then
            Ground := Types.Ground_Type (Elem);
            case Types.Kind (Ground) is
                when Types.An_Integer_Type_Definition |
                     Types.A_Float_Type_Definition =>
                    return Types.Is_Predefined (Ground);
                when others =>
                    return False;
            end case;
        else
            return False;
        end if;
    end Is_Predefined_Type_Defintion;

    function Is_Anonymous_Array_Type_Defintion
                (Elem : Ada.Element) return Boolean is
        Enclosing_Decl : Ada.Element := Decls.Enclosing_Declaration (Elem);
    begin
        case Types.Kind (Elem) is
            when Types.An_Array_Type_Definition =>
                case Decls.Kind (Enclosing_Decl) is
                    when Decls.A_Variable_Declaration |
                         Decls.A_Constant_Declaration =>
                        return True;
                    when others =>
                        return False;
                end case;
            when others =>
                return False;
        end case;
    end Is_Anonymous_Array_Type_Defintion;

    procedure Pre_Op (Program_Element :        Ada.Element;
                      State           : in out Unit_Data;
                      Control         : in out Ada.Traversal_Control) is
    begin
        case Ada.Kind (Program_Element) is
            when Ada.A_Statement =>
                case Stmts.Kind (Program_Element) is
                    when Stmts.A_Goto_Statement =>
                        Ada.Append (Program_Element, State.Gotos);
                        Control := Ada.Abandon_Children;
                    when others =>
                        Control := Ada.Continue;
                end case;
            when Ada.A_Declaration =>
                case Decls.Kind (Program_Element) is
                    when Decls.A_Variable_Declaration =>
                        if Lrm_Utilities.Is_Actual_Declaration
                              (Program_Element) and then
                           Lrm_Utilities.Is_Actual_Variable_Declaration
                              (Program_Element) and then
                           not (Lrm_Utilities.Is_Initialized
                                   (Program_Element)) then
                            Ada.Append (Program_Element, State.Vars);
                        end if;
                        Control := Ada.Continue;
                    when others =>
                        Control := Ada.Continue;
                end case;

            when others =>

                case Comp_Units.Context_Clause_Kind (Program_Element) is

                    when Comp_Units.A_Use_Clause =>
                        Ada.Append (Program_Element, State.Uses);
                    when others =>
                        null;
                end case;

                if Is_Predefined_Type_Defintion (Program_Element) then
                    Ada.Append (Decls.Enclosing_Declaration (Program_Element),
                                State.Pre_Defineds);
                else
                    null;
                end if;

                if Is_Anonymous_Array_Type_Defintion (Program_Element) then
                    Ada.Append (Decls.Enclosing_Declaration (Program_Element),
                                State.Anons);

                else
                    null;
                end if;  
                Control := Ada.Continue;
        end case;
    end Pre_Op;

    procedure Post_Op (Program_Element :        Ada.Element;
                       State           : in out Unit_Data;
                       Control         : in out Ada.Traversal_Control) is
    begin
        Control := Ada.Continue;
    end Post_Op;

    procedure Traverse is new Ada.Depth_First_Traversal
                                 (Unit_Data, Pre_Op, Post_Op);

    function Analyze (Comp_Unit : Ada_Program.Element) return Unit_Data is
        Data : Unit_Data;
    begin
        Traverse (Comp_Unit, Data, False);
        return Data;
    end Analyze;

    function Anonymous_Array_Decls (In_Unit : Unit_Data)
                                   return Ada_Program.Element_List is
    begin
        return In_Unit.Anons;
    end Anonymous_Array_Decls;

    function Use_Clauses (In_Unit : Unit_Data)
                         return Ada_Program.Element_List is
    begin
        return In_Unit.Uses;
    end Use_Clauses;

    function Go_Tos (In_Unit : Unit_Data) return Ada_Program.Element_List is
    begin
        return In_Unit.Gotos;
    end Go_Tos;

    function Predefined_Numerics (In_Unit : Unit_Data)
                                 return Ada_Program.Element_List is
    begin
        return In_Unit.Pre_Defineds;
    end Predefined_Numerics;

    function Uninitialized_Variables (In_Unit : Unit_Data)
                                     return Ada_Program.Element_List is
    begin
        return In_Unit.Vars;
    end Uninitialized_Variables;
end Program_Analysis;

E3 Meta Data

    nblk1=6
    nid=0
    hdr6=c
        [0x00] rec0=1d rec1=00 rec2=01 rec3=030
        [0x01] rec0=17 rec1=00 rec2=02 rec3=04e
        [0x02] rec0=16 rec1=00 rec2=03 rec3=04c
        [0x03] rec0=1b rec1=00 rec2=04 rec3=03c
        [0x04] rec0=1e rec1=00 rec2=05 rec3=034
        [0x05] rec0=0f rec1=00 rec2=06 rec3=000
    tail 0x217001eca815c64d9c4d7 0x42a00088462061e03