URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c3/] [c392d03.a] - Rev 720
Compare with Previous | Blame | View Log
-- C392D03.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, for an inherited dispatching operation that is overridden,-- the body executed is the body of the overriding subprogram, even if-- the overriding occurs in a private part.---- Check for the case where the overriding operation is declared in a-- separate (non-child) package from that declaring the parent type, and-- the descendant type is a record extension.---- Check for both dispatching and nondispatching calls.---- TEST DESCRIPTION:-- Consider:---- package P is-- type Root is tagged ...-- procedure Op (A: Root);-- end P;---- with P;-- package Q is-- type Derived1 is new P.Root with record...-- -- Implicit procedure Op (A: Derived1) declared here.-- type Derived2 is new P.Root with private...-- -- Implicit procedure Op (A: Derived2) declared here.-- type New_Derived is new Derived1 with private...-- -- Implicit procedure Op (A: New_Derived) declared here.-- private-- procedure Op (A: Derived1); -- Overrides parent's Op.-- type Derived2 is new P.Root with record...-- procedure Op (A: Derived2); -- Overrides parent's Op.-- type New_Derived is new Derived1 with record...-- ...-- end Q;---- Both type Derived1 and Derived2 inherit Op from the parent type Root.-- Type New_Derived inherits (inherited) Op from Derived1. The inherited-- operation is implicitly declared immediately after the type extension.-- The inherited operation is overridden by an explicit declaration in-- the private part. Even though the overriding operation is private,-- calls to Op with an operand of tag Derived1, Derived2, or New_Derived-- will execute the body of the overriding operation.---- TEST FILES:-- The following files comprise this test:---- F392D00.A-- C392D03.A------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!with F392D00;package C392D03_0 istype Aperture is (Eight, Sixteen);type Auto_Focus is new F392D00.Remote_Camera with record-- ...FStop : Aperture;end record;-- Implicit procedure Focus (C : in out Auto_Focus;-- Depth : in Depth_Of_Field) declared here.type Auto_Flashing is new F392D00.Remote_Camera with private;-- Implicit procedure Focus (C : in out Auto_Flashing;-- Depth : in Depth_Of_Field) declared here.type Special_Focus is new Auto_Focus with private;-- Implicit procedure Focus (C : in out Special_Focus;-- Depth : in Depth_Of_Field) declared here.-- ...Other operations.privateprocedure Focus (C : in out Auto_Focus; -- OverridesDepth : in F392D00.Depth_Of_Field); -- parent's op.-- For the improved remote camera, focus is set automatically, so it is-- declared as a private operation.type Auto_Flashing is new F392D00.Remote_Camera with null record;procedure Focus (C : in out Auto_Flashing; -- OverridesDepth : in F392D00.Depth_Of_Field); -- parent's op.type Special_Focus is new Auto_Focus with null record;end C392D03_0;--==================================================================--package body C392D03_0 isprocedure Focus (C : in out Auto_Focus;Depth : in F392D00.Depth_Of_Field) isbegin-- Artificial for testing purposes.C.DOF := 52;end Focus;-----------------------------------------------------------procedure Focus (C : in out Auto_Flashing;Depth : in F392D00.Depth_Of_Field) isbegin-- Artificial for testing purposes.C.DOF := 91;end Focus;end C392D03_0;--==================================================================--with F392D00;with C392D03_0;with Report;procedure C392D03 istype Focus_Ptr is access procedure(P1 : in out C392D03_0.Auto_Focus;P2 : in F392D00.Depth_Of_Field);Basic_Camera : F392D00.Remote_Camera;Auto_Camera1 : C392D03_0.Auto_Focus;Auto_Camera2 : C392D03_0.Auto_Focus;Flash_Camera1 : C392D03_0.Auto_Flashing;Flash_Camera2 : C392D03_0.Auto_Flashing;Special_Camera : C392D03_0.Special_Focus;Auto_Depth : F392D00.Depth_Of_Field := 78;TC_Expected_Basic_Depth : constant F392D00.Depth_Of_Field := 46;TC_Expected_Auto_Depth : constant F392D00.Depth_Of_Field := 52;TC_Expected_Depth : constant F392D00.Depth_Of_Field := 91;FP : Focus_Ptr := C392D03_0.Focus'Access;use type F392D00.Depth_Of_Field;beginReport.Test ("C392D03", "Dispatching for overridden primitive " &"subprograms: record extension declared in non-child " &"package, parent is tagged record");-- Call the class-wide operation for Remote_Camera'Class, which itself makes-- a dispatching call to Focus:-- 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.DOF /= TC_Expected_Basic_Depth thenReport.Failed ("Call dispatched incorrectly for root type");end if;-- For an object of type Auto_Focus, the dispatching call should-- dispatch to the body declared for the derived type:F392D00.Self_Test(Auto_Camera1);if Auto_Camera1.DOF /= TC_Expected_Auto_Depth thenReport.Failed ("Call dispatched incorrectly for Auto_Focus type");end if;-- For an object of type Auto_Flash, the dispatching call should-- also dispatch to the body declared for the derived type:F392D00.Self_Test(Flash_Camera1);if Flash_Camera1.DOF /= TC_Expected_Depth thenReport.Failed ("Call dispatched incorrectly for Auto_Flash type");end if;-- For an object of Auto_Flash type, a non-dispatching call to Focus should-- execute the body declared for the derived type (even through it is-- declared in the private part).C392D03_0.Focus (Flash_Camera2, Auto_Depth);if Flash_Camera2.DOF /= TC_Expected_Depth thenReport.Failed ("Non-dispatching call to privately overriding " &"subprogram executed the wrong body");end if;-- For an object of Auto_Focus type, a non-dispatching call to Focus should-- execute the body declared for the derived type (even through it is-- declared in the private part).FP.all (Auto_Camera2, Auto_Depth);if Auto_Camera2.DOF /= TC_Expected_Auto_Depth thenReport.Failed ("Non-dispatching call by using access to overriding " &"subprogram executed the wrong body");end if;-- For an object of type Special_Camera, the dispatching call should-- also dispatch to the body declared for the derived type:F392D00.Self_Test(Special_Camera);if Special_Camera.DOF /= TC_Expected_Auto_Depth thenReport.Failed ("Call dispatched incorrectly for Special_Camera type");end if;Report.Result;end C392D03;
