c392d02.a

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

A
186
字号
-- C392D02.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 a primitive procedure declared in a private part is not--      overridden by a procedure explicitly declared at a place where the--      primitive procedure in question is not visible.----      Check for the case where the non-overriding operation is declared in a--      separate (non-child) package from that declaring the parent type, and--      the descendant type is a record extension.---- TEST DESCRIPTION:--      Consider:----      package P is--         type Root is tagged ...--      private--         procedure Pri_Op (A: Root);--      end P;----      with P;--      package Q is--         type Derived is new P.Root with record...--         procedure Pri_Op (A: Derived);  -- Does NOT override parent's Op.--         ...--      end Q;----      Type Derived inherits Pri_Op from the parent type Root. However,--      because P.Pri_Op is never visible within the immediate scope of--      Derived, it is not implicitly declared for Derived. As a result,--      the explicit Q.Pri_Op does not override P.Pri_Op and is totally--      unrelated to it.----      Dispatching calls to P.Pri_Op with operands of tag Derived will--      not dispatch to Q.Pri_Op; the body executed will be that of P.Pri_Op.---- TEST FILES:--      The following files comprise this test:----         F392D00.A--         C392D02.A------ CHANGE HISTORY:--      06 Dec 94   SAIC    ACVC 2.0----!with F392D00;package C392D02_0 is   type Aperture is (Eight, Sixteen);        type Auto_Speed is new F392D00.Remote_Camera with record      -- ...      FStop : Aperture;   end record;   procedure Set_Shutter_Speed (C     : in out Auto_Speed;                                     Speed : in     F392D00.Shutter_Speed);                                                    -- Does NOT override.   -- This version of Set_Shutter_Speed does NOT override the operation   -- inherited from the parent, because the inherited operation is never   -- visible (and thus, is never implicitly declared) within the immediate   -- scope of type Auto_Speed.   procedure Self_Test (C : in out Auto_Speed'Class);   -- ...Other operations.end C392D02_0;     --==================================================================--package body C392D02_0 is   procedure Set_Shutter_Speed (C     : in out Auto_Speed;                                Speed : in     F392D00.Shutter_Speed) is   begin      -- Artificial for testing purposes.      C.Shutter := F392D00.Four_Hundred;   end Set_Shutter_Speed;   ----------------------------------------------------   procedure Self_Test (C : in out Auto_Speed'Class) is   begin      -- Should dispatch to the Set_Shutter_Speed explicitly declared      -- for Auto_Speed.      Set_Shutter_Speed (C, F392D00.Two_Fifty);   end Self_Test;end C392D02_0;     --==================================================================--with F392D00;with C392D02_0;with Report;procedure C392D02 is   Basic_Camera : F392D00.Remote_Camera;   Auto_Camera1 : C392D02_0.Auto_Speed;   Auto_Camera2 : C392D02_0.Auto_Speed;   TC_Expected_Basic_Speed : constant F392D00.Shutter_Speed                            := F392D00.Thousand;   TC_Expected_Speed       : constant F392D00.Shutter_Speed                            := F392D00.Four_Hundred;   use type F392D00.Shutter_Speed;begin   Report.Test ("C392D02", "Dispatching for non-overridden primitive " &                "subprograms: record extension declared in non-child " &                "package, parent is tagged record");-- Call the class-wide operation for Remote_Camera'Class, which dispatches-- to Set_Shutter_Speed:   -- For an object of type Remote_Camera, the dispatching call should   -- dispatch to the body declared for the root type:        F392D00.Self_Test(Basic_Camera);   if Basic_Camera.Shutter /= TC_Expected_Basic_Speed then      Report.Failed ("Call dispatched incorrectly for root type");   end if;   -- C392D02_0.Set_Shutter_Speed should never be called by F392D00.Self_Test,   -- since C392D02_0.Set_Shutter_Speed does not override   -- F392D00.Set_Shutter_Speed.   -- For an object of type Auto_Speed, the dispatching call should   -- also dispatch to the body declared for the root type:        F392D00.Self_Test(Auto_Camera1);   if Auto_Camera1.Shutter /= TC_Expected_Basic_Speed then      Report.Failed ("Call dispatched incorrectly for derived type");   end if;   -- Call to Self_Test from C392D02_0 invokes the dispatching call to   -- Set_Shutter_Speed which should dispatch to the body explicitly declared    -- for Auto_Speed:   C392D02_0.Self_Test(Auto_Camera2);   if Auto_Camera2.Shutter /= TC_Expected_Speed then      Report.Failed ("Call to explicit subprogram executed the wrong body");   end if;   Report.Result;end C392D02;

⌨️ 快捷键说明

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