cc30001.a

来自「linux下编程用 编译软件」· A 代码 · 共 220 行

A
220
字号
-- CC30001.A----                             Grant of Unlimited Rights----     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained --     unlimited rights in the software and documentation contained herein.--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making --     this public release, the Government intends to confer upon all --     recipients unlimited rights  equal to those held by the Government.  --     These rights include rights to use, duplicate, release or disclose the --     released technical data and computer software in whole or in part, in --     any manner and for any purpose whatsoever, and to have or permit others --     to do so.----                                    DISCLAIMER----     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED --     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE --     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A--     PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:--      Check that if a non-overriding primitive subprogram is declared for--      a type derived from a formal derived tagged type, the copy of that--      subprogram in an instance can override a subprogram inherited from the--      actual type.---- TEST DESCRIPTION:--      User writes program to handle both mail messages and system messages.----      Mail messages are created by instantiating a generic "mail" package--      with a root message type. System messages are created by--      instantiating the generic with a system message type derived from the--      root in a separate package. The system message type has a primitive--      subprogram called Send.----      Inside the generic, a "mail" type is derived from the generic formal--      derived type, and a "Send" operation is declared.----      Declare a root tagged type T. Declare a generic package with a formal--      derived type using the root tagged type as ancestor. In the generic,--      derive a type from the formal derived type and declare a primitive--      subprogram for it. In a separate package, declare a derivative DT of--      the root tagged type T and declare a primitive subprogram which is--      type conformant with (and hence, overridable for) the primitive--      declared in the generic. Instantiate the generic for DT. Make both--      dispatching and non-dispatching calls to the primitive subprogram. In--      both cases the version of the subprogram in the instance should be--      called (since it overrides the implementation inherited from the--      actual).------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0--      13 Apr 95   SAIC    Replaced call involving instance for root tagged--                          type with a dispatching call involving instance--                          for derived type. Updated commentary. Moved--                          instantiations (and related commentary) to--                          library-level to avoid accessibility violation.--                          Commented out instantiation for root tagged type.--      27 Feb 97   PWB.CTA Added elaboration pragma.--!package CC30001_0 is  -- Root message type.   type Msg_Type is tagged record      Text         : String (1 .. 20);      Message_Sent : Boolean;   end record;end CC30001_0;     --==================================================================--with CC30001_0;  -- Root message type.generic          -- Generic "mail" package.   type Message is new CC30001_0.Msg_Type with private;package CC30001_1 is   type Mail_Type is new Message with record   -- Derived from formal type.      To : String (1 .. 8);   end record;   procedure Send (M : in out Mail_Type);      -- For this test, this version                                               -- of Send should be called in   -- ... Other operations.                    -- all cases.end CC30001_1;     --==================================================================--package body CC30001_1 is   procedure Send (M : in out Mail_Type) is   begin      -- ... Code to send message omitted for brevity.      M.Message_Sent := True;   end Send;end CC30001_1;     --==================================================================--with CC30001_0;       -- Root message type.package CC30001_2 is  -- System message type and operations.   type Signal_Type is (Note, Warning, Error);   type Sys_Message is new CC30001_0.Msg_Type with record   -- Derived from      Signal : Signal_Type := Warning;                      -- root type.   end record;   procedure Send (Item : in out Sys_Message); -- For this test, this version                                               -- of Send should never be   -- ... Other operations.                    -- called (it will have been                                               -- overridden).end CC30001_2;     --==================================================================--package body CC30001_2 is   procedure Send (Item : in out Sys_Message) is   begin      -- ... Code to send message omitted for brevity.      Item.Message_Sent := False;  -- Ensure this procedure gives a different   end Send;                       -- result than CC30001_1.Send.end CC30001_2;     --==================================================================---- User first sets up support for mail messages by instantiating the-- generic mail package for the root message type. An operation "Send" is-- declared for the mail message type in the instance.---- with CC30001_0;  -- Root message type.-- with CC30001_1;  -- Generic "mail" package.-- package Mail_Messages is new CC30001_1 (CC30001_0.Msg_Type);     --==================================================================---- Next, the user sets up support for system messages by instantiating the-- generic mail package with the system message type. An operation "Send"-- is declared for the "system" mail message type in the instance. This-- operation overrides the "Send" operation inherited from the system-- message type actual (a situation the user may not have intended).with CC30001_1;  -- Generic "mail" package.with CC30001_2;  -- System message type and operations.pragma Elaborate (CC30001_1);package CC30001_3 is new CC30001_1 (CC30001_2.Sys_Message);     --==================================================================--with CC30001_2;  -- System message type and operations.with CC30001_3;  -- Instance with mail type and operations.with Report;procedure CC30001 is   package System_Messages renames CC30001_3;   Sys_Msg1 : System_Messages.Mail_Type := (Text   => "System shutting down",                                            Signal => CC30001_2.Warning,                                            To     => "AllUsers",                                            Message_Sent => False);   Sys_Msg2 : System_Messages.Mail_Type'Class := Sys_Msg1;   use System_Messages, CC30001_2;                 -- All versions of "Send"                                                   -- directly visible.begin   Report.Test ("CC30001", "Check that if a non-overriding primitive "     &                "subprogram is declared for a type derived from a formal " &                "derived tagged type, the copy of that subprogram in an "  &                "instance can override a subprogram inherited from the "   &                "actual type");   Send (Sys_Msg1);   -- Calls version declared in instance (version declared                      -- in CC30001_2 has been overridden).   if not Sys_Msg1.Message_Sent then      Report.Failed ("Non-dispatching call: instance operation not called");   end if;   Send (Sys_Msg2);   -- Calls version declared in instance (version declared                      -- in CC30001_2 has been overridden).   if not Sys_Msg2.Message_Sent then      Report.Failed ("Dispatching call: instance operation not called");   end if;   Report.Result;end CC30001;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?