c731001.a
来自「linux下编程用 编译软件」· A 代码 · 共 408 行
A
408 行
-- C731001.A---- Grant of Unlimited Rights---- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687 and-- F08630-91-C-0015, 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 WHATSOVER, 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 inherited operations can be overridden, even when they are-- inherited in a body.-- The test cases here are inspired by the AARM examples given in-- the discussion of AARM-7.3.1(7.a-7.v).-- This discussion was confirmed by AI95-00035.---- TEST DESCRIPTION-- See AARM-7.3.1.---- CHANGE HISTORY:-- 29 JUN 1999 RAD Initial Version-- 23 SEP 1999 RLB Improved comments, renamed, issued.-- 20 AUG 2001 RLB Corrected 'verbose' flag.----!with Report; use Report; pragma Elaborate_All(Report);package C731001_1 is pragma Elaborate_Body;private procedure Check_String(X, Y: String); function Check_String(X, Y: String) return String; -- This one is a function, so we can call it in package specs.end C731001_1;package body C731001_1 is Verbose: Boolean := False; procedure Check_String(X, Y: String) is begin if Verbose then Comment("""" & X & """ = """ & Y & """?"); end if; if X /= Y then Failed("""" & X & """ should be """ & Y & """"); end if; end Check_String; function Check_String(X, Y: String) return String is begin Check_String(X, Y); return X; end Check_String;end C731001_1;private package C731001_1.Parent is procedure Call_Main; type Root is tagged null record; subtype Renames_Root is Root; subtype Root_Class is Renames_Root'Class; function Make return Root; function Op1(X: Root) return String; function Call_Op2(X: Root'Class) return String;private function Op2(X: Root) return String;end C731001_1.Parent;procedure C731001_1.Parent.Main;with C731001_1.Parent.Main;package body C731001_1.Parent is procedure Call_Main is begin Main; end Call_Main; function Make return Root is Result: Root; begin return Result; end Make; function Op1(X: Root) return String is begin return "Parent.Op1 body"; end Op1; function Op2(X: Root) return String is begin return "Parent.Op2 body"; end Op2; function Call_Op2(X: Root'Class) return String is begin return Op2(X); end Call_Op2;begin Check_String(Op1(Root'(Make)), "Parent.Op1 body"); Check_String(Op1(Root_Class(Root'(Make))), "Parent.Op1 body"); Check_String(Op2(Root'(Make)), "Parent.Op2 body"); Check_String(Op2(Root_Class(Root'(Make))), "Parent.Op2 body");end C731001_1.Parent;with C731001_1.Parent; use C731001_1.Parent;private package C731001_1.Unrelated is type T2 is new Root with null record; subtype T2_Class is T2'Class; function Make return T2; function Op2(X: T2) return String;end C731001_1.Unrelated;with C731001_1.Parent; use C731001_1.Parent; pragma Elaborate(C731001_1.Parent);package body C731001_1.Unrelated is function Make return T2 is Result: T2; begin return Result; end Make; function Op2(X: T2) return String is begin return "Unrelated.Op2 body"; end Op2;begin Check_String(Op1(T2'(Make)), "Parent.Op1 body"); Check_String(Op1(T2_Class(T2'(Make))), "Parent.Op1 body"); Check_String(Op1(Root_Class(T2'(Make))), "Parent.Op1 body"); Check_String(Op2(T2'(Make)), "Unrelated.Op2 body"); Check_String(Op2(T2_Class(T2'(Make))), "Unrelated.Op2 body"); Check_String(Call_Op2(T2'(Make)), "Parent.Op2 body"); Check_String(Call_Op2(T2_Class(T2'(Make))), "Parent.Op2 body"); Check_String(Call_Op2(Root_Class(T2'(Make))), "Parent.Op2 body");end C731001_1.Unrelated;package C731001_1.Parent.Child is pragma Elaborate_Body; type T3 is new Root with null record; subtype T3_Class is T3'Class; function Make return T3; T3_Obj: T3; T3_Class_Obj: T3_Class := T3_Obj; T3_Root_Class_Obj: Root_Class := T3_Obj; X3: constant String := Check_String(Op1(T3_Obj), "Parent.Op1 body") & Check_String(Op1(T3_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T3_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body"); package Nested is type T4 is new Root with null record; subtype T4_Class is T4'Class; function Make return T4; T4_Obj: T4; T4_Class_Obj: T4_Class := T4_Obj; T4_Root_Class_Obj: Root_Class := T4_Obj; X4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); private XX4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); end Nested; use Nested; XXX4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body");private XX3: constant String := Check_String(Op1(T3_Obj), "Parent.Op1 body") & Check_String(Op1(T3_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T3_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T3_Obj), "Parent.Op2 body") & Check_String(Op2(T3_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T3_Root_Class_Obj), "Parent.Op2 body"); XXXX4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body");end C731001_1.Parent.Child;with C731001_1.Unrelated; use C731001_1.Unrelated; pragma Elaborate(C731001_1.Unrelated);package body C731001_1.Parent.Child is XXX3: constant String := Check_String(Op1(T3_Obj), "Parent.Op1 body") & Check_String(Op1(T3_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T3_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T3_Obj), "Parent.Op2 body") & Check_String(Op2(T3_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T3_Root_Class_Obj), "Parent.Op2 body"); XXXXX4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body"); function Make return T3 is Result: T3; begin return Result; end Make; package body Nested is function Make return T4 is Result: T4; begin return Result; end Make; XXXXXX4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T4_Obj), "Parent.Op2 body") & Check_String(Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body"); end Nested; type T5 is new T2 with null record; subtype T5_Class is T5'Class; function Make return T5; function Make return T5 is Result: T5; begin return Result; end Make; XXXXXXX4: constant String := Check_String(Op1(T4_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Class_Obj), "Parent.Op1 body") & Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body") & Check_String(Call_Op2(T4_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body") & Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body") & Check_String(Op2(T4_Root_Class_Obj), "Parent.Op2 body");end C731001_1.Parent.Child;procedure C731001_1.Main;with C731001_1.Parent;procedure C731001_1.Main isbegin C731001_1.Parent.Call_Main;end C731001_1.Main;with C731001_1.Parent.Child; use C731001_1.Parent; use C731001_1.Parent.Child; use C731001_1.Parent.Child.Nested;with C731001_1.Unrelated; use C731001_1.Unrelated;procedure C731001_1.Parent.Main is Root_Obj: Root := Make; Root_Class_Obj: Root_Class := Root'(Make); T2_Obj: T2 := Make; T2_Class_Obj: T2_Class := T2_Obj; T2_Root_Class_Obj: Root_Class := T2_Class_Obj; T3_Obj: T3 := Make; T3_Class_Obj: T3_Class := T3_Obj; T3_Root_Class_Obj: Root_Class := T3_Obj; T4_Obj: T4 := Make; T4_Class_Obj: T4_Class := T4_Obj; T4_Root_Class_Obj: Root_Class := T4_Obj;begin Test("C731001_1", "Check that inherited operations can be overridden, even" & " when they are inherited in a body"); Check_String(Op1(Root_Obj), "Parent.Op1 body"); Check_String(Op1(Root_Class_Obj), "Parent.Op1 body"); Check_String(Call_Op2(Root_Obj), "Parent.Op2 body"); Check_String(Call_Op2(Root_Class_Obj), "Parent.Op2 body"); Check_String(Op1(T2_Obj), "Parent.Op1 body"); Check_String(Op1(T2_Class_Obj), "Parent.Op1 body"); Check_String(Op1(T2_Root_Class_Obj), "Parent.Op1 body"); Check_String(Op2(T2_Obj), "Unrelated.Op2 body"); Check_String(Op2(T2_Class_Obj), "Unrelated.Op2 body"); Check_String(Call_Op2(T2_Obj), "Parent.Op2 body"); Check_String(Call_Op2(T2_Class_Obj), "Parent.Op2 body"); Check_String(Call_Op2(T2_Root_Class_Obj), "Parent.Op2 body"); Check_String(Op1(T3_Obj), "Parent.Op1 body"); Check_String(Op1(T3_Class_Obj), "Parent.Op1 body"); Check_String(Op1(T3_Root_Class_Obj), "Parent.Op1 body"); Check_String(Call_Op2(T3_Obj), "Parent.Op2 body"); Check_String(Call_Op2(T3_Class_Obj), "Parent.Op2 body"); Check_String(Call_Op2(T3_Root_Class_Obj), "Parent.Op2 body"); Check_String(Op1(T4_Obj), "Parent.Op1 body"); Check_String(Op1(T4_Class_Obj), "Parent.Op1 body"); Check_String(Op1(T4_Root_Class_Obj), "Parent.Op1 body"); Check_String(Call_Op2(T4_Obj), "Parent.Op2 body"); Check_String(Call_Op2(T4_Class_Obj), "Parent.Op2 body"); Check_String(Call_Op2(T4_Root_Class_Obj), "Parent.Op2 body"); Result;end C731001_1.Parent.Main;with C731001_1.Main;procedure C731001 isbegin C731001_1.Main;end C731001;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?