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

⟦6d36a6e4b⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Statement_Traversal, seg_004635

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



with Lrm_Utilities;
with Lrm_Renames;
use Lrm_Renames;
procedure Statement_Traversal
             (Program_Unit_Body_Or_Statement : Ada_Program.Element;
              State : in out State_Record;
              Control : in out Ada_Program.Traversal_Control) is

    Quit : exception;

    procedure Traverse_Statements (Statements : Ada_Program.Element_Iterator);

    procedure Traverse_Statement (Statement : Ada_Program.Element) is
        Arms : Ada.Element_Iterator;
    begin
        Pre_Operation (Statement, State, Control);

        case Control is
            when Ada.Continue =>
                case Stmts.Kind (Statement) is
                    when Stmts.A_Block_Statement =>  
                        Traverse_Statements
                           (Stmts.Block_Body_Statements (Statement));

                    when Stmts.A_Loop_Statement =>
                        Traverse_Statements (Stmts.Loop_Statements (Statement));
                    when Stmts.An_If_Statement =>
                        Arms := Stmts.If_Arm_List (Statement);
                        while not Ada.Done (Arms) loop
                            Traverse_Statements (Stmts.If_Arm_Statements
                                                    (Ada.Value (Arms)));

                            Ada.Next (Arms);
                        end loop;
                    when Stmts.A_Case_Statement =>
                        Arms := Stmts.Case_Arms_List (Statement);
                        while not Ada.Done (Arms) loop
                            Traverse_Statements (Stmts.
                                                 Case_Alternative_Statements
                                                    (Ada.Value (Arms)));
                            Ada.Next (Arms);
                        end loop;
                    when Stmts.Not_A_Statement =>
                        null;
                    when others =>
                        null;
               end case;
            when Ada.Terminate_Immediately =>
                raise Quit;
            when Ada.Abandon_Children | Ada.Abandon_Siblings =>
                null;
        end case;

        Post_Operation (Statement, State, Control);

        case Control is
            when Ada.Terminate_Immediately =>
                raise Quit;
            when others =>
                null;
        end case;

    end Traverse_Statement;

    procedure Traverse_Statements (Statements : Ada_Program.Element_Iterator) is
        Iter : Ada.Element_Iterator := Statements;
    begin
        while not Ada.Done (Iter) loop
            Traverse_Statement (Ada.Value (Iter));

            case Control is
                when Ada.Abandon_Siblings =>
                    exit;
                when others =>
                    null;
            end case;

            Ada.Next (Iter);
        end loop;
    end Traverse_Statements;

begin
    Control := Ada.Continue;
    case Ada.Kind (Program_Unit_Body_Or_Statement) is
        when Ada.A_Declaration =>
            case Decls.Kind (Program_Unit_Body_Or_Statement) is
                when Decls.A_Function_Body_Declaration |
                     Decls.A_Procedure_Body_Declaration =>
                    Traverse_Statements
                       (Stmts.Block_Body_Statements
                           (Decls.Subprogram_Block
                               (Program_Unit_Body_Or_Statement)));

                when Decls.A_Package_Body_Declaration =>
                    Traverse_Statements
                       (Stmts.Block_Body_Statements
                           (Decls.Package_Body_Block
                               (Program_Unit_Body_Or_Statement)));

                when Decls.A_Task_Body_Declaration =>
                    Traverse_Statements
                       (Stmts.Block_Body_Statements
                           (Decls.Task_Body_Block                              (Program_Unit_Body_Or_Statement)));

                when others =>
                    raise Ada.Inappropriate_Program_Element;
            end case;

        when Ada.A_Statement =>
            Traverse_Statement (Program_Unit_Body_Or_Statement);
        when others =>
            if Stmts.Is_Labeled (Program_Unit_Body_Or_Statement) then
                Traverse_Statement (Program_Unit_Body_Or_Statement);
            elsif Lrm_Utilities.Is_Named_Loop
                     (Program_Unit_Body_Or_Statement) then
                Traverse_Statement (Lrm_Utilities.Get_Named_Loop
                                       (Program_Unit_Body_Or_Statement));
            else
                raise Ada.Inappropriate_Program_Element;
            end if;
    end case;
exception
    when Quit =>
        null;
end Statement_Traversal;

E3 Meta Data

    nblk1=5
    nid=0
    hdr6=a
        [0x00] rec0=1c rec1=00 rec2=01 rec3=02e
        [0x01] rec0=15 rec1=00 rec2=02 rec3=002
        [0x02] rec0=23 rec1=00 rec2=03 rec3=00a
        [0x03] rec0=16 rec1=00 rec2=04 rec3=002
        [0x04] rec0=17 rec1=00 rec2=05 rec3=000
    tail 0x2150044f6815c6619a78e 0x42a00088462061e03