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

⟦b80aee6a2⟧ Ada Source

    Length: 39936 (0x9c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Ada_Construct_Analysis, seg_0043f3

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 Common;
with Mapping;
with Pragmas;
with Representation_Clauses;
with String_Utilities;
with Lrm_Utilities;
with Ada_Constructs;
with Table_Formatter;
with More_String_Utilities;
with Abstract_Document;
with Directory_Renames;
use Directory_Renames;
with Errors;
with Map_Generic;
with Lrm_Renames;
use Lrm_Renames;
package body Ada_Construct_Analysis is

    package Ad         renames Abstract_Document;
    package Ad_Specify renames Abstract_Document.Specify;

    Max_Units : constant := 1024;

    package Unit_Map is new Map_Generic (Max_Units, Ada.Compilation_Unit,
                                         Ada_Constructs.Construct_Counts,
                                         Lrm_Utilities.Hash);

    function Ada_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                       return Ada_Constructs.Ada_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Majors;
    end Ada_Count;
    package Ada_Display is new Ada_Constructs.Ada_Counting.Display
                                  (Ada_Constructs.Ada_Counting.Image,
                                   Unit_Map.Map, Ada_Count);

    function Id_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                      return Ada_Constructs.Id_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Ids;
    end Id_Count;
    package Id_Display is new Ada_Constructs.Id_Counting.Display
                                 (Ada_Constructs.Id_Counting.Image,
                                  Unit_Map.Map, Id_Count);

    function Context_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                           return Ada_Constructs.Context_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Contexts;
    end Context_Count;
    package Context_Display is new Ada_Constructs.Context_Counting.Display
                                      (Ada_Constructs.Context_Counting.Image,
                                       Unit_Map.Map, Context_Count);

    function Decl_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                        return Ada_Constructs.Decl_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Decls;
    end Decl_Count;
    package Decl_Display is new Ada_Constructs.Decl_Counting.Display
                                   (Ada_Constructs.Decl_Counting.Image,
                                    Unit_Map.Map, Decl_Count);

    function Param_Mode_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.Param_Mode_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Param_Modes;
    end Param_Mode_Count;
    package Param_Mode_Display is
       new Ada_Constructs.Param_Mode_Counting.Display
              (Ada_Constructs.Param_Mode_Counting.Image,
               Unit_Map.Map, Param_Mode_Count);

    function Generic_Param_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.Generic_Param_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Generic_Params;
    end Generic_Param_Count;
    package Generic_Param_Display is
       new Ada_Constructs.Generic_Param_Counting.Display
              (Ada_Constructs.Generic_Param_Counting.Image,
               Unit_Map.Map, Generic_Param_Count);

    function Rep_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                       return Ada_Constructs.Rep_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Reps;
    end Rep_Count;
    package Rep_Display is new Ada_Constructs.Rep_Counting.Display
                                  (Ada_Constructs.Rep_Counting.Image,
                                   Unit_Map.Map, Rep_Count);

    function Length_Clause_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.Length_Clause_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Length_Clauses;
    end Length_Clause_Count;
    package Length_Clause_Display is
       new Ada_Constructs.Length_Clause_Counting.Display
              (Ada_Constructs.Length_Clause_Counting.Image,
               Unit_Map.Map, Length_Clause_Count);

    function Statement_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                             return Ada_Constructs.Statement_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Statements;
    end Statement_Count;
    package Statement_Display is
       new Ada_Constructs.Statement_Counting.Display
              (Ada_Constructs.Statement_Counting.Image,
               Unit_Map.Map, Statement_Count);

    function Loop_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                        return Ada_Constructs.Loop_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Loops;
    end Loop_Count;
    package Loop_Display is new Ada_Constructs.Loop_Counting.Display
                                   (Ada_Constructs.Loop_Counting.Image,
                                    Unit_Map.Map, Loop_Count);

    function Select_Alternative_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.Select_Alternative_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Select_Alternatives;
    end Select_Alternative_Count;
    package Select_Alternative_Display is
       new Ada_Constructs.Select_Alternative_Counting.Display
              (Ada_Constructs.Select_Alternative_Counting.Image,
               Unit_Map.Map, Select_Alternative_Count);

    function Expression_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.Expression_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Expressions;
    end Expression_Count;
    package Expression_Display is
       new Ada_Constructs.Expression_Counting.Display
              (Ada_Constructs.Expression_Counting.Image,
               Unit_Map.Map, Expression_Count);

    function Type_Count (Elem : Ada.Element; Map : Unit_Map.Map)
                        return Ada_Constructs.Type_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Types;
    end Type_Count;
    package Type_Display is new Ada_Constructs.Type_Counting.Display
                                   (Ada_Constructs.Type_Counting.Image,
                                    Unit_Map.Map, Type_Count);

    function Predefined_Pragma_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.Predefined_Pragma_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Pragmas.Predefined;
    end Predefined_Pragma_Count;
    package Predefined_Pragma_Display is
       new Ada_Constructs.Predefined_Pragma_Counting.Display
              (Lrm_Utilities.Pragma_Name,
               Unit_Map.Map, Predefined_Pragma_Count);

    function Implementation_Dependent_Count
                (Elem : Ada.Element; Map : Unit_Map.Map)
                return Ada_Constructs.
                       Implementation_Dependent_Pragma_Counting.Counts is
    begin
        return Unit_Map.Eval (Map, Elem).Pragmas.Implementation_Dependent;
    end Implementation_Dependent_Count;
    package Implementation_Dependent_Pragma_Display is
       new Ada_Constructs.Implementation_Dependent_Pragma_Counting.Display
              (Lrm_Utilities.Pragma_Name, Unit_Map.Map,
               Implementation_Dependent_Count);

    procedure Analyze_All (Units :        String;
                           Into  : in out Unit_Map.Map;
                           Total : in out Ada_Constructs.Construct_Counts) is

        Comp_Units : Object.Iterator := Naming.Resolution (Units);
    begin
        Unit_Map.Initialize (Into);

        while not Object.Done (Comp_Units) loop
            declare
                Current_Count : Ada_Constructs.Construct_Counts;
                Comp_Unit     : Ada.Element;
            begin

                Comp_Unit := Ada.Conversion.To_Compilation_Unit
                                (Object.Value (Comp_Units));
                Ada_Constructs.Analyze (Comp_Unit,
                                        Major_Elements_Only => False,
                                        Counts              => Current_Count);
                Unit_Map.Define (The_Map => Into,
                                 D => Lrm_Utilities.Comp_Unit_Id (Comp_Unit),
                                 R => Current_Count,
                                 Trap_Multiples => False);
                Total := Ada_Constructs."+" (Total, Current_Count);
            end;

            Object.Next (Comp_Units);
        end loop;

    end Analyze_All;


    procedure Add_Sub_Paragraphs (Unit : Ada.Element;
                                  Unit_Name : String;
                                  Divisor : Natural := 0;
                                  Divisor_Title : String := "";
                                  Document : in out Ad.Handle;
                                  Counts : Ada_Constructs.Construct_Counts) is
        Linkage : Ad.Linkage_Info :=
           Ad_Specify.Gen_Linkage (Document,
                                   Definition => Mapping.Create (Unit));
    begin
        Ad_Specify.New_Sub_Paragraph
           (Document, "Element Counts for unit " & Unit_Name, Linkage);

-- major elements
        Ad_Specify.New_Sub_Paragraph
           (Document, "Element totals for unit " & Unit_Name, Linkage);
        Ada_Display.Table (Unit, "Major Unit Kinds",
                           Start         => Ada.A_Context_Clause,
                           Divisor       => Divisor,
                           Divisor_Title => Divisor_Title,
                           For_Counts    => Counts.Majors,
                           To_Doc        => Document);

-- context clauses
        Ad_Specify.Next_Sub_Paragraph
           (Document, "Context clause totals for unit " & Unit_Name, Linkage);
        Context_Display.Table (Unit, "Context Clauses Kinds",
                               For_Counts    => Counts.Contexts,
                               Divisor       => Divisor,
                               Divisor_Title => Divisor_Title,
                               To_Doc        => Document);

-- Declarations
        Ad_Specify.Next_Sub_Paragraph
           (Document, "Declaration totals for unit " & Unit_Name, Linkage);
        Decl_Display.Table (Unit, "Declaration Kinds",
                            For_Counts    => Counts.Decls,
                            Divisor       => Divisor,
                            Divisor_Title => Divisor_Title,
                            To_Doc        => Document);

-- Statements
        Ad_Specify.Next_Sub_Paragraph
           (Document, "Statement totals for unit " & Unit_Name, Linkage);
        Statement_Display.Table (Unit, "Statement Kinds",
                                 For_Counts    => Counts.Statements,
                                 Divisor       => Divisor,
                                 Divisor_Title => Divisor_Title,
                                 To_Doc        => Document);

-- Pragmas
        Ad_Specify.Next_Sub_Paragraph
           (Document, "Predefined pragma counts for unit " & Unit_Name,
            Linkage);
        Predefined_Pragma_Display.Table
           (Unit,
            Title         => "Predefined Pragma Kinds",
            For_Counts    => Counts.Pragmas.Predefined,
            Divisor       => Divisor,
            Divisor_Title => Divisor_Title,
            To_Doc        => Document);

        Ad_Specify.Next_Sub_Paragraph
           (Document,
            "Implementation defined pragma totals for unit " & Unit_Name,
            Linkage);
        Implementation_Dependent_Pragma_Display.Table
           (Unit,
            Title         => "Implementation Dependent Pragma Kinds",
            For_Counts    => Counts.Pragmas.Implementation_Dependent,
            Divisor       => Divisor,
            Divisor_Title => Divisor_Title,
            To_Doc        => Document);

-- Rep specs
        Ad_Specify.Next_Sub_Paragraph
           (Document,
            "Representation specification totals for unit " & Unit_Name,
            Linkage);
        Rep_Display.Table (Unit, "Representation Specification Kinds",
                           For_Counts    => Counts.Reps,
                           Divisor       => Divisor,
                           Divisor_Title => Divisor_Title,
                           To_Doc        => Document);

-- -- ids
--         Ad_Specify.Next_Sub_Paragraph
--            (Document, "Identifier totals for unit " & Unit_Name, Linkage);
--         Id_Display.Table (Unit, "Identifier Kinds",
--                           For_Counts => Counts.Ids,
--                           Divisor => Divisor,
--                           Divisor_Title => Divisor_Title,
--                           To_Doc => Document);
--
-- Expressions
        Ad_Specify.Next_Sub_Paragraph
           (Document, "Expression kind totals for unit " & Unit_Name, Linkage);
        Expression_Display.Table (Unit, "Expression Kinds",
                                  For_Counts    => Counts.Expressions,
                                  Divisor       => Divisor,
                                  Divisor_Title => Divisor_Title,
                                  To_Doc        => Document);

-- type definitions
        Ad_Specify.Next_Sub_Paragraph
           (Document, "Type definition totals for unit " & Unit_Name, Linkage);
        Type_Display.Table (Unit, "Type Definition Kinds",
                            For_Counts    => Counts.Types,
                            Divisor       => Divisor,
                            Divisor_Title => Divisor_Title,
                            To_Doc        => Document);



        Ad_Specify.End_Level (Document);


    end Add_Sub_Paragraphs;

    procedure Add_Unit_Totals (Document : in out Abstract_Document.Handle;
                               Total    : Ada_Constructs.Construct_Counts) is
        package Table is new Table_Formatter (2);
    begin
        Table.Header ("Unit Breakout", Format => Table.Left);
        Table.Header ("Count", Format => Table.Right);
        Table.Item ("Compilation Units");
        Table.Item (Natural'Image (Total.Comp_Units.Unit_Count),
                    Explanation => "Number of compilation units analyzed");
        Table.Item ("Subunits");
        Table.Item (Natural'Image (Total.Comp_Units.Subunit_Count),
                    Explanation => "Number of subunits analyzed");
        Table.Item ("Main Units");
        Table.Item (Natural'Image (Total.Comp_Units.Main_Count),
                    Explanation => "Number of main program units analyzed");
        Table.Display (Document, "Unit breakout totals");

        Add_Sub_Paragraphs (Ada.Nil_Element, "totals",
                            Total.Comp_Units.Unit_Count,
                            "Ave per unit", Document, Total);

    end Add_Unit_Totals;

    procedure Display_By_Unit (Units      : String := "<SELECTION>";
                               To_Preview : String := "Ada_Construct_Info") is

        Current_Context : constant String := Naming.Default_Context;
        Object_Status   : Object.Error_Code;

        Document : Ad.Handle;
        Status   : Errors.Condition;

        Unit          : Ada.Element;
        Unit_Counts   : Unit_Map.Map;
        A_Units_Count : Ada_Constructs.Construct_Counts;

        Total : Ada_Constructs.Construct_Counts;
        Iter  : Unit_Map.Iterator;
    begin
        Ad.Create (Document, To_Preview, Status);
        Ad_Specify.Cover (Document, "");
        Ad_Specify.Cover_Item (Document, "");

        Naming.Set_Default_Context (Current_Context, Object_Status);

        Analyze_All (Units, Unit_Counts, Total);
        Unit_Map.Init (Iter, Unit_Counts);

        Ad_Specify.Paragraph (Document, 1, "Totals for all units");

        Add_Unit_Totals (Document, Total);

        Ad_Specify.Paragraph (Document, 2, "Individual Unit Totals");

        while not Unit_Map.Done (Iter) loop

            Unit          := Unit_Map.Value (Iter);
            A_Units_Count := Unit_Map.Eval (Unit_Counts, Unit);

            Add_Sub_Paragraphs (Unit, Decls.Name (Unit), 0,
                                "", Document, A_Units_Count);

            Unit_Map.Next (Iter);
        end loop;
        Ad.Close (Document);
        Common.Definition (To_Preview);
    end Display_By_Unit;

    procedure Display_Comparison
                 (Of_Units   : String := "<SELECTION>";
                  To_Preview : String := "Ada_Construct_Info") is

        Current_Context : constant String := Naming.Default_Context;
        Object_Status   : Object.Error_Code;

        Document : Ad.Handle;
        Status   : Errors.Condition;

        Unit          : Ada.Element;
        Unit_Counts   : Unit_Map.Map;
        A_Units_Count : Ada_Constructs.Construct_Counts;

        Total : Ada_Constructs.Construct_Counts;
        Iter  : Unit_Map.Iterator;

        All_Elements : Ada.Element_List;
    begin
        Ad.Create (Document, To_Preview, Status);
        Ad_Specify.Cover (Document, "");
        Ad_Specify.Cover_Item (Document, "");

        Naming.Set_Default_Context (Current_Context, Object_Status);

        Analyze_All (Of_Units, Unit_Counts, Total);

        Ad_Specify.Paragraph (Document, 1, "Totals for all units");

        Add_Unit_Totals (Document, Total);

        Ad_Specify.Paragraph (Document, 2, "Individual Unit Totals");

        Unit_Map.Init (Iter, Unit_Counts);
        while not Unit_Map.Done (Iter) loop
            Ada.Append (Unit_Map.Value (Iter), All_Elements);
            Unit_Map.Next (Iter);
        end loop;

-- major elements
        Ad_Specify.New_Sub_Paragraph (Document, "Major Elements");
        Ada_Display.Key_Table (Document, Start => Ada.A_Context_Clause);
        Ada_Display.Unit_Comparison_Table (All_Elements, Unit_Counts,
                                           Title  => "Major Element Totals",
                                           Start  => Ada.A_Context_Clause,
                                           To_Doc => Document);

-- context clauses
        Ad_Specify.Next_Sub_Paragraph (Document, "Context Clauses");
        Context_Display.Key_Table (Document);
        Context_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Context Clauses Totals",
            To_Doc => Document);

-- Declarations
        Ad_Specify.Next_Sub_Paragraph (Document, "Declarations");

        Ad_Specify.New_Sub_Paragraph (Document, "Program Unit Declarations");
        Decl_Display.Key_Table (Start  => Decls.A_Package_Declaration,
                                Stop   => Decls.A_Function_Body_Declaration,
                                To_Doc => Document);
        Decl_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Program Unit Declaration Totals",
            Start  => Decls.A_Package_Declaration,
            Stop   => Decls.A_Function_Body_Declaration,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Generic Declarations");
        Decl_Display.Key_Table (Start  => Decls.A_Generic_Package_Declaration,
                                Stop   => Decls.A_Function_Instantiation,
                                To_Doc => Document);
        Decl_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Generic Declaration Totals",
            Start  => Decls.A_Generic_Package_Declaration,
            Stop   => Decls.A_Function_Instantiation,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Object Declarations");
        Decl_Display.Key_Table (Document,
                                Start => Decls.A_Variable_Declaration,
                                Stop  => Decls.A_Real_Number_Declaration);
        Decl_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Object Declaration Totals",
            Start  => Decls.A_Variable_Declaration,
            Stop   => Decls.A_Real_Number_Declaration,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Type Declarations");
        Decl_Display.Key_Table  
           (Start  => Decls.A_Type_Declaration,
            Stop   => Decls.A_Subtype_Declaration,
            To_Doc => Document);
        Decl_Display.Unit_Comparison_Table  
           (All_Elements, Unit_Counts,
            Title  => "Type Declaration Totals",
            Start  => Decls.A_Type_Declaration,
            Stop   => Decls.A_Subtype_Declaration,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Renaming Declarations");
        Decl_Display.Key_Table (Start  => Decls.A_Package_Rename_Declaration,
                                Stop   => Decls.An_Exception_Rename_Declaration,
                                To_Doc => Document);
        Decl_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Renaming Declaration Totals",
            Start  => Decls.A_Package_Rename_Declaration,
            Stop   => Decls.An_Exception_Rename_Declaration,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Tasking Declarations");
        Decl_Display.Key_Table (Start  => Decls.A_Task_Declaration,
                                Stop   => Decls.An_Entry_Declaration,
                                To_Doc => Document);
        Decl_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Tasking Declaration Totals",
            Start  => Decls.A_Task_Declaration,
            Stop   => Decls.An_Entry_Declaration,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Miscellaneous Declarations");
        Decl_Display.Key_Table (Start  => Decls.An_Exception_Declaration,
                                Stop   => Decls.A_Generic_Formal_Parameter,
                                To_Doc => Document);
        Decl_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Miscellaneous Declaration Totals",
            Start  => Decls.An_Exception_Declaration,
            Stop   => Decls.A_Generic_Formal_Parameter,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Parameter Modes");
        Param_Mode_Display.Key_Table (To_Doc => Document);
        Param_Mode_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Parameter Mode Totals",
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Generic Parameters");
        Generic_Param_Display.Key_Table (To_Doc => Document);
        Generic_Param_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Generic Parameter Totals",
            To_Doc => Document);

        Ad_Specify.End_Level (Document);

-- Statements
        Ad_Specify.Next_Sub_Paragraph (Document, "Statements");

        Ad_Specify.New_Sub_Paragraph (Document, "Simple Statements");
        Statement_Display.Key_Table (Document,
                                     Start => Stmts.A_Null_Statement,
                                     Stop  => Stmts.A_Goto_Statement);
        Statement_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Simple Statement Totals",
            Start  => Stmts.A_Null_Statement,
            Stop   => Stmts.A_Goto_Statement,
            To_Doc => Document);

        Statement_Display.Key_Table (Document,
                                     Start => Stmts.An_Entry_Call_Statement,
                                     Stop  => Stmts.A_Code_Statement);
        Statement_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Simple Statement Totals",
            Start  => Stmts.An_Entry_Call_Statement,
            Stop   => Stmts.A_Code_Statement,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Compound Statements");
        Statement_Display.Key_Table
           (Document,
            Start => Stmts.An_If_Statement,
            Stop  => Stmts.A_Timed_Entry_Call_Statement);
        Statement_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Compound Statement Totals",
            Start  => Stmts.An_If_Statement,
            Stop   => Stmts.A_Timed_Entry_Call_Statement,
            To_Doc => Document);

        Ad_Specify.New_Sub_Paragraph (Document,
                                      "Additional Statement Analysis");

        Ad_Specify.Next_Sub_Paragraph (Document, "Loop Statement Kinds");
        Loop_Display.Key_Table (Document, Stop => Stmts.A_Simple_Loop);
        Loop_Display.Unit_Comparison_Table (All_Elements, Unit_Counts,
                                            Title  => "Loop Statement Totals",
                                            Stop   => Stmts.A_Simple_Loop,
                                            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document,
                                       "Select Alterative Statements");
        Select_Alternative_Display.Key_Table (Document);
        Select_Alternative_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Compound Statement Totals",
            To_Doc => Document);

        Ad_Specify.End_Level (Document);
        Ad_Specify.End_Level (Document);

-- Pragmas
        Ad_Specify.Next_Sub_Paragraph (Document, "Pragmas");

        Ad_Specify.New_Sub_Paragraph (Document, "Predefined Pragmas");
        Predefined_Pragma_Display.Key_Table (Document,  
                                             Start => Pragmas.Controlled,
                                             Stop  => Pragmas.Memory_Size);
        Predefined_Pragma_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Predefined Pragma Totals",
            Start  => Pragmas.Controlled,
            Stop   => Pragmas.Memory_Size,
            To_Doc => Document);

        Predefined_Pragma_Display.Key_Table
           (Document, Start => Pragmas.Optimize, Stop => Pragmas.Suppress);
        Predefined_Pragma_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Predefined Pragma Totals",
            Start  => Pragmas.Optimize,
            Stop   => Pragmas.Suppress,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document,
                                       "Implementation Defined Pragmas");
        Implementation_Dependent_Pragma_Display.Key_Table
           (Document, Start => Pragmas.Bias_Key, Stop => Pragmas.Main);
        Implementation_Dependent_Pragma_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Implementation Dependent Pragma Totals",
            Start  => Pragmas.Bias_Key,
            Stop   => Pragmas.Main,
            To_Doc => Document);

        Implementation_Dependent_Pragma_Display.Key_Table
           (Document,
            Start => Pragmas.Module_Name,
            Stop  => Pragmas.Private_Eyes_Only);
        Implementation_Dependent_Pragma_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Implementation Dependent Pragma Totals",
            Start  => Pragmas.Module_Name,
            Stop   => Pragmas.Private_Eyes_Only,
            To_Doc => Document);

        Ad_Specify.End_Level (Document);

-- Rep specs
        Ad_Specify.Next_Sub_Paragraph (Document,
                                       "Representation Specifications");
        Rep_Display.Key_Table (Document);
        Rep_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Representation Specification Totals",
            To_Doc => Document);

-- Expressions
        Ad_Specify.Next_Sub_Paragraph (Document, "Expressions");
        Ad_Specify.New_Sub_Paragraph (Document, "Name Expressions");
        Expression_Display.Key_Table (Document,  
                                      Start => Exprs.A_Simple_Name,
                                      Stop  => Exprs.An_Attribute);
        Expression_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Name Expression Totals",
            Start  => Exprs.A_Simple_Name,
            Stop   => Exprs.An_Attribute,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Literal Expressions");
        Expression_Display.Key_Table (Document,  
                                      Start => Exprs.A_Character_Literal,
                                      Stop  => Exprs.A_String_Literal);
        Expression_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Literal Expression Totals",
            Start  => Exprs.A_Character_Literal,
            Stop   => Exprs.A_String_Literal,
            To_Doc => Document);

        Ad_Specify.Next_Sub_Paragraph (Document, "Other Expressions");
        Expression_Display.Key_Table (Document,  
                                      Start => Exprs.An_Aggregate,
                                      Stop  => Exprs.A_Function_Call);
        Expression_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Other Expression Totals",
            Start  => Exprs.An_Aggregate,
            Stop   => Exprs.A_Function_Call,
            To_Doc => Document);

        Ad_Specify.End_Level (Document);

-- type definitions
        Ad_Specify.Next_Sub_Paragraph (Document, "Type Definitions");

        Type_Display.Key_Table (Document,
                                Start => Types.A_Subtype_Indication,
                                Stop  => Types.A_Fixed_Type_Definition);
        Type_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Scalar Type Definition Totals",
            Start  => Types.A_Subtype_Indication,
            Stop   => Types.A_Fixed_Type_Definition,
            To_Doc => Document);

        Type_Display.Key_Table
           (Document,
            Start => Types.An_Array_Type_Definition,
            Stop  => Types.A_Limited_Private_Type_Definition);
        Type_Display.Unit_Comparison_Table
           (All_Elements, Unit_Counts,
            Title  => "Type Definition Totals",
            Start  => Types.An_Array_Type_Definition,
            Stop   => Types.A_Limited_Private_Type_Definition,
            To_Doc => Document);


-- -- ids
--         Ad_Specify.Next_Sub_Paragraph (Document,
--                                        "Identifier totals for all units");
--         Id_Display.Key_Table (Document);
--         Id_Display.Unit_Comparison_Table (All_Elements, Unit_Counts,
--                                           Title => "Identifier Totals",
--                                           To_Doc => Document);
--
        Ad_Specify.End_Level (Document);

        Ad.Close (Document);
        Common.Definition (To_Preview);
    end Display_Comparison;
end Ada_Construct_Analysis;

E3 Meta Data

    nblk1=26
    nid=0
    hdr6=4c
        [0x00] rec0=22 rec1=00 rec2=01 rec3=030
        [0x01] rec0=00 rec1=00 rec2=26 rec3=010
        [0x02] rec0=14 rec1=00 rec2=02 rec3=042
        [0x03] rec0=17 rec1=00 rec2=03 rec3=058
        [0x04] rec0=17 rec1=00 rec2=04 rec3=00e
        [0x05] rec0=16 rec1=00 rec2=05 rec3=05e
        [0x06] rec0=16 rec1=00 rec2=06 rec3=042
        [0x07] rec0=16 rec1=00 rec2=07 rec3=016
        [0x08] rec0=17 rec1=00 rec2=08 rec3=00a
        [0x09] rec0=18 rec1=00 rec2=09 rec3=050
        [0x0a] rec0=00 rec1=00 rec2=25 rec3=008
        [0x0b] rec0=14 rec1=00 rec2=0a rec3=016
        [0x0c] rec0=16 rec1=00 rec2=0b rec3=024
        [0x0d] rec0=17 rec1=00 rec2=0c rec3=014
        [0x0e] rec0=16 rec1=00 rec2=0d rec3=06c
        [0x0f] rec0=14 rec1=00 rec2=0e rec3=068
        [0x10] rec0=18 rec1=00 rec2=0f rec3=078
        [0x11] rec0=1b rec1=00 rec2=10 rec3=018
        [0x12] rec0=00 rec1=00 rec2=24 rec3=020
        [0x13] rec0=1e rec1=00 rec2=11 rec3=03a
        [0x14] rec0=00 rec1=00 rec2=23 rec3=012
        [0x15] rec0=1f rec1=00 rec2=12 rec3=03a
        [0x16] rec0=00 rec1=00 rec2=22 rec3=01a
        [0x17] rec0=17 rec1=00 rec2=13 rec3=068
        [0x18] rec0=13 rec1=00 rec2=14 rec3=054
        [0x19] rec0=15 rec1=00 rec2=15 rec3=058
        [0x1a] rec0=14 rec1=00 rec2=16 rec3=052
        [0x1b] rec0=14 rec1=00 rec2=17 rec3=07c
        [0x1c] rec0=17 rec1=00 rec2=18 rec3=05e
        [0x1d] rec0=17 rec1=00 rec2=19 rec3=01c
        [0x1e] rec0=13 rec1=00 rec2=1a rec3=03c
        [0x1f] rec0=17 rec1=00 rec2=1b rec3=096
        [0x20] rec0=17 rec1=00 rec2=1c rec3=00e
        [0x21] rec0=17 rec1=00 rec2=1d rec3=022
        [0x22] rec0=15 rec1=00 rec2=1e rec3=016
        [0x23] rec0=16 rec1=00 rec2=1f rec3=03e
        [0x24] rec0=1a rec1=00 rec2=20 rec3=000
        [0x25] rec0=03 rec1=00 rec2=21 rec3=001
    tail 0x215003248815c63664587 0x42a00088462061e03